From bb988d1dd322742b713a06a52ba3ebdc570fd3af Mon Sep 17 00:00:00 2001
From: Sally Coolatta <tehrealsalt@gmail.com>
Date: Wed, 12 Aug 2020 18:45:55 -0400
Subject: [PATCH] Minor fixes to g_demo

---
 src/g_demo.c    | 20 ++++++++------------
 src/g_demo.h    |  1 +
 src/k_collide.c | 12 ++++++------
 3 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/src/g_demo.c b/src/g_demo.c
index 71f23971e3..e7cb87d4ae 100644
--- a/src/g_demo.c
+++ b/src/g_demo.c
@@ -39,9 +39,12 @@
 #include "lua_hook.h"
 #include "md5.h" // demo checksums
 
-#include "dehacked.h" // get_number (for ghost thok)
+// SRB2Kart
 #include "lua_script.h" // LUA_ArchiveDemo and LUA_UnArchiveDemo
 
+#include "k_kart.h"
+#include "k_battle.h"
+
 static CV_PossibleValue_t recordmultiplayerdemos_cons_t[] = {{0, "Disabled"}, {1, "Manual Save"}, {2, "Auto Save"}, {0, NULL}};
 consvar_t cv_recordmultiplayerdemos = {"netdemo_record", "Manual Save", CV_SAVE, recordmultiplayerdemos_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
 
@@ -54,7 +57,8 @@ tic_t demostarttime; // for comparative timing purposes
 
 static char demoname[128];
 static UINT8 *demobuffer = NULL;
-static UINT8 *demo_p, *demotime_p;
+static UINT8 *demotime_p, *demoinfo_p;
+UINT8 *demo_p;
 static UINT8 *demoend;
 static UINT8 demoflags;
 boolean demosynced = true; // console warning message
@@ -89,14 +93,6 @@ static struct {
 
 // Your naming conventions are stupid and useless.
 // There is no conflict here.
-typedef struct demoghost {
-	UINT8 checksum[16];
-	UINT8 *buffer, *p, fadein;
-	UINT16 color;
-	UINT16 version;
-	mobj_t oldmo, *mo;
-	struct demoghost *next;
-} demoghost;
 demoghost *ghosts = NULL;
 
 //
@@ -170,7 +166,7 @@ static ticcmd_t oldcmd[MAXPLAYERS];
 #define FZT_SCALE 0x10 // different scale to object
 // spare FZT slots 0x20 to 0x80
 
-static mobj_t oldmetal, oldghost;
+static mobj_t oldmetal, oldghost[MAXPLAYERS];
 
 void G_SaveMetal(UINT8 **buffer)
 {
@@ -326,7 +322,7 @@ void G_ReadDemoExtraData(void)
 				{
 					players[p].spectator = true;
 					if (players[p].mo)
-						P_DamageMobj(players[p].mo, NULL, NULL, 10000);
+						P_DamageMobj(players[p].mo, NULL, NULL, 1, DMG_INSTAKILL);
 					else
 						players[p].playerstate = PST_REBORN;
 				}
diff --git a/src/g_demo.h b/src/g_demo.h
index af4e6ea906..7517e92ffb 100644
--- a/src/g_demo.h
+++ b/src/g_demo.h
@@ -115,6 +115,7 @@ extern UINT8 demo_writerng;
 #define DXD_NAME 0x04 // name changed
 #define DXD_COLOR 0x08 // color changed
 #define DXD_PLAYSTATE 0x10 // state changed between playing, spectating, or not in-game
+#define DXD_FOLLOWER 0x20 // follower was changed
 
 #define DXD_PST_PLAYING 0x01
 #define DXD_PST_SPECTATING 0x02
diff --git a/src/k_collide.c b/src/k_collide.c
index ecaa9bd8ea..28c85506b1 100644
--- a/src/k_collide.c
+++ b/src/k_collide.c
@@ -45,7 +45,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
 		else
 		{
 			// Player Damage
-			P_DamageMobj(t2, t1, t1->target, 1);
+			P_DamageMobj(t2, t1, t1->target, 1, 0);
 			K_KartBouncing(t2, t1, false, false);
 			S_StartSound(t2, sfx_s3k7b);
 		}
@@ -87,7 +87,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
 	else if (t2->flags & MF_SHOOTABLE)
 	{
 		// Shootable damage
-		P_DamageMobj(t2, t2, t1->target, 1);
+		P_DamageMobj(t2, t1, t1->target, 1, 0);
 		damageitem = true;
 	}
 
@@ -177,7 +177,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
 	else if (t2->flags & MF_SHOOTABLE)
 	{
 		// Shootable damage
-		P_DamageMobj(t2, t2, t1->target, 1);
+		P_DamageMobj(t2, t1, t1->target, 1, 0);
 		damageitem = true;
 	}
 
@@ -316,7 +316,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
 		// Bomb death
 		P_KillMobj(t1, t2, t2);
 		// Shootable damage
-		P_DamageMobj(t2, t2, t1->target, 1);
+		P_DamageMobj(t2, t1, t1->target, 1, 0);
 	}
 
 	return true;
@@ -337,7 +337,7 @@ boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2)
 	else if (t2->flags & MF_SHOOTABLE)
 	{
 		// Shootable damage
-		P_DamageMobj(t2, t2, t1->target, 1);
+		P_DamageMobj(t2, t1, t1->target, 1, 0);
 	}
 
 	return true;
@@ -358,7 +358,7 @@ boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2)
 		HU_SetCEchoDuration(5);
 		HU_DoCEcho(va("%s\\was hit by a kitchen sink.\\\\\\\\", player_names[t2->player-players]));
 		I_OutputMsg("%s was hit by a kitchen sink.\n", player_names[t2->player-players]);
-		P_DamageMobj(t2, t1, t1->target, 10000);
+		P_DamageMobj(t2, t1, t1->target, 1, DMG_INSTAKILL);
 		P_KillMobj(t1, t2, t2);
 	}
 	else if (t2->flags & MF_SHOOTABLE)
-- 
GitLab