diff options
Diffstat (limited to 'engines/cine/various.cpp')
-rw-r--r-- | engines/cine/various.cpp | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp index 1998f4264b..ce60bd9108 100644 --- a/engines/cine/various.cpp +++ b/engines/cine/various.cpp @@ -1006,7 +1006,51 @@ uint16 executePlayerInput() { var_2 = 0; } - if (egoMovedWithKeyboard && allowPlayerInput) { // use keyboard + if (g_cine->getGameType() == Cine::GType_OS) { // OS: Move using keyboard + // Handle possible horizontal movement by keyboard + if (xMoveKeyb != kKeybMoveCenterX && allowPlayerInput) { + if (xMoveKeyb == kKeybMoveRight) { // moving right + const int16 playerFrame = objectTable[1].frame; + const int16 playerX = objectTable[1].x; + // TODO: Check if multiplying _width by two here is correct or not + const int16 newX = animDataTable[playerFrame]._width * 2 + playerX + 8; + globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = newX; + } else { // moving left + const int16 playerX = objectTable[1].x; + const int16 newX = playerX - 8; + globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = newX; + } + + // Restrain horizontal position to range 0-319 + if (globalVars[VAR_MOUSE_X_POS] < 0) { + globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = 0; + } else if (globalVars[VAR_MOUSE_X_POS] > 319) { + globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = 319; + } + } + + // Handle possible vertical movement by keyboard + if (yMoveKeyb != kKeybMoveCenterY && allowPlayerInput) { + if (yMoveKeyb == kKeybMoveDown) { // moving down + const int16 playerFrame = objectTable[1].frame; + const int16 playerY = objectTable[1].y; + // TODO: Check if multiplying _height by two here is correct or not + const int16 newY = animDataTable[playerFrame]._height * 2 + playerY - 1; + globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = newY; + } else { // moving up + const int16 playerY = objectTable[1].y; + const int16 newY = playerY - 8; + globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = newY; + } + + // Restrain vertical position to range 0-199 + if (globalVars[VAR_MOUSE_Y_POS] < 0) { + globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = 0; + } else if (globalVars[VAR_MOUSE_Y_POS] > 199) { + globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = 199; + } + } + } else if (egoMovedWithKeyboard && allowPlayerInput) { // FW: Move using keyboard egoMovedWithKeyboard = false; switch (globalVars[VAR_MOUSE_X_MODE]) { @@ -1061,7 +1105,9 @@ uint16 executePlayerInput() { } bgVar0 = var_5E; - } else { // don't use keyboard for move -> shortcuts to commands + } + + if (g_cine->getGameType() == Cine::GType_OS || !(egoMovedWithKeyboard && allowPlayerInput)) { getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); switch (var_2 - 59) { |