X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=40b38f1bb98dd6d3d3f71844cc428e66150aaff1;hb=7c43158af1abf38fa896a442cb3c6d8a5bc630e7;hp=a2cdae9da96f38112252ece108446c12c9153dc4;hpb=59c4aea0762cbc5f1bf74c5b1b35629408fb92af;p=l2e.git diff --git a/src/main.cpp b/src/main.cpp index a2cdae9..40b38f1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,11 +13,15 @@ #include "battle/Monster.h" #include "battle/PartyLayout.h" #include "battle/Resources.h" -#include "battle/Stats.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" #include "graphics/ComplexAnimation.h" #include "graphics/Font.h" @@ -31,6 +35,12 @@ #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 "map/Trigger.h" #include "sdl/InitImage.h" #include "sdl/InitScreen.h" #include "sdl/InitSDL.h" @@ -48,14 +58,17 @@ using app::Application; using app::Arguments; using app::Input; using battle::BattleState; -using battle::Hero; using battle::Monster; using battle::PartyLayout; -using battle::Stats; +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; using graphics::ComplexAnimation; using graphics::Font; @@ -69,6 +82,12 @@ 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 map::Trigger; using sdl::InitImage; using sdl::InitScreen; using sdl::InitSDL; @@ -84,7 +103,9 @@ int main(int argc, char **argv) { const int width = 800; const int height = 480; - const bool battle(false); + const float walkSpeed = 128.0f; + + bool battle(false); // std::srand(std::time(0)); @@ -92,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(); @@ -101,6 +123,7 @@ int main(int argc, char **argv) { Ikari::CreateTypeDescription(); Interpreter::CreateTypeDescriptions(); Item::CreateTypeDescription(); + Map::CreateTypeDescription(); graphics::MenuProperties::CreateTypeDescription(); Monster::CreateTypeDescription(); PartyLayout::CreateTypeDescription(); @@ -109,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); @@ -119,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())); @@ -139,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; } @@ -155,105 +189,146 @@ 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"); + gameState.heroes[1] = *caster.GetHero("selan"); + gameState.heroes[2] = *caster.GetHero("guy"); + gameState.heroes[3] = *caster.GetHero("dekar"); + + gameState.party[0] = &gameState.heroes[0]; + gameState.party[1] = &gameState.heroes[1]; + 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")); - Hero maxim(*caster.GetHero("maxim")); - Hero selan(*caster.GetHero("selan")); - Hero guy(*caster.GetHero("guy")); - Hero dekar(*caster.GetHero("dekar")); - - battle::Resources *battleRes(caster.GetBattleResources("battleResources")); - maxim.AddSpell(caster.GetSpell("resetSpell")); + gameState.heroes[0].AddSpell(caster.GetSpell("resetSpell")); Spell *strongSpell(caster.GetSpell("strongSpell")); - maxim.AddSpell(strongSpell); - selan.AddSpell(strongSpell); + gameState.heroes[0].AddSpell(strongSpell); + gameState.heroes[1].AddSpell(strongSpell); Spell *strongerSpell(caster.GetSpell("strongerSpell")); - maxim.AddSpell(strongerSpell); - selan.AddSpell(strongerSpell); + gameState.heroes[0].AddSpell(strongerSpell); + gameState.heroes[1].AddSpell(strongerSpell); Spell *championSpell(caster.GetSpell("championSpell")); - maxim.AddSpell(championSpell); - selan.AddSpell(championSpell); + gameState.heroes[0].AddSpell(championSpell); + gameState.heroes[1].AddSpell(championSpell); Spell *rallySpell(caster.GetSpell("rallySpell")); - maxim.AddSpell(rallySpell); - selan.AddSpell(rallySpell); - selan.AddSpell(caster.GetSpell("escapeSpell")); + gameState.heroes[0].AddSpell(rallySpell); + gameState.heroes[1].AddSpell(rallySpell); + gameState.heroes[1].AddSpell(caster.GetSpell("escapeSpell")); Spell *valorSpell(caster.GetSpell("valorSpell")); - maxim.AddSpell(valorSpell); - selan.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; - - 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")); + gameState.heroes[0].AddSpell(valorSpell); + gameState.heroes[1].AddSpell(valorSpell); + + 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")); + gameState.heroes[0].SetShield(caster.GetItem("holyShieldItem")); + gameState.heroes[0].SetHelmet(caster.GetItem("legendHelmItem")); + gameState.heroes[0].SetRing(caster.GetItem("sProRingItem")); + gameState.heroes[0].SetJewel(caster.GetItem("evilJewelItem")); + +// gameState.heroes[1].SetWeapon(cst.GetItem("zircoWhipItem")); + gameState.heroes[1].SetArmor(caster.GetItem("zirconPlateItem")); + gameState.heroes[1].SetShield(caster.GetItem("zircoGlovesItem")); + gameState.heroes[1].SetHelmet(caster.GetItem("holyCapItem")); + gameState.heroes[1].SetRing(caster.GetItem("ghostRingItem")); + gameState.heroes[1].SetJewel(caster.GetItem("eagleRockItem")); + +// gameState.heroes[2].SetWeapon(cst.GetItem("zircoAxItem")); + gameState.heroes[2].SetArmor(caster.GetItem("zirconArmorItem")); + gameState.heroes[2].SetShield(caster.GetItem("megaShieldItem")); + gameState.heroes[2].SetHelmet(caster.GetItem("zircoHelmetItem")); + gameState.heroes[2].SetRing(caster.GetItem("powerRingItem")); + gameState.heroes[2].SetJewel(caster.GetItem("evilJewelItem")); // NOTE: this is actually Artea equipment -// 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")); +// gameState.heroes[3].SetWeapon(cst.GetItem("lizardBlowItem")); + gameState.heroes[3].SetArmor(caster.GetItem("holyRobeItem")); + gameState.heroes[3].SetShield(caster.GetItem("zircoGlovesItem")); + gameState.heroes[3].SetHelmet(caster.GetItem("holyCapItem")); + gameState.heroes[3].SetRing(caster.GetItem("rocketRingItem")); + gameState.heroes[3].SetJewel(caster.GetItem("krakenRockItem")); + + 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); battleState->AddMonster(monster); - battleState->AddHero(maxim); - battleState->AddHero(selan); - battleState->AddHero(guy); - battleState->AddHero(dekar); - Application app(&screen, battleState); - app.Buttons().MapKey(SDLK_w, Input::PAD_UP); - app.Buttons().MapKey(SDLK_d, Input::PAD_RIGHT); - app.Buttons().MapKey(SDLK_s, Input::PAD_DOWN); - app.Buttons().MapKey(SDLK_a, Input::PAD_LEFT); - app.Buttons().MapKey(SDLK_RIGHT, Input::ACTION_A); - app.Buttons().MapKey(SDLK_DOWN, Input::ACTION_B); - app.Buttons().MapKey(SDLK_UP, Input::ACTION_X); - app.Buttons().MapKey(SDLK_LEFT, Input::ACTION_Y); - app.Buttons().MapKey(SDLK_RETURN, Input::START); - app.Buttons().MapKey(SDLK_SPACE, Input::SELECT); - app.Buttons().MapKey(SDLK_RSHIFT, Input::SHOULDER_RIGHT); - app.Buttons().MapKey(SDLK_LSHIFT, Input::SHOULDER_LEFT); - app.Run(); + battleState->AddHero(gameState.heroes[0]); + battleState->AddHero(gameState.heroes[1]); + battleState->AddHero(gameState.heroes[2]); + battleState->AddHero(gameState.heroes[3]); + state = battleState; } else { + MapState *mapState(new MapState(&gameConfig, caster.GetMap("map1"))); + mapState->ControlEntity(&gameState.heroes[0].MapEntity()); + mapState->SetWalkingSpeed(walkSpeed); + + 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); + app.Buttons().MapKey(SDLK_a, Input::PAD_LEFT); + app.Buttons().MapKey(SDLK_RIGHT, Input::ACTION_A); + app.Buttons().MapKey(SDLK_DOWN, Input::ACTION_B); + app.Buttons().MapKey(SDLK_UP, Input::ACTION_X); + app.Buttons().MapKey(SDLK_LEFT, Input::ACTION_Y); + app.Buttons().MapKey(SDLK_RETURN, Input::START); + app.Buttons().MapKey(SDLK_SPACE, Input::SELECT); + app.Buttons().MapKey(SDLK_RSHIFT, Input::SHOULDER_RIGHT); + app.Buttons().MapKey(SDLK_LSHIFT, Input::SHOULDER_LEFT); + app.Buttons().MapKey(SDLK_1, Input::DEBUG_1); + app.Buttons().MapKey(SDLK_2, Input::DEBUG_2); + app.Buttons().MapKey(SDLK_3, Input::DEBUG_3); + app.Buttons().MapKey(SDLK_4, Input::DEBUG_4); + app.Run(); + return 0; } catch (Parser::Error &e) { cerr << "parsing exception in file " << e.File() << " on line " << e.Line() << ": " << e.what() << endl;