Terrain Def Mapheader toggle

This commit is contained in:
NepDisk 2025-04-21 13:31:41 -04:00
parent b8c0b29606
commit 012df40fcd
9 changed files with 56 additions and 13 deletions

View file

@ -14,5 +14,6 @@
#include "../deh_soc.h"
boolean B_UseWallTransfer(void);
boolean B_UseTerrainDef(void);
#endif

View file

@ -14,6 +14,12 @@ boolean B_UseWallTransfer(void)
{
const mapheader_t *mapheader = mapheaderinfo[gamemap - 1];
boolean value = false;
if (mapnamespace == MNS_RINGRACERS)
return true;
if (cv_kartwalltransfer.value)
return true;
if (mapheader->use_walltransfer == true)
value = true;
@ -21,11 +27,23 @@ boolean B_UseWallTransfer(void)
if (mapheader->use_walltransfer == false)
value = false;
return value;
}
// Map header toggle for TerrainDefs.
boolean B_UseTerrainDef(void)
{
const mapheader_t *mapheader = mapheaderinfo[gamemap - 1];
boolean value = false;
if (mapnamespace == MNS_RINGRACERS)
return true;
if (mapheader->use_terrain == true)
value = true;
if (cv_kartwalltransfer.value)
value = true;
if (mapheader->use_terrain == false)
value = false;
return value;
}

View file

@ -1542,6 +1542,13 @@ void readlevelheader(MYFILE *f, char * name)
mapheaderinfo[num]->use_walltransfer = true;
else
mapheaderinfo[num]->use_walltransfer = false;
}
else if (fastcmp(word, "TERRAIN") || fastcmp(word, "TERRAINDEF"))
{
if (i || word2[0] == 'T' || word2[0] == 'Y')
mapheaderinfo[num]->use_terrain = true;
else
mapheaderinfo[num]->use_terrain = false;
}
// ignored for compatibility
else if (fastcmp(word, "NEXTLEVEL") || fastcmp(word, "TIMEATTACK") || fastcmp(word, "RECORDATTACK"))

View file

@ -441,7 +441,8 @@ struct mapheader_t
customoption_t *customopts; ///< Custom options. Allocated dynamically for space reasons. Be careful.
// BlanKart
boolean use_walltransfer; ///< Whether to use DRRR style wall transfering or not
boolean use_walltransfer; ///< Whether to use RR style wall transfering or not
boolean use_terrain; ///< Whether to use gameplay affecting Terrain effects or not (leaves visuals alone)
};

View file

@ -34,6 +34,8 @@
#include "m_perfstats.h"
#include "k_objects.h"
#include "blan/b_soc.h"
/*--------------------------------------------------
static BlockItReturn_t K_FindEggboxes(mobj_t *thing)
@ -139,7 +141,7 @@ static boolean K_BotHatesThisSectorsSpecial(player_t *player, sector_t *sec, con
{
terrain_t *terrain = K_GetTerrainForFlatNum(flip ? sec->ceilingpic : sec->floorpic);
if (terrain != NULL)
if (terrain != NULL && B_UseTerrainDef())
{
if (terrain->damageType != SD_NONE)
{

View file

@ -63,6 +63,8 @@
#include "k_follower.h"
#include "k_grandprix.h"
#include "blan/b_soc.h"
consvar_t cv_kartstacking_colorflame = CVAR_INIT ("kartstacking_colorflame", "On", CV_SAVE, CV_OnOff, NULL);
consvar_t cv_kartstacking_sneakerstacksound = CVAR_INIT ("kartstacking_sneakerstacksound", "On", CV_SAVE, CV_OnOff, NULL);
consvar_t cv_kartchainingsound = CVAR_INIT ("kartchaining_chainsound", "On", CV_SAVE, CV_OnOff, NULL);
@ -2107,7 +2109,7 @@ static void K_UpdateOffroad(player_t *player)
fixed_t offroadstrength = 0;
// TODO: Make this use actual special touch code.
if (terrain != NULL && terrain->offroad > 0)
if (terrain != NULL && terrain->offroad > 0 && B_UseTerrainDef())
{
offroadstrength = (terrain->offroad << FRACBITS);
}
@ -3811,7 +3813,7 @@ fixed_t K_GetNewSpeed(player_t *player)
fixed_t minspeed = 24*hscale;
fixed_t maxspeed = 28*hscale;
if (player->mo->terrain)
if (player->mo->terrain && B_UseTerrainDef())
{
minspeed = player->mo->terrain->pogoSpringMin*hscale;
maxspeed = player->mo->terrain->pogoSpringMax*hscale;

View file

@ -31,6 +31,8 @@
#include "k_kart.h" // on the chopping block...
#include "blan/b_soc.h"
static t_splash_t *splashDefs = NULL;
static size_t numSplashDefs = 0;
@ -567,6 +569,12 @@ void K_ProcessTerrainEffect(mobj_t *mo)
return;
}
if (!B_UseTerrainDef())
{
// Terrain has been disabled for this map.
return;
}
terrain = mo->terrain;
player = mo->player;
@ -1637,17 +1645,18 @@ static void K_TerrainDefaults(terrain_t *terrain)
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly)
{
if (!B_UseTerrainDef())
return false;
if (terrain->friction > 0
|| terrain->offroad != 0
|| terrain->damageType != -1)
//|| (terrain->flags & TRF_STAIRJANK))
return true;
if (badonly)
return false;
return (terrain->friction != 0
//|| terrain->trickPanel != 0
|| terrain->speedPad != 0
|| terrain->springStrength != 0
|| terrain->flags != 0);

View file

@ -3173,7 +3173,7 @@ void P_MobjCheckWater(mobj_t *mobj)
}
}
if (mobj->terrain != NULL)
if (mobj->terrain != NULL && B_UseTerrainDef())
{
if (mobj->terrain->flags & TRF_LIQUID)
{
@ -8351,7 +8351,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
if ((B_UseTerrainDef() && mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
&& (mobj->subsector->sector->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING))))
K_DoPogoSpring(mobj, 0, 1);
@ -8423,7 +8423,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
if ((B_UseTerrainDef() && mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
&& (mobj->subsector->sector->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING))))
K_DoPogoSpring(mobj, 0, 1);
@ -8453,7 +8453,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
if (grounded)
{
sector_t *sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
if ((B_UseTerrainDef() && mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
&& (mobj->subsector->sector->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING))))
K_DoPogoSpring(mobj, 0, 1);

View file

@ -106,6 +106,8 @@
#include "doomstat.h" // MAXMUSNAMES
#include "k_mapuser.h"
#include "blan/b_soc.h"
#include <tracy/tracy/TracyC.h>
// Replay names have time
@ -412,6 +414,7 @@ static void P_ClearSingleMapHeaderInfo(INT16 num)
mapheaderinfo[num]->typeoflevel = 0;
mapheaderinfo[num]->gravity = DEFAULT_GRAVITY;
mapheaderinfo[num]->use_walltransfer = false;
mapheaderinfo[num]->use_terrain = false;
mapheaderinfo[num]->keywords[0] = '\0';
for (int i = 0; i < MAXMUSNAMES; i++)
mapheaderinfo[num]->musname[i][0] = 0;
@ -3450,7 +3453,7 @@ static boolean P_CheckLineSideTripWire(line_t *ld, int p)
sda = &sides[n];
terrain = K_GetTerrainForTextureNum(sda->midtexture);
terraintripwire = (terrain && (terrain->flags & TRF_TRIPWIRE));
terraintripwire = (B_UseTerrainDef() && terrain && (terrain->flags & TRF_TRIPWIRE));
tripwire = terraintripwire ? terraintripwire : ld->tripwire;
if (terraintripwire)