Add misccap and add rings minimap debugger
This commit is contained in:
parent
2e4901e78d
commit
360a2541a4
8 changed files with 171 additions and 13 deletions
|
|
@ -577,6 +577,7 @@ consvar_t cv_kartdebugwaypoints = CVAR_INIT ("kartdebugwaypoints", "Off", CV_NET
|
|||
consvar_t cv_kartdebuglap = CVAR_INIT ("kartdebuglap", "Off", CV_NETVAR|CV_CHEAT, kartdebugwaypoint_cons_t, NULL);
|
||||
consvar_t cv_kartdebugbot = CVAR_INIT ("kartdebugbot", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_kartdebugcluster = CVAR_INIT ("kartdebugcluster", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_kartdebugrings = CVAR_INIT ("kartdebugrings", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartdebugcheckpoint = CVAR_INIT ("kartdebugcheckpoint", "Off", 0, CV_OnOff, NULL);
|
||||
consvar_t cv_kartdebugnodes = CVAR_INIT ("kartdebugnodes", "Off", 0, CV_OnOff, NULL);
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ extern consvar_t cv_votetime;
|
|||
extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugdistribution, cv_kartdebughuddrop;
|
||||
extern consvar_t cv_kartdebugshrink;
|
||||
extern consvar_t cv_kartdebugcheckpoint, cv_kartdebugnodes, cv_kartdebugcolorize, cv_kartdebugdirector;
|
||||
extern consvar_t cv_kartdebugwaypoints, cv_kartdebuglap, cv_kartdebugbot, cv_kartdebugcluster;
|
||||
extern consvar_t cv_kartdebugwaypoints, cv_kartdebuglap, cv_kartdebugbot, cv_kartdebugcluster, cv_kartdebugrings;
|
||||
|
||||
extern consvar_t cv_itemfinder;
|
||||
|
||||
|
|
|
|||
51
src/k_hud.c
51
src/k_hud.c
|
|
@ -3703,6 +3703,14 @@ static void K_drawKartMinimapWaypoint(waypoint_t *wp, INT32 hudx, INT32 hudy, IN
|
|||
K_drawKartMinimapDot(wp->mobj->x, wp->mobj->y, hudx, hudy, flags, pal, size);
|
||||
}
|
||||
|
||||
static void K_drawKartMinimapRings(mobj_t *mobj, INT32 hudx, INT32 hudy, INT32 flags)
|
||||
{
|
||||
UINT8 pal = 0x40; // yellow
|
||||
UINT8 size = 1;
|
||||
|
||||
K_drawKartMinimapDot(mobj->x, mobj->y, hudx, hudy, flags, pal, size);
|
||||
}
|
||||
|
||||
static void K_drawKartMinimapCluster(INT32 hudx, INT32 hudy, INT32 flags)
|
||||
{
|
||||
UINT8 pal = 180; // Strong pink color.
|
||||
|
|
@ -3957,10 +3965,9 @@ static void K_drawKartMinimap(void)
|
|||
// draw minimap-pertinent objects
|
||||
for (mobj = kitemcap; mobj; mobj = next)
|
||||
{
|
||||
next = mobj->itnext;
|
||||
|
||||
workingPic = NULL;
|
||||
colormap = NULL;
|
||||
next = mobj->itnext;
|
||||
|
||||
if (mobj->health <= 0)
|
||||
continue;
|
||||
|
|
@ -3990,6 +3997,30 @@ static void K_drawKartMinimap(void)
|
|||
workingPic = NULL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!workingPic)
|
||||
continue;
|
||||
|
||||
interpx = R_InterpolateFixed(mobj->old_x, mobj->x);
|
||||
interpy = R_InterpolateFixed(mobj->old_y, mobj->y);
|
||||
|
||||
K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, workingPic, colormap);
|
||||
}
|
||||
|
||||
for (mobj = misccap; mobj; mobj = next)
|
||||
{
|
||||
workingPic = NULL;
|
||||
colormap = NULL;
|
||||
next = mobj->itnext;
|
||||
|
||||
if (mobj->health <= 0)
|
||||
continue;
|
||||
|
||||
switch (mobj->type)
|
||||
{
|
||||
case MT_RANDOMITEM:
|
||||
if (itembreaker && (mobj->flags2 & MF2_BOSSNOTRAP) && !(mobj->flags2 & MF2_BOSSFLEE))
|
||||
{
|
||||
|
|
@ -3997,7 +4028,9 @@ static void K_drawKartMinimap(void)
|
|||
colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_YELLOW, GTC_CACHE);
|
||||
}
|
||||
else
|
||||
{
|
||||
workingPic = NULL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -4174,13 +4207,25 @@ static void K_drawKartMinimap(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (cv_kartdebugrings.value != 0)
|
||||
{
|
||||
for (mobj = misccap; mobj; mobj = next)
|
||||
{
|
||||
next = mobj->itnext;
|
||||
|
||||
if (mobj->type != MT_RING && mobj->type != MT_FLINGRING)
|
||||
continue;
|
||||
|
||||
K_drawKartMinimapRings(mobj, x, y, splitflags);
|
||||
}
|
||||
}
|
||||
|
||||
if (cv_kartdebugcluster.value != 0)
|
||||
{
|
||||
K_drawKartMinimapCluster(x, y, splitflags);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void K_drawKartStartCountdown(void)
|
||||
{
|
||||
INT32 pnum = 0;
|
||||
|
|
|
|||
|
|
@ -280,6 +280,7 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_kartdebuglap);
|
||||
CV_RegisterVar(&cv_kartdebugbot);
|
||||
CV_RegisterVar(&cv_kartdebugcluster);
|
||||
CV_RegisterVar(&cv_kartdebugrings);
|
||||
|
||||
CV_RegisterVar(&cv_kartdebugcheckpoint);
|
||||
CV_RegisterVar(&cv_kartdebugnodes);
|
||||
|
|
|
|||
87
src/p_mobj.c
87
src/p_mobj.c
|
|
@ -61,6 +61,7 @@ actioncache_t actioncachehead;
|
|||
|
||||
static mobj_t *overlaycap = NULL;
|
||||
mobj_t *kitemcap = NULL; // Used for Kart offensive items (the ones that can get removed by sizedown)
|
||||
mobj_t *misccap = NULL; // Used for misc object tracking
|
||||
mobj_t *waypointcap = NULL;
|
||||
mobj_t *boss3cap = NULL;
|
||||
|
||||
|
|
@ -6526,10 +6527,6 @@ boolean P_IsKartItem(INT32 type)
|
|||
// Primarily for minimap data, handle with care
|
||||
case MT_SPB:
|
||||
return true;
|
||||
|
||||
case MT_RANDOMITEM:
|
||||
if (itembreaker)
|
||||
return true;
|
||||
// FALLTHRU
|
||||
|
||||
default:
|
||||
|
|
@ -6613,6 +6610,77 @@ void P_RunKartItems(void)
|
|||
P_SetTarget(&kitemcap, NULL);
|
||||
}
|
||||
|
||||
static boolean P_IsMiscCapObject(INT32 type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MT_RING:
|
||||
case MT_FLINGRING:
|
||||
return true;
|
||||
break;
|
||||
|
||||
case MT_RANDOMITEM:
|
||||
return true;
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Called when a misc mobj "thinks"
|
||||
void P_AddMiscCap(mobj_t *thing)
|
||||
{
|
||||
I_Assert(thing != NULL);
|
||||
|
||||
if (misccap == NULL)
|
||||
P_SetTarget(&misccap, thing);
|
||||
else {
|
||||
mobj_t *mo;
|
||||
for (mo = misccap; mo && mo->itnext; mo = mo->itnext)
|
||||
;
|
||||
|
||||
I_Assert(mo != NULL);
|
||||
I_Assert(mo->itnext == NULL);
|
||||
|
||||
P_SetTarget(&mo->itnext, thing);
|
||||
}
|
||||
P_SetTarget(&thing->itnext, NULL);
|
||||
}
|
||||
|
||||
// Called only when a kart item is removed
|
||||
// Keeps the hnext list from corrupting.
|
||||
static void P_RemoveMiscCap(mobj_t *thing)
|
||||
{
|
||||
mobj_t *mo, **p;
|
||||
for (mo = *(p = &misccap); mo; mo = *(p = &mo->itnext))
|
||||
{
|
||||
if (mo != thing)
|
||||
continue;
|
||||
|
||||
P_SetTarget(p, thing->itnext);
|
||||
P_SetTarget(&thing->itnext, NULL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Doesn't actually do anything since objects can have their own thinkers,
|
||||
// but this is necessary for the sole purpose of updating misccap
|
||||
void P_RunMiscCap(void)
|
||||
{
|
||||
mobj_t *mobj, *next;
|
||||
|
||||
for (mobj = misccap; mobj; mobj = next)
|
||||
{
|
||||
next = mobj->itnext;
|
||||
P_SetTarget(&mobj->itnext, NULL);
|
||||
}
|
||||
P_SetTarget(&misccap, NULL);
|
||||
}
|
||||
|
||||
void P_RunOverlays(void)
|
||||
{
|
||||
// run overlays
|
||||
|
|
@ -7074,6 +7142,9 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
if (P_MobjWasRemoved(mobj))
|
||||
return;
|
||||
|
||||
if (P_IsMiscCapObject(mobj->type)) // mobj is object we want on the list:
|
||||
P_AddMiscCap(mobj); // add to misccap list
|
||||
|
||||
switch (mobj->type)
|
||||
{
|
||||
case MT_SHADOW:
|
||||
|
|
@ -8268,6 +8339,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
// No need to check water. Who cares?
|
||||
P_RingThinker(mobj);
|
||||
|
||||
P_AddMiscCap(mobj);
|
||||
|
||||
A_AttractChase(mobj);
|
||||
return false;
|
||||
// Flung items
|
||||
|
|
@ -10473,6 +10546,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (P_IsKartItem(mobj->type)) // mobj is a kart item we want on the list:
|
||||
P_AddKartItem(mobj); // add to kitem list
|
||||
|
||||
if (P_IsMiscCapObject(mobj->type)) // mobj is object we want on the list:
|
||||
P_AddMiscCap(mobj); // add to misccap list
|
||||
|
||||
// Can end up here if a player dies.
|
||||
if (mobj->player)
|
||||
P_CyclePlayerMobjState(mobj);
|
||||
|
|
@ -11524,6 +11600,9 @@ void P_RemoveMobj(mobj_t *mobj)
|
|||
if (P_IsKartItem(mobj->type))
|
||||
P_RemoveKartItem(mobj);
|
||||
|
||||
if (P_IsMiscCapObject(mobj->type))
|
||||
P_RemoveMiscCap(mobj);
|
||||
|
||||
if (mobj->player && mobj->player->followmobj)
|
||||
{
|
||||
P_RemoveMobj(mobj->player->followmobj);
|
||||
|
|
|
|||
|
|
@ -528,6 +528,7 @@ extern actioncache_t actioncachehead;
|
|||
extern mobj_t *kitemcap;
|
||||
extern mobj_t *waypointcap;
|
||||
extern mobj_t *boss3cap;
|
||||
extern mobj_t *misccap;
|
||||
|
||||
void P_InitCachedActions(void);
|
||||
void P_RunCachedActions(void);
|
||||
|
|
@ -541,6 +542,9 @@ boolean P_CanDeleteKartItem(INT32 type);
|
|||
void P_AddKartItem(mobj_t *thing); // needs to be called in k_kart.c
|
||||
void P_RunKartItems(void);
|
||||
|
||||
void P_AddMiscCap(mobj_t *thing);
|
||||
void P_RunMiscCap(void);
|
||||
|
||||
// check mobj against water content, before movement code
|
||||
void P_MobjCheckWater(mobj_t *mobj);
|
||||
|
||||
|
|
|
|||
|
|
@ -2064,9 +2064,16 @@ typedef enum
|
|||
MD2_LASTMOMZ = 1<<28,
|
||||
MD2_TERRAIN = 1<<29,
|
||||
MD2_LIGHTLEVEL = 1<<30,
|
||||
MD2_GRAVITY = (INT32)(1U<<31)
|
||||
MD2_MORE = (INT32)(1U<<31)
|
||||
} mobj_diff2_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MD3_GRAVITY = 1,
|
||||
MD3_MISCCAP = 1<<1,
|
||||
|
||||
} mobj_diff3_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
tc_mobj,
|
||||
|
|
@ -2148,6 +2155,7 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
const mobj_t *mobj = (const mobj_t *)th;
|
||||
UINT32 diff;
|
||||
UINT32 diff2;
|
||||
UINT32 diff3;
|
||||
size_t j;
|
||||
|
||||
// Ignore stationary hoops - these will be respawned from mapthings.
|
||||
|
|
@ -2170,7 +2178,7 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
if (mobj->flags2 & MF2_DONTSYNC)
|
||||
return;
|
||||
|
||||
diff2 = 0;
|
||||
diff = diff2 = diff3 = 0;
|
||||
|
||||
if (mobj->spawnpoint)
|
||||
{
|
||||
|
|
@ -2370,8 +2378,14 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
diff2 |= MD2_LASTMOMZ;
|
||||
if (mobj->terrain != NULL || mobj->terrainOverlay != NULL)
|
||||
diff2 |= MD2_TERRAIN;
|
||||
|
||||
if (mobj->gravity != FRACUNIT)
|
||||
diff2 |= MD2_GRAVITY;
|
||||
diff3 |= MD3_GRAVITY;
|
||||
if (mobj == misccap)
|
||||
diff3 |= MD3_MISCCAP;
|
||||
|
||||
if (diff3 != 0)
|
||||
diff2 |= MD2_MORE;
|
||||
|
||||
if (diff2 != 0)
|
||||
diff |= MD_MORE;
|
||||
|
|
@ -2384,6 +2398,8 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
WRITEUINT32(save->p, diff);
|
||||
if (diff & MD_MORE)
|
||||
WRITEUINT32(save->p, diff2);
|
||||
if (diff2 & MD2_MORE)
|
||||
WRITEUINT32(save->p, diff3);
|
||||
|
||||
WRITEFIXED(save->p, mobj->z); // Force this so 3dfloor problems don't arise.
|
||||
WRITEFIXED(save->p, mobj->floorz);
|
||||
|
|
@ -2638,7 +2654,7 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
WRITEUINT32(save->p, K_GetTerrainHeapIndex(mobj->terrain));
|
||||
WRITEUINT32(save->p, SaveMobjnum(mobj->terrainOverlay));
|
||||
}
|
||||
if (diff2 & MD2_GRAVITY)
|
||||
if (diff3 & MD3_GRAVITY)
|
||||
{
|
||||
WRITEFIXED(save->p, mobj->gravity);
|
||||
}
|
||||
|
|
@ -3529,6 +3545,7 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
|||
mobj_t *mobj;
|
||||
UINT32 diff;
|
||||
UINT32 diff2;
|
||||
UINT32 diff3;
|
||||
INT32 i;
|
||||
fixed_t z, floorz, ceilingz;
|
||||
ffloor_t *floorrover = NULL, *ceilingrover = NULL;
|
||||
|
|
@ -3540,6 +3557,11 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
|||
else
|
||||
diff2 = 0;
|
||||
|
||||
if (diff2 & MD2_MORE)
|
||||
diff3 = READUINT32(save->p);
|
||||
else
|
||||
diff3 = 0;
|
||||
|
||||
z = READFIXED(save->p); // Force this so 3dfloor problems don't arise.
|
||||
floorz = READFIXED(save->p);
|
||||
ceilingz = READFIXED(save->p);
|
||||
|
|
@ -3882,7 +3904,7 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
|||
{
|
||||
mobj->terrain = NULL;
|
||||
}
|
||||
if (diff2 & MD2_GRAVITY)
|
||||
if (diff3 & MD3_GRAVITY)
|
||||
{
|
||||
mobj->gravity = READFIXED(save->p);
|
||||
}
|
||||
|
|
@ -3925,6 +3947,9 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
|||
if (diff2 & MD2_KITEMCAP)
|
||||
P_SetTarget(&kitemcap, mobj);
|
||||
|
||||
if (diff3 & MD3_MISCCAP)
|
||||
P_SetTarget(&misccap, mobj);
|
||||
|
||||
R_AddMobjInterpolator(mobj);
|
||||
|
||||
return &mobj->thinker;
|
||||
|
|
|
|||
|
|
@ -218,6 +218,7 @@ void P_InitThinkers(void)
|
|||
boss3cap = NULL;
|
||||
waypointcap = NULL;
|
||||
kitemcap = NULL;
|
||||
misccap = NULL;
|
||||
|
||||
iquehead = iquetail = 0;
|
||||
|
||||
|
|
@ -757,6 +758,8 @@ void P_Ticker(boolean run)
|
|||
// formality so kitemcap gets updated properly each frame.
|
||||
P_RunKartItems();
|
||||
|
||||
P_RunMiscCap();
|
||||
|
||||
if (run)
|
||||
{
|
||||
ps_thinkertime = I_GetPreciseTime();
|
||||
|
|
|
|||
Loading…
Reference in a new issue