New voices

- Following Oni's proposal. This means taunts are split into 2 types for offensive items and boost, 2 less hurt sounds, and there's another clip for using invincibility item (or whatever other powerful items we want to apply it to later; maybe size-down?)
- Win/lose quotes are played at full volume for the person who said it.
- A new sound effect plays when you hit someone with voices disabled.
- Reduce amount of RNG being called from the vanilla P_Play[whatever]Sound functions
- Added our skin sound constants to the dehacked list.
- Unrelated: finish line sfx plays in splitscreen
This commit is contained in:
TehRealSalt 2018-08-28 16:29:50 -04:00
parent ca8aceb059
commit 118d9caad1
7 changed files with 97 additions and 81 deletions

View File

@ -8038,6 +8038,18 @@ struct {
{"SKSSKID",SKSSKID},
{"SKSGASP",SKSGASP},
{"SKSJUMP",SKSJUMP},
// SRB2kart
{"SKSKWIN",SKSKWIN}, // Win quote
{"SKSKLOSE",SKSKLOSE}, // Lose quote
{"SKSKPAN1",SKSKPAN1}, // Pain
{"SKSKPAN2",SKSKPAN2},
{"SKSKATK1",SKSKATK1}, // Offense item taunt
{"SKSKATK2",SKSKATK2},
{"SKSKBST1",SKSKBST1}, // Boost item taunt
{"SKSKBST2",SKSKBST2},
{"SKSKSLOW",SKSKSLOW}, // Overtake taunt
{"SKSKHITM",SKSKHITM}, // Hit confirm taunt
{"SKSKPOWR",SKSKPOWR}, // Power item taunt
// 3D Floor/Fake Floor/FOF/whatever flags
{"FF_EXISTS",FF_EXISTS}, ///< Always set, to check for validity.

View File

@ -308,8 +308,8 @@ static void F_IntroDrawScene(void)
{
// Need to use M_Random otherwise it always uses the same sound
INT32 rskin = M_RandomKey(numskins);
UINT8 rtaunt = M_RandomKey(4);
sfxenum_t rsound = skins[rskin].soundsid[SKSPLTNT1+rtaunt];
UINT8 rtaunt = M_RandomKey(2);
sfxenum_t rsound = skins[rskin].soundsid[SKSKBST1+rtaunt];
S_StartSound(NULL, rsound);
}
background = W_CachePatchName("KARTKREW", PU_CACHE);

View File

@ -1360,32 +1360,36 @@ static void K_RegularVoiceTimers(player_t *player)
player->kartstuff[k_tauntvoices] = 4*TICRATE;
}
static void K_PlayTauntSound(mobj_t *source)
static void K_PlayAttackTaunt(mobj_t *source)
{
#if 1
sfxenum_t pick = P_RandomKey(4); // Gotta roll the RNG every time this is called for sync reasons
sfxenum_t pick = P_RandomKey(2); // Gotta roll the RNG every time this is called for sync reasons
boolean tasteful = (!source->player || !source->player->kartstuff[k_tauntvoices]);
if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2))
S_StartSound(source, sfx_taunt1+pick);
S_StartSound(source, sfx_kattk1+pick);
if (!tasteful)
return;
K_TauntVoiceTimers(source->player);
#else
if (source->player && source->player->kartstuff[k_tauntvoices]) // Prevents taunt sounds from playing every time the button is pressed
}
static void K_PlayBoostTaunt(mobj_t *source)
{
sfxenum_t pick = P_RandomKey(2); // Gotta roll the RNG every time this is called for sync reasons
boolean tasteful = (!source->player || !source->player->kartstuff[k_tauntvoices]);
if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2))
S_StartSound(source, sfx_kbost1+pick);
if (!tasteful)
return;
S_StartSound(source, sfx_taunt1+P_RandomKey(4));
K_TauntVoiceTimers(source->player);
#endif
}
static void K_PlayOvertakeSound(mobj_t *source)
{
#if 1
boolean tasteful = (!source->player || !source->player->kartstuff[k_voices]);
if (!G_RaceGametype()) // Only in race
@ -1396,33 +1400,28 @@ static void K_PlayOvertakeSound(mobj_t *source)
return;
if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2))
S_StartSound(source, sfx_slow);
S_StartSound(source, sfx_kslow);
if (!tasteful)
return;
K_RegularVoiceTimers(source->player);
#else
if (source->player && source->player->kartstuff[k_voices]) // Prevents taunt sounds from playing every time the button is pressed
return;
if (!G_RaceGametype()) // Only in race
return;
// 4 seconds from before race begins, 10 seconds afterwards
if (leveltime < starttime+(10*TICRATE))
return;
S_StartSound(source, sfx_slow);
K_RegularVoiceTimers(source->player);
#endif
}
static void K_PlayHitEmSound(mobj_t *source)
{
if (cv_kartvoices.value)
S_StartSound(source, sfx_hitem);
S_StartSound(source, sfx_khitem);
else
S_StartSound(source, sfx_s1c9); // The only lost gameplay functionality with voices disabled
K_RegularVoiceTimers(source->player);
}
static void K_PlayPowerGloatSound(mobj_t *source)
{
if (cv_kartvoices.value)
S_StartSound(source, sfx_kgloat);
K_RegularVoiceTimers(source->player);
}
@ -2671,8 +2670,6 @@ void K_DoSneaker(player_t *player, boolean doPFlag)
if (doPFlag)
player->pflags |= PF_ATTACKDOWN;
K_PlayTauntSound(player->mo);
}
static void K_DoShrink(player_t *player)
@ -2691,8 +2688,6 @@ static void K_DoShrink(player_t *player)
&& players[i].kartstuff[k_position] < player->kartstuff[k_position])
P_DamageMobj(players[i].mo, player->mo, player->mo, 64);
}
K_PlayTauntSound(player->mo);
}
static void K_DoSPB(player_t *victim, player_t *source)
@ -3765,7 +3760,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && player->kartstuff[k_eggmanheld])
{
K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
player->kartstuff[k_eggmanheld] = 0;
K_CleanHnextList(player->mo);
}
@ -3774,6 +3769,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
&& player->kartstuff[k_rocketsneakertimer] > 1)
{
K_DoSneaker(player, true);
K_PlayBoostTaunt(player->mo);
player->kartstuff[k_rocketsneakertimer] -= 5;
if (player->kartstuff[k_rocketsneakertimer] < 1)
player->kartstuff[k_rocketsneakertimer] = 1;
@ -3790,6 +3786,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO)
{
K_DoSneaker(player, true);
K_PlayBoostTaunt(player->mo);
player->kartstuff[k_itemamount]--;
}
break;
@ -3798,6 +3795,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
&& player->kartstuff[k_rocketsneakertimer] == 0)
{
K_DoSneaker(player, true);
K_PlayBoostTaunt(player->mo);
player->kartstuff[k_rocketsneakertimer] = itemtime;
player->kartstuff[k_itemamount]--;
}
@ -3816,7 +3814,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
P_RestoreMusic(player);
if (!cv_kartinvinsfx.value && !P_IsLocalPlayer(player))
S_StartSound(player->mo, sfx_kinvnc);
K_PlayTauntSound(player->mo);
K_PlayPowerGloatSound(player->mo);
player->kartstuff[k_itemamount]--;
}
break;
@ -3827,7 +3825,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
mobj_t *mo;
mobj_t *prev = player->mo;
//K_PlayTauntSound(player->mo);
//K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemheld] = 1;
S_StartSound(player->mo, sfx_s254);
@ -3852,7 +3850,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) // Banana x3 thrown
{
K_ThrowKartItem(player, false, MT_BANANA, -1, false);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemamount]--;
K_UpdateHnextList(player);
}
@ -3886,7 +3884,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
mobj_t *mo = NULL;
mobj_t *prev = player->mo;
//K_PlayTauntSound(player->mo);
//K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemheld] = 1;
S_StartSound(player->mo, sfx_s3k3a);
@ -3916,7 +3914,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) // Orbinaut x3 thrown
{
K_ThrowKartItem(player, true, MT_ORBINAUT, 1, false);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemamount]--;
K_UpdateHnextList(player);
}
@ -3931,7 +3929,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
mobj_t *mo = NULL;
mobj_t *prev = player->mo;
//K_PlayTauntSound(player->mo);
//K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemheld] = 1;
S_StartSound(player->mo, sfx_s3k3a);
@ -3963,7 +3961,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
K_ThrowKartItem(player, true, MT_JAWZ, 1, false);
else if (player->kartstuff[k_throwdir] == -1) // Throwing backward gives you a dud that doesn't home in
K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, false);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemamount]--;
K_UpdateHnextList(player);
}
@ -3988,7 +3986,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld])
{
K_ThrowKartItem(player, false, MT_SSMINE, 1, true);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemamount]--;
player->kartstuff[k_itemheld] = 0;
K_CleanHnextList(player->mo);
@ -4000,7 +3998,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->kartstuff[k_itemamount]--;
K_ThrowKartItem(player, true, MT_BALLHOG, 1, false);
S_StartSound(player->mo, sfx_mario7);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
}
break;
case KITEM_SPB:
@ -4038,14 +4036,14 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->kartstuff[k_itemamount]--;
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
}
break;
case KITEM_GROW:
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO
&& player->kartstuff[k_growshrinktimer] <= 0) // Grow holds the item box hostage
{
K_PlayTauntSound(player->mo);
K_PlayPowerGloatSound(player->mo);
player->mo->scalespeed = FRACUNIT/TICRATE;
player->mo->destscale = 3*(mapheaderinfo[gamemap-1]->mobj_scale)/2;
if (cv_kartdebugshrink.value && !player->bot)
@ -4063,6 +4061,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{
K_DoShrink(player);
player->kartstuff[k_itemamount]--;
K_PlayPowerGloatSound(player->mo);
}
break;
case KITEM_THUNDERSHIELD:
@ -4076,6 +4075,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{
K_DoThunderShield(player);
player->kartstuff[k_itemamount]--;
K_PlayAttackTaunt(player->mo);
}
break;
case KITEM_HYUDORO:
@ -4089,7 +4089,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO
&& !player->kartstuff[k_pogospring])
{
K_PlayTauntSound(player->mo);
K_PlayBoostTaunt(player->mo);
K_DoPogoSpring(player->mo, 32<<FRACBITS, false);
player->kartstuff[k_pogospring] = 1;
player->kartstuff[k_itemamount]--;
@ -4099,7 +4099,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
{
K_ThrowKartItem(player, false, MT_SINK, 1, true);
K_PlayTauntSound(player->mo);
K_PlayAttackTaunt(player->mo);
player->kartstuff[k_itemamount]--;
player->kartstuff[k_itemheld] = 0;
}

View File

@ -4231,7 +4231,7 @@ DoneSection2:
if (player->laps >= (unsigned)cv_numlaps.value)
{
if (!splitscreen && P_IsLocalPlayer(player))
if (P_IsLocalPlayer(player))
S_StartSound(NULL, sfx_s3k6a);
else if (player->kartstuff[k_position] == 1)
S_StartSound(NULL, sfx_s253);

View File

@ -1120,27 +1120,22 @@ void P_PlayLivesJingle(player_t *player)
void P_PlayRinglossSound(mobj_t *source)
{
sfxenum_t key = P_RandomKey(4);
sfxenum_t key = P_RandomKey(2);
if (cv_kartvoices.value)
S_StartSound(source, (mariomode) ? sfx_mario8 : sfx_altow1 + key);
S_StartSound(source, (mariomode) ? sfx_mario8 : sfx_khurt1 + key);
else
S_StartSound(source, sfx_slip);
}
void P_PlayDeathSound(mobj_t *source)
{
sfxenum_t key = P_RandomKey(4);
if (cv_kartvoices.value)
S_StartSound(source, sfx_altdi1 + key);
else
S_StartSound(source, sfx_s3k35);
S_StartSound(source, sfx_s3k35);
}
void P_PlayVictorySound(mobj_t *source)
{
sfxenum_t key = P_RandomKey(4);
if (cv_kartvoices.value)
S_StartSound(source, sfx_victr1 + key);
S_StartSound(source, sfx_kwin);
}
//
@ -1736,9 +1731,9 @@ void P_DoPlayerExit(player_t *player)
if (cv_kartvoices.value)
{
if (K_IsPlayerLosing(player))
S_StartSound(player->mo, sfx_klose);
S_StartSound((P_IsLocalPlayer(player) ? player->mo : NULL), sfx_klose);
else
S_StartSound(player->mo, sfx_kwin);
S_StartSound((P_IsLocalPlayer(player) ? player->mo : NULL), sfx_kwin);
}
player->exiting = 3*TICRATE;

View File

@ -814,14 +814,17 @@ sfxinfo_t S_sfx[NUMSFX] =
{"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
// SRB2kart - Skin sounds
{"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR},
{"klose", false, 64, 0, -1, NULL, 0, SKSLOSE, -1, LUMPERROR},
{"slow", false, 128, 32, -1, NULL, 0, SKSSLOW, -1, LUMPERROR},
{"taunt1", false, 64, 96, -1, NULL, 0, SKSPLTNT1, -1, LUMPERROR},
{"taunt2", false, 64, 96, -1, NULL, 0, SKSPLTNT2, -1, LUMPERROR},
{"taunt3", false, 64, 96, -1, NULL, 0, SKSPLTNT3, -1, LUMPERROR},
{"taunt4", false, 64, 96, -1, NULL, 0, SKSPLTNT4, -1, LUMPERROR},
{"hitem", false, 64, 32, -1, NULL, 0, SKSHITEM, -1, LUMPERROR},
{"kwin", false, 64, 96, -1, NULL, 0, SKSKWIN, -1, LUMPERROR},
{"klose", false, 64, 96, -1, NULL, 0, SKSKLOSE, -1, LUMPERROR},
{"khurt1", false, 64, 96, -1, NULL, 0, SKSKPAN1, -1, LUMPERROR},
{"khurt2", false, 64, 96, -1, NULL, 0, SKSKPAN2, -1, LUMPERROR},
{"kattk1", false, 64, 96, -1, NULL, 0, SKSKATK1, -1, LUMPERROR},
{"kattk2", false, 64, 96, -1, NULL, 0, SKSKATK2, -1, LUMPERROR},
{"kbost1", false, 64, 96, -1, NULL, 0, SKSKBST1, -1, LUMPERROR},
{"kbost2", false, 64, 96, -1, NULL, 0, SKSKBST2, -1, LUMPERROR},
{"kslow", false, 128, 32, -1, NULL, 0, SKSKSLOW, -1, LUMPERROR},
{"khitem", false, 64, 32, -1, NULL, 0, SKSKHITM, -1, LUMPERROR},
{"kgloat", false, 64, 40, -1, NULL, 0, SKSKPOWR, -1, LUMPERROR},
// skin sounds free slots to add sounds at run time (Boris HACK!!!)
// initialized to NULL

View File

@ -39,14 +39,17 @@ typedef enum
SKSGASP,
SKSJUMP,
// SRB2kart
SKSWIN,
SKSLOSE,
SKSSLOW,
SKSPLTNT1,
SKSPLTNT2,
SKSPLTNT3,
SKSPLTNT4,
SKSHITEM,
SKSKWIN, // Win quote
SKSKLOSE, // Lose quote
SKSKPAN1, // Pain
SKSKPAN2,
SKSKATK1, // Offense item taunt
SKSKATK2,
SKSKBST1, // Boost item taunt
SKSKBST2,
SKSKSLOW, // Overtake taunt
SKSKHITM, // Hit confirm taunt
SKSKPOWR, // Power item taunt
NUMSKINSOUNDS
} skinsound_t;
@ -887,12 +890,15 @@ typedef enum
sfx_kwin,
sfx_klose,
sfx_slow,
sfx_taunt1,
sfx_taunt2,
sfx_taunt3,
sfx_taunt4,
sfx_hitem,
sfx_kslow,
sfx_kattk1,
sfx_kattk2,
sfx_kbost1,
sfx_kbost2,
sfx_khurt1,
sfx_khurt2,
sfx_kgloat,
sfx_khitem,
// free slots for S_AddSoundFx() at run-time --------------------
sfx_freeslot0,