X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=40b38f1bb98dd6d3d3f71844cc428e66150aaff1;hb=7c43158af1abf38fa896a442cb3c6d8a5bc630e7;hp=ff49b66bb578b11a9536fb476abcb7b868d6b75d;hpb=616330670a0c3d9d4554c145e997129747d05979;p=l2e.git diff --git a/src/main.cpp b/src/main.cpp index ff49b66..40b38f1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,11 +13,13 @@ #include "battle/Monster.h" #include "battle/PartyLayout.h" #include "battle/Resources.h" +#include "common/GameConfig.h" #include "common/GameState.h" #include "common/Hero.h" #include "common/Ikari.h" #include "common/Inventory.h" #include "common/Item.h" +#include "common/Script.h" #include "common/Spell.h" #include "common/Stats.h" #include "geometry/Vector.h" @@ -58,11 +60,13 @@ using app::Input; using battle::BattleState; using battle::Monster; using battle::PartyLayout; +using common::GameConfig; using common::GameState; using common::Hero; using common::Ikari; using common::Inventory; using common::Item; +using common::Script; using common::Spell; using common::Stats; using geometry::Vector; @@ -99,10 +103,9 @@ int main(int argc, char **argv) { const int width = 800; const int height = 480; - const int tileSize = 32; const float walkSpeed = 128.0f; - const bool battle(false); + bool battle(false); // std::srand(std::time(0)); @@ -110,6 +113,7 @@ int main(int argc, char **argv) { InitSDL sdl; InitImage image(IMG_INIT_PNG); + Area::CreateTypeDescription(); battle::Resources::CreateTypeDescription(); ComplexAnimation::CreateTypeDescription(); Font::CreateTypeDescription(); @@ -119,6 +123,7 @@ int main(int argc, char **argv) { Ikari::CreateTypeDescription(); Interpreter::CreateTypeDescriptions(); Item::CreateTypeDescription(); + Map::CreateTypeDescription(); graphics::MenuProperties::CreateTypeDescription(); Monster::CreateTypeDescription(); PartyLayout::CreateTypeDescription(); @@ -127,6 +132,9 @@ int main(int argc, char **argv) { Sprite::CreateTypeDescription(); Stats::CreateTypeDescription(); common::TargetingMode::CreateTypeDescription(); + Tile::CreateTypeDescription(); + Trigger::CreateTypeDescription(); + Entity::CreateTypeDescription(); Arguments args; args.Read(argc, argv); @@ -137,7 +145,7 @@ int main(int argc, char **argv) { Parser(*i, source).Parse(); } - switch (args.DetectRunLevel()) { + switch (args.GetRunLevel()) { case Arguments::WRITE: { int length(std::strlen(args.OutfilePath())); @@ -157,7 +165,15 @@ int main(int argc, char **argv) { std::cout << source << std::endl; return 0; } + case Arguments::SOURCE_WIKI: { + TypeDescription::WriteSourceWiki(std::cout); + return 0; + } + case Arguments::BATTLE: + battle = true; + break; case Arguments::PLAY: + case Arguments::MAP: break; } @@ -173,6 +189,12 @@ int main(int argc, char **argv) { Caster caster(intp); + { + Map *map1(caster.GetMap("map1")); + Map *map2(caster.GetMap("map2")); + std::cout << map1 << ' ' << map2 << std::endl; + } + GameState gameState; gameState.heroes[0] = *caster.GetHero("maxim"); @@ -185,15 +207,17 @@ int main(int argc, char **argv) { gameState.party[2] = &gameState.heroes[2]; gameState.party[3] = &gameState.heroes[3]; + GameConfig gameConfig; + gameConfig.state = &gameState; + gameConfig.heroesLayout = caster.GetPartyLayout("heroesLayout"); + gameConfig.battleResources = caster.GetBattleResources("battleResources"); + // temporary test data SDL_Surface *bg(IMG_Load("test-data/battle-bg.png")); PartyLayout monstersLayout(*caster.GetPartyLayout("monstersLayout")); - PartyLayout heroesLayout(*caster.GetPartyLayout("heroesLayout")); Monster monster(*caster.GetMonster("lizard")); - battle::Resources *battleRes(caster.GetBattleResources("battleResources")); - gameState.heroes[0].AddSpell(caster.GetSpell("resetSpell")); Spell *strongSpell(caster.GetSpell("strongSpell")); gameState.heroes[0].AddSpell(strongSpell); @@ -212,14 +236,12 @@ int main(int argc, char **argv) { gameState.heroes[0].AddSpell(valorSpell); gameState.heroes[1].AddSpell(valorSpell); - Inventory inventory; - 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; + gameState.inventory.Add(caster.GetItem("antidoteItem"), 9); + gameState.inventory.Add(caster.GetItem("magicJarItem"), 4); + gameState.inventory.Add(caster.GetItem("hiPotionItem"), 4); + gameState.inventory.Add(caster.GetItem("powerPotionItem"), 4); + gameState.inventory.Add(caster.GetItem("escapeItem"), 2); + gameState.inventory.Add(caster.GetItem("sleepBallItem"), 1); gameState.heroes[0].SetWeapon(caster.GetItem("zircoSwordItem")); gameState.heroes[0].SetArmor(caster.GetItem("zirconArmorItem")); @@ -250,310 +272,26 @@ int main(int argc, char **argv) { gameState.heroes[3].SetRing(caster.GetItem("rocketRingItem")); gameState.heroes[3].SetJewel(caster.GetItem("krakenRockItem")); - Tile tiles1[64]; - - tiles1[ 0].SetOffset(Vector(2, 1)); - tiles1[ 1].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_WEST); - tiles1[ 2].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles1[ 3].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_EAST); - tiles1[ 4].SetOffset(Vector(0, 1)); - tiles1[ 5].SetOffset(Vector(2, 0)); - tiles1[ 6].SetOffset(Vector(2, 0)); - tiles1[ 7].SetOffset(Vector(2, 0)); - - tiles1[ 8].SetOffset(Vector(2, 1)); - tiles1[ 9].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles1[10].SetOffset(Vector(3, 0)); - tiles1[11].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles1[12].SetOffset(Vector(0, 2)); - tiles1[13].SetOffset(Vector(1, 2)); - tiles1[14].SetOffset(Vector(1, 2)); - tiles1[15].SetOffset(Vector(1, 2)); - - tiles1[16].SetOffset(Vector(2, 1)); - tiles1[17].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles1[18].SetOffset(Vector(3, 0)); - tiles1[19].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles1[20].SetOffset(Vector(0, 3)); - tiles1[21].SetOffset(Vector(1, 3)); - tiles1[22].SetOffset(Vector(1, 3)); - tiles1[23].SetOffset(Vector(2, 3)); - - tiles1[24].SetOffset(Vector(2, 1)); - tiles1[25].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles1[26].SetOffset(Vector(3, 0)); - tiles1[27].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles1[28].SetOffset(Vector(0, 4)); - tiles1[29].SetOffset(Vector(1, 4)); - tiles1[30].SetOffset(Vector(1, 4)); - tiles1[31].SetOffset(Vector(2, 4)); - - tiles1[32].SetOffset(Vector(2, 1)); - tiles1[33].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles1[34].SetOffset(Vector(3, 0)); - tiles1[35].SetOffset(Vector(3, 0)); - tiles1[36].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles1[37].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles1[38].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles1[39].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - - tiles1[40].SetOffset(Vector(2, 1)); - tiles1[41].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles1[42].SetOffset(Vector(3, 0)); - tiles1[43].SetOffset(Vector(3, 0)); - tiles1[44].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles1[45].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles1[46].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles1[47].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - - tiles1[48].SetOffset(Vector(2, 1)); - tiles1[49].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles1[50].SetOffset(Vector(3, 0)); - tiles1[51].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles1[52].SetOffset(Vector(0, 0)); - tiles1[53].SetOffset(Vector(1, 0)); - tiles1[54].SetOffset(Vector(1, 0)); - tiles1[55].SetOffset(Vector(1, 0)); - - tiles1[56].SetOffset(Vector(2, 1)); - tiles1[57].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_WEST); - tiles1[58].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles1[59].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_EAST); - tiles1[60].SetOffset(Vector(0, 1)); - tiles1[61].SetOffset(Vector(1, 1)); - tiles1[62].SetOffset(Vector(1, 1)); - tiles1[63].SetOffset(Vector(1, 1)); - - Tile tiles2[64]; - - tiles2[ 0].SetOffset(Vector(2, 0)); - tiles2[ 1].SetOffset(Vector(2, 0)); - tiles2[ 2].SetOffset(Vector(2, 0)); - tiles2[ 3].SetOffset(Vector(2, 0)); - tiles2[ 4].SetOffset(Vector(2, 0)); - tiles2[ 5].SetOffset(Vector(2, 0)); - tiles2[ 6].SetOffset(Vector(2, 0)); - tiles2[ 7].SetOffset(Vector(2, 0)); - - tiles2[ 8].SetOffset(Vector(1, 2)); - tiles2[ 9].SetOffset(Vector(1, 2)); - tiles2[10].SetOffset(Vector(5, 3)); - tiles2[11].SetOffset(Vector(2, 0)); - tiles2[12].SetOffset(Vector(2, 0)); - tiles2[13].SetOffset(Vector(2, 0)); - tiles2[14].SetOffset(Vector(2, 0)); - tiles2[15].SetOffset(Vector(2, 0)); - - tiles2[16].SetOffset(Vector(3, 3)); - tiles2[17].SetOffset(Vector(0, 3)); - tiles2[18].SetOffset(Vector(0, 1)); - tiles2[19].SetOffset(Vector(2, 0)); - tiles2[20].SetOffset(Vector(2, 0)); - tiles2[21].SetOffset(Vector(2, 0)); - tiles2[22].SetOffset(Vector(2, 0)); - tiles2[23].SetOffset(Vector(2, 0)); - - tiles2[24].SetOffset(Vector(3, 4)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_EAST | Tile::BLOCK_WEST); - tiles2[25].SetOffset(Vector(0, 4)); - tiles2[26].SetOffset(Vector(0, 1)); - tiles2[27].SetOffset(Vector(2, 0)); - tiles2[28].SetOffset(Vector(2, 0)); - tiles2[29].SetOffset(Vector(2, 0)); - tiles2[30].SetOffset(Vector(2, 0)); - tiles2[31].SetOffset(Vector(2, 0)); - - tiles2[32].SetOffset(Vector(5, 0)); - tiles2[33].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_EAST); - tiles2[34].SetOffset(Vector(0, 1)); - tiles2[35].SetOffset(Vector(2, 0)); - tiles2[36].SetOffset(Vector(2, 0)); - tiles2[37].SetOffset(Vector(2, 0)); - tiles2[38].SetOffset(Vector(2, 0)); - tiles2[39].SetOffset(Vector(2, 0)); - - tiles2[40].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles2[41].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_EAST); - tiles2[42].SetOffset(Vector(0, 1)); - tiles2[43].SetOffset(Vector(2, 0)); - tiles2[44].SetOffset(Vector(2, 0)); - tiles2[45].SetOffset(Vector(2, 0)); - tiles2[46].SetOffset(Vector(2, 0)); - tiles2[47].SetOffset(Vector(2, 0)); - - tiles2[48].SetOffset(Vector(1, 0)); - tiles2[49].SetOffset(Vector(1, 0)); - tiles2[50].SetOffset(Vector(5, 4)); - tiles2[51].SetOffset(Vector(2, 0)); - tiles2[52].SetOffset(Vector(2, 0)); - tiles2[53].SetOffset(Vector(2, 0)); - tiles2[54].SetOffset(Vector(2, 0)); - tiles2[55].SetOffset(Vector(2, 0)); - - tiles2[56].SetOffset(Vector(2, 0)); - tiles2[57].SetOffset(Vector(2, 0)); - tiles2[58].SetOffset(Vector(2, 0)); - tiles2[59].SetOffset(Vector(2, 0)); - tiles2[60].SetOffset(Vector(2, 0)); - tiles2[61].SetOffset(Vector(2, 0)); - tiles2[62].SetOffset(Vector(2, 0)); - tiles2[63].SetOffset(Vector(2, 0)); - - Area areas1[2]; - areas1[0].SetTiles(tiles1, 64); - areas1[0].SetWidth(8); - areas1[1].SetTiles(tiles2, 64); - areas1[1].SetWidth(8); - - Trigger triggers1[1]; - triggers1[0].SetTilePosition(Vector(8, 3)); - - SDL_Surface *tilesetImg(IMG_Load("test-data/tileset.png")); - Sprite tileset(tilesetImg, tileSize, tileSize); - - Map map1; - map1.SetAreas(areas1, 2); - map1.SetTileset(&tileset); - map1.SetTriggers(triggers1, 1); - map1.SetWidth(2); - - Tile tiles3[64]; - - tiles3[ 0].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_WEST); - tiles3[ 1].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles3[ 2].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles3[ 3].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles3[ 4].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles3[ 5].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles3[ 6].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles3[ 7].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_EAST); - - tiles3[ 8].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_WEST); - tiles3[ 9].SetOffset(Vector(3, 0)); - tiles3[10].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles3[11].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles3[12].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles3[13].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles3[14].SetOffset(Vector(4, 0)); - tiles3[15].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_EAST | Tile::BLOCK_SOUTH); - - tiles3[16].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_WEST); - tiles3[17].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles3[18].SetOffset(Vector(0, 0)); - tiles3[19].SetOffset(Vector(1, 0)); - tiles3[20].SetOffset(Vector(1, 0)); - tiles3[21].SetOffset(Vector(3, 2)); - tiles3[22].SetOffset(Vector(4, 2)).SetFlags(Tile::BLOCK_EAST | Tile::BLOCK_SOUTH | Tile::BLOCK_WEST); - tiles3[23].SetOffset(Vector(5, 2)); - - tiles3[24].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_WEST); - tiles3[25].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles3[26].SetOffset(Vector(0, 1)); - tiles3[27].SetOffset(Vector(2, 0)); - tiles3[28].SetOffset(Vector(2, 0)); - tiles3[29].SetOffset(Vector(1, 2)); - tiles3[30].SetOffset(Vector(1, 2)); - tiles3[31].SetOffset(Vector(1, 2)); - - tiles3[32].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_WEST); - tiles3[33].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles3[34].SetOffset(Vector(0, 1)); - tiles3[35].SetOffset(Vector(2, 0)); - tiles3[36].SetOffset(Vector(2, 0)); - tiles3[37].SetOffset(Vector(2, 3)); - tiles3[38].SetOffset(Vector(3, 3)); - tiles3[39].SetOffset(Vector(0, 3)); - - tiles3[40].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_WEST); - tiles3[41].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles3[42].SetOffset(Vector(0, 1)); - tiles3[43].SetOffset(Vector(2, 0)); - tiles3[44].SetOffset(Vector(2, 0)); - tiles3[45].SetOffset(Vector(2, 4)); - tiles3[46].SetOffset(Vector(3, 4)); - tiles3[47].SetOffset(Vector(0, 4)); - - tiles3[48].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_WEST); - tiles3[49].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles3[50].SetOffset(Vector(0, 1)); - tiles3[51].SetOffset(Vector(2, 0)); - tiles3[52].SetOffset(Vector(2, 0)); - tiles3[53].SetOffset(Vector(4, 1)); - tiles3[54].SetOffset(Vector(5, 1)); - tiles3[55].SetOffset(Vector(3, 1)); - - tiles3[56].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_WEST); - tiles3[57].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST | Tile::BLOCK_SOUTH); - tiles3[58].SetOffset(Vector(0, 1)); - tiles3[59].SetOffset(Vector(2, 0)); - tiles3[60].SetOffset(Vector(2, 0)); - tiles3[61].SetOffset(Vector(2, 0)); - tiles3[62].SetOffset(Vector(2, 0)); - tiles3[63].SetOffset(Vector(2, 0)); - - Area areas2[1]; - areas2[0].SetTiles(tiles3, 64); - areas2[0].SetWidth(8); - - Trigger triggers2[1]; - triggers2[0].SetTilePosition(Vector(6, 2)); - - Map map2; - map2.SetAreas(areas2, 1); - map2.SetTileset(&tileset); - map2.SetTriggers(triggers2, 1); - map2.SetWidth(1); - - triggers1[0].map = &map2; - triggers1[0].target = Vector(6, 2); - - triggers2[0].map = &map1; - triggers2[0].target = Vector(8, 3); - - SimpleAnimation mapMaximAnimation(gameState.heroes[0].MapSprite(), (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapMaxim; - mapMaxim.SetAnimation(&mapMaximAnimation); - mapMaxim.Position() = Vector(64, 128); - mapMaxim.SpriteOffset() = Vector(0, -32); - - SimpleAnimation mapSelanAnimation(gameState.heroes[1].MapSprite(), (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapSelan; - mapSelan.SetAnimation(&mapSelanAnimation); - mapSelan.Position() = Vector(64, 128); - mapSelan.SpriteOffset() = Vector(0, -32); - mapSelan.SetFlags(Entity::FLAG_NONBLOCKING); - mapMaxim.AddFollower(&mapSelan); - - SimpleAnimation mapGuyAnimation(gameState.heroes[2].MapSprite(), (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapGuy; - mapGuy.SetAnimation(&mapGuyAnimation); - mapGuy.Position() = Vector(64, 128); - mapGuy.SpriteOffset() = Vector(0, -32); - mapGuy.SetFlags(Entity::FLAG_NONBLOCKING); - mapSelan.AddFollower(&mapGuy); - - SimpleAnimation mapDekarAnimation(gameState.heroes[3].MapSprite(), (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapDekar; - mapDekar.SetAnimation(&mapDekarAnimation); - mapDekar.Position() = Vector(64, 128); - mapDekar.SpriteOffset() = Vector(0, -32); - mapDekar.SetFlags(Entity::FLAG_NONBLOCKING); - mapGuy.AddFollower(&mapDekar); - - SDL_Surface *mapMonsterImg(IMG_Load("test-data/monster-map.png")); - Sprite mapMonsterSprite(mapMonsterImg, 32, 32); - SimpleAnimation mapMonsterAnimation(&mapMonsterSprite, 500, 2, 0, 0, true); - Entity mapMonster; - mapMonster.SetAnimation(&mapMonsterAnimation); - mapMonster.Position() = Vector(64, 32); - mapMonster.SetOrientation(Entity::ORIENTATION_SOUTH); - map1.SetEntities(&mapMonster, 1); + gameState.heroes[0].MapEntity().Position() = Vector(64, 128); + + gameState.heroes[1].MapEntity().Position() = Vector(64, 128); + gameState.heroes[1].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); + gameState.heroes[0].MapEntity().AddFollower(&gameState.heroes[1].MapEntity()); + + gameState.heroes[2].MapEntity().Position() = Vector(64, 128); + gameState.heroes[2].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); + gameState.heroes[1].MapEntity().AddFollower(&gameState.heroes[2].MapEntity()); + + gameState.heroes[3].MapEntity().Position() = Vector(64, 128); + gameState.heroes[3].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); + gameState.heroes[2].MapEntity().AddFollower(&gameState.heroes[3].MapEntity()); InitScreen screen(width, height); app::State *state(0); if (battle) { - BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, battleRes)); + BattleState *battleState(new BattleState(&gameConfig, bg, &monstersLayout)); battleState->AddMonster(monster); battleState->AddMonster(monster); battleState->AddMonster(monster); @@ -564,11 +302,10 @@ int main(int argc, char **argv) { battleState->AddHero(gameState.heroes[3]); state = battleState; } else { - MapState *mapState(new MapState(&map1)); + MapState *mapState(new MapState(&gameConfig, caster.GetMap("map1"))); - mapState->ControlEntity(&mapMaxim); + mapState->ControlEntity(&gameState.heroes[0].MapEntity()); mapState->SetWalkingSpeed(walkSpeed); - mapMonster.StartAnimation(*mapState); state = mapState; }