From 67d6419a729517ecd13647ff3eaf0da9f6450a2b Mon Sep 17 00:00:00 2001 From: Matthew Fioravante Date: Mon, 2 Dec 2019 23:40:16 -0500 Subject: [PATCH] Emulate legacy rm2k/rm2k3 move picture behavior MovePicture command doesn't change position of pictures with fixed_to_map chunk set. Used in Destined game See: #1741 --- src/game_picture.cpp | 14 +++++++++----- src/game_picture.h | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/game_picture.cpp b/src/game_picture.cpp index 748b61f69cf..1b92b938384 100644 --- a/src/game_picture.cpp +++ b/src/game_picture.cpp @@ -140,7 +140,7 @@ void Game_Picture::Show(const ShowParams& params) { data.name = params.name; data.use_transparent_color = params.use_transparent_color; data.fixed_to_map = params.fixed_to_map; - SetNonEffectParams(params); + SetNonEffectParams(params, true); data.effect_mode = params.effect_mode; if (data.effect_mode == RPG::SavePicture::Effect_none) { @@ -180,7 +180,9 @@ void Game_Picture::Show(const ShowParams& params) { void Game_Picture::Move(const MoveParams& params) { RPG::SavePicture& data = GetData(); - SetNonEffectParams(params); + const bool ignore_position = Player::IsLegacy() && data.fixed_to_map; + + SetNonEffectParams(params, !ignore_position); data.time_left = params.duration * DEFAULT_FPS / 10; // Note that data.effect_mode doesn't necessarily reflect the @@ -359,11 +361,13 @@ void Game_Picture::Update() { } } -void Game_Picture::SetNonEffectParams(const Params& params) { +void Game_Picture::SetNonEffectParams(const Params& params, bool set_positions) { RPG::SavePicture& data = GetData(); - data.finish_x = params.position_x; - data.finish_y = params.position_y; + if (set_positions) { + data.finish_x = params.position_x; + data.finish_y = params.position_y; + } data.finish_magnify = params.magnify; data.finish_top_trans = params.top_trans; data.finish_bot_trans = params.bottom_trans; diff --git a/src/game_picture.h b/src/game_picture.h index ddf6b5e5d8a..48be90e7a8e 100644 --- a/src/game_picture.h +++ b/src/game_picture.h @@ -81,7 +81,7 @@ class Game_Picture { int last_spritesheet_frame = 0; FileRequestBinding request_id; - void SetNonEffectParams(const Params& params); + void SetNonEffectParams(const Params& params, bool set_positions); void SyncCurrentToFinish(); void RequestPictureSprite(); void OnPictureSpriteReady(FileRequestResult*);