X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=73a9f16fff877eb6ddc013e6cd3b2b4f7e2169ee;hb=8c8061a4f8b88410d6d93c039afe6affc4b69cf2;hp=69b4e870b40aadbec2c059130ff1b39f74fb9b9a;hpb=9429393ba3d875a12049dc9efeb4720fd9583e23;p=l2e.git diff --git a/src/main.cpp b/src/main.cpp index 69b4e87..73a9f16 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,28 +1,25 @@ -/* - * main.cpp - * - * Created on: Aug 1, 2012 - * Author: holy - */ - +#include "keys.h" #include "app/Application.h" #include "app/Arguments.h" #include "app/Input.h" #include "battle/BattleState.h" +#include "battle/Capsule.h" #include "battle/Hero.h" #include "battle/Monster.h" #include "battle/PartyLayout.h" #include "battle/Resources.h" +#include "common/Capsule.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/LevelUp.h" #include "common/Script.h" #include "common/Spell.h" #include "common/Stats.h" -#include "geometry/Vector.h" +#include "graphics/CharSelect.h" #include "graphics/ComplexAnimation.h" #include "graphics/Font.h" #include "graphics/Frame.h" @@ -32,7 +29,9 @@ #include "graphics/Sprite.h" #include "graphics/Texture.h" #include "loader/Caster.h" +#include "loader/Compiler.h" #include "loader/Interpreter.h" +#include "loader/Loader.h" #include "loader/ParsedSource.h" #include "loader/Parser.h" #include "loader/TypeDescription.h" @@ -42,6 +41,8 @@ #include "map/MapState.h" #include "map/Tile.h" #include "map/Trigger.h" +#include "math/Fixed.h" +#include "math/Vector.h" #include "menu/Resources.h" #include "sdl/InitImage.h" #include "sdl/InitScreen.h" @@ -62,18 +63,23 @@ using app::Input; using battle::BattleState; using battle::Monster; using battle::PartyLayout; +using common::Capsule; using common::GameConfig; using common::GameState; +using common::Hero; using common::Spell; -using geometry::Vector; using graphics::Texture; using loader::Caster; +using loader::Compiler; using loader::Interpreter; +using loader::Loader; using loader::ParsedSource; using loader::Parser; using loader::TypeDescription; using map::Entity; using map::MapState; +using math::Fixed; +using math::Vector; using sdl::InitImage; using sdl::InitScreen; using sdl::InitSDL; @@ -89,7 +95,7 @@ int main(int argc, char **argv) { const int width = 512; const int height = 448; - const float walkSpeed = 128.0f; + const Fixed<8> walkSpeed = Fixed<8>(1, 8); bool battle(false); @@ -105,14 +111,17 @@ int main(int argc, char **argv) { battle::Monster::CreateTypeDescription(); battle::PartyLayout::CreateTypeDescription(); + common::Capsule::CreateTypeDescription(); common::Hero::CreateTypeDescription(); common::Ikari::CreateTypeDescription(); common::Item::CreateTypeDescription(); + common::LevelUp::CreateTypeDescription(); common::Stats::CreateTypeDescription(); common::Spell::CreateTypeDescription(); common::TargetingMode::CreateTypeDescription(); graphics::Animation::CreateTypeDescription(); + graphics::CharSelect::CreateTypeDescription(); graphics::ComplexAnimation::CreateTypeDescription(); graphics::Font::CreateTypeDescription(); graphics::Frame::CreateTypeDescription(); @@ -120,6 +129,7 @@ int main(int argc, char **argv) { graphics::MenuProperties::CreateTypeDescription(); graphics::SimpleAnimation::CreateTypeDescription(); graphics::Sprite::CreateTypeDescription(); + graphics::Texture::CreateTypeDescription(); map::Area::CreateTypeDescription(); map::Entity::CreateTypeDescription(); @@ -127,15 +137,32 @@ int main(int argc, char **argv) { map::Tile::CreateTypeDescription(); map::Trigger::CreateTypeDescription(); + menu::Resources::CreateTypeDescription(); + Arguments args; args.Read(argc, argv); ParsedSource source; + Loader ld; + for (vector::const_iterator i(args.Infiles().begin()), end(args.Infiles().end()); i != end; ++i) { - Parser(*i, source).Parse(); + string filePath(*i); + switch (filePath[filePath.size() - 1]) { + case 'o': + ld.Load(filePath); + break; + case 's': + Parser(filePath, source).Parse(); + break; + default: + throw std::runtime_error("don't know what to do with " + filePath); + } } + Interpreter intp(source); + intp.ReadSource(); + switch (args.GetRunLevel()) { case Arguments::WRITE: { @@ -146,6 +173,15 @@ int main(int argc, char **argv) { source.WriteHeader(outstream); break; } + case 'o': { + std::fstream outstream(args.OutfilePath(), std::ios_base::out|std::ios_base::trunc); + outstream.flush(); + outstream.close(); + outstream.open(args.OutfilePath()); + outstream.exceptions(std::ios_base::badbit|std::ios_base::failbit); + Compiler(intp).Write(outstream); + break; + } default: { throw std::runtime_error(string("don't know how to write file ") + args.OutfilePath()); } @@ -168,12 +204,9 @@ int main(int argc, char **argv) { break; } - Interpreter intp(source); - intp.ReadSource(); - if (intp.PostponedDefinitions().size() > 0) { for (vector::const_iterator i(intp.PostponedDefinitions().begin()), end(intp.PostponedDefinitions().end()); i != end; ++i) { - std::cerr << "missing definition of " << TypeDescription::Get(i->linkedType).TypeName() << " " << i->identifier << std::endl; + std::cerr << "missing definition of " << TypeDescription::Get(i->type).TypeName() << " " << i->identifier << std::endl; } return 3; } @@ -193,10 +226,18 @@ int main(int argc, char **argv) { gameState.party[3] = &gameState.heroes[3]; gameState.partySize = 4; + gameState.capsules[1] = *caster.GetCapsule("flash"); + gameState.capsules[1].UpgradeClass(); + gameState.capsules[1].UpgradeClass(); + gameState.capsules[1].UpgradeClass(); + gameState.capsules[1].UpgradeClass(); + gameState.capsule = 1; + GameConfig gameConfig; gameConfig.state = &gameState; gameConfig.heroesLayout = caster.GetPartyLayout("heroesLayout"); gameConfig.battleResources = caster.GetBattleResources("battleResources"); + gameConfig.menuResources = caster.GetMenuResources("menuResources"); // temporary test data SDL_Surface *bg(IMG_Load("test-data/battle-bg.png")); @@ -222,124 +263,65 @@ int main(int argc, char **argv) { gameState.heroes[0].AddSpell(valorSpell); gameState.heroes[1].AddSpell(valorSpell); + gameState.inventory.Add(caster.GetItem("zirconPlateItem"), 32); + gameState.inventory.Add(caster.GetItem("holyFruitItem")); + gameState.inventory.Add(caster.GetItem("darkFruitItem")); gameState.inventory.Add(caster.GetItem("antidoteItem"), 9); + gameState.inventory.Add(caster.GetItem("powerRingItem")); gameState.inventory.Add(caster.GetItem("magicJarItem"), 4); + gameState.inventory.Add(caster.GetItem("sProRingItem")); gameState.inventory.Add(caster.GetItem("hiPotionItem"), 4); + gameState.inventory.Add(caster.GetItem("powerRingItem")); gameState.inventory.Add(caster.GetItem("powerPotionItem"), 4); + gameState.inventory.Add(caster.GetItem("zircoSwordItem")); gameState.inventory.Add(caster.GetItem("escapeItem"), 2); + gameState.inventory.Add(caster.GetItem("zircoHelmetItem")); 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")); + gameState.inventory.Add(caster.GetItem("zirconPlateItem")); + + gameState.heroes[0].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("zircoSwordItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("zirconArmorItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("holyShieldItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("legendHelmItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_RING, caster.GetItem("sProRingItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("evilJewelItem")); + +// gameState.heroes[1].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("zircoWhipItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("zirconPlateItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("zircoGlovesItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("holyCapItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_RING, caster.GetItem("ghostRingItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("eagleRockItem")); + +// gameState.heroes[2].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("zircoAxItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("zirconArmorItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("megaShieldItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("zircoHelmetItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_RING, caster.GetItem("powerRingItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("evilJewelItem")); // NOTE: this is actually Artea equipment -// 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[3].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("lizardBlowItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("holyRobeItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("zircoGlovesItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("holyCapItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_RING, caster.GetItem("rocketRingItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("krakenRockItem")); - gameState.heroes[0].MapEntity().Position() = Vector(64, 128); + gameState.heroes[0].MapEntity().Position() = Vector >(64, 128); - gameState.heroes[1].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().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().Position() = Vector >(64, 128); gameState.heroes[3].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); gameState.heroes[2].MapEntity().AddFollower(&gameState.heroes[3].MapEntity()); - menu::Resources menuResources; - gameConfig.menuResources = &menuResources; - - Texture menubg; - menubg.SetSurface(IMG_Load("test-data/menubg.png")); - menubg.SetSize(Vector(64, 64)); - menuResources.menubg = &menubg; - - menuResources.statusFont = gameConfig.battleResources->normalFont; - - graphics::Sprite statusLabels(IMG_Load("test-data/status-labels.png"), 32, 16); - menuResources.statusLabels = &statusLabels; - - graphics::Frame statusFrame(IMG_Load("test-data/status-frame.png"), 32, 32, 32, 32); - menuResources.statusFrame = &statusFrame; - - graphics::Sprite menuFontSprite(IMG_Load("test-data/menu-font.png"), 16, 16); - graphics::Font menuFont(&menuFontSprite, 0, -2); - - menuResources.normalFont = &menuFont; - - graphics::Sprite menuCursor(IMG_Load("test-data/menu-cursor.png"), 32, 16); - - graphics::MenuProperties mainMenuProperties; - mainMenuProperties.cols = 2; - mainMenuProperties.rows = 4; - mainMenuProperties.charsPerEntry = 8; - mainMenuProperties.rowGap = 8; - mainMenuProperties.colGap = 32; - mainMenuProperties.cursor = &menuCursor; - mainMenuProperties.font = &menuFont; - mainMenuProperties.wrapX = true; - mainMenuProperties.wrapY = true; - menuResources.mainMenuProperties = &mainMenuProperties; - - menuResources.mainMenuItemText = "ITEM"; - menuResources.mainMenuSpellText = "SPELL"; - menuResources.mainMenuCapsuleText = "CAPSULE"; - menuResources.mainMenuEquipmentText = "EQUIP"; - menuResources.mainMenuStatusText = "STATUS"; - menuResources.mainMenuChangeText = "CHANGE"; - menuResources.mainMenuConfigText = "CONFIG"; - menuResources.mainMenuScenarioText = "SCENARIO"; - - menuResources.mainMenuTimeText = "TIME"; - menuResources.mainMenuGoldText = "GOLD"; - - graphics::Sprite heroCursor(IMG_Load("test-data/hero-cursor.png"), 64, 16); - menuResources.heroCursor = &heroCursor; - menuResources.heroCursorBlinkTime = 532; - - menuResources.noEquipmentText = "No equip"; - - graphics::Sprite shoulderNav(IMG_Load("test-data/shoulder-nav.png"), 160, 16); - menuResources.shoulderNav = &shoulderNav; - - menuResources.atpLabel = "ATP"; - menuResources.dfpLabel = "DFP"; - menuResources.strLabel = "STR"; - menuResources.aglLabel = "AGL"; - menuResources.intLabel = "INT"; - menuResources.gutLabel = "GUT"; - menuResources.mgrLabel = "MGR"; - - menuResources.ipLabel = "IP"; - menuResources.experienceLabel = "NOW EXP"; - menuResources.nextLevelLabel = "NEXT LEVEL"; - InitScreen screen(width, height); app::State *state(0); @@ -350,6 +332,7 @@ int main(int argc, char **argv) { battleState->AddMonster(monster); battleState->AddMonster(monster); battleState->AddMonster(monster); + battleState->SetCapsule(caster.GetCapsule("flash")); battleState->AddHero(gameState.heroes[0]); battleState->AddHero(gameState.heroes[1]); battleState->AddHero(gameState.heroes[2]); @@ -365,22 +348,7 @@ int main(int argc, char **argv) { } 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); + MapKeys(app.Buttons()); app.Run(); return 0;