ref: d9f275813817870c9252ca5b370963a83d989488
parent: 9bd7fbd74b9e876a461a0100bdc4ae5c08d5a7c9
author: Turo Lamminen <turol@iki.fi>
date: Sat Nov 5 13:39:10 EDT 2022
hexen: Improve type correctness for thinker_t think functions
--- a/src/hexen/h2def.h
+++ b/src/hexen/h2def.h
@@ -159,8 +159,12 @@
===============================================================================
*/
+
+struct thinker_s;
+
+
// think_t is a function pointer to a routine to handle an actor
-typedef void (*think_t) ();
+typedef void (*think_t)(struct thinker_s *);
typedef struct thinker_s
{
--- a/src/hexen/p_acs.c
+++ b/src/hexen/p_acs.c
@@ -768,8 +768,9 @@
//
//==========================================================================
-void T_InterpretACS(acs_t * script)
+void T_InterpretACS(thinker_t *thinker)
{
+ acs_t *script = (acs_t *) thinker;
int cmd;
int action;
--- a/src/hexen/p_ceilng.c
+++ b/src/hexen/p_ceilng.c
@@ -33,8 +33,9 @@
// T_MoveCeiling
//
//==================================================================
-void T_MoveCeiling(ceiling_t * ceiling)
+void T_MoveCeiling(thinker_t *thinker)
{
+ ceiling_t *ceiling = (ceiling_t *) thinker;
result_e res;
switch (ceiling->direction)
--- a/src/hexen/p_doors.c
+++ b/src/hexen/p_doors.c
@@ -31,8 +31,9 @@
// T_VerticalDoor
//
//==================================================================
-void T_VerticalDoor(vldoor_t * door)
+void T_VerticalDoor(thinker_t *thinker)
{
+ vldoor_t *door = (vldoor_t *) thinker;
result_e res;
switch (door->direction)
--- a/src/hexen/p_floor.c
+++ b/src/hexen/p_floor.c
@@ -183,8 +183,9 @@
// MOVE A FLOOR TO IT'S DESTINATION (UP OR DOWN)
//
//==================================================================
-void T_MoveFloor(floormove_t * floor)
+void T_MoveFloor(thinker_t *thinker)
{
+ floormove_t *floor = (floormove_t *) thinker;
result_e res;
if (floor->resetDelayCount)
@@ -653,8 +654,9 @@
//
//=========================================================================
-void T_BuildPillar(pillar_t * pillar)
+void T_BuildPillar(thinker_t *thinker)
{
+ pillar_t *pillar = (pillar_t *) thinker;
result_e res1;
result_e res2;
@@ -861,8 +863,9 @@
#define WGLSTATE_STABLE 2
#define WGLSTATE_REDUCE 3
-void T_FloorWaggle(floorWaggle_t * waggle)
+void T_FloorWaggle(thinker_t *thinker)
{
+ floorWaggle_t *waggle = (floorWaggle_t *) thinker;
switch (waggle->state)
{
case WGLSTATE_EXPAND:
--- a/src/hexen/p_lights.c
+++ b/src/hexen/p_lights.c
@@ -25,8 +25,9 @@
//
//============================================================================
-void T_Light(light_t * light)
+void T_Light(thinker_t *thinker)
{
+ light_t *light = (light_t *) thinker;
if (light->count)
{
light->count--;
@@ -251,8 +252,9 @@
32, 32, 48, 64, 80, 96, 112, 128
};
-void T_Phase(phase_t * phase)
+void T_Phase(thinker_t *thinker)
{
+ phase_t *phase = (phase_t *) thinker;
phase->index = (phase->index + 1) & 63;
phase->sector->lightlevel = phase->base + PhaseTable[phase->index];
}
--- a/src/hexen/p_local.h
+++ b/src/hexen/p_local.h
@@ -151,8 +151,8 @@
void P_ThrustMobj(mobj_t * mo, angle_t angle, fixed_t move);
int P_FaceMobj(mobj_t * source, mobj_t * target, angle_t * delta);
boolean P_SeekerMissile(mobj_t * actor, angle_t thresh, angle_t turnMax);
-void P_MobjThinker(mobj_t * mobj);
-void P_BlasterMobjThinker(mobj_t * mobj);
+void P_MobjThinker(thinker_t *thinker);
+void P_BlasterMobjThinker(thinker_t *thinker);
void P_SpawnPuff(fixed_t x, fixed_t y, fixed_t z);
void P_SpawnBlood(fixed_t x, fixed_t y, fixed_t z, int damage);
void P_BloodSplatter(fixed_t x, fixed_t y, fixed_t z, mobj_t * originator);
@@ -408,11 +408,11 @@
extern polyblock_t **PolyBlockMap;
-void T_PolyDoor(polydoor_t * pd);
-void T_RotatePoly(polyevent_t * pe);
+void T_PolyDoor(thinker_t *thinker);
+void T_RotatePoly(thinker_t *thinker);
boolean EV_RotatePoly(line_t * line, byte * args, int direction, boolean
overRide);
-void T_MovePoly(polyevent_t * pe);
+void T_MovePoly(thinker_t *thinker);
boolean EV_MovePoly(line_t * line, byte * args, boolean timesEight, boolean
overRide);
boolean EV_OpenPolyDoor(line_t * line, byte * args, podoortype_t type);
--- a/src/hexen/p_mobj.c
+++ b/src/hexen/p_mobj.c
@@ -922,8 +922,9 @@
//
//----------------------------------------------------------------------------
-void P_BlasterMobjThinker(mobj_t * mobj)
+void P_BlasterMobjThinker(thinker_t *thinker)
{
+ mobj_t *mobj = (mobj_t *) thinker;
int i;
fixed_t xfrac;
fixed_t yfrac;
@@ -1051,8 +1052,9 @@
//
//----------------------------------------------------------------------------
-void P_MobjThinker(mobj_t * mobj)
+void P_MobjThinker(thinker_t *thinker)
{
+ mobj_t *mobj = (mobj_t *) thinker;
mobj_t *onmo;
/*
// Reset to not blasted when momentums are gone
--- a/src/hexen/p_plats.c
+++ b/src/hexen/p_plats.c
@@ -27,8 +27,9 @@
// Move a plat up and down
//
//==================================================================
-void T_PlatRaise(plat_t * plat)
+void T_PlatRaise(thinker_t *thinker)
{
+ plat_t *plat = (plat_t *) thinker;
result_e res;
switch (plat->status)
--- a/src/hexen/p_spec.h
+++ b/src/hexen/p_spec.h
@@ -133,8 +133,8 @@
#define LIGHT_SEQUENCE 3
#define LIGHT_SEQUENCE_ALT 4
-void T_Phase(phase_t * phase);
-void T_Light(light_t * light);
+void T_Phase(thinker_t *thinker);
+void T_Light(thinker_t *thinker);
void P_SpawnPhasedLight(sector_t * sector, int base, int index);
void P_SpawnLightSequence(sector_t * sector, int indexStep);
boolean EV_SpawnLight(line_t * line, byte * arg, lighttype_t type);
@@ -290,7 +290,7 @@
extern plat_t *activeplats[MAXPLATS];
-void T_PlatRaise(plat_t * plat);
+void T_PlatRaise(thinker_t *thinker);
int EV_DoPlat(line_t * line, byte * args, plattype_e type, int amount);
void P_AddActivePlat(plat_t * plat);
void P_RemoveActivePlat(plat_t * plat);
@@ -329,7 +329,7 @@
boolean EV_VerticalDoor(line_t * line, mobj_t * thing);
int EV_DoDoor(line_t * line, byte * args, vldoor_e type);
-void T_VerticalDoor(vldoor_t * door);
+void T_VerticalDoor(thinker_t *thinker);
//void P_SpawnDoorCloseIn30(sector_t *sec);
//void P_SpawnDoorRaiseIn5Mins(sector_t *sec, int secnum);
@@ -372,7 +372,7 @@
extern ceiling_t *activeceilings[MAXCEILINGS];
int EV_DoCeiling(line_t * line, byte * args, ceiling_e type);
-void T_MoveCeiling(ceiling_t * ceiling);
+void T_MoveCeiling(thinker_t *thinker);
void P_AddActiveCeiling(ceiling_t * c);
void P_RemoveActiveCeiling(ceiling_t * c);
int EV_CeilingCrushStop(line_t * line, byte * args);
@@ -470,9 +470,9 @@
int EV_BuildStairs(line_t * line, byte * args, int direction, stairs_e type);
int EV_DoFloor(line_t * line, byte * args, floor_e floortype);
-void T_MoveFloor(floormove_t * floor);
-void T_BuildPillar(pillar_t * pillar);
-void T_FloorWaggle(floorWaggle_t * waggle);
+void T_MoveFloor(thinker_t *thinker);
+void T_BuildPillar(thinker_t *thinker);
+void T_FloorWaggle(thinker_t *thinker);
int EV_BuildPillar(line_t * line, byte * args, boolean crush);
int EV_OpenPillar(line_t * line, byte * args);
int EV_DoFloorAndCeiling(line_t * line, byte * args, boolean raise);
@@ -553,7 +553,7 @@
boolean P_StartLockedACS(line_t * line, byte * args, mobj_t * mo, int side);
boolean P_TerminateACS(int number, int map);
boolean P_SuspendACS(int number, int map);
-void T_InterpretACS(acs_t * script);
+void T_InterpretACS(thinker_t *thinker);
void P_TagFinished(int tag);
void P_PolyobjFinished(int po);
void P_ACSInitNewGame(void);
--- a/src/hexen/po_man.c
+++ b/src/hexen/po_man.c
@@ -72,8 +72,9 @@
//
//==========================================================================
-void T_RotatePoly(polyevent_t * pe)
+void T_RotatePoly(thinker_t *thinker)
{
+ polyevent_t *pe = (polyevent_t *) thinker;
int absSpeed;
polyobj_t *poly;
@@ -206,8 +207,9 @@
//
//==========================================================================
-void T_MovePoly(polyevent_t * pe)
+void T_MovePoly(thinker_t *thinker)
{
+ polyevent_t *pe = (polyevent_t *) thinker;
int absSpeed;
polyobj_t *poly;
@@ -324,8 +326,9 @@
//
//==========================================================================
-void T_PolyDoor(polydoor_t * pd)
+void T_PolyDoor(thinker_t *thinker)
{
+ polydoor_t *pd = (polydoor_t *) thinker;
int absSpeed;
polyobj_t *poly;