X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=49a79b62e7b8d7bb34e166281fa5cac5cee9f8ad;hb=8456b7dac2051bfd2b507a39854c1428eb4d91cd;hp=28656c3b050a475badb08489d236fb255faef1b7;hpb=85f12b6b3dd4abb488a24b41d2d5d9725fb33462;p=l2e.git diff --git a/src/main.cpp b/src/main.cpp index 28656c3..49a79b6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #include "app/Application.h" #include "app/Input.h" +#include "battle/AttackAnimation.h" #include "battle/BattleState.h" #include "battle/Hero.h" #include "battle/Monster.h" @@ -17,10 +18,13 @@ #include "common/Item.h" #include "common/Spell.h" #include "geometry/Point.h" +#include "geometry/Vector.h" +#include "graphics/ComplexAnimation.h" #include "graphics/Font.h" #include "graphics/Frame.h" #include "graphics/Gauge.h" #include "graphics/Menu.h" +#include "graphics/SimpleAnimation.h" #include "graphics/Sprite.h" #include "sdl/InitImage.h" #include "sdl/InitScreen.h" @@ -33,6 +37,7 @@ using app::Application; using app::Input; +using battle::AttackAnimation; using battle::BattleState; using battle::Hero; using battle::Monster; @@ -42,10 +47,13 @@ using common::Inventory; using common::Item; using common::Spell; using geometry::Point; +using geometry::Vector; +using graphics::ComplexAnimation; using graphics::Font; using graphics::Frame; using graphics::Gauge; using graphics::Menu; +using graphics::SimpleAnimation; using graphics::Sprite; using sdl::InitImage; using sdl::InitScreen; @@ -74,13 +82,14 @@ int main(int argc, char **argv) { monstersLayout.AddPosition(Point(208, 104)); PartyLayout heroesLayout; heroesLayout.AddPosition(Point(48, 152)); - heroesLayout.AddPosition(Point(80, 168)); heroesLayout.AddPosition(Point(128, 152)); + heroesLayout.AddPosition(Point(80, 168)); heroesLayout.AddPosition(Point(160, 168)); SDL_Surface *monsterImg(IMG_Load("test-data/monster.png")); Sprite dummySprite(monsterImg, 64, 64); Monster monster; + monster.SetName("Monster"); monster.SetSprite(&dummySprite); monster.SetMaxHealth(10); monster.SetHealth(10); @@ -96,6 +105,30 @@ int main(int argc, char **argv) { maxim.SetMaxMana(20); maxim.SetMana(20); maxim.SetIP(0); + ComplexAnimation maximAttackAnimation(&maximSprite, 30); + maximAttackAnimation.AddFrame(1, 0, Vector(2, 0)); + maximAttackAnimation.AddFrame(1, 0, Vector(2, -1)); + maximAttackAnimation.AddFrames(2, 0, Vector(2, -2), 2); + maximAttackAnimation.AddFrame(2, 0, Vector(4, -2)); + maximAttackAnimation.AddFrame(2, 0, Vector(3, -1)); + maximAttackAnimation.AddFrames(2, 1, Vector(3, -1), 2); + maximAttackAnimation.AddFrame(2, 1); + maximAttackAnimation.AddFrames(2, 2, Vector(), 2); + maxim.SetAttackAnimation(&maximAttackAnimation); + ComplexAnimation maximSpellAnimation(&maximSprite, 150); + maximSpellAnimation.AddFrames(3, 0, Vector(), 2); + maximSpellAnimation.AddFrame(3, 1); + maxim.SetSpellAnimation(&maximSpellAnimation); + SDL_Surface *maximMeleeImg(IMG_Load("test-data/melee-maxim.png")); + Sprite maximMeleeSprite(maximMeleeImg, 96, 96); + SimpleAnimation maximMeleeAnimation(&maximMeleeSprite, 30, 4); + AttackAnimation maximMeleeScript; + maximMeleeScript.PlayAttackAnimation(); + maximMeleeScript.StartTimer(150); + maximMeleeScript.WaitForTimer(); + maximMeleeScript.PlayTargetAnimation(&maximMeleeAnimation); + maximMeleeScript.WaitForAnimations(); + maxim.SetMeleeAnimation(&maximMeleeScript); SDL_Surface *selanImg(IMG_Load("test-data/selan.png")); Sprite selanSprite(selanImg, 64, 64); @@ -108,6 +141,24 @@ int main(int argc, char **argv) { selan.SetMaxMana(23); selan.SetMana(23); selan.SetIP(1); + ComplexAnimation selanAttackAnimation(&selanSprite, 30); + selanAttackAnimation.AddFrames(1, 0, Vector(4, 0), 2); + selanAttackAnimation.AddFrame(1, 0, Vector(8, 2)); + selanAttackAnimation.AddFrame(2, 0, Vector(10, 4)); + selanAttackAnimation.AddFrame(2, 0, Vector(14, 4)); + selanAttackAnimation.AddFrames(2, 0, Vector(12, 2), 3); + selanAttackAnimation.AddFrames(2, 1, Vector(14, 2), 2); + selanAttackAnimation.AddFrame(2, 1, Vector(2, 0)); + selanAttackAnimation.AddFrame(2, 2, Vector(-2, -4)); + selanAttackAnimation.AddFrame(2, 2, Vector(-8, -8)); + selanAttackAnimation.AddFrame(2, 2); + selan.SetAttackAnimation(&selanAttackAnimation); + ComplexAnimation selanSpellAnimation(&selanSprite, 30); + selanSpellAnimation.AddFrames(2, 0, Vector(), 3); + selanSpellAnimation.AddFrames(2, 1, Vector(), 2); + selanSpellAnimation.AddFrames(2, 2, Vector(), 3); + selanSpellAnimation.AddFrames(2, 3, Vector(), 2); + selan.SetSpellAnimation(&selanSpellAnimation); SDL_Surface *guyImg(IMG_Load("test-data/guy.png")); Sprite guySprite(guyImg, 64, 64); @@ -120,6 +171,18 @@ int main(int argc, char **argv) { guy.SetMaxMana(0); guy.SetMana(0); guy.SetIP(254); + ComplexAnimation guyAttackAnimation(&guySprite, 30); + guyAttackAnimation.AddFrames(1, 0, Vector(-4, 0), 2); + guyAttackAnimation.AddFrames(1, 0, Vector(-8, 0), 2); + guyAttackAnimation.AddFrames(2, 0, Vector(-8, 0), 2); + guyAttackAnimation.AddFrame(2, 0, Vector(-4, 0)); + guyAttackAnimation.AddFrames(2, 0, Vector(), 2); + guyAttackAnimation.AddFrame(2, 1); + guyAttackAnimation.AddFrame(2, 1, Vector(4, 0)); + guyAttackAnimation.AddFrame(2, 1, Vector(10, 0)); + guyAttackAnimation.AddFrame(2, 2, Vector(10, 0)); + guyAttackAnimation.AddFrame(2, 2); + guy.SetAttackAnimation(&guyAttackAnimation); SDL_Surface *dekarImg(IMG_Load("test-data/dekar.png")); Sprite dekarSprite(dekarImg, 64, 64); @@ -132,6 +195,22 @@ int main(int argc, char **argv) { dekar.SetMaxMana(0); dekar.SetMana(0); dekar.SetIP(255); + ComplexAnimation dekarAttackAnimation(&dekarSprite, 30); + dekarAttackAnimation.AddFrame(1, 0, Vector(4, 0)); + dekarAttackAnimation.AddFrame(1, 0, Vector(8, 2)); + dekarAttackAnimation.AddFrame(2, 0, Vector(12, 4)); + dekarAttackAnimation.AddFrame(2, 0, Vector(16, 4)); + dekarAttackAnimation.AddFrames(2, 0, Vector(10, 2), 4); + dekarAttackAnimation.AddFrame(2, 1, Vector(6, 2)); + dekarAttackAnimation.AddFrame(2, 1, Vector()); + dekarAttackAnimation.AddFrame(2, 2, Vector(-2, 0)); + dekarAttackAnimation.AddFrames(2, 2, Vector(0, 0), 3); + dekar.SetAttackAnimation(&dekarAttackAnimation); + ComplexAnimation dekarSpellAnimation(&dekarSprite, 30); + dekarSpellAnimation.AddFrames(2, 0, Vector(), 6); + dekarSpellAnimation.AddFrames(2, 1, Vector(), 2); + dekarSpellAnimation.AddFrames(2, 2, Vector(), 3); + dekar.SetSpellAnimation(&dekarSpellAnimation); battle::Resources battleRes; @@ -147,18 +226,76 @@ int main(int argc, char **argv) { SDL_Surface *moveIconsImg(IMG_Load("test-data/move-icons.png")); Sprite moveIconsSprite(moveIconsImg, 32, 32); battleRes.moveIcons = &moveIconsSprite; + + SDL_Surface *titleFrameImg(IMG_Load("test-data/title-frame.png")); + Frame titleFrame(titleFrameImg, 16, 16); + battleRes.titleFrame = &titleFrame; + + SDL_Surface *largeFontImg(IMG_Load("test-data/large-font.png")); + Sprite largeFontSprite(largeFontImg, 16, 32); + Font largeFont(&largeFontSprite, 0, -2); + battleRes.titleFont = &largeFont; + + battleRes.numberAnimationPrototype = ComplexAnimation(0, 30); + battleRes.numberAnimationPrototype.AddFrame(0, 0); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -26)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -42)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -48)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -42)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -26)); + battleRes.numberAnimationPrototype.AddFrame(0, 0); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -12)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -20)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -24)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -20)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -12)); + battleRes.numberAnimationPrototype.AddFrame(0, 0); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -6)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -10)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -12)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -10)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -6)); + battleRes.numberAnimationPrototype.AddFrames(0, 0, Vector(), 14); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -36)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -32)); + battleRes.numberAnimationPrototype.AddFrame(0, 0, Vector(0, -18)); + + SDL_Surface *bigNumbersImg(IMG_Load("test-data/big-numbers.png")); + Sprite bigNumbersSprite(bigNumbersImg, 16, 32); + battleRes.bigNumberSprite = &bigNumbersSprite; + SDL_Surface *bigGreenNumbersImg(IMG_Load("test-data/big-green-numbers.png")); + Sprite bigGreenNumbersSprite(bigGreenNumbersImg, 16, 32); + battleRes.greenNumberSprite = &bigGreenNumbersSprite; + SDL_Surface *heroTagImg(IMG_Load("test-data/hero-tag-sprites.png")); Sprite heroTagSprite(heroTagImg, 32, 16); battleRes.heroTagLabels = &heroTagSprite; + battleRes.levelLabelCol = 0; + battleRes.levelLabelRow = 0; + battleRes.healthLabelCol = 0; + battleRes.healthLabelRow = 1; + battleRes.manaLabelCol = 0; + battleRes.manaLabelRow = 2; + battleRes.moveLabelCol = 0; + battleRes.moveLabelRow = 3; + battleRes.ikariLabelCol = 0; + battleRes.ikariLabelRow = 4; + SDL_Surface *numbersImg(IMG_Load("test-data/numbers.png")); Sprite numbersSprite(numbersImg, 16, 16); - Font heroTagFont(&numbersSprite); + Font heroTagFont(&numbersSprite, 0, -3); battleRes.heroTagFont = &heroTagFont; SDL_Surface *tagFramesImg(IMG_Load("test-data/tag-frames.png")); Frame heroTagFrame(tagFramesImg, 16, 16, 1, 1, 0, 33); battleRes.heroTagFrame = &heroTagFrame; Frame activeHeroTagFrame(tagFramesImg, 16, 16); battleRes.activeHeroTagFrame = &activeHeroTagFrame; + SDL_Surface *smallTagFrameImg(IMG_Load("test-data/small-tag-frame.png")); + Frame smallTagFrame(smallTagFrameImg, 8, 16); + battleRes.smallHeroTagFrame = &smallTagFrame; + Frame lastSmallTagFrame(smallTagFrameImg, 8, 16, 1, 1, 0, 33); + battleRes.lastSmallHeroTagFrame = &lastSmallTagFrame; + battleRes.heroesBgColor = SDL_MapRGB(screen.Screen()->format, 0x18, 0x28, 0x31); SDL_Surface *gauges(IMG_Load("test-data/gauges.png")); Gauge healthGauge(gauges, 0, 16, 0, 0, 16, 6, 1, 6); @@ -174,28 +311,12 @@ int main(int argc, char **argv) { SDL_Surface *normalFontImg(IMG_Load("test-data/normal-font.png")); Sprite normalFontSprite(normalFontImg, 16, 16); - Font normalFont(&normalFontSprite); - normalFont.MapRange('A', 'M', 0, 1); - normalFont.MapRange('N', 'Z', 0, 2); - normalFont.MapRange('a', 'm', 0, 3); - normalFont.MapRange('n', 'z', 0, 4); - normalFont.MapChar(':', 10, 0); - normalFont.MapChar('!', 11, 0); - normalFont.MapChar('?', 12, 0); - // TODO: add '.' and '-' characters + Font normalFont(&normalFontSprite, 0, -2); battleRes.normalFont = &normalFont; SDL_Surface *disabledFontImg(IMG_Load("test-data/disabled-font.png")); Sprite disabledFontSprite(disabledFontImg, 16, 16); - Font disabledFont(&disabledFontSprite); - disabledFont.MapRange('A', 'M', 0, 1); - disabledFont.MapRange('N', 'Z', 0, 2); - disabledFont.MapRange('a', 'm', 0, 3); - disabledFont.MapRange('n', 'z', 0, 4); - disabledFont.MapChar(':', 10, 0); - disabledFont.MapChar('!', 11, 0); - disabledFont.MapChar('?', 12, 0); - // TODO: add '.' and '-' characters + Font disabledFont(&disabledFontSprite, 0, -2); battleRes.disabledFont = &disabledFont; SDL_Surface *handCursorImg(IMG_Load("test-data/cursor-hand.png")); @@ -336,7 +457,7 @@ int main(int argc, char **argv) { firestorm.GetTargetingMode().TargetAllEnemies(); firestorm.SetPhysical(); zircoSword.SetIkari(&firestorm); - maxim.SetWeapon(&zircoSword); +// maxim.SetWeapon(&zircoSword); Item zirconArmor; zirconArmor.SetName("Zircon armor"); zirconArmor.SetMenuIcon(&armorIcon); @@ -540,6 +661,8 @@ int main(int argc, char **argv) { battleRes.noEquipmentText = "No equip"; battleRes.ikariMenuPrototype = Menu(&normalFont, &disabledFont, &handCursorSprite, 12, 6, normalFont.CharHeight() / 2, normalFont.CharWidth(), 1, normalFont.CharWidth() * 2, 0, ':', 12, normalFont.CharWidth()); + battleRes.escapeText = "Escapes."; + BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &battleRes)); battleState->AddMonster(monster); battleState->AddMonster(monster);