Remember player's hostages_on_board
across secret level return
Returning from a secret level clears the player's `hostages_on_board` to 0 as part of initializing a "new" ship, but this is not desirable behavior. Copy the counter out before and back afterward. ``` Thread 1 "d2x-rebirth-edi" hit Hardware watchpoint 1: -location d2x::LevelUniqueObjectState.Objects._M_elems[0].ctype.player_info.mission.hostages_on_board Old value = 5 '\005' New value = 0 '\000' #0 d2x::init_player_stats_ship (GameTime64=<optimized out>, plrobj=...) at similar/main/gameseq.cpp:613 #1 d2x::init_player_stats_level (secret_flag=d2x::secret_restore::survived, plrobj=..., plr=...) at similar/main/gameseq.cpp:615 #2 d2x::StartNewLevelSub (level_num=level_num@entry=3, page_in_textures=page_in_textures@entry=1, secret_flag=secret_flag@entry=d2x::secret_restore::survived) at similar/main/gameseq.cpp:1901 #3 d2x::state_restore_all_sub (LevelSharedDestructibleLightState=..., secret=d2x::secret_restore::survived, filename=<optimized out>) at similar/main/state.cpp:1670 #4 d2x::state_restore_all (in_game=in_game@entry=1, secret=secret@entry=d2x::secret_restore::survived, filename_override=<optimized out>, blind=blind@entry=dcx::blind_save::no) at similar/main/state.cpp:1490 #5 d2x::ExitSecretLevel () ``` Reported-by: teratorn <https://github.com/dxx-rebirth/dxx-rebirth/issues/495>
This commit is contained in:
parent
0ea0a5ff31
commit
8ebb66c5c9
|
@ -1659,6 +1659,7 @@ int state_restore_all_sub(const d_level_shared_destructible_light_state &LevelSh
|
|||
relocated_player_data rpd;
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
player_info ret_pl_info;
|
||||
ret_pl_info.mission.hostages_on_board = get_local_plrobj().ctype.player_info.mission.hostages_on_board;
|
||||
#endif
|
||||
{
|
||||
#if DXX_USE_EDITOR
|
||||
|
@ -1676,7 +1677,9 @@ int state_restore_all_sub(const d_level_shared_destructible_light_state &LevelSh
|
|||
player dummy_player;
|
||||
state_read_player(fp, dummy_player, swap, pl_info, rpd);
|
||||
if (secret == secret_restore::survived) { // This means he didn't die, so he keeps what he got in the secret level.
|
||||
const auto hostages_on_board = ret_pl_info.mission.hostages_on_board;
|
||||
ret_pl_info = plrobj.ctype.player_info;
|
||||
ret_pl_info.mission.hostages_on_board = hostages_on_board;
|
||||
rpd.shields = plrobj.shields;
|
||||
plr.level = dummy_player.level;
|
||||
plr.time_level = dummy_player.time_level;
|
||||
|
|
Loading…
Reference in a new issue