]> git.localhorst.tv Git - l2e.git/blob - test-data/test.l2s
better allocation in interpreter
[l2e.git] / test-data / test.l2s
1 include "ikaris.l2h"
2 include "items.l2h"
3 include "spells.l2h"
4
5 Number frameTime 33
6 Number twoFramesTime 66
7 Number fourFramesTime 132
8 Number fiveFramesTime 165 // darn, i really need to implement expressions
9
10 export PartyLayout monstersLayout {
11         positions: [
12                 < 88, 88>,
13                 <128, 88>,
14                 <168, 88>,
15                 <208, 88>
16         ]
17 }
18 export PartyLayout heroesLayout {
19         positions: [
20                 < 48,136>,
21                 <128,136>,
22                 < 80,152>,
23                 <160,152>
24         ]
25 }
26
27 Sprite lizardSprite {
28         image: :"monster.png",
29         size: <64,64>
30 }
31
32 export Monster lizard {
33         name: "Lizard",
34         sprite: lizardSprite,
35         level: 1,
36         maxHealth: 8,
37         health: 8,
38         stats: Stats {
39                 atp: 14,
40                 dfp:  6,
41                 str:  6,
42                 agl:  6,
43                 int:  6,
44                 gut:  6,
45                 mgr:  6
46         },
47         attackAnimation: ComplexAnimation {
48                 sprite: lizardSprite,
49                 frametime: fourFramesTime,
50                 repeat: false,
51                 frames:
52                 [ ComplexAnimationFrame
53                         { column: 0, row: 1, disposition: < 0, 16> },
54                         { column: 0, row: 0, disposition: < 0, 16> },
55                         { column: 0, row: 1, disposition: < 0, 16> },
56                         { column: 0, row: 0, disposition: < 0, 16> }
57                 ]
58         },
59         meleeAnimation: SimpleAnimation {
60                 sprite: Sprite {
61                         image: :"attack-monster.png",
62                         size: <96,64>
63                 },
64                 frametime: frameTime,
65                 framecount: 14
66         }
67 }
68
69 Sprite maximSprite {
70         image: :"maxim.png",
71         size: <64,64>
72 }
73 export Hero maxim {
74         name: "Maxim",
75         level: 1,
76         battleSprite: maximSprite,
77         maxHealth: 33,
78         health: 33,
79         maxMana: 20,
80         mana: 20,
81         ip: 0,
82         stats: Stats {
83                 atp:  28,
84                 dfp:  22,
85                 str:  28,
86                 agl:  17,
87                 int:  14,
88                 gut: 100,
89                 mgr:  10
90         },
91         attackAnimation: ComplexAnimation {
92                 sprite: maximSprite,
93                 frametime: frameTime,
94                 repeat: false,
95                 frames:
96                 [ ComplexAnimationFrame
97                         { column: 1, row: 0, disposition: < 0, 0> },
98                         { column: 1, row: 0, disposition: < 0, 0> },
99                         { column: 1, row: 0, disposition: < 0, 0> },
100                         { column: 1, row: 0, disposition: < 0, 0> },
101                         { column: 1, row: 0, disposition: < 0, 0> },
102                         { column: 1, row: 0, disposition: < 0, 0> },
103                         { column: 1, row: 0, disposition: < 0, 0> },
104                         { column: 1, row: 0, disposition: < 4,-1> },
105                         { column: 1, row: 0, disposition: < 4,-1> },
106                         { column: 2, row: 0, disposition: < 4,-2> },
107                         { column: 2, row: 0, disposition: < 4,-2> },
108                         { column: 2, row: 0, disposition: < 6,-2> },
109                         { column: 2, row: 0, disposition: < 6,-2> },
110                         { column: 2, row: 1, disposition: < 6,-1> },
111                         { column: 2, row: 1, disposition: < 3,-1> },
112                         { column: 2, row: 1, disposition: < 3,-1> },
113                         { column: 2, row: 1, disposition: < 0, 0> },
114                         { column: 2, row: 2, disposition: < 0, 0> },
115                         { column: 2, row: 2, disposition: < 0, 0> },
116                         { column: 2, row: 2, disposition: < 2, 0> },
117                         { column: 1, row: 0, disposition: < 0, 0> },
118                         { column: 1, row: 0, disposition: < 0, 0> },
119                         { column: 1, row: 0, disposition: < 0, 0> },
120                         { column: 1, row: 0, disposition: < 0, 0> },
121                         { column: 1, row: 0, disposition: < 0, 0> },
122                         { column: 1, row: 0, disposition: < 0, 0> },
123                         { column: 1, row: 0, disposition: < 0, 0> }
124                 ]
125         },
126         spellAnimation: ComplexAnimation {
127                 sprite: maximSprite,
128                 frametime: fiveFramesTime,
129                 repeat: false,
130                 frames:
131                 [ ComplexAnimationFrame
132                         { column: 3, row: 0, disposition: < 0, 0> },
133                         { column: 3, row: 0, disposition: < 0, 0> },
134                         { column: 3, row: 1, disposition: < 0, 0> }
135                 ]
136         },
137         meleeAnimation: SimpleAnimation {
138                 sprite: Sprite {
139                         image: :"melee-maxim.png",
140                         size: <96,96>
141                 },
142                 frametime: twoFramesTime,
143                 framecount: 4
144         },
145         mapEntity: Entity {
146                 animation: SimpleAnimation{
147                         sprite: Sprite {
148                                 image: :"maxim-map.png",
149                                 size: <32,64>
150                         },
151                         frametime: 120,
152                         framecount: 2
153                 },
154                 spriteOffset: <0,-32>
155         }
156 }
157
158 Sprite selanSprite {
159         image: :"selan.png",
160         size: <64,64>
161 }
162 export Hero selan {
163         name: "Selan",
164         level: 1,
165         battleSprite: selanSprite,
166         maxHealth: 28,
167         health: 28,
168         maxMana: 23,
169         mana: 23,
170         ip: 0,
171         stats: Stats {
172                 atp: 23,
173                 dfp: 21,
174                 str: 23,
175                 agl: 19,
176                 int: 22,
177                 gut: 80,
178                 mgr: 13
179         },
180         attackAnimation: ComplexAnimation {
181                 sprite: selanSprite,
182                 frametime: frameTime,
183                 repeat: false,
184                 frames:
185                 [ ComplexAnimationFrame
186                         { column: 1, row: 0, disposition: < 4, 0> },
187                         { column: 1, row: 0, disposition: < 4, 0> },
188                         { column: 1, row: 0, disposition: < 8, 2> },
189                         { column: 2, row: 0, disposition: <10, 4> },
190                         { column: 2, row: 0, disposition: <14, 4> },
191                         { column: 2, row: 0, disposition: <12, 2> },
192                         { column: 2, row: 0, disposition: <12, 2> },
193                         { column: 2, row: 0, disposition: <12, 2> },
194                         { column: 2, row: 1, disposition: <14, 2> },
195                         { column: 2, row: 1, disposition: <14, 2> },
196                         { column: 2, row: 1, disposition: < 2, 0> },
197                         { column: 2, row: 2, disposition: <-2,-4> },
198                         { column: 2, row: 2, disposition: <-8,-8> },
199                         { column: 2, row: 2, disposition: < 0, 0> }
200                 ]
201         },
202         spellAnimation: ComplexAnimation {
203                 sprite: selanSprite,
204                 frametime: frameTime,
205                 repeat: false,
206                 frames:
207                 [ ComplexAnimationFrame
208                         { column: 3, row: 0, disposition: < 0, 0> },
209                         { column: 3, row: 0, disposition: < 0, 0> },
210                         { column: 3, row: 0, disposition: < 0, 0> },
211                         { column: 3, row: 1, disposition: < 0, 0> },
212                         { column: 3, row: 1, disposition: < 0, 0> },
213                         { column: 3, row: 2, disposition: < 0, 0> },
214                         { column: 3, row: 2, disposition: < 0, 0> },
215                         { column: 3, row: 2, disposition: < 0, 0> },
216                         { column: 3, row: 3, disposition: < 0, 0> },
217                         { column: 3, row: 3, disposition: < 0, 0> }
218                 ]
219         },
220         meleeAnimation: SimpleAnimation {
221                 sprite: Sprite {
222                         image: :"melee-selan.png",
223                         size: <96,96>
224                 },
225                 frametime: twoFramesTime,
226                 framecount: 4
227         },
228         mapEntity: Entity {
229                 animation: SimpleAnimation{
230                         sprite: Sprite {
231                                 image: :"selan-map.png",
232                                 size: <32,64>
233                         },
234                         frametime: 120,
235                         framecount: 2
236                 },
237                 spriteOffset: <0,-32>
238         }
239 }
240
241 Sprite guySprite {
242         image: :"guy.png",
243         size: <64,64>
244 }
245 export Hero guy {
246         name: "Guy",
247         level: 1,
248         battleSprite: guySprite,
249         maxHealth: 38,
250         health: 38,
251         maxMana: 0,
252         mana: 0,
253         ip: 0,
254         stats: Stats {
255                 atp: 38,
256                 dfp: 25,
257                 str: 38,
258                 agl: 13,
259                 int:  8,
260                 gut: 90,
261                 mgr:  8
262         },
263         attackAnimation: ComplexAnimation {
264                 sprite: guySprite,
265                 frametime: frameTime,
266                 repeat: false,
267                 frames:
268                 [ ComplexAnimationFrame
269                         { column: 1, row: 0, disposition: <-4, 0> },
270                         { column: 1, row: 0, disposition: <-4, 0> },
271                         { column: 1, row: 0, disposition: <-8, 0> },
272                         { column: 1, row: 0, disposition: <-8, 0> },
273                         { column: 2, row: 0, disposition: <-8, 0> },
274                         { column: 2, row: 0, disposition: <-8, 0> },
275                         { column: 2, row: 0, disposition: <-4, 0> },
276                         { column: 2, row: 0, disposition: < 0, 0> },
277                         { column: 2, row: 0, disposition: < 0, 0> },
278                         { column: 2, row: 1, disposition: < 0, 0> },
279                         { column: 2, row: 1, disposition: < 4, 0> },
280                         { column: 2, row: 1, disposition: <10, 0> },
281                         { column: 2, row: 2, disposition: <10, 0> },
282                         { column: 2, row: 2, disposition: < 0, 0> }
283                 ]
284         },
285         meleeAnimation: SimpleAnimation {
286                 sprite: Sprite {
287                         image: :"melee-guy.png",
288                         size: <96,96>
289                 },
290                 frametime: fourFramesTime,
291                 framecount: 4
292         },
293         mapEntity: Entity {
294                 animation: SimpleAnimation{
295                         sprite: Sprite {
296                                 image: :"guy-map.png",
297                                 size: <32,64>
298                         },
299                         frametime: 120,
300                         framecount: 2
301                 },
302                 spriteOffset: <0,-32>
303         }
304 }
305
306 Sprite dekarSprite {
307         image: :"dekar.png",
308         size: <64,64>
309 }
310 export Hero dekar {
311         name: "Dekar",
312         level: 1,
313         battleSprite: dekarSprite,
314         maxHealth: 38,
315         health: 38,
316         maxMana: 0,
317         mana: 0,
318         ip: 0,
319         stats: Stats {
320                 atp:  46,
321                 dfp:  29,
322                 str:  46,
323                 agl:  13,
324                 int:   7,
325                 gut: 100,
326                 mgr:   5
327         },
328         attackAnimation: ComplexAnimation {
329                 sprite: dekarSprite,
330                 frametime: frameTime,
331                 repeat: false,
332                 frames:
333                 [ ComplexAnimationFrame
334                         { column: 1, row: 0, disposition: < 4, 0> },
335                         { column: 1, row: 0, disposition: < 8, 2> },
336                         { column: 2, row: 0, disposition: <12, 4> },
337                         { column: 2, row: 0, disposition: <16, 4> },
338                         { column: 2, row: 0, disposition: <10, 2> },
339                         { column: 2, row: 0, disposition: <10, 2> },
340                         { column: 2, row: 0, disposition: <10, 2> },
341                         { column: 2, row: 0, disposition: <10, 2> },
342                         { column: 2, row: 1, disposition: < 6, 2> },
343                         { column: 2, row: 1, disposition: < 0, 0> },
344                         { column: 2, row: 2, disposition: <-2, 0> },
345                         { column: 2, row: 2, disposition: < 0, 0> },
346                         { column: 2, row: 2, disposition: < 0, 0> },
347                         { column: 2, row: 2, disposition: < 0, 0> }
348                 ]
349         },
350         spellAnimation: ComplexAnimation {
351                 sprite: dekarSprite,
352                 frametime: twoFramesTime,
353                 repeat: false,
354                 frames:
355                 [ ComplexAnimationFrame
356                         { column: 3, row: 0, disposition: < 0, 0> },
357                         { column: 3, row: 0, disposition: < 0, 0> },
358                         { column: 3, row: 0, disposition: < 0, 0> },
359                         { column: 3, row: 0, disposition: < 0, 0> },
360                         { column: 3, row: 0, disposition: < 0, 0> },
361                         { column: 3, row: 0, disposition: < 0, 0> },
362                         { column: 3, row: 1, disposition: < 0, 0> },
363                         { column: 3, row: 1, disposition: < 0, 0> },
364                         { column: 3, row: 2, disposition: < 0, 0> },
365                         { column: 3, row: 2, disposition: < 0, 0> },
366                         { column: 3, row: 2, disposition: < 0, 0> }
367                 ]
368         },
369         meleeAnimation: SimpleAnimation {
370                 sprite: Sprite {
371                         image: :"melee-dekar.png",
372                         size: <96,96>
373                 },
374                 frametime: twoFramesTime,
375                 framecount: 4
376         },
377         mapEntity: Entity {
378                 animation: SimpleAnimation{
379                         sprite: Sprite {
380                                 image: :"dekar-map.png",
381                                 size: <32,64>
382                         },
383                         frametime: 120,
384                         framecount: 2
385                 },
386                 spriteOffset: <0,-32>
387         }
388 }
389
390 Sprite handCursor {
391         image: :"cursor-hand.png",
392         size: <32,32>
393 }
394
395 Font normalFont {
396         sprite: Sprite {
397                 image: :"normal-font.png",
398                 size: <16,16>
399         },
400         rowoffset: -2
401 }
402
403 Font disabledFont {
404         sprite: Sprite {
405                 image: :"disabled-font.png",
406                 size: <16,16>
407         },
408         rowoffset: -2
409 }
410
411 export BattleResources battleResources {
412         swapCursor: Sprite {
413                 image: :"swap-cursor.png",
414                 size: <32,32>
415         },
416         attackIcons: Sprite {
417                 image: :"attack-type-icons.png",
418                 size: <32,32>
419         },
420         attackChoiceIcons: Sprite {
421                 image: :"attack-choice-icons.png",
422                 size: <16,16>
423         },
424         moveIcons: Sprite {
425                 image: :"move-icons.png",
426                 size: <32,32>
427         },
428         
429         titleFrame: Frame {
430                 image: :"title-frame.png",
431                 border: <16,16>
432         },
433         titleFont: Font {
434                 sprite: Sprite {
435                         image: :"large-font.png",
436                         size: <16,32>
437                 },
438                 rowoffset: -2
439         },
440         
441         numberAnimationPrototype: ComplexAnimation {
442                 frametime: frameTime,
443                 repeat: false,
444                 frames:
445                 [ ComplexAnimationFrame
446                         { column: 0, row: 0, disposition: <  0,  0> },
447                         { column: 0, row: 0, disposition: <  0,-26> },
448                         { column: 0, row: 0, disposition: <  0,-42> },
449                         { column: 0, row: 0, disposition: <  0,-48> },
450                         { column: 0, row: 0, disposition: <  0,-42> },
451                         { column: 0, row: 0, disposition: <  0,-26> },
452                         { column: 0, row: 0, disposition: <  0,  0> },
453                         { column: 0, row: 0, disposition: <  0,-12> },
454                         { column: 0, row: 0, disposition: <  0,-20> },
455                         { column: 0, row: 0, disposition: <  0,-24> },
456                         { column: 0, row: 0, disposition: <  0,-20> },
457                         { column: 0, row: 0, disposition: <  0,-12> },
458                         { column: 0, row: 0, disposition: <  0,  0> },
459                         { column: 0, row: 0, disposition: <  0, -6> },
460                         { column: 0, row: 0, disposition: <  0,-10> },
461                         { column: 0, row: 0, disposition: <  0,-12> },
462                         { column: 0, row: 0, disposition: <  0,-10> },
463                         { column: 0, row: 0, disposition: <  0, -6> },
464                         { column: 0, row: 0, disposition: <  0,  0> },
465                         { column: 0, row: 0, disposition: <  0,  0> },
466                         { column: 0, row: 0, disposition: <  0,  0> },
467                         { column: 0, row: 0, disposition: <  0,  0> },
468                         { column: 0, row: 0, disposition: <  0,  0> },
469                         { column: 0, row: 0, disposition: <  0,  0> },
470                         { column: 0, row: 0, disposition: <  0,  0> },
471                         { column: 0, row: 0, disposition: <  0,  0> },
472                         { column: 0, row: 0, disposition: <  0,  0> },
473                         { column: 0, row: 0, disposition: <  0,  0> },
474                         { column: 0, row: 0, disposition: <  0,  0> },
475                         { column: 0, row: 0, disposition: <  0,  0> },
476                         { column: 0, row: 0, disposition: <  0,  0> },
477                         { column: 0, row: 0, disposition: <  0,  0> },
478                         { column: 0, row: 0, disposition: <  0,-36> },
479                         { column: 0, row: 0, disposition: <  0,-32> },
480                         { column: 0, row: 0, disposition: <  0,-18> }
481                 ]
482         },
483         bigNumberSprite: Sprite {
484                 image: :"big-numbers.png",
485                 size: <16,32>
486         },
487         greenNumberSprite: Sprite {
488                 image: :"big-green-numbers.png",
489                 size: <16,32>
490         },
491         
492         heroTagLabels: Sprite {
493                 image: :"hero-tag-sprites.png",
494                 size: <32,16>
495         },
496         levelLabelCol: 0,
497         levelLabelRow: 0,
498         healthLabelCol: 0,
499         healthLabelRow: 1,
500         manaLabelCol: 0,
501         manaLabelRow: 2,
502         moveLabelCol: 0,
503         moveLabelRow: 3,
504         ikariLabelCol: 0,
505         ikariLabelRow: 4,
506         heroTagFont: Font {
507                 sprite: Sprite {
508                         image: :"numbers.png",
509                         size: <16,16>
510                 },
511                 rowoffset: -3
512         },
513         
514         activeHeroTagFrame: Frame {
515                 image: :"tag-frames.png",
516                 border: <16,16>
517         },
518         heroTagFrame: Frame {
519                 image: :"tag-frames.png",
520                 border: <16,16>,
521                 offset: < 0,33>
522         },
523         
524         smallHeroTagFrame: Frame {
525                 image: :"small-tag-frame.png",
526                 border: <8,16>
527         },
528         lastSmallHeroTagFrame: Frame {
529                 image: :"small-tag-frame.png",
530                 border: <8,16>,
531                 offset: <0,33>
532         },
533         heroesBgColor: (24, 40, 49),
534         
535         healthGauge: Gauge {
536                 image: :"gauges.png",
537                 full:  <0,16>,
538                 empty: <0, 0>,
539                 height: 16,
540                 start:   6,
541                 repeat:  1,
542                 end:     6
543         },
544         manaGauge: Gauge {
545                 image: :"gauges.png",
546                 full:  <0,32>,
547                 empty: <0, 0>,
548                 height: 16,
549                 start:   6,
550                 repeat:  1,
551                 end:     6
552         },
553         ikariGauge: Gauge {
554                 image: :"gauges.png",
555                 full:  <0,48>,
556                 empty: <0, 0>,
557                 height: 16,
558                 start:   6,
559                 repeat:  1,
560                 end:     6
561         },
562         
563         selectFrame: Frame {
564                 image: :"select-frame.png",
565                 border: <16,16>
566         },
567         normalFont: normalFont,
568         disabledFont: disabledFont,
569         menuCursor: Sprite {
570                 image: :"cursor-hand.png",
571                 size: <32,32>
572         },
573         
574         weaponTargetCursor: Sprite {
575                 image: :"targeting-icons.png",
576                 size: <32,32>
577         },
578         magicTargetCursor: Sprite {
579                 image: :"targeting-icons.png",
580                 size: <32,32>,
581                 offset: <0,32>
582         },
583         itemTargetCursor: Sprite {
584                 image: :"targeting-icons.png",
585                 size: <32,32>,
586                 offset: <0,64>
587         },
588         
589         weaponMenuIcon: swordIcon,
590         armorMenuIcon: armorIcon,
591         shieldMenuIcon: shieldIcon,
592         helmetMenuIcon: helmetIcon,
593         ringMenuIcon: ringIcon,
594         jewelMenuIcon: jewelIcon,
595         
596         spellMenuHeadline: "Please choose a spell.",
597         spellMenuProperties: MenuProperties {
598                 font: normalFont,
599                 disabledFont: disabledFont,
600                 cursor: handCursor,
601                 charsPerEntry: 9,
602                 rows: 6,
603                 rowGap: 8,
604                 iconSpace: 0,
605                 cols: 2,
606                 colGap: 32,
607                 charsPerNumber: 2,
608                 delimiter: ":"
609         },
610         
611         itemMenuHeadline: "Please choose an item.",
612         itemMenuProperties: MenuProperties {
613                 font: normalFont,
614                 disabledFont: disabledFont,
615                 cursor: handCursor,
616                 charsPerEntry: 15,
617                 rows: 6,
618                 rowGap: 8,
619                 iconSpace: 16,
620                 cols: 1,
621                 colGap: 32,
622                 charsPerNumber: 2,
623                 delimiter: ":"
624         },
625         
626         ikariMenuHeadline: "Please choose equipment.",
627         ikariMenuProperties: MenuProperties {
628                 font: normalFont,
629                 disabledFont: disabledFont,
630                 cursor: handCursor,
631                 charsPerEntry: 12,
632                 rows: 6,
633                 rowGap: 8,
634                 iconSpace: 16,
635                 cols: 1,
636                 colGap: 32,
637                 charsPerAdditionalText: 12,
638                 additionalTextGap: 16
639         },
640         noEquipmentText: "No equip",
641         
642         escapeText: "Escapes."
643 }