X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=f6a069c2331eb73a695de2a7f1a3a87c858b4243;hb=350233c2834eb36e66220aba490f1876bd6b19bf;hp=964fce03e24671219a259fa460178808522ab516;hpb=b841b91bb2381c7553863d165ebfc5b6a323b9d2;p=l2e.git diff --git a/src/main.cpp b/src/main.cpp index 964fce0..f6a069c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,10 +26,16 @@ #include "graphics/Menu.h" #include "graphics/SimpleAnimation.h" #include "graphics/Sprite.h" +#include "loader/Caster.h" #include "loader/Interpreter.h" #include "loader/ParsedSource.h" #include "loader/Parser.h" #include "loader/TypeDescription.h" +#include "map/Area.h" +#include "map/Entity.h" +#include "map/Map.h" +#include "map/MapState.h" +#include "map/Tile.h" #include "sdl/InitImage.h" #include "sdl/InitScreen.h" #include "sdl/InitSDL.h" @@ -63,10 +69,16 @@ using graphics::Gauge; using graphics::Menu; using graphics::SimpleAnimation; using graphics::Sprite; +using loader::Caster; using loader::Interpreter; using loader::ParsedSource; using loader::Parser; using loader::TypeDescription; +using map::Area; +using map::Entity; +using map::Map; +using map::MapState; +using map::Tile; using sdl::InitImage; using sdl::InitScreen; using sdl::InitSDL; @@ -82,6 +94,8 @@ int main(int argc, char **argv) { const int width = 800; const int height = 480; + const bool battle(false); + // std::srand(std::time(0)); try { @@ -149,94 +163,192 @@ int main(int argc, char **argv) { return 3; } - int battleResId(TypeDescription::GetTypeId("BattleResources")); - int heroId(TypeDescription::GetTypeId("Hero")); - int itemId(TypeDescription::GetTypeId("Item")); - int monsterId(TypeDescription::GetTypeId("Monster")); - int partyLayoutId(TypeDescription::GetTypeId("PartyLayout")); - int spellId(TypeDescription::GetTypeId("Spell")); + Caster caster(intp); // temporary test data SDL_Surface *bg(IMG_Load("test-data/battle-bg.png")); - PartyLayout monstersLayout(*reinterpret_cast(intp.GetObject(partyLayoutId, "monstersLayout"))); - PartyLayout heroesLayout(*reinterpret_cast(intp.GetObject(partyLayoutId, "heroesLayout"))); + PartyLayout monstersLayout(*caster.GetPartyLayout("monstersLayout")); + PartyLayout heroesLayout(*caster.GetPartyLayout("heroesLayout")); - Monster monster(*reinterpret_cast(intp.GetObject(monsterId, "lizard"))); - Hero maxim(*reinterpret_cast(intp.GetObject(heroId, "maxim"))); - Hero selan(*reinterpret_cast(intp.GetObject(heroId, "selan"))); - Hero guy(*reinterpret_cast(intp.GetObject(heroId, "guy"))); - Hero dekar(*reinterpret_cast(intp.GetObject(heroId, "dekar"))); + Monster monster(*caster.GetMonster("lizard")); + Hero maxim(*caster.GetHero("maxim")); + Hero selan(*caster.GetHero("selan")); + Hero guy(*caster.GetHero("guy")); + Hero dekar(*caster.GetHero("dekar")); - battle::Resources *battleRes(reinterpret_cast(intp.GetObject(battleResId, "battleResources"))); + battle::Resources *battleRes(caster.GetBattleResources("battleResources")); - maxim.AddSpell(reinterpret_cast(intp.GetObject(spellId, "resetSpell"))); - Spell *strongSpell(reinterpret_cast(intp.GetObject(spellId, "strongSpell"))); + maxim.AddSpell(caster.GetSpell("resetSpell")); + Spell *strongSpell(caster.GetSpell("strongSpell")); maxim.AddSpell(strongSpell); selan.AddSpell(strongSpell); - Spell *strongerSpell(reinterpret_cast(intp.GetObject(spellId, "strongerSpell"))); + Spell *strongerSpell(caster.GetSpell("strongerSpell")); maxim.AddSpell(strongerSpell); selan.AddSpell(strongerSpell); - Spell *championSpell(reinterpret_cast(intp.GetObject(spellId, "championSpell"))); + Spell *championSpell(caster.GetSpell("championSpell")); maxim.AddSpell(championSpell); selan.AddSpell(championSpell); - Spell *rallySpell(reinterpret_cast(intp.GetObject(spellId, "rallySpell"))); + Spell *rallySpell(caster.GetSpell("rallySpell")); maxim.AddSpell(rallySpell); selan.AddSpell(rallySpell); - selan.AddSpell(reinterpret_cast(intp.GetObject(spellId, "escapeSpell"))); - Spell *valorSpell(reinterpret_cast(intp.GetObject(spellId, "valorSpell"))); + selan.AddSpell(caster.GetSpell("escapeSpell")); + Spell *valorSpell(caster.GetSpell("valorSpell")); maxim.AddSpell(valorSpell); selan.AddSpell(valorSpell); Inventory inventory; - inventory.Add(reinterpret_cast(intp.GetObject(itemId, "antidoteItem")), 9); - inventory.Add(reinterpret_cast(intp.GetObject(itemId, "magicJarItem")), 4); - inventory.Add(reinterpret_cast(intp.GetObject(itemId, "hiPotionItem")), 4); - inventory.Add(reinterpret_cast(intp.GetObject(itemId, "powerPotionItem")), 4); - inventory.Add(reinterpret_cast(intp.GetObject(itemId, "escapeItem")), 2); - inventory.Add(reinterpret_cast(intp.GetObject(itemId, "sleepBallItem")), 1); + inventory.Add(caster.GetItem("antidoteItem"), 9); + inventory.Add(caster.GetItem("magicJarItem"), 4); + inventory.Add(caster.GetItem("hiPotionItem"), 4); + inventory.Add(caster.GetItem("powerPotionItem"), 4); + inventory.Add(caster.GetItem("escapeItem"), 2); + inventory.Add(caster.GetItem("sleepBallItem"), 1); battleRes->inventory = &inventory; - maxim.SetWeapon(reinterpret_cast(intp.GetObject(itemId, "zircoSwordItem"))); - maxim.SetArmor(reinterpret_cast(intp.GetObject(itemId, "zirconArmorItem"))); - maxim.SetShield(reinterpret_cast(intp.GetObject(itemId, "holyShieldItem"))); - maxim.SetHelmet(reinterpret_cast(intp.GetObject(itemId, "legendHelmItem"))); - maxim.SetRing(reinterpret_cast(intp.GetObject(itemId, "sProRingItem"))); - maxim.SetJewel(reinterpret_cast(intp.GetObject(itemId, "evilJewelItem"))); - -// selan.SetWeapon(reinterpret_cast(intp.GetObject(itemId, "zircoWhipItem"))); - selan.SetArmor(reinterpret_cast(intp.GetObject(itemId, "zirconPlateItem"))); - selan.SetShield(reinterpret_cast(intp.GetObject(itemId, "zircoGlovesItem"))); - selan.SetHelmet(reinterpret_cast(intp.GetObject(itemId, "holyCapItem"))); - selan.SetRing(reinterpret_cast(intp.GetObject(itemId, "ghostRingItem"))); - selan.SetJewel(reinterpret_cast(intp.GetObject(itemId, "eagleRockItem"))); - -// guy.SetWeapon(reinterpret_cast(intp.GetObject(itemId, "zircoAxItem"))); - guy.SetArmor(reinterpret_cast(intp.GetObject(itemId, "zirconArmorItem"))); - guy.SetShield(reinterpret_cast(intp.GetObject(itemId, "megaShieldItem"))); - guy.SetHelmet(reinterpret_cast(intp.GetObject(itemId, "zircoHelmetItem"))); - guy.SetRing(reinterpret_cast(intp.GetObject(itemId, "powerRingItem"))); - guy.SetJewel(reinterpret_cast(intp.GetObject(itemId, "evilJewelItem"))); + maxim.SetWeapon(caster.GetItem("zircoSwordItem")); + maxim.SetArmor(caster.GetItem("zirconArmorItem")); + maxim.SetShield(caster.GetItem("holyShieldItem")); + maxim.SetHelmet(caster.GetItem("legendHelmItem")); + maxim.SetRing(caster.GetItem("sProRingItem")); + maxim.SetJewel(caster.GetItem("evilJewelItem")); + +// selan.SetWeapon(cst.GetItem("zircoWhipItem")); + selan.SetArmor(caster.GetItem("zirconPlateItem")); + selan.SetShield(caster.GetItem("zircoGlovesItem")); + selan.SetHelmet(caster.GetItem("holyCapItem")); + selan.SetRing(caster.GetItem("ghostRingItem")); + selan.SetJewel(caster.GetItem("eagleRockItem")); + +// guy.SetWeapon(cst.GetItem("zircoAxItem")); + guy.SetArmor(caster.GetItem("zirconArmorItem")); + guy.SetShield(caster.GetItem("megaShieldItem")); + guy.SetHelmet(caster.GetItem("zircoHelmetItem")); + guy.SetRing(caster.GetItem("powerRingItem")); + guy.SetJewel(caster.GetItem("evilJewelItem")); // NOTE: this is actually Artea equipment -// dekar.SetWeapon(reinterpret_cast(intp.GetObject(itemId, "lizardBlowItem"))); - dekar.SetArmor(reinterpret_cast(intp.GetObject(itemId, "holyRobeItem"))); - dekar.SetShield(reinterpret_cast(intp.GetObject(itemId, "zircoGlovesItem"))); - dekar.SetHelmet(reinterpret_cast(intp.GetObject(itemId, "holyCapItem"))); - dekar.SetRing(reinterpret_cast(intp.GetObject(itemId, "rocketRingItem"))); - dekar.SetJewel(reinterpret_cast(intp.GetObject(itemId, "krakenRockItem"))); +// dekar.SetWeapon(cst.GetItem("lizardBlowItem")); + dekar.SetArmor(caster.GetItem("holyRobeItem")); + dekar.SetShield(caster.GetItem("zircoGlovesItem")); + dekar.SetHelmet(caster.GetItem("holyCapItem")); + dekar.SetRing(caster.GetItem("rocketRingItem")); + dekar.SetJewel(caster.GetItem("krakenRockItem")); + + Tile tiles[64]; + + tiles[ 0].SetOffset(Vector(2, 1)); + tiles[ 1].SetOffset(Vector(4, 0)); + tiles[ 2].SetOffset(Vector(3, 0)); + tiles[ 3].SetOffset(Vector(3, 0)); + tiles[ 4].SetOffset(Vector(0, 1)); + tiles[ 5].SetOffset(Vector(2, 0)); + tiles[ 6].SetOffset(Vector(2, 0)); + tiles[ 7].SetOffset(Vector(2, 0)); + + tiles[ 8].SetOffset(Vector(2, 1)); + tiles[ 9].SetOffset(Vector(4, 0)); + tiles[10].SetOffset(Vector(3, 0)); + tiles[11].SetOffset(Vector(3, 0)); + tiles[12].SetOffset(Vector(0, 2)); + tiles[13].SetOffset(Vector(1, 2)); + tiles[14].SetOffset(Vector(1, 2)); + tiles[15].SetOffset(Vector(1, 2)); + + tiles[16].SetOffset(Vector(2, 1)); + tiles[17].SetOffset(Vector(4, 0)); + tiles[18].SetOffset(Vector(3, 0)); + tiles[19].SetOffset(Vector(3, 0)); + tiles[20].SetOffset(Vector(0, 3)); + tiles[21].SetOffset(Vector(1, 3)); + tiles[22].SetOffset(Vector(1, 3)); + tiles[23].SetOffset(Vector(2, 3)); + + tiles[24].SetOffset(Vector(2, 1)); + tiles[25].SetOffset(Vector(4, 0)); + tiles[26].SetOffset(Vector(3, 0)); + tiles[27].SetOffset(Vector(3, 0)); + tiles[28].SetOffset(Vector(0, 4)); + tiles[29].SetOffset(Vector(1, 4)); + tiles[30].SetOffset(Vector(1, 4)); + tiles[31].SetOffset(Vector(2, 4)); + + tiles[32].SetOffset(Vector(2, 1)); + tiles[33].SetOffset(Vector(4, 0)); + tiles[34].SetOffset(Vector(3, 0)); + tiles[35].SetOffset(Vector(3, 0)); + tiles[36].SetOffset(Vector(3, 0)); + tiles[37].SetOffset(Vector(3, 0)); + tiles[38].SetOffset(Vector(3, 0)); + tiles[39].SetOffset(Vector(3, 0)); + + tiles[40].SetOffset(Vector(2, 1)); + tiles[41].SetOffset(Vector(4, 0)); + tiles[42].SetOffset(Vector(3, 0)); + tiles[43].SetOffset(Vector(3, 0)); + tiles[44].SetOffset(Vector(3, 0)); + tiles[45].SetOffset(Vector(4, 0)); + tiles[46].SetOffset(Vector(4, 0)); + tiles[47].SetOffset(Vector(4, 0)); + + tiles[48].SetOffset(Vector(2, 1)); + tiles[49].SetOffset(Vector(4, 0)); + tiles[50].SetOffset(Vector(3, 0)); + tiles[51].SetOffset(Vector(3, 0)); + tiles[52].SetOffset(Vector(0, 0)); + tiles[53].SetOffset(Vector(1, 0)); + tiles[54].SetOffset(Vector(1, 0)); + tiles[55].SetOffset(Vector(1, 0)); + + tiles[56].SetOffset(Vector(2, 1)); + tiles[57].SetOffset(Vector(4, 0)); + tiles[58].SetOffset(Vector(3, 0)); + tiles[59].SetOffset(Vector(3, 0)); + tiles[60].SetOffset(Vector(0, 1)); + tiles[61].SetOffset(Vector(1, 1)); + tiles[62].SetOffset(Vector(1, 1)); + tiles[63].SetOffset(Vector(1, 1)); + + Area area; + area.SetTiles(tiles, 64); + area.SetWidth(8); + + SDL_Surface *tilesetImg(IMG_Load("test-data/tileset.png")); + Sprite tileset(tilesetImg, 32, 32); + + Map map; + map.SetAreas(&area, 1); + map.SetTileset(&tileset); + map.SetWidth(1); + + SDL_Surface *mapMaximImg(IMG_Load("test-data/maxim-map.png")); + Sprite mapMaximSprite(mapMaximImg, 32, 64); + Entity mapMaxim; + mapMaxim.SetSprite(&mapMaximSprite); + mapMaxim.Position() = Vector(80, 160); InitScreen screen(width, height); - BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, battleRes)); - battleState->AddMonster(monster); - battleState->AddMonster(monster); - battleState->AddMonster(monster); - battleState->AddMonster(monster); - battleState->AddHero(maxim); - battleState->AddHero(selan); - battleState->AddHero(guy); - battleState->AddHero(dekar); - Application app(&screen, battleState); + app::State *state(0); + + if (battle) { + BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, battleRes)); + battleState->AddMonster(monster); + battleState->AddMonster(monster); + battleState->AddMonster(monster); + battleState->AddMonster(monster); + battleState->AddHero(maxim); + battleState->AddHero(selan); + battleState->AddHero(guy); + battleState->AddHero(dekar); + state = battleState; + } else { + MapState *mapState(new MapState(&map)); + mapState->AddEntity(&mapMaxim); + mapState->ControlEntity(&mapMaxim); + state = mapState; + } + + Application app(&screen, state); app.Buttons().MapKey(SDLK_w, Input::PAD_UP); app.Buttons().MapKey(SDLK_d, Input::PAD_RIGHT); app.Buttons().MapKey(SDLK_s, Input::PAD_DOWN);