diff --git a/common/main/multi.h b/common/main/multi.h index dbe5afee1..6f7b9cbb6 100644 --- a/common/main/multi.h +++ b/common/main/multi.h @@ -452,7 +452,7 @@ void multi_send_wall_status_specific (playernum_t pnum,int wallnum,ubyte type,ub void multi_send_light_specific (playernum_t pnum,segnum_t segnum,ubyte val); void multi_send_capture_bonus (playernum_t pnum); int multi_all_players_alive(); -void multi_send_seismic (fix64,fix64); +void multi_send_seismic(fix); void multi_send_drop_blobs(playernum_t); void multi_send_sound_function (char,char); void DropFlag(); diff --git a/common/main/multiinternal.h b/common/main/multiinternal.h index dc2a40bc0..04ed1e3fc 100644 --- a/common/main/multiinternal.h +++ b/common/main/multiinternal.h @@ -84,7 +84,7 @@ VALUE(MULTI_GUIDED , 3+sizeof(shortpos)) \ VALUE(MULTI_STOLEN_ITEMS , 11) \ VALUE(MULTI_WALL_STATUS , 6) /* send to new players */ \ - VALUE(MULTI_SEISMIC , 9) \ + VALUE(MULTI_SEISMIC , 5) \ VALUE(MULTI_LIGHT , 18) \ VALUE(MULTI_START_TRIGGER , 2) \ VALUE(MULTI_FLAGS , 6) \ diff --git a/common/main/weapon.h b/common/main/weapon.h index 984c44647..34baeac3b 100644 --- a/common/main/weapon.h +++ b/common/main/weapon.h @@ -358,7 +358,7 @@ static inline int weapon_index_is_player_bomb(unsigned id) return id == PROXIMITY_INDEX; } #elif defined(DXX_BUILD_DESCENT_II) -extern fix64 Seismic_disturbance_start_time, Seismic_disturbance_end_time; +extern fix64 Seismic_disturbance_end_time; int which_bomb(void); static inline int weapon_index_uses_vulcan_ammo(unsigned id) diff --git a/similar/main/multi.cpp b/similar/main/multi.cpp index 8c1a2dddf..96bf063c9 100644 --- a/similar/main/multi.cpp +++ b/similar/main/multi.cpp @@ -3837,19 +3837,16 @@ void multi_check_for_killgoal_winner () #if defined(DXX_BUILD_DESCENT_II) // Sync our seismic time with other players -void multi_send_seismic (fix64 t1,fix64 t2) +void multi_send_seismic(fix duration) { int count=1; - - PUT_INTEL_INT(multibuf+count, t1); count+=(sizeof(fix)); - PUT_INTEL_INT(multibuf+count, t2); count+=(sizeof(fix)); + PUT_INTEL_INT(&multibuf[count], duration); count += sizeof(duration); multi_send_data(multibuf, count, 2); } static void multi_do_seismic (const ubyte *buf) { - fix duration = GET_INTEL_INT(buf + 5); - Seismic_disturbance_start_time = GameTime64; + const fix duration = GET_INTEL_INT(&buf[1]); Seismic_disturbance_end_time = GameTime64 + duration; digi_play_sample (SOUND_SEISMIC_DISTURBANCE_START, F1_0); } diff --git a/similar/main/weapon.cpp b/similar/main/weapon.cpp index 0731e97dd..ef9666a64 100644 --- a/similar/main/weapon.cpp +++ b/similar/main/weapon.cpp @@ -945,48 +945,41 @@ void rock_the_mine_frame(void) // Hook in the rumble sound effect here. } -#define SEISMIC_DISTURBANCE_DURATION (F1_0*5) -fix64 Seismic_disturbance_start_time = 0, Seismic_disturbance_end_time; - -int Seismic_level=0; - +fix64 Seismic_disturbance_end_time; void init_seismic_disturbances(void) { - Seismic_disturbance_start_time = 0; Seismic_disturbance_end_time = 0; } // Return true if time to start a seismic disturbance. -static int start_seismic_disturbance(void) +static bool seismic_disturbance_active() { - int rval; - if (Level_shake_duration < 1) - return 0; + return false; + if (Seismic_disturbance_end_time && Seismic_disturbance_end_time < GameTime64) + return true; + + const fix level_shake_duration = Level_shake_duration; + bool rval; rval = (2 * fixmul(d_rand(), Level_shake_frequency)) < FrameTime; if (rval) { - Seismic_disturbance_start_time = GameTime64; - Seismic_disturbance_end_time = GameTime64 + Level_shake_duration; + Seismic_disturbance_end_time = GameTime64 + level_shake_duration; start_seismic_sound(); if (Game_mode & GM_MULTI) - multi_send_seismic (Seismic_disturbance_start_time,Seismic_disturbance_end_time); + multi_send_seismic(level_shake_duration); } - return rval; } static void seismic_disturbance_frame(void) { if (Level_shake_frequency) { - if (((Seismic_disturbance_start_time < GameTime64) && (Seismic_disturbance_end_time > GameTime64)) || start_seismic_disturbance()) { - fix delta_time; + if (seismic_disturbance_active()) { int fc, rx, rz; - - delta_time = GameTime64 - Seismic_disturbance_start_time; - - fc = abs(delta_time - (Seismic_disturbance_end_time - Seismic_disturbance_start_time)/2); + fix delta_time = static_cast(GameTime64 - Seismic_disturbance_end_time); + fc = abs(delta_time - Level_shake_duration / 2); fc /= F1_0/16; if (fc > 16) fc = 16;