From f1255730485d42f1a5b62f3a26605c65faf22d8b Mon Sep 17 00:00:00 2001
From: toaster <rollerorbital@gmail.com>
Date: Sun, 29 Jul 2018 18:35:56 +0100
Subject: [PATCH] Some minor things to help draw sonicitems to a close. *
 "kartvoices" cvar. Possible values "Never", "Tasteful" (default), and "Meme".
 * Added a way to move quickly through the credits, rather than skip them
 entirely (hold spacebar or down arrow). * Fix a few mistakes in M_ChangeCvar,
 some of which I introduced and some of which were weird in the first place. *
 Tweak the offset of the arrows that let you know you can modify a cvar by
 pressing left or right (some via a patch.kart change, but others via tweaking
 the drawing location).

---
 src/d_netcmd.c |  2 ++
 src/d_netcmd.h |  1 +
 src/f_finale.c | 17 ++++++++++++-----
 src/k_kart.c   | 23 ++++++++++++++++-------
 src/m_menu.c   | 33 ++++++++++++++++++---------------
 src/p_user.c   | 11 +++++++----
 6 files changed, 56 insertions(+), 31 deletions(-)

diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 167457d15..f79547476 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -355,6 +355,8 @@ consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT|CV_CALL|CV
 consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartMirror_OnChange, 0, NULL, NULL, 0, 0, NULL};
 static CV_PossibleValue_t kartspeedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};
 consvar_t cv_kartspeedometer = {"kartdisplayspeed", "Off", CV_SAVE, kartspeedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
+static CV_PossibleValue_t kartvoices_cons_t[] = {{0, "Never"}, {1, "Tasteful"}, {2, "Meme"}, {0, NULL}};
+consvar_t cv_kartvoices = {"kartvoices", "Tasteful", CV_SAVE, kartvoices_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
 
 // this might be a debug or it might be an undocumented regular feature
 consvar_t cv_karteliminatelast = {"karteliminatelast", "Yes", CV_NETVAR|CV_CHEAT|CV_CALL, CV_OnOff, KartEliminateLast_OnChange, 0, NULL, NULL, 0, 0, NULL};
diff --git a/src/d_netcmd.h b/src/d_netcmd.h
index 009563afb..371df7201 100644
--- a/src/d_netcmd.h
+++ b/src/d_netcmd.h
@@ -126,6 +126,7 @@ extern consvar_t cv_kartfrantic;
 extern consvar_t cv_kartcomeback;
 extern consvar_t cv_kartmirror;
 extern consvar_t cv_kartspeedometer;
+extern consvar_t cv_kartvoices;
 
 extern consvar_t cv_karteliminatelast;
 
diff --git a/src/f_finale.c b/src/f_finale.c
index e10ba1a6f..ab79fa782 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -625,7 +625,7 @@ void F_CreditDrawer(void)
 			y += 12<<FRACBITS;
 			break;
 		}
-		if (FixedMul(y,vid.dupy) > vid.height)
+		if (((y>>FRACBITS) * vid.dupy) > vid.height)
 			break;
 	}
 
@@ -686,13 +686,20 @@ boolean F_CreditResponder(event_t *event)
 			break;
 	}
 
-	/*if (!(timesBeaten) && !(netgame || multiplayer))
-		return false;*/
-
 	if (event->type != ev_keydown)
 		return false;
 
-	if (key != KEY_ESCAPE && key != KEY_ENTER && key != KEY_SPACE && key != KEY_BACKSPACE)
+	if (key == KEY_DOWNARROW || key == KEY_SPACE)
+	{
+		if (!timetonext && !finalecount)
+			animtimer += 7;
+		return false;
+	}
+
+	/*if (!(timesBeaten) && !(netgame || multiplayer))
+		return false;*/
+
+	if (key != KEY_ESCAPE && key != KEY_ENTER && key != KEY_BACKSPACE)
 		return false;
 
 	if (keypressed)
diff --git a/src/k_kart.c b/src/k_kart.c
index 081a94921..dc1f52ed2 100644
--- a/src/k_kart.c
+++ b/src/k_kart.c
@@ -403,6 +403,7 @@ void K_RegisterKartStuff(void)
 	CV_RegisterVar(&cv_kartcomeback);
 	CV_RegisterVar(&cv_kartmirror);
 	CV_RegisterVar(&cv_kartspeedometer);
+	CV_RegisterVar(&cv_kartvoices);
 	CV_RegisterVar(&cv_karteliminatelast);
 	CV_RegisterVar(&cv_votetime);
 
@@ -1338,18 +1339,21 @@ static void K_RegularVoiceTimers(player_t *player)
 
 static void K_PlayTauntSound(mobj_t *source)
 {
-	if (source->player && source->player->kartstuff[k_tauntvoices]) // Prevents taunt sounds from playing every time the button is pressed
-		return;
+	sfxenum_t pick = P_RandomKey(4); // 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_taunt1+P_RandomKey(4));
+	if (!tasteful)
+		return;
 
 	K_TauntVoiceTimers(source->player);
 }
 
 static void K_PlayOvertakeSound(mobj_t *source)
 {
-	if (source->player && source->player->kartstuff[k_voices]) // Prevents taunt sounds from playing every time the button is pressed
-		return;
+	boolean tasteful = (!source->player || !source->player->kartstuff[k_voices]);
 
 	if (!G_RaceGametype()) // Only in race
 		return;
@@ -1358,14 +1362,19 @@ static void K_PlayOvertakeSound(mobj_t *source)
 	if (leveltime < starttime+(10*TICRATE))
 		return;
 
-	S_StartSound(source, sfx_slow);
+	if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2))
+		S_StartSound(source, sfx_slow);
+
+	if (!tasteful)
+		return;
 
 	K_RegularVoiceTimers(source->player);
 }
 
 static void K_PlayHitEmSound(mobj_t *source)
 {
-	S_StartSound(source, sfx_hitem);
+	if (cv_kartvoices.value)
+		S_StartSound(source, sfx_hitem);
 
 	K_RegularVoiceTimers(source->player);
 }
diff --git a/src/m_menu.c b/src/m_menu.c
index 1ee24f476..ce4e74863 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -1337,9 +1337,10 @@ static menuitem_t OP_SoundOptionsMenu[] =
 	{IT_STRING|IT_CVAR,			NULL, "Reverse L/R Channels",	&stereoreverse,			 70},
 	{IT_STRING|IT_CVAR,			NULL, "Surround Sound",			&surround,				 80},
 
-	{IT_STRING|IT_CVAR,			NULL, "Powerup Warning",		&cv_kartinvinsfx,		100},
+	{IT_STRING|IT_CVAR,			NULL, "Character voices",		&cv_kartvoices,			100},
+	{IT_STRING|IT_CVAR,			NULL, "Powerup Warning",		&cv_kartinvinsfx,		110},
 
-	{IT_KEYHANDLER|IT_STRING,	NULL, "Sound Test",				M_HandleSoundTest,		120},
+	{IT_KEYHANDLER|IT_STRING,	NULL, "Sound Test",				M_HandleSoundTest,		130},
 };
 
 /*static menuitem_t OP_DataOptionsMenu[] =
@@ -2203,29 +2204,30 @@ static void M_ChangeCvar(INT32 choice)
 		if (cv == &cv_playercolor)
 		{
 			SINT8 skinno = R_SkinAvailable(cv_chooseskin.string);
-			if (skinno == -1)
-				return;
-			CV_SetValue(cv,skins[skinno].prefcolor);
+			if (skinno != -1)
+				CV_SetValue(cv,skins[skinno].prefcolor);
+			return;
 		}
-		return;
 		CV_Set(cv,cv->defaultvalue);
 		return;
 	}
 
+	choice = (choice<<1) - 1;
+
 	if (((currentMenu->menuitems[itemOn].status & IT_CVARTYPE) == IT_CV_SLIDER)
 	    ||((currentMenu->menuitems[itemOn].status & IT_CVARTYPE) == IT_CV_INVISSLIDER)
 	    ||((currentMenu->menuitems[itemOn].status & IT_CVARTYPE) == IT_CV_NOMOD))
 	{
-		CV_SetValue(cv,cv->value+(choice*2-1));
+		CV_SetValue(cv,cv->value+choice);
 	}
 	else if (cv->flags & CV_FLOAT)
 	{
 		char s[20];
-		sprintf(s,"%f",FIXED_TO_FLOAT(cv->value)+(choice*2-1)*(1.0f/16.0f));
+		sprintf(s,"%f",FIXED_TO_FLOAT(cv->value)+(choice)*(1.0f/16.0f));
 		CV_Set(cv,s);
 	}
 	else
-		CV_AddValue(cv,choice*2-1);
+		CV_AddValue(cv,choice);
 }
 
 static boolean M_ChangeStringCvar(INT32 choice)
@@ -2583,7 +2585,7 @@ boolean M_Responder(event_t *ev)
 			if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS
 				|| (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR))
 			{
-				if (currentMenu != &OP_SoundOptionsDef)
+				if (currentMenu != &OP_SoundOptionsDef || itemOn > 3)
 					S_StartSound(NULL, sfx_menu1);
 				routine(0);
 			}
@@ -2593,7 +2595,7 @@ boolean M_Responder(event_t *ev)
 			if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS
 				|| (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR))
 			{
-				if (currentMenu != &OP_SoundOptionsDef)
+				if (currentMenu != &OP_SoundOptionsDef || itemOn > 3)
 					S_StartSound(NULL, sfx_menu1);
 				routine(1);
 			}
@@ -2680,7 +2682,7 @@ boolean M_Responder(event_t *ev)
 					|| cv == &cv_newgametype)
 					return true;
 
-				if (currentMenu != &OP_SoundOptionsDef)
+				if (currentMenu != &OP_SoundOptionsDef || itemOn > 3)
 					S_StartSound(NULL, sfx_menu1);
 				routine(-1);
 				return true;
@@ -3127,7 +3129,7 @@ static void M_DrawSlider(INT32 x, INT32 y, const consvar_t *cv, boolean ontop)
 
 	if (ontop)
 	{
-		V_DrawCharacter(x - 15 - (skullAnimCounter/5), y,
+		V_DrawCharacter(x - 16 - (skullAnimCounter/5), y,
 			'\x1C' | highlightflags, false); // left arrow
 		V_DrawCharacter(x+(SLIDER_RANGE*8) + 8 + (skullAnimCounter/5), y,
 			'\x1D' | highlightflags, false); // right arrow
@@ -4566,6 +4568,7 @@ static void M_DrawSkyRoom(void)
 			break;
 		}
 	}
+
 	if (y)
 	{
 		y += currentMenu->y;
@@ -4581,9 +4584,9 @@ static void M_DrawSkyRoom(void)
 	if (lengthstring)
 	{
 		V_DrawCharacter(BASEVIDWIDTH - currentMenu->x - 10 - lengthstring - (skullAnimCounter/5), currentMenu->y+currentMenu->menuitems[itemOn].alphaKey,
-			'\x1C' | highlightflags, false);
+			'\x1C' | highlightflags, false); // left arrow
 		V_DrawCharacter(BASEVIDWIDTH - currentMenu->x + 2 + (skullAnimCounter/5), currentMenu->y+currentMenu->menuitems[itemOn].alphaKey,
-			'\x1D' | highlightflags, false);
+			'\x1D' | highlightflags, false); // right arrow
 	}
 }
 
diff --git a/src/p_user.c b/src/p_user.c
index 9d196268d..f33aeffd7 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -1708,10 +1708,13 @@ void P_DoPlayerExit(player_t *player)
 		else if (!countdown)
 			countdown = cv_countdowntime.value*TICRATE + 1; // Use cv_countdowntime
 
-		if (K_IsPlayerLosing(player))
-			S_StartSound(player->mo, sfx_klose);
-		else
-			S_StartSound(player->mo, sfx_kwin);
+		if (cv_kartvoices.value)
+		{
+			if (K_IsPlayerLosing(player))
+				S_StartSound(player->mo, sfx_klose);
+			else
+				S_StartSound(player->mo, sfx_kwin);
+		}
 
 		player->exiting = 3*TICRATE;
 
-- 
GitLab