diff --git a/src/header/local.h b/src/header/local.h index a7f779c..ef3f102 100644 --- a/src/header/local.h +++ b/src/header/local.h @@ -1257,7 +1257,7 @@ struct edict_s int dmg; int radius_dmg; float dmg_radius; - int sounds; /* make this a spawntemp var? */ + int sounds; /* now also used for player death sound aggregation */ int count; edict_t *chain; diff --git a/src/player/client.c b/src/player/client.c index aa5b285..8479040 100644 --- a/src/player/client.c +++ b/src/player/client.c @@ -730,8 +730,8 @@ player_die(edict_t *self, edict_t *inflictor, edict_t *attacker, /* don't toss gibs if we got vaped by the nuke */ if (!(self->flags & FL_NOGIB)) { - /* gib */ - gi.sound(self, CHAN_BODY, gi.soundindex( "misc/udeath.wav"), 1, ATTN_NORM, 0); + /* gib (play sound at end of server frame) */ + self->sounds = gi.soundindex( "misc/udeath.wav"); /* more meaty gibs for your dollar! */ if ((deathmatch->value) && (self->health < -80)) @@ -788,7 +788,11 @@ player_die(edict_t *self, edict_t *inflictor, edict_t *attacker, } } - gi.sound(self, CHAN_VOICE, gi.soundindex(va("*death%i.wav", (rand() % 4) + 1)), 1, ATTN_NORM, 0); + /* play sound at end of server frame */ + if (!self->sounds) + { + self->sounds = gi.soundindex(va("*death%i.wav", (rand() % 4) + 1)); + } } } diff --git a/src/player/view.c b/src/player/view.c index 8b1755b..17b3235 100644 --- a/src/player/view.c +++ b/src/player/view.c @@ -63,6 +63,13 @@ P_DamageFeedback(edict_t *player) return; } + /* death/gib sound is now aggregated and played here */ + if (player->sounds) + { + gi.sound (player, CHAN_VOICE, player->sounds, 1, ATTN_NORM, 0); + player->sounds = 0; + } + client = player->client; /* flash the backgrounds behind the status numbers */ @@ -131,7 +138,8 @@ P_DamageFeedback(edict_t *player) /* play an apropriate pain sound */ if ((level.time > player->pain_debounce_time) && !(player->flags & FL_GODMODE) && - (client->invincible_framenum <= level.framenum)) + (client->invincible_framenum <= level.framenum) && + player->health > 0) { r = 1 + (rand() & 1); player->pain_debounce_time = level.time + 0.7; @@ -940,7 +948,8 @@ P_WorldEffects(void) { if ((current_player->health > 0) && (current_player->pain_debounce_time <= level.time) && - (current_client->invincible_framenum < level.framenum)) + (current_client->invincible_framenum < level.framenum) && + !(current_player->flags & FL_GODMODE)) { if (rand() & 1) { @@ -1089,6 +1098,11 @@ G_SetClientEvent(edict_t *ent) return; } + if (ent->health <= 0) + { + return; + } + if (g_footsteps->value == 1) { if (ent->groundentity && (xyspeed > 225)) @@ -1099,7 +1113,7 @@ G_SetClientEvent(edict_t *ent) } } } - if (g_footsteps->value == 2) + else if (g_footsteps->value == 2) { if ((int)(current_client->bobtime + bobmove) != bobcycle) {