From 9689a7f7d24620a640baf9aa8071ccbbde7185c8 Mon Sep 17 00:00:00 2001 From: Kp Date: Thu, 15 Aug 2019 01:34:22 +0000 Subject: [PATCH] Move Base_control_center_explosion_time to d_level_shared_control_center_state --- common/main/cntrlcen.h | 8 +++++++- similar/main/cntrlcen.cpp | 3 ++- similar/main/gamesave.cpp | 6 +++--- similar/main/mglobal.cpp | 4 ++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/common/main/cntrlcen.h b/common/main/cntrlcen.h index 6b6864bc0..7cbcb5864 100644 --- a/common/main/cntrlcen.h +++ b/common/main/cntrlcen.h @@ -71,8 +71,14 @@ constexpr std::integral_constant Num_reactors{}; constexpr std::integral_constant MAX_REACTORS{}; #define DEFAULT_CONTROL_CENTER_EXPLOSION_TIME 30 // Note: Usually uses Alan_pavlish_reactor_times, but can be overridden in editor. +struct d_level_shared_control_center_state +{ + int Base_control_center_explosion_time; // how long to blow up on insane +}; + +extern d_level_shared_control_center_state LevelSharedControlCenterState; + extern unsigned Num_reactors; -extern int Base_control_center_explosion_time; // how long to blow up on insane extern int Reactor_strength; /* diff --git a/similar/main/cntrlcen.cpp b/similar/main/cntrlcen.cpp index 5f5a9888e..a6736c484 100644 --- a/similar/main/cntrlcen.cpp +++ b/similar/main/cntrlcen.cpp @@ -59,7 +59,6 @@ array Reactors; #if defined(DXX_BUILD_DESCENT_II) unsigned Num_reactors; //how long to blow up on insane -int Base_control_center_explosion_time=DEFAULT_CONTROL_CENTER_EXPLOSION_TIME; int Reactor_strength=-1; //-1 mean not set by designer #endif } @@ -291,6 +290,7 @@ void do_controlcen_destroyed_stuff(const imobjptridx_t objp) if (Current_level_num < 0) PHYSFS_delete(SECRETC_FILENAME); + const auto Base_control_center_explosion_time = LevelSharedControlCenterState.Base_control_center_explosion_time; if (Base_control_center_explosion_time != DEFAULT_CONTROL_CENTER_EXPLOSION_TIME) Total_countdown_time = Base_control_center_explosion_time + Base_control_center_explosion_time * (NDL-Difficulty_level-1)/2; else if (!EMULATING_D1) @@ -524,6 +524,7 @@ void special_reactor_stuff() { auto &LevelUniqueControlCenterState = LevelUniqueObjectState.ControlCenterState; if (LevelUniqueControlCenterState.Control_center_destroyed) { + const auto Base_control_center_explosion_time = LevelSharedControlCenterState.Base_control_center_explosion_time; LevelUniqueControlCenterState.Countdown_timer += i2f(Base_control_center_explosion_time + (NDL - 1 - GameUniqueState.Difficulty_level) * Base_control_center_explosion_time / (NDL - 1)); LevelUniqueControlCenterState.Total_countdown_time = f2i(LevelUniqueControlCenterState.Countdown_timer) + 2; // Will prevent "Self destruct sequence activated" message from replaying. } diff --git a/similar/main/gamesave.cpp b/similar/main/gamesave.cpp index 0fb9f6589..e548511b2 100644 --- a/similar/main/gamesave.cpp +++ b/similar/main/gamesave.cpp @@ -1329,9 +1329,9 @@ int load_level( strcpy(Current_level_palette.next().data(), DEFAULT_LEVEL_PALETTE); if (Gamesave_current_version >= 3) - Base_control_center_explosion_time = PHYSFSX_readInt(LoadFile); + LevelSharedControlCenterState.Base_control_center_explosion_time = PHYSFSX_readInt(LoadFile); else - Base_control_center_explosion_time = DEFAULT_CONTROL_CENTER_EXPLOSION_TIME; + LevelSharedControlCenterState.Base_control_center_explosion_time = DEFAULT_CONTROL_CENTER_EXPLOSION_TIME; if (Gamesave_current_version >= 4) Reactor_strength = PHYSFSX_readInt(LoadFile); @@ -1871,7 +1871,7 @@ static int save_level_sub( PHYSFSX_printf(SaveFile, "%s\n", static_cast(Current_level_palette)); if (Gamesave_current_version >= 3) - PHYSFS_writeSLE32(SaveFile, Base_control_center_explosion_time); + PHYSFS_writeSLE32(SaveFile, LevelSharedControlCenterState.Base_control_center_explosion_time); if (Gamesave_current_version >= 4) PHYSFS_writeSLE32(SaveFile, Reactor_strength); diff --git a/similar/main/mglobal.cpp b/similar/main/mglobal.cpp index 1107d7f9b..37ac93e76 100644 --- a/similar/main/mglobal.cpp +++ b/similar/main/mglobal.cpp @@ -27,6 +27,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "vecmat.h" #include "inferno.h" #include "lighting.h" +#include "cntrlcen.h" #include "effects.h" #include "fuelcen.h" #include "segment.h" @@ -118,6 +119,9 @@ valptridx::array_managed_type::array_managed_type() namespace dsx { d_game_unique_state GameUniqueState; d_level_shared_boss_state LevelSharedBossState; +#if defined(DXX_BUILD_DESCENT_II) +d_level_shared_control_center_state LevelSharedControlCenterState; +#endif d_level_unique_effects_clip_state LevelUniqueEffectsClipState; d_level_shared_segment_state LevelSharedSegmentState; d_level_unique_object_state LevelUniqueObjectState;