From 14ef52c7c3413f8c61b50147dcd22f4ed7238078 Mon Sep 17 00:00:00 2001 From: Philipp Sehmisch Date: Sat, 1 Nov 2008 19:03:01 +0000 Subject: Magic implementation phase 1 and 2 (added netcode and a very crude gui for using special actions like magic) --- ChangeLog | 9 +++++++++ src/game.cpp | 19 ++++++++++++------- src/gui/menuwindow.cpp | 6 ++++++ src/gui/setup.cpp | 2 ++ src/localplayer.cpp | 13 +++++++++---- src/localplayer.h | 2 ++ src/net/gameserver/player.cpp | 7 +++++++ src/net/gameserver/player.h | 1 + src/net/protocol.h | 1 + 9 files changed, 49 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 63963641..9bb5a644 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-11-01 Philipp Sehmisch + + * src/game.cpp, src7gui/menuwindow.cpp, src/gui/setup.cpp, + src/gui/magic.cpp, src/gui/magic.h: Added very provisorical and + hackish magic gui. + * src/localplayer.cpp, src/localplayer.h, + src/net/gameserver/player.cpp, src/net/gameserver/player.h, + src/net/protocol.h: Added netcode for using special actions. + 2008-11-01 Bjørn Lindeijer * src/openglgraphics.h, src/openglgraphics.cpp: Made an option around diff --git a/src/game.cpp b/src/game.cpp index 80d5610f..690cf727 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -58,6 +58,7 @@ #include "gui/help.h" #include "gui/inventorywindow.h" #include "gui/itemshortcutwindow.h" +#include "gui/magic.h" #include "gui/menuwindow.h" #include "gui/minimap.h" #include "gui/ministatus.h" @@ -118,6 +119,7 @@ InventoryWindow *inventoryWindow; NpcListDialog *npcListDialog; NpcTextDialog *npcTextDialog; SkillDialog *skillDialog; +MagicDialog *magicDialog; //NewSkillDialog *newSkillWindow; Setup* setupWindow; Minimap *minimap; @@ -204,6 +206,7 @@ void createGuiWindows() npcTextDialog = new NpcTextDialog(); npcListDialog = new NpcListDialog(); skillDialog = new SkillDialog(); + magicDialog = new MagicDialog(); //newSkillWindow = new NewSkillDialog(); setupWindow = new Setup(); minimap = new Minimap(); @@ -252,6 +255,7 @@ void destroyGuiWindows() delete npcListDialog; delete npcTextDialog; delete skillDialog; + delete magicDialog; delete setupWindow; delete minimap; delete equipmentWindow; @@ -640,6 +644,7 @@ void Game::handleInput() statusWindow->setVisible(false); inventoryWindow->setVisible(false); skillDialog->setVisible(false); + magicDialog->setVisible(false); setupWindow->setVisible(false); equipmentWindow->setVisible(false); helpWindow->setVisible(false); @@ -796,19 +801,19 @@ void Game::handleInput() // First if player is pressing key for the direction he is already going if (direction == player_node->getWalkingDir()) - { + { player_node->setWalkingDir(direction); - } - // Else if he is pressing a key, and its different from what he has - // been pressing, stop (do not send this stop to the server) and + } + // Else if he is pressing a key, and its different from what he has + // been pressing, stop (do not send this stop to the server) and // start in the new direction - else if (direction && direction != player_node->getWalkingDir()) + else if (direction && direction != player_node->getWalkingDir()) { player_node->stopWalking(false); player_node->setWalkingDir(direction); } - // Else, he is not pressing a key, stop (sending to server) - else + // Else, he is not pressing a key, stop (sending to server) + else { player_node->stopWalking(true); } diff --git a/src/gui/menuwindow.cpp b/src/gui/menuwindow.cpp index 84340fc4..c3e572a7 100644 --- a/src/gui/menuwindow.cpp +++ b/src/gui/menuwindow.cpp @@ -36,6 +36,7 @@ extern Window *setupWindow; extern Window *inventoryWindow; extern Window *equipmentWindow; extern Window *skillDialog; +extern Window *magicDialog; extern Window *statusWindow; extern Window *guildWindow; extern Window *itemShortcutWindow; @@ -64,6 +65,7 @@ MenuWindow::MenuWindow(): N_("Equipment"), N_("Inventory"), N_("Skills"), + N_("Magic"), N_("Guilds"), N_("Shortcut"), N_("Setup"), @@ -110,6 +112,10 @@ void MenuWindowListener::action(const gcn::ActionEvent &event) { window = skillDialog; } + else if (event.getId() == "Magic") + { + window = magicDialog; + } else if (event.getId() == "Guilds") { window = guildWindow; diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index 53e7a9f1..b6b052bc 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -43,6 +43,7 @@ extern Window *inventoryWindow; extern Window *equipmentWindow; extern Window *helpWindow; extern Window *skillDialog; +extern Window *magicDialog; extern Window *guildWindow; Setup::Setup(): @@ -116,6 +117,7 @@ void Setup::action(const gcn::ActionEvent &event) equipmentWindow->resetToDefaultSize(); helpWindow->resetToDefaultSize(); skillDialog->resetToDefaultSize(); + magicDialog->resetToDefaultSize(); guildWindow->resetToDefaultSize(); } } diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 6c802c5c..30ad7b2e 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -280,7 +280,7 @@ void LocalPlayer::walk(unsigned char dir) if (dir & RIGHT) dx += 32; - + // Prevent skipping corners over colliding tiles if (dx && !mMap->getWalk(((int) pos.x + dx) / 32, (int) pos.y / 32, getWalkMask())) @@ -293,12 +293,12 @@ void LocalPlayer::walk(unsigned char dir) if (dx && dy && !mMap->getWalk((pos.x + dx) / 32, (pos.y + dy) / 32, getWalkMask())) dx = 16 - (int) pos.x % 32; - + // Checks our path up to 5 tiles, if a blocking tile is found // We go to the last good tile, and break out of the loop for (dScaler = 1; dScaler <= 10; dScaler++) { - if ( (dx || dy) && + if ( (dx || dy) && !mMap->getWalk( ((int) pos.x + (dx * dScaler)) / 32, ((int) pos.y + (dy * dScaler)) / 32, getWalkMask()) ) { @@ -306,7 +306,7 @@ void LocalPlayer::walk(unsigned char dir) break; } } - + if (dScaler >= 0) { setDestination((int) pos.x + (dx * dScaler), (int) pos.y + (dy * dScaler)); @@ -477,6 +477,11 @@ void LocalPlayer::attack() Net::GameServer::Player::attack(getSpriteDirection()); } +void LocalPlayer::useSpecial(int special) +{ + Net::GameServer::Player::useSpecial(special); +} + Being* LocalPlayer::getTarget() const { return mTarget; diff --git a/src/localplayer.h b/src/localplayer.h index b44ac14a..16b9715a 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -227,6 +227,8 @@ class LocalPlayer : public Player void attack(); + void useSpecial(int id); + Being* getTarget() const; /** diff --git a/src/net/gameserver/player.cpp b/src/net/gameserver/player.cpp index 28fd954a..79ada480 100644 --- a/src/net/gameserver/player.cpp +++ b/src/net/gameserver/player.cpp @@ -102,6 +102,13 @@ void Net::GameServer::Player::attack(int direction) Net::GameServer::connection->send(msg); } +void Net::GameServer::Player::useSpecial(int special) +{ + MessageOut msg(PGMSG_USE_SPECIAL); + msg.writeInt8(special); + Net::GameServer::connection->send(msg); +} + void Net::GameServer::Player::changeAction(Being::Action action) { MessageOut msg(PGMSG_ACTION_CHANGE); diff --git a/src/net/gameserver/player.h b/src/net/gameserver/player.h index fa8c1376..3eba8a13 100644 --- a/src/net/gameserver/player.h +++ b/src/net/gameserver/player.h @@ -51,6 +51,7 @@ namespace Net void unequip(int slot); void useItem(int slot); void attack(int direction); + void useSpecial(int special); void changeAction(Being::Action action); void talkToNPC(int id, bool restart); void selectFromNPC(int id, int choice); diff --git a/src/net/protocol.h b/src/net/protocol.h index abbad442..bbc7d2d2 100644 --- a/src/net/protocol.h +++ b/src/net/protocol.h @@ -104,6 +104,7 @@ enum { GPMSG_BEINGS_MOVE = 0x0280, // { W being id, B flags [, C position, B speed] [, W*2 destination] }* GPMSG_ITEMS = 0x0281, // { W item id, W*2 position }* PGMSG_ATTACK = 0x0290, // B direction + PGMSG_USE_SPECIAL = 0x0292, // B specialID GPMSG_BEING_ATTACK = 0x0291, // W being id PGMSG_SAY = 0x02A0, // S text GPMSG_SAY = 0x02A1, // W being id, S text -- cgit v1.2.3-70-g09d2