From 23d6aec54bf3a549a5ac1e698e5f230126c8ecc1 Mon Sep 17 00:00:00 2001 From: Matthew Fioravante Date: Sat, 26 Jan 2019 21:57:22 -0500 Subject: [PATCH] Fix GetOnOffVehicle behavior * Allow GetOnOff commands in more situations - like RPG_RT * Fixes: #1429 --- src/game_player.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/game_player.cpp b/src/game_player.cpp index 83a49c8ef2d..698931a6478 100644 --- a/src/game_player.cpp +++ b/src/game_player.cpp @@ -431,9 +431,6 @@ void Game_Player::Refresh() { } bool Game_Player::GetOnOffVehicle() { - if (!IsMovable()) - return false; - if (InVehicle()) return GetOffVehicle(); return GetOnVehicle(); @@ -453,6 +450,16 @@ bool Game_Player::GetOnVehicle() { else return false; + auto* vehicle = Game_Map::GetVehicle(type); + + if (vehicle->IsAscendingOrDescending()) { + return false; + } + + if (type == Game_Vehicle::Airship && (IsMoving() || IsJumping())) { + return false; + } + data()->vehicle = type; data()->preboard_move_speed = GetMoveSpeed(); if (type != Game_Vehicle::Airship) { @@ -466,7 +473,6 @@ bool Game_Player::GetOnVehicle() { } } else { data()->aboard = true; - auto* vehicle = GetVehicle(); if (vehicle->IsMoveRouteOverwritten()) { vehicle->CancelMoveRoute(); } @@ -491,8 +497,13 @@ bool Game_Player::GetOffVehicle() { && !Game_Map::GetVehicle(Game_Vehicle::Ship)->IsInPosition(front_x, front_y)) return false; } + auto* vehicle = GetVehicle(); + + if (vehicle->IsAscendingOrDescending()) { + return false; + } - GetVehicle()->GetOff(); + vehicle->GetOff(); return true; }