From e89c34ac7484b8daf9a0eadee1eb6ef93c345895 Mon Sep 17 00:00:00 2001
From: James R <justsomejames2@gmail.com>
Date: Wed, 22 Nov 2023 18:43:24 -0800
Subject: [PATCH] player_t: add icecubevars_t

---
 src/d_player.h | 11 +++++++++++
 src/p_saveg.c  | 14 ++++++++++++++
 src/typedef.h  |  1 +
 3 files changed, 26 insertions(+)

diff --git a/src/d_player.h b/src/d_player.h
index 85d30355fd..328fd321df 100644
--- a/src/d_player.h
+++ b/src/d_player.h
@@ -551,6 +551,16 @@ struct powerupvars_t {
 	mobj_t *barrier;
 };
 
+// player_t struct for Frozen Production ice cube state
+struct icecubevars_t {
+	tic_t hitat; // last tic player properly touched frost
+
+	boolean frozen; // frozen in an ice cube
+	UINT8 wiggle; // number of times player wiggled so far
+	tic_t frozenat; // tic that player was frozen
+	UINT8 shaketimer; // while it counts down, ice cube shakes
+};
+
 // player_t struct for all alternative viewpoint variables
 struct altview_t
 {
@@ -965,6 +975,7 @@ struct player_t
 	sonicloopvars_t loop;
 	roundconditions_t roundconditions;
 	powerupvars_t powerup;
+	icecubevars_t icecube;
 
 	level_tally_t tally;
 };
diff --git a/src/p_saveg.c b/src/p_saveg.c
index ea80ea855d..9d727cdcc9 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -771,6 +771,13 @@ static void P_NetArchivePlayers(savebuffer_t *save)
 			WRITEUINT8(save->p, players[i].tally.showGrade);
 			WRITEUINT8(save->p, players[i].tally.done);
 		}
+
+		// icecubevars_t
+		WRITEUINT32(save->p, players[i].icecube.hitat);
+		WRITEUINT8(save->p, players[i].icecube.frozen);
+		WRITEUINT8(save->p, players[i].icecube.wiggle);
+		WRITEUINT32(save->p, players[i].icecube.frozenat);
+		WRITEUINT8(save->p, players[i].icecube.shaketimer);
 	}
 }
 
@@ -1329,6 +1336,13 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
 			players[i].tally.done = (boolean)READUINT8(save->p);
 		}
 
+		// icecubevars_t
+		players[i].icecube.hitat = READUINT32(save->p);
+		players[i].icecube.frozen = READUINT8(save->p);
+		players[i].icecube.wiggle = READUINT8(save->p);
+		players[i].icecube.frozenat = READUINT32(save->p);
+		players[i].icecube.shaketimer = READUINT8(save->p);
+
 		//players[i].viewheight = P_GetPlayerViewHeight(players[i]); // scale cannot be factored in at this point
 	}
 }
diff --git a/src/typedef.h b/src/typedef.h
index b32d4b9748..82b2bd7b4c 100644
--- a/src/typedef.h
+++ b/src/typedef.h
@@ -52,6 +52,7 @@ TYPEDEF (roundconditions_t);
 TYPEDEF (skybox_t);
 TYPEDEF (itemroulette_t);
 TYPEDEF (powerupvars_t);
+TYPEDEF (icecubevars_t);
 TYPEDEF (altview_t);
 TYPEDEF (player_t);
 
-- 
GitLab