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