Add mine kneecapper cvar and track lifetime of mobj

This commit is contained in:
NepDisk 2025-11-08 17:58:51 -05:00
parent 4e4a43e7f5
commit 1ae3ceaa4b
7 changed files with 36 additions and 1 deletions

View file

@ -561,6 +561,9 @@ consvar_t cv_kartbumpspark = CVAR_INIT("kartbumpspark",
consvar_t cv_kartbumpspring = CVAR_INIT ("kartbumpspring", "Yes", CV_NETVAR, CV_YesNo, NULL);
consvar_t cv_kartexplosion_limitlifetime = CVAR_INIT ("kartexplosion_limitlifetime", "Off", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_kartexplosion_limitlifetime_cap = CVAR_INIT ("kartexplosion_limitlifetime_cap", "12", CV_NETVAR, CV_Natural, NULL);
consvar_t cv_kartslipdash = CVAR_INIT ("kartslipdash", "No", CV_NETVAR|CV_CALL|CV_NOINIT|CV_GUARD, CV_YesNo, KartSlipdash_OnChange);
consvar_t cv_kartslopeboost = CVAR_INIT ("kartslopeboost", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartSlopeBoost_OnChange);

View file

@ -198,6 +198,8 @@ extern consvar_t cv_kartitembreaker;
extern consvar_t cv_kartpurpledrift;
extern consvar_t cv_kartbumpspark;
extern consvar_t cv_kartbumpspring;
extern consvar_t cv_kartexplosion_limitlifetime;
extern consvar_t cv_kartexplosion_limitlifetime_cap;
extern consvar_t cv_kartslipdash;
extern consvar_t cv_kartslopeboost;
extern consvar_t cv_kartinvintype;

View file

@ -441,6 +441,9 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_naturalcamera);
CV_RegisterVar(&cv_gptest);
CV_RegisterVar(&cv_kartexplosion_limitlifetime);
CV_RegisterVar(&cv_kartexplosion_limitlifetime_cap);
}
//}

View file

@ -93,8 +93,10 @@ enum mobj_e {
mobj_scalespeed,
mobj_extravalue1,
mobj_extravalue2,
mobj_extravalue3,
mobj_cusval,
mobj_cvmem,
mobj_mobjlifetime,
mobj_standingslope,
mobj_colorized,
mobj_mirrored,
@ -188,8 +190,10 @@ static const char *const mobj_opt[] = {
"scalespeed",
"extravalue1",
"extravalue2",
"extravalue3",
"cusval",
"cvmem",
"mobjlifetime",
"standingslope",
"colorized",
"mirrored",
@ -531,12 +535,18 @@ static int mobj_get(lua_State *L)
case mobj_extravalue2:
lua_pushinteger(L, mo->extravalue2);
break;
case mobj_extravalue3:
lua_pushinteger(L, mo->extravalue3);
break;
case mobj_cusval:
lua_pushinteger(L, mo->cusval);
break;
case mobj_cvmem:
lua_pushinteger(L, mo->cvmem);
break;
case mobj_mobjlifetime:
lua_pushinteger(L, mo->mobjlifetime);
break;
case mobj_standingslope:
LUA_PushUserdata(L, mo->standingslope, META_SLOPE);
break;
@ -1025,12 +1035,18 @@ static int mobj_set(lua_State *L)
case mobj_extravalue2:
mo->extravalue2 = luaL_checkinteger(L, 3);
break;
case mobj_extravalue3:
mo->extravalue3 = luaL_checkinteger(L, 3);
break;
case mobj_cusval:
mo->cusval = luaL_checkinteger(L, 3);
break;
case mobj_cvmem:
mo->cvmem = luaL_checkinteger(L, 3);
break;
case mobj_mobjlifetime:
mo->mobjlifetime = luaL_checkinteger(L, 3);
break;
case mobj_standingslope:
return NOSET;
case mobj_colorized:

View file

@ -8810,7 +8810,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
mobj->health--;
break;
case MT_MINEEXPLOSION:
if ((mobj->z < mobj->floorz - mobj->height) || (mobj->z > mobj->ceilingz + mobj->height))
if ((mobj->z < mobj->floorz - mobj->height)
|| (mobj->z > mobj->ceilingz + mobj->height)
|| (cv_kartexplosion_limitlifetime.value && mobj->mobjlifetime > cv_kartexplosion_limitlifetime_cap.value))
{
P_KillMobj(mobj, NULL, NULL, DMG_NORMAL);
break;
@ -10451,6 +10453,9 @@ void P_MobjThinker(mobj_t *mobj)
if (mobj->itnext && P_MobjWasRemoved(mobj->itnext))
P_SetTarget(&mobj->itnext, NULL);
// Tick lifetime of mobj
mobj->mobjlifetime++;
if (mobj->flags & MF_NOTHINK)
return;

View file

@ -414,6 +414,9 @@ struct mobj_t
INT32 cusval;
INT32 cvmem;
// Time Mobj has been alive for, useful for stats or gameplay tracking purposes.
UINT16 mobjlifetime;
pslope_t *standingslope; // The slope that the object is standing on (shouldn't need synced in savegames, right?)
boolean resetinterp; // if true, some fields should not be interpolated (see R_InterpolateMobjState implementation)

View file

@ -1837,6 +1837,7 @@ enum mobj_diff_t
MD3_MISCCAP,
MD3_BAKEDOFFSET,
MD3_EXTVAL3,
MD3_LIFETIME,
MD__MAX
};
@ -1998,6 +1999,7 @@ static void DiffMobj(const mobj_t *mobj, UINT32 diff[])
DIFF(mobj == misccap, MD3_MISCCAP);
DIFF(mobj->bakexoff || mobj->bakeyoff || mobj->bakezoff || mobj->bakexpiv || mobj->bakeypiv || mobj->bakezpiv, MD3_BAKEDOFFSET);
DIFF(mobj->extravalue3, MD3_EXTVAL3);
DIFF(mobj->mobjlifetime, MD3_LIFETIME);
}
static thinker_t *SyncMobjThinker(savebuffer_t *save, actionf_p1 thinker, thinker_t *th, UINT8 type)
@ -2321,6 +2323,7 @@ static thinker_t *SyncMobjThinker(savebuffer_t *save, actionf_p1 thinker, thinke
SYNCF(MD3_BAKEDOFFSET, mobj->bakeypiv);
SYNCF(MD3_BAKEDOFFSET, mobj->bakezpiv);
SYNCF(MD3_EXTVAL3, mobj->extravalue3);
SYNCF(MD3_LIFETIME, mobj->mobjlifetime);
if (!save->write)
{