+include "ikaris.l2h"
+include "items.l2h"
+include "spells.l2h"
+
Number frameTime 33
Number twoFramesTime 66
-Number fiveFramesTime 165
+Number fourFramesTime 132
+Number fiveFramesTime 165 // darn, i really need to implement expressions
+
+export PartyLayout monstersLayout {
+ positions: [
+ < 88, 88>,
+ <128, 88>,
+ <168, 88>,
+ <208, 88>
+ ]
+}
+export PartyLayout heroesLayout {
+ positions: [
+ < 48,136>,
+ <128,136>,
+ < 80,152>,
+ <160,152>
+ ]
+}
+
+Sprite lizardSprite {
+ image: :"monster.png",
+ size: <64,64>
+}
export Monster lizard {
name: "Lizard",
- sprite: Sprite {
- // using pathes relative to project root until path resolution is implemented
- image: "test-data/monster.png",
- size: <64,64>
- },
+ sprite: lizardSprite,
level: 1,
maxHealth: 8,
health: 8,
gut: 6,
mgr: 6
},
- attackAnimation: SimpleAnimation {
+ attackAnimation: ComplexAnimation {
+ sprite: lizardSprite,
+ frametime: fourFramesTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 0, row: 1, disposition: < 0, 16> },
+ { column: 0, row: 0, disposition: < 0, 16> },
+ { column: 0, row: 1, disposition: < 0, 16> },
+ { column: 0, row: 0, disposition: < 0, 16> }
+ ]
+ },
+ meleeAnimation: SimpleAnimation {
sprite: Sprite {
- image: "test-data/attack-monster.png",
+ image: :"attack-monster.png",
size: <96,64>
},
frametime: frameTime,
}
Sprite maximSprite {
- image: "test-data/maxim.png",
+ image: :"maxim.png",
size: <64,64>
}
export Hero maxim {
name: "Maxim",
level: 1,
- sprite: maximSprite,
+ battleSprite: maximSprite,
maxHealth: 33,
health: 33,
maxMana: 20,
gut: 100,
mgr: 10
},
+ ladder: [
+ 10
+ ],
attackAnimation: ComplexAnimation {
sprite: maximSprite,
frametime: frameTime,
repeat: false,
- frames: [
+ frames:
+ [ ComplexAnimationFrame
{ column: 1, row: 0, disposition: < 0, 0> },
{ column: 1, row: 0, disposition: < 0, 0> },
{ column: 1, row: 0, disposition: < 0, 0> },
sprite: maximSprite,
frametime: fiveFramesTime,
repeat: false,
- frames: [
+ frames:
+ [ ComplexAnimationFrame
{ column: 3, row: 0, disposition: < 0, 0> },
{ column: 3, row: 0, disposition: < 0, 0> },
{ column: 3, row: 1, disposition: < 0, 0> }
},
meleeAnimation: SimpleAnimation {
sprite: Sprite {
- image: "test-data/melee-maxim.png",
+ image: :"melee-maxim.png",
size: <96,96>
},
frametime: twoFramesTime,
framecount: 4
+ },
+ mapEntity: Entity {
+ animation: SimpleAnimation{
+ sprite: Sprite {
+ image: :"maxim-map.png",
+ size: <32,64>
+ },
+ frametime: 120,
+ framecount: 2
+ },
+ spriteOffset: <0,-32>
}
}
+
+Sprite selanSprite {
+ image: :"selan.png",
+ size: <64,64>
+}
+export Hero selan {
+ name: "Selan",
+ level: 1,
+ battleSprite: selanSprite,
+ maxHealth: 28,
+ health: 28,
+ maxMana: 23,
+ mana: 23,
+ ip: 0,
+ stats: Stats {
+ atp: 23,
+ dfp: 21,
+ str: 23,
+ agl: 19,
+ int: 22,
+ gut: 80,
+ mgr: 13
+ },
+ attackAnimation: ComplexAnimation {
+ sprite: selanSprite,
+ frametime: frameTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 1, row: 0, disposition: < 4, 0> },
+ { column: 1, row: 0, disposition: < 4, 0> },
+ { column: 1, row: 0, disposition: < 8, 2> },
+ { column: 2, row: 0, disposition: <10, 4> },
+ { column: 2, row: 0, disposition: <14, 4> },
+ { column: 2, row: 0, disposition: <12, 2> },
+ { column: 2, row: 0, disposition: <12, 2> },
+ { column: 2, row: 0, disposition: <12, 2> },
+ { column: 2, row: 1, disposition: <14, 2> },
+ { column: 2, row: 1, disposition: <14, 2> },
+ { column: 2, row: 1, disposition: < 2, 0> },
+ { column: 2, row: 2, disposition: <-2,-4> },
+ { column: 2, row: 2, disposition: <-8,-8> },
+ { column: 2, row: 2, disposition: < 0, 0> }
+ ]
+ },
+ spellAnimation: ComplexAnimation {
+ sprite: selanSprite,
+ frametime: frameTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 1, disposition: < 0, 0> },
+ { column: 3, row: 1, disposition: < 0, 0> },
+ { column: 3, row: 2, disposition: < 0, 0> },
+ { column: 3, row: 2, disposition: < 0, 0> },
+ { column: 3, row: 2, disposition: < 0, 0> },
+ { column: 3, row: 3, disposition: < 0, 0> },
+ { column: 3, row: 3, disposition: < 0, 0> }
+ ]
+ },
+ meleeAnimation: SimpleAnimation {
+ sprite: Sprite {
+ image: :"melee-selan.png",
+ size: <96,96>
+ },
+ frametime: twoFramesTime,
+ framecount: 4
+ },
+ mapEntity: Entity {
+ animation: SimpleAnimation{
+ sprite: Sprite {
+ image: :"selan-map.png",
+ size: <32,64>
+ },
+ frametime: 120,
+ framecount: 2
+ },
+ spriteOffset: <0,-32>
+ }
+}
+
+Sprite guySprite {
+ image: :"guy.png",
+ size: <64,64>
+}
+export Hero guy {
+ name: "Guy",
+ level: 1,
+ battleSprite: guySprite,
+ maxHealth: 38,
+ health: 38,
+ maxMana: 0,
+ mana: 0,
+ ip: 0,
+ stats: Stats {
+ atp: 38,
+ dfp: 25,
+ str: 38,
+ agl: 13,
+ int: 8,
+ gut: 90,
+ mgr: 8
+ },
+ attackAnimation: ComplexAnimation {
+ sprite: guySprite,
+ frametime: frameTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 1, row: 0, disposition: <-4, 0> },
+ { column: 1, row: 0, disposition: <-4, 0> },
+ { column: 1, row: 0, disposition: <-8, 0> },
+ { column: 1, row: 0, disposition: <-8, 0> },
+ { column: 2, row: 0, disposition: <-8, 0> },
+ { column: 2, row: 0, disposition: <-8, 0> },
+ { column: 2, row: 0, disposition: <-4, 0> },
+ { column: 2, row: 0, disposition: < 0, 0> },
+ { column: 2, row: 0, disposition: < 0, 0> },
+ { column: 2, row: 1, disposition: < 0, 0> },
+ { column: 2, row: 1, disposition: < 4, 0> },
+ { column: 2, row: 1, disposition: <10, 0> },
+ { column: 2, row: 2, disposition: <10, 0> },
+ { column: 2, row: 2, disposition: < 0, 0> }
+ ]
+ },
+ meleeAnimation: SimpleAnimation {
+ sprite: Sprite {
+ image: :"melee-guy.png",
+ size: <96,96>
+ },
+ frametime: fourFramesTime,
+ framecount: 4
+ },
+ mapEntity: Entity {
+ animation: SimpleAnimation{
+ sprite: Sprite {
+ image: :"guy-map.png",
+ size: <32,64>
+ },
+ frametime: 120,
+ framecount: 2
+ },
+ spriteOffset: <0,-32>
+ }
+}
+
+Sprite dekarSprite {
+ image: :"dekar.png",
+ size: <64,64>
+}
+export Hero dekar {
+ name: "Dekar",
+ level: 1,
+ battleSprite: dekarSprite,
+ maxHealth: 38,
+ health: 38,
+ maxMana: 0,
+ mana: 0,
+ ip: 0,
+ stats: Stats {
+ atp: 46,
+ dfp: 29,
+ str: 46,
+ agl: 13,
+ int: 7,
+ gut: 100,
+ mgr: 5
+ },
+ attackAnimation: ComplexAnimation {
+ sprite: dekarSprite,
+ frametime: frameTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 1, row: 0, disposition: < 4, 0> },
+ { column: 1, row: 0, disposition: < 8, 2> },
+ { column: 2, row: 0, disposition: <12, 4> },
+ { column: 2, row: 0, disposition: <16, 4> },
+ { column: 2, row: 0, disposition: <10, 2> },
+ { column: 2, row: 0, disposition: <10, 2> },
+ { column: 2, row: 0, disposition: <10, 2> },
+ { column: 2, row: 0, disposition: <10, 2> },
+ { column: 2, row: 1, disposition: < 6, 2> },
+ { column: 2, row: 1, disposition: < 0, 0> },
+ { column: 2, row: 2, disposition: <-2, 0> },
+ { column: 2, row: 2, disposition: < 0, 0> },
+ { column: 2, row: 2, disposition: < 0, 0> },
+ { column: 2, row: 2, disposition: < 0, 0> }
+ ]
+ },
+ spellAnimation: ComplexAnimation {
+ sprite: dekarSprite,
+ frametime: twoFramesTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 0, disposition: < 0, 0> },
+ { column: 3, row: 1, disposition: < 0, 0> },
+ { column: 3, row: 1, disposition: < 0, 0> },
+ { column: 3, row: 2, disposition: < 0, 0> },
+ { column: 3, row: 2, disposition: < 0, 0> },
+ { column: 3, row: 2, disposition: < 0, 0> }
+ ]
+ },
+ meleeAnimation: SimpleAnimation {
+ sprite: Sprite {
+ image: :"melee-dekar.png",
+ size: <96,96>
+ },
+ frametime: twoFramesTime,
+ framecount: 4
+ },
+ mapEntity: Entity {
+ animation: SimpleAnimation{
+ sprite: Sprite {
+ image: :"dekar-map.png",
+ size: <32,64>
+ },
+ frametime: 120,
+ framecount: 2
+ },
+ spriteOffset: <0,-32>
+ }
+}
+
+Sprite handCursor {
+ image: :"cursor-hand.png",
+ size: <32,32>
+}
+
+Font normalFont {
+ sprite: Sprite {
+ image: :"normal-font.png",
+ size: <16,16>
+ },
+ rowoffset: -2
+}
+
+Font disabledFont {
+ sprite: Sprite {
+ image: :"disabled-font.png",
+ size: <16,16>
+ },
+ rowoffset: -2
+}
+
+export BattleResources battleResources {
+ swapCursor: Sprite {
+ image: :"swap-cursor.png",
+ size: <32,32>
+ },
+ attackIcons: Sprite {
+ image: :"attack-type-icons.png",
+ size: <32,32>
+ },
+ attackChoiceIcons: Sprite {
+ image: :"attack-choice-icons.png",
+ size: <16,16>
+ },
+ moveIcons: Sprite {
+ image: :"move-icons.png",
+ size: <32,32>
+ },
+
+ titleFrame: Frame {
+ image: :"title-frame.png",
+ border: <16,16>
+ },
+ titleFont: Font {
+ sprite: Sprite {
+ image: :"large-font.png",
+ size: <16,32>
+ },
+ rowoffset: -2
+ },
+
+ numberAnimationPrototype: ComplexAnimation {
+ frametime: frameTime,
+ repeat: false,
+ frames:
+ [ ComplexAnimationFrame
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0,-26> },
+ { column: 0, row: 0, disposition: < 0,-42> },
+ { column: 0, row: 0, disposition: < 0,-48> },
+ { column: 0, row: 0, disposition: < 0,-42> },
+ { column: 0, row: 0, disposition: < 0,-26> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0,-12> },
+ { column: 0, row: 0, disposition: < 0,-20> },
+ { column: 0, row: 0, disposition: < 0,-24> },
+ { column: 0, row: 0, disposition: < 0,-20> },
+ { column: 0, row: 0, disposition: < 0,-12> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, -6> },
+ { column: 0, row: 0, disposition: < 0,-10> },
+ { column: 0, row: 0, disposition: < 0,-12> },
+ { column: 0, row: 0, disposition: < 0,-10> },
+ { column: 0, row: 0, disposition: < 0, -6> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0, 0> },
+ { column: 0, row: 0, disposition: < 0,-36> },
+ { column: 0, row: 0, disposition: < 0,-32> },
+ { column: 0, row: 0, disposition: < 0,-18> }
+ ]
+ },
+ bigNumberSprite: Sprite {
+ image: :"big-numbers.png",
+ size: <16,32>
+ },
+ greenNumberSprite: Sprite {
+ image: :"big-green-numbers.png",
+ size: <16,32>
+ },
+
+ heroTagLabels: Sprite {
+ image: :"hero-tag-sprites.png",
+ size: <32,16>
+ },
+ levelLabelCol: 0,
+ levelLabelRow: 0,
+ healthLabelCol: 0,
+ healthLabelRow: 1,
+ manaLabelCol: 0,
+ manaLabelRow: 2,
+ moveLabelCol: 0,
+ moveLabelRow: 3,
+ ikariLabelCol: 0,
+ ikariLabelRow: 4,
+ heroTagFont: Font {
+ sprite: Sprite {
+ image: :"numbers.png",
+ size: <16,16>
+ },
+ rowoffset: -3
+ },
+
+ activeHeroTagFrame: Frame {
+ image: :"tag-frames.png",
+ border: <16,16>
+ },
+ heroTagFrame: Frame {
+ image: :"tag-frames.png",
+ border: <16,16>,
+ offset: < 0,33>
+ },
+
+ smallHeroTagFrame: Frame {
+ image: :"small-tag-frame.png",
+ border: <8,16>
+ },
+ lastSmallHeroTagFrame: Frame {
+ image: :"small-tag-frame.png",
+ border: <8,16>,
+ offset: <0,33>
+ },
+ heroesBgColor: (24, 40, 49),
+
+ healthGauge: Gauge {
+ image: :"gauges.png",
+ full: <0,16>,
+ empty: <0, 0>,
+ height: 16,
+ start: 6,
+ repeat: 1,
+ end: 6
+ },
+ manaGauge: Gauge {
+ image: :"gauges.png",
+ full: <0,32>,
+ empty: <0, 0>,
+ height: 16,
+ start: 6,
+ repeat: 1,
+ end: 6
+ },
+ ikariGauge: Gauge {
+ image: :"gauges.png",
+ full: <0,48>,
+ empty: <0, 0>,
+ height: 16,
+ start: 6,
+ repeat: 1,
+ end: 6
+ },
+
+ selectFrame: Frame {
+ image: :"select-frame.png",
+ border: <16,16>
+ },
+ normalFont: normalFont,
+ disabledFont: disabledFont,
+ menuCursor: Sprite {
+ image: :"cursor-hand.png",
+ size: <32,32>
+ },
+
+ weaponTargetCursor: Sprite {
+ image: :"targeting-icons.png",
+ size: <32,32>
+ },
+ magicTargetCursor: Sprite {
+ image: :"targeting-icons.png",
+ size: <32,32>,
+ offset: <0,32>
+ },
+ itemTargetCursor: Sprite {
+ image: :"targeting-icons.png",
+ size: <32,32>,
+ offset: <0,64>
+ },
+
+ weaponMenuIcon: swordIcon,
+ armorMenuIcon: armorIcon,
+ shieldMenuIcon: shieldIcon,
+ helmetMenuIcon: helmetIcon,
+ ringMenuIcon: ringIcon,
+ jewelMenuIcon: jewelIcon,
+
+ spellMenuHeadline: "Please choose a spell.",
+ spellMenuProperties: MenuProperties {
+ font: normalFont,
+ disabledFont: disabledFont,
+ cursor: handCursor,
+ charsPerEntry: 9,
+ rows: 6,
+ rowGap: 8,
+ iconSpace: 0,
+ cols: 2,
+ colGap: 32,
+ charsPerNumber: 2,
+ delimiter: ":"
+ },
+
+ itemMenuHeadline: "Please choose an item.",
+ itemMenuProperties: MenuProperties {
+ font: normalFont,
+ disabledFont: disabledFont,
+ cursor: handCursor,
+ charsPerEntry: 15,
+ rows: 6,
+ rowGap: 8,
+ iconSpace: 16,
+ cols: 1,
+ colGap: 32,
+ charsPerNumber: 2,
+ delimiter: ":"
+ },
+
+ ikariMenuHeadline: "Please choose equipment.",
+ ikariMenuProperties: MenuProperties {
+ font: normalFont,
+ disabledFont: disabledFont,
+ cursor: handCursor,
+ charsPerEntry: 12,
+ rows: 6,
+ rowGap: 8,
+ iconSpace: 16,
+ cols: 1,
+ colGap: 32,
+ charsPerAdditionalText: 12,
+ additionalTextGap: 16
+ },
+ noEquipmentText: "No equip",
+
+ escapeText: "Escapes."
+}
\ No newline at end of file