+static void HandleTileCursor(int dx, int dy, int button)
+{
+ if (!dx || !button)
+ ClearPlayerMouseAction();
+
+ if (!dx && !dy)
+ return;
+
+ if (button)
+ {
+ SetPlayerMouseAction(tile_cursor.x, tile_cursor.y,
+ (dx < 0 ? MB_LEFTBUTTON :
+ dx > 0 ? MB_RIGHTBUTTON : MB_RELEASED));
+ }
+ else if (!tile_cursor.moving)
+ {
+ int old_xpos = tile_cursor.xpos;
+ int old_ypos = tile_cursor.ypos;
+ int new_xpos = old_xpos;
+ int new_ypos = old_ypos;
+
+ if (IN_LEV_FIELD(old_xpos + dx, old_ypos))
+ new_xpos = old_xpos + dx;
+
+ if (IN_LEV_FIELD(old_xpos, old_ypos + dy))
+ new_ypos = old_ypos + dy;
+
+ SetTileCursorTargetXY(new_xpos, new_ypos);
+ }
+}
+
+static int HandleJoystickForAllPlayers(void)