]> git.localhorst.tv Git - l2e.git/blobdiff - src/main.cpp
split headers off of ikaris, items, and spells
[l2e.git] / src / main.cpp
index 0fce8fe511640d4e9f3fdb7fa9feceaa224e7e1a..4280985185a5e8e144aa6f46d855c463dcf635d1 100644 (file)
@@ -5,6 +5,190 @@
  *      Author: holy
  */
 
+#include "app/Application.h"
+#include "app/Input.h"
+#include "battle/BattleState.h"
+#include "battle/Hero.h"
+#include "battle/Monster.h"
+#include "battle/PartyLayout.h"
+#include "battle/Resources.h"
+#include "battle/Stats.h"
+#include "common/Ikari.h"
+#include "common/Inventory.h"
+#include "common/Item.h"
+#include "common/Spell.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 "loader/Interpreter.h"
+#include "loader/ParsedSource.h"
+#include "loader/Parser.h"
+#include "sdl/InitImage.h"
+#include "sdl/InitScreen.h"
+#include "sdl/InitSDL.h"
+
+#include <cstdlib>
+#include <ctime>
+#include <exception>
+#include <iostream>
+#include <SDL.h>
+#include <SDL_image.h>
+
+using app::Application;
+using app::Input;
+using battle::BattleState;
+using battle::Hero;
+using battle::Monster;
+using battle::PartyLayout;
+using battle::Stats;
+using common::Ikari;
+using common::Inventory;
+using common::Item;
+using common::Spell;
+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 loader::Interpreter;
+using loader::ParsedSource;
+using loader::Parser;
+using sdl::InitImage;
+using sdl::InitScreen;
+using sdl::InitSDL;
+
+using std::cerr;
+using std::cout;
+using std::endl;
+using std::exception;
+
 int main(int argc, char **argv) {
-       return 0;
+       const int width = 800;
+       const int height = 480;
+
+//     std::srand(std::time(0));
+
+       try {
+               InitSDL sdl;
+               InitImage image(IMG_INIT_PNG);
+
+               ParsedSource source;
+               Parser("test-data/test.l2s", source).Parse();
+               Parser("test-data/ikaris.l2s", source).Parse();
+               Parser("test-data/items.l2s", source).Parse();
+               Parser("test-data/spells.l2s", source).Parse();
+               Interpreter intp(source);
+               intp.ReadSource();
+
+               InitScreen screen(width, height);
+
+               // temporary test data
+               SDL_Surface *bg(IMG_Load("test-data/battle-bg.png"));
+               PartyLayout monstersLayout(*intp.GetPartyLayout("monstersLayout"));
+               PartyLayout heroesLayout(*intp.GetPartyLayout("heroesLayout"));
+
+               Monster monster(*intp.GetMonster("lizard"));
+               Hero maxim(*intp.GetHero("maxim"));
+               Hero selan(*intp.GetHero("selan"));
+               Hero guy(*intp.GetHero("guy"));
+               Hero dekar(*intp.GetHero("dekar"));
+
+               battle::Resources *battleRes(intp.GetBattleResources("battleResources"));
+
+               maxim.AddSpell(intp.GetSpell("resetSpell"));
+               Spell *strongSpell(intp.GetSpell("strongSpell"));
+               maxim.AddSpell(strongSpell);
+               selan.AddSpell(strongSpell);
+               Spell *strongerSpell(intp.GetSpell("strongerSpell"));
+               maxim.AddSpell(strongerSpell);
+               selan.AddSpell(strongerSpell);
+               Spell *championSpell(intp.GetSpell("championSpell"));
+               maxim.AddSpell(championSpell);
+               selan.AddSpell(championSpell);
+               Spell *rallySpell(intp.GetSpell("rallySpell"));
+               maxim.AddSpell(rallySpell);
+               selan.AddSpell(rallySpell);
+               selan.AddSpell(intp.GetSpell("escapeSpell"));
+               Spell *valorSpell(intp.GetSpell("valorSpell"));
+               maxim.AddSpell(valorSpell);
+               selan.AddSpell(valorSpell);
+
+               Inventory inventory;
+               inventory.Add(intp.GetItem("antidoteItem"), 9);
+               inventory.Add(intp.GetItem("magicJarItem"), 4);
+               inventory.Add(intp.GetItem("hiPotionItem"), 4);
+               inventory.Add(intp.GetItem("powerPotionItem"), 4);
+               inventory.Add(intp.GetItem("escapeItem"), 2);
+               inventory.Add(intp.GetItem("sleepBallItem"), 1);
+               battleRes->inventory = &inventory;
+
+               maxim.SetWeapon(intp.GetItem("zircoSwordItem"));
+               maxim.SetArmor(intp.GetItem("zirconArmorItem"));
+               maxim.SetShield(intp.GetItem("holyShieldItem"));
+               maxim.SetHelmet(intp.GetItem("legendHelmItem"));
+               maxim.SetRing(intp.GetItem("sProRingItem"));
+               maxim.SetJewel(intp.GetItem("evilJewelItem"));
+
+//             selan.SetWeapon(intp.GetItem("zircoWhipItem"));
+               selan.SetArmor(intp.GetItem("zirconPlateItem"));
+               selan.SetShield(intp.GetItem("zircoGlovesItem"));
+               selan.SetHelmet(intp.GetItem("holyCapItem"));
+               selan.SetRing(intp.GetItem("ghostRingItem"));
+               selan.SetJewel(intp.GetItem("eagleRockItem"));
+
+//             guy.SetWeapon(intp.GetItem("zircoAxItem"));
+               guy.SetArmor(intp.GetItem("zirconArmorItem"));
+               guy.SetShield(intp.GetItem("megaShieldItem"));
+               guy.SetHelmet(intp.GetItem("zircoHelmetItem"));
+               guy.SetRing(intp.GetItem("powerRingItem"));
+               guy.SetJewel(intp.GetItem("evilJewelItem"));
+
+               // NOTE: this is actually Artea equipment
+//             dekar.SetWeapon(intp.GetItem("lizardBlowItem"));
+               dekar.SetArmor(intp.GetItem("holyRobeItem"));
+               dekar.SetShield(intp.GetItem("zircoGlovesItem"));
+               dekar.SetHelmet(intp.GetItem("holyCapItem"));
+               dekar.SetRing(intp.GetItem("rocketRingItem"));
+               dekar.SetJewel(intp.GetItem("krakenRockItem"));
+
+               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.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();
+
+               return 0;
+       } catch (Parser::Error &e) {
+               cerr << "parsing exception in file " << e.File() << " on line " << e.Line() << ": " << e.what() << endl;
+               return 1;
+       } catch (exception &e) {
+               cerr << "exception in main(): " << e.what() << endl;
+               return 1;
+       }
 }