Move Base_control_center_explosion_time to d_level_shared_control_center_state

This commit is contained in:
Kp 2019-08-15 01:34:22 +00:00
parent e58daea0da
commit 9689a7f7d2
4 changed files with 16 additions and 5 deletions

View file

@ -71,8 +71,14 @@ constexpr std::integral_constant<unsigned, 1> Num_reactors{};
constexpr std::integral_constant<unsigned, 7> 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;
/*

View file

@ -59,7 +59,6 @@ array<reactor, MAX_REACTORS> 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.
}

View file

@ -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<const char *>(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);

View file

@ -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<managed_type>::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;