Fix seismic duration sync
This commit is contained in:
parent
697c81e0c3
commit
5212daa4ad
|
@ -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();
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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<MULTI_SEISMIC>(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);
|
||||
}
|
||||
|
|
|
@ -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<fix>(GameTime64 - Seismic_disturbance_end_time);
|
||||
fc = abs(delta_time - Level_shake_duration / 2);
|
||||
fc /= F1_0/16;
|
||||
if (fc > 16)
|
||||
fc = 16;
|
||||
|
|
Loading…
Reference in a new issue