diff --git a/common/main/cntrlcen.h b/common/main/cntrlcen.h index e30cb6c0f..fbeaea5da 100644 --- a/common/main/cntrlcen.h +++ b/common/main/cntrlcen.h @@ -105,7 +105,6 @@ static inline reactor &get_reactor_definition(int id) namespace dcx { //@@extern int N_controlcen_guns; -extern int Control_center_next_fire_time; extern int Control_center_present; extern objnum_t Dead_controlcen_object_num; } diff --git a/common/main/object.h b/common/main/object.h index 5f9e68d52..768e1c710 100644 --- a/common/main/object.h +++ b/common/main/object.h @@ -571,6 +571,7 @@ struct d_level_unique_control_center_state uint8_t Control_center_been_hit; int Countdown_seconds_left; fix Countdown_timer; + fix Control_center_next_fire_time; int Total_countdown_time; //in whole seconds }; diff --git a/similar/main/cntrlcen.cpp b/similar/main/cntrlcen.cpp index a50cf0949..02127b0d1 100644 --- a/similar/main/cntrlcen.cpp +++ b/similar/main/cntrlcen.cpp @@ -70,7 +70,6 @@ control_center_triggers ControlCenterTriggers; namespace dcx { player_visibility_state Control_center_player_been_seen; -int Control_center_next_fire_time; int Control_center_present; } @@ -365,7 +364,7 @@ void do_controlcen_frame(const vmobjptridx_t obj) auto dist_to_player = vm_vec_normalize_quick(vec_to_player); if (dist_to_player < F1_0*200) { Control_center_player_been_seen = player_is_visible_from_object(obj, obj->pos, 0, vec_to_player); - Control_center_next_fire_time = 0; + LevelUniqueControlCenterState.Control_center_next_fire_time = 0; } } @@ -397,7 +396,8 @@ void do_controlcen_frame(const vmobjptridx_t obj) else controlcen_death_silence = 0; - if ((Control_center_next_fire_time < 0) && !(controlcen_death_silence > F1_0*2)) { + if (LevelUniqueControlCenterState.Control_center_next_fire_time < 0 && !(controlcen_death_silence > F1_0*2)) + { auto &player_info = plrobj.ctype.player_info; const auto &player_pos = (player_info.powerup_flags & PLAYER_FLAGS_CLOAKED) ? Believed_player_pos : ConsoleObject->pos; best_gun_num = calc_best_gun( @@ -453,12 +453,11 @@ void do_controlcen_frame(const vmobjptridx_t obj) if (Game_mode & GM_MULTI) // slow down rate of fire in multi player delta_fire_time *= 2; - Control_center_next_fire_time = delta_fire_time; + LevelUniqueControlCenterState.Control_center_next_fire_time = delta_fire_time; } } else - Control_center_next_fire_time -= FrameTime; - + LevelUniqueControlCenterState.Control_center_next_fire_time -= FrameTime; } // ----------------------------------------------------------------------------- @@ -533,7 +532,7 @@ void init_controlcen_for_level(void) // Say the control center has not yet been hit. LevelUniqueControlCenterState.Control_center_been_hit = 0; Control_center_player_been_seen = player_visibility_state::no_line_of_sight; - Control_center_next_fire_time = 0; + LevelUniqueControlCenterState.Control_center_next_fire_time = 0; Dead_controlcen_object_num = object_none; } diff --git a/similar/main/state.cpp b/similar/main/state.cpp index 9aaaba3b0..52c32e74b 100644 --- a/similar/main/state.cpp +++ b/similar/main/state.cpp @@ -1237,7 +1237,7 @@ int state_save_all_sub(const char *filename, const char *desc) const auto cc = static_cast(Control_center_player_been_seen); PHYSFS_write(fp, &cc, sizeof(int), 1); } - PHYSFS_write(fp, &Control_center_next_fire_time, sizeof(int), 1); + PHYSFS_write(fp, &LevelUniqueControlCenterState.Control_center_next_fire_time, sizeof(int), 1); PHYSFS_write(fp, &Control_center_present, sizeof(int), 1); int dead_controlcen_object_num = Dead_controlcen_object_num == object_none ? -1 : Dead_controlcen_object_num; PHYSFS_write(fp, &dead_controlcen_object_num, sizeof(int), 1); @@ -1861,7 +1861,7 @@ int state_restore_all_sub(const d_level_shared_destructible_light_state &LevelSh const int cc = PHYSFSX_readSXE32(fp, swap); Control_center_player_been_seen = static_cast(cc); } - Control_center_next_fire_time = PHYSFSX_readSXE32(fp, swap); + LevelUniqueControlCenterState.Control_center_next_fire_time = PHYSFSX_readSXE32(fp, swap); Control_center_present = PHYSFSX_readSXE32(fp, swap); Dead_controlcen_object_num = PHYSFSX_readSXE32(fp, swap); if (LevelUniqueControlCenterState.Control_center_destroyed)