From 59d26465939ea9941f7d29e67a5b270c9362a21d Mon Sep 17 00:00:00 2001
From: GoldenTails <milestailsprower101n2@gmail.com>
Date: Sun, 29 Nov 2020 08:30:50 -0600
Subject: [PATCH] Send a `quitting` argument to the GameQuit Lua hook

---
 src/d_clisrv.c    | 6 +++---
 src/d_netcmd.c    | 4 ++--
 src/lua_hook.h    | 2 +-
 src/lua_hooklib.c | 5 +++--
 src/m_menu.c      | 4 ++--
 src/sdl/i_video.c | 2 +-
 6 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index b198011a0..8951fe204 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -3027,7 +3027,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
 	if (pnum == consoleplayer)
 	{
 		if (Playing())
-			LUAh_GameQuit();
+			LUAh_GameQuit(false);
 #ifdef DUMPCONSISTENCY
 		if (msg == KICK_MSG_CON_FAIL) SV_SavedGame();
 #endif
@@ -3728,7 +3728,7 @@ static void HandleShutdown(SINT8 node)
 {
 	(void)node;
 	if (Playing())
-		LUAh_GameQuit();
+		LUAh_GameQuit(false);
 	D_QuitNetGame();
 	CL_Reset();
 	D_StartTitle();
@@ -3744,7 +3744,7 @@ static void HandleTimeout(SINT8 node)
 {
 	(void)node;
 	if (Playing())
-		LUAh_GameQuit();
+		LUAh_GameQuit(false);
 	D_QuitNetGame();
 	CL_Reset();
 	D_StartTitle();
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 31c10f58a..ec46aa4c3 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -3607,7 +3607,7 @@ static void Command_Playintro_f(void)
 FUNCNORETURN static ATTRNORETURN void Command_Quit_f(void)
 {
 	if (Playing())
-		LUAh_GameQuit();
+		LUAh_GameQuit(true);
 	I_Quit();
 }
 
@@ -4270,7 +4270,7 @@ void Command_ExitGame_f(void)
 	INT32 i;
 
 	if (Playing())
-		LUAh_GameQuit();
+		LUAh_GameQuit(false);
 
 	D_QuitNetGame();
 	CL_Reset();
diff --git a/src/lua_hook.h b/src/lua_hook.h
index 796f3a9d2..dd41814b5 100644
--- a/src/lua_hook.h
+++ b/src/lua_hook.h
@@ -117,6 +117,6 @@ boolean LUAh_SeenPlayer(player_t *player, player_t *seenfriend); // Hook for MT_
 #endif
 #define LUAh_PlayerThink(player) LUAh_PlayerHook(player, hook_PlayerThink) // Hook for P_PlayerThink
 boolean LUAh_ShouldJingleContinue(player_t *player, const char *musname); // Hook for whether a jingle of the given music should continue playing
-void LUAh_GameQuit(void); // Hook for game quitting
+void LUAh_GameQuit(boolean quitting); // Hook for game quitting
 boolean LUAh_PlayerCmd(player_t *player, ticcmd_t *cmd); // Hook for building player's ticcmd struct (Ported from SRB2Kart)
 boolean LUAh_MusicChange(const char *oldname, char *newname, UINT16 *mflags, boolean *looping, UINT32 *position, UINT32 *prefadems, UINT32 *fadeinms); // Hook for music changes
\ No newline at end of file
diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c
index 117aa48a3..a206f80db 100644
--- a/src/lua_hooklib.c
+++ b/src/lua_hooklib.c
@@ -1846,7 +1846,7 @@ boolean LUAh_ShouldJingleContinue(player_t *player, const char *musname)
 }
 
 // Hook for game quitting
-void LUAh_GameQuit(void)
+void LUAh_GameQuit(boolean quitting)
 {
 	hook_p hookp;
 	if (!gL || !(hooksAvailable[hook_GameQuit/8] & (1<<(hook_GameQuit%8))))
@@ -1860,7 +1860,8 @@ void LUAh_GameQuit(void)
 			continue;
 
 		PushHook(gL, hookp);
-		if (lua_pcall(gL, 0, 0, 1)) {
+		lua_pushboolean(gL, quitting);
+		if (lua_pcall(gL, 1, 0, 1)) {
 			if (!hookp->error || cv_debug & DBG_LUA)
 				CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
 			lua_pop(gL, 1);
diff --git a/src/m_menu.c b/src/m_menu.c
index 77648f877..135137c12 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -6938,7 +6938,7 @@ static void M_UltimateCheat(INT32 choice)
 {
 	(void)choice;
 	if (Playing())
-		LUAh_GameQuit();
+		LUAh_GameQuit(true);
 	I_Quit();
 }
 
@@ -13373,7 +13373,7 @@ void M_QuitResponse(INT32 ch)
 	if (ch != 'y' && ch != KEY_ENTER)
 		return;
 	if (Playing())
-		LUAh_GameQuit();
+		LUAh_GameQuit(true);
 	if (!(netgame || cv_debug))
 	{
 		S_ResetCaptions();
diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c
index b8b3b9d34..310275d55 100644
--- a/src/sdl/i_video.c
+++ b/src/sdl/i_video.c
@@ -1058,7 +1058,7 @@ void I_GetEvent(void)
 			 	break;
 			case SDL_QUIT:
 				if (Playing())
-					LUAh_GameQuit();
+					LUAh_GameQuit(true);
 				I_Quit();
 				break;
 		}