summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being.cpp6
-rw-r--r--src/game.cpp32
-rw-r--r--src/game.h1
-rw-r--r--src/graphics.cpp10
-rw-r--r--src/net/protocol.h21
5 files changed, 27 insertions, 43 deletions
diff --git a/src/being.cpp b/src/being.cpp
index 204065a5..c63c2bb2 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -279,14 +279,8 @@ void Being::nextStep()
y = newY;
action = WALK;
walk_time += speed / 10;
- if (this == player_node) {
- walk_status = 1;
- }
} else {
action = STAND;
- if (this == player_node) {
- walk_status = 0;
- }
}
frame = 0;
}
diff --git a/src/game.cpp b/src/game.cpp
index 1ec08e0c..7481ea9a 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -68,16 +68,6 @@ class DeatchNoticeListener : public gcn::ActionListener {
}
} deathNoticeListener;
-/**
- * Finite states machine to keep track of player walking status (2 steps
- * linear prediction)
- *
- * 0 = Standing
- * 1 = Walking without confirm packet
- * 2 = Walking with confirm
- */
-char walk_status = 0;
-
Uint32 refresh_time(Uint32 interval, void *param)
{
@@ -280,7 +270,7 @@ void do_input()
equipmentWindow->setVisible(!equipmentWindow->isVisible());
used = true;
}
- else if (keysym.sym == SDLK_b) {
+ else if (keysym.sym == SDLK_b) {
buddyWindow->setVisible(!buddyWindow->isVisible());
used = true;
}
@@ -332,7 +322,7 @@ void do_input()
case SE:
id = find_floor_item_by_cor(player_node->x+1, player_node->y+1);
break;
- default:
+ default:
break;
}
WFIFOW(0) = net_w_value(0x009f);
@@ -637,15 +627,13 @@ void do_parse()
}
break;
- // Success to walk request
- case 0x0087:
- if (walk_status == 1) {
- if ((unsigned int)(RFIFOL(2)) > (unsigned int)(server_tick)) {
- walk_status = 2;
- server_tick = RFIFOL(2);
- }
- }
+ case SMSG_WALK_RESPONSE:
+ // It is assumed by the client any request to walk actually
+ // succeeds on the server. The plan is to have a correction
+ // message when the server senses the client has the wrong
+ // idea.
break;
+
// Add new being / stop monster
case 0x0078:
being = findNode(RFIFOL(2));
@@ -819,7 +807,7 @@ void do_parse()
// TODO:
// Maybe also handle identified, etc
// handle zeny as well
-
+
tradeWindow->addItem(
tradeWindow->partnerItems->getFreeSlot(), RFIFOW(6),
false, RFIFOL(2), false);
@@ -977,7 +965,6 @@ void do_parse()
player_node->x = RFIFOW(18);
player_node->y = RFIFOW(20);
current_npc = 0;
- walk_status = 0;
// Send "map loaded"
WFIFOW(0) = net_w_value(0x007d);
WFIFOSET(2);
@@ -1108,7 +1095,6 @@ void do_parse()
being->frame = 0;
if (RFIFOB(26) == 2) {
being->action = SIT;
- walk_status = 0;
}
else if (RFIFOB(26) == 3) {
being->action = STAND;
diff --git a/src/game.h b/src/game.h
index 4d4fe7bf..4bbf1a2f 100644
--- a/src/game.h
+++ b/src/game.h
@@ -58,7 +58,6 @@
extern char map_path[480];
extern int fps, frame, current_npc;
-extern char walk_status;
extern volatile int tick_time;
extern int server_tick;
extern bool displayPathToMouse;
diff --git a/src/graphics.cpp b/src/graphics.cpp
index 5ff02aa8..7da5520c 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -130,10 +130,14 @@ void Graphics::drawImageRect(
void Graphics::updateScreen()
{
- // Draw mouse before flipping
int mouseX, mouseY;
- SDL_GetMouseState(&mouseX, &mouseY);
- mouseCursor->draw(screen, mouseX - 5, mouseY - 2);
+ Uint8 button = SDL_GetMouseState(&mouseX, &mouseY);
+
+ if (SDL_GetAppState() & SDL_APPMOUSEFOCUS || button & SDL_BUTTON(1))
+ {
+ // Draw mouse before flipping
+ mouseCursor->draw(screen, mouseX - 5, mouseY - 2);
+ }
if (useOpenGL) {
glFlush();
diff --git a/src/net/protocol.h b/src/net/protocol.h
index 9a755e63..14c21d59 100644
--- a/src/net/protocol.h
+++ b/src/net/protocol.h
@@ -25,16 +25,17 @@
#define _TMW_PROTOCOL_H
// Packets from server to client
-#define SMSG_LOGIN_SUCCESS 0x0073 // Logged in, starting location
-#define SMSG_REMOVE_BEING 0x0080 // Died, logged out, teleport, etc.
-#define SMSG_MOVE_BEING 0x007b // A nearby monster moves
-#define SMSG_PLAYER_UPDATE_1 0x01d8 //
-#define SMSG_PLAYER_UPDATE_2 0x01d9 //
-#define SMSG_MOVE_PLAYER_BEING 0x01da // A nearby player moves
-#define SMSG_CHANGE_BEING_LOOKS 0x00c3 //
-#define SMSG_BEING_CHAT 0x008d // A being talks
-#define SMSG_MY_BEING_CHAT 0x008e // My being talks
-#define SMSG_GM_CHAT 0x009a // GM announce
+#define SMSG_LOGIN_SUCCESS 0x0073 /**< Logged in, starting location */
+#define SMSG_REMOVE_BEING 0x0080 /**< Died, logged out, teleport ... */
+#define SMSG_MOVE_BEING 0x007b /**< A nearby monster moves */
+#define SMSG_PLAYER_UPDATE_1 0x01d8
+#define SMSG_PLAYER_UPDATE_2 0x01d9
+#define SMSG_MOVE_PLAYER_BEING 0x01da /**< A nearby player moves */
+#define SMSG_CHANGE_BEING_LOOKS 0x00c3
+#define SMSG_BEING_CHAT 0x008d /**< A being talks */
+#define SMSG_MY_BEING_CHAT 0x008e /**< My being talks */
+#define SMSG_GM_CHAT 0x009a /**< GM announce */
+#define SMSG_WALK_RESPONSE 0x0087
/** Packet length by id */