Merge pull request #22 from BjossiAlfreds/player-sounds

Fix for some player sound bugs
This commit is contained in:
Yamagi 2021-04-30 11:51:24 +02:00 committed by GitHub
commit 7dae34726f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 6 deletions

View File

@ -1164,7 +1164,7 @@ struct edict_s
int dmg; int dmg;
int radius_dmg; int radius_dmg;
float dmg_radius; float dmg_radius;
int sounds; //make this a spawntemp var? int sounds; // now also used for player death sound aggregation
int count; int count;
edict_t *chain; edict_t *chain;

View File

@ -610,8 +610,8 @@ void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damag
memset(self->client->pers.inventory, 0, sizeof(self->client->pers.inventory)); memset(self->client->pers.inventory, 0, sizeof(self->client->pers.inventory));
if (self->health < -40) if (self->health < -40)
{ // gib { // gib (play sound at end of server frame)
gi.sound (self, CHAN_BODY, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); self->sounds = gi.soundindex ("misc/udeath.wav");
for (n= 0; n < 4; n++) for (n= 0; n < 4; n++)
ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
ThrowClientHead (self, damage); ThrowClientHead (self, damage);
@ -647,7 +647,10 @@ void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damag
self->client->anim_end = FRAME_death308; self->client->anim_end = FRAME_death308;
break; break;
} }
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));
} }
} }

View File

@ -65,6 +65,13 @@ void P_DamageFeedback (edict_t *player)
return; 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; client = player->client;
// flash the backgrounds behind the status numbers // flash the backgrounds behind the status numbers
@ -116,7 +123,7 @@ void P_DamageFeedback (edict_t *player)
count = 10; // always make a visible effect count = 10; // always make a visible effect
// play an apropriate pain sound // play an apropriate pain sound
if ((level.time > player->pain_debounce_time) && !(player->flags & FL_GODMODE) && (client->invincible_framenum <= level.framenum)) if ((level.time > player->pain_debounce_time) && !(player->flags & FL_GODMODE) && (client->invincible_framenum <= level.framenum) && player->health > 0)
{ {
r = 1 + (rand()&1); r = 1 + (rand()&1);
player->pain_debounce_time = level.time + 0.7; player->pain_debounce_time = level.time + 0.7;
@ -787,7 +794,8 @@ void P_WorldEffects (void)
{ {
if (current_player->health > 0 if (current_player->health > 0
&& current_player->pain_debounce_time <= level.time && 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) if (rand()&1)
gi.sound (current_player, CHAN_VOICE, gi.soundindex("player/burn1.wav"), 1, ATTN_NORM, 0); gi.sound (current_player, CHAN_VOICE, gi.soundindex("player/burn1.wav"), 1, ATTN_NORM, 0);
@ -895,6 +903,9 @@ void G_SetClientEvent (edict_t *ent)
if (ent->s.event) if (ent->s.event)
return; return;
if (ent->health <= 0)
return;
if ( ent->groundentity && xyspeed > 225) if ( ent->groundentity && xyspeed > 225)
{ {
if ( (int)(current_client->bobtime+bobmove) != bobcycle ) if ( (int)(current_client->bobtime+bobmove) != bobcycle )