Adjust some stuff to accout for how the map header toggle works

This commit is contained in:
NepDisk 2025-06-02 15:10:16 -04:00
parent b087b5e372
commit c1ca05c6c5
11 changed files with 65 additions and 43 deletions

View file

@ -962,8 +962,8 @@ static ffloor_t *AM_CompareFOFs(size_t i, ffloor_t *rover, ffloor_t *secondaryst
terrain2 = K_GetTerrainForFlatNum(*secondaryrover->bottompic);
}
if ((terrain1 && K_TerrainHasAffect(terrain1, false))
|| (terrain2 && K_TerrainHasAffect(terrain2, false)))
if ((terrain1 && K_TerrainHasAffect(terrain1, false, true))
|| (terrain2 && K_TerrainHasAffect(terrain2, false, true)))
continue;
break;
@ -1106,8 +1106,8 @@ static void AM_drawWalls(UINT8 pass)
defercol = CDWALLCOLORS; // possible ceiling offroad boundary
}
if ((terrain1 && K_TerrainHasAffect(terrain1, false))
|| (terrain2 && K_TerrainHasAffect(terrain2, false)))
if ((terrain1 && K_TerrainHasAffect(terrain1, false, true))
|| (terrain2 && K_TerrainHasAffect(terrain2, false, true)))
{
if (pass & PASS_INTANGIBLE)
AM_drawMline(&l, defercol); // Yep, definitely a functionality boundary
@ -1290,7 +1290,7 @@ static inline void AM_drawSpecialThingsOnly(UINT8 colors)
if (!terrain)
terrain = K_GetTerrainForFlatNum(sectors[i].ceilingpic);
if (terrain && K_TerrainHasAffect(terrain, true))
if (terrain && K_TerrainHasAffect(terrain, true, true))
continue;
t = sectors[i].thinglist;

View file

@ -18,7 +18,6 @@ extern "C" {
#include "../deh_soc.h"
boolean B_UseWallTransfer(void);
boolean B_UseTerrainDef(void);
INT32 B_TrackComplexity(void);
fixed_t K_TrackModifierMax(void);

View file

@ -30,24 +30,6 @@ boolean B_UseWallTransfer(void)
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 (mapheader->use_terrain == false)
value = false;
return value;
}
// Give each map a custom track complexity
INT32 B_TrackComplexity(void)
{

View file

@ -141,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 && B_UseTerrainDef())
if (terrain != NULL && K_AffectingTerrainActive())
{
if (terrain->damageType != SD_NONE)
{

View file

@ -2169,7 +2169,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 && B_UseTerrainDef())
if (terrain != NULL && terrain->offroad > 0 && K_AffectingTerrainActive())
{
offroadstrength = (terrain->offroad << FRACBITS);
}
@ -3898,7 +3898,7 @@ fixed_t K_GetNewSpeed(player_t *player)
fixed_t minspeed = 24*hscale;
fixed_t maxspeed = 28*hscale;
if (player->mo->terrain && B_UseTerrainDef())
if (player->mo->terrain && K_AffectingTerrainActive())
{
minspeed = player->mo->terrain->pogoSpringMin*hscale;
maxspeed = player->mo->terrain->pogoSpringMax*hscale;

View file

@ -2,7 +2,8 @@
//-----------------------------------------------------------------------------
// Copyright (C) 1998-2021 by ZDoom + GZDoom teams, and contributors
// Copyright (C) 2021 by Sally "TehRealSalt" Cochenour
// Copyright (C) 2021 by Kart Krew
// Copyright (C) 2021-2024 by Kart Krew
// Copyright (C) 2025 Blankart Team
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
@ -569,7 +570,7 @@ void K_ProcessTerrainEffect(mobj_t *mo)
return;
}
if (!B_UseTerrainDef())
if (!K_AffectingTerrainActive())
{
// Terrain has been disabled for this map.
return;
@ -1650,14 +1651,14 @@ static void K_TerrainDefaults(terrain_t *terrain)
}
/*--------------------------------------------------
boolean K_TerrainHasAffect(terrain_t *terrain)
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly, boolean followmaprules)
See header file for description.
--------------------------------------------------*/
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly)
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly, boolean followmaprules)
{
if (!B_UseTerrainDef())
if (followmaprules && !K_AffectingTerrainActive())
return false;
if (terrain->friction > 0
@ -2333,3 +2334,21 @@ void K_InitTerrain(void)
K_InitTerrainPwad(wadNum);
}
}
// Map header toggle for Affecting Terrain Defs.
boolean K_AffectingTerrainActive(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 (mapheader->use_terrain == false)
value = false;
return value;
}

View file

@ -595,19 +595,33 @@ boolean K_InitTerrainPwad(UINT16 wadNum);
void K_InitTerrain(void);
/*--------------------------------------------------
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly)
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly, boolean followmaprules)
Checks if Terrain block has a gameplay-affecting property.
Input Arguments:-
terrain - Terrain structure to compare with default.
badonly - Only checks for negative properties if true
followmaprules - Checks for if map allows affecting terrain if true
Return:-
false if functionally default, otherwise true.
--------------------------------------------------*/
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly);
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly, boolean followmaprules);
/*--------------------------------------------------
boolean K_AffectingTerrainActive(void)
Checks if the map allows gameplay-affecting terrain
Input Arguments:- none
Return:-
true if enabled by map, otherwise false.
--------------------------------------------------*/
boolean K_AffectingTerrainActive(void);
#ifdef __cplusplus
} // extern "C"

View file

@ -4243,6 +4243,12 @@ static int lib_iGetPreciseTime(lua_State *L)
return 1;
}
static int lib_kAffectingTerrainActive(lua_State *L)
{
lua_pushboolean(L, K_AffectingTerrainActive());
return 1;
}
static int lib_kGetDefaultTerrain(lua_State *L)
{
LUA_PushUserdata(L, K_GetDefaultTerrain(), META_TERRAIN);
@ -4324,6 +4330,7 @@ static int lib_kTerrainHasAffect(lua_State *L)
{
terrain_t *terrain = *((terrain_t **)luaL_checkudata(L, 1, META_TERRAIN));
boolean badonly = lua_optboolean(L, 2);
boolean followmaprules = lua_optboolean(L, 3);
NOHUD
INLEVEL
@ -4331,7 +4338,7 @@ static int lib_kTerrainHasAffect(lua_State *L)
if (!terrain)
return LUA_ErrInvalid(L, "terrain_t");
lua_pushboolean(L, K_TerrainHasAffect(terrain, badonly));
lua_pushboolean(L, K_TerrainHasAffect(terrain, badonly, followmaprules));
return 1;
}
@ -4653,6 +4660,7 @@ static luaL_Reg lib[] = {
{"I_GetPreciseTime",lib_iGetPreciseTime},
// k_terrain
{"K_AffectingTerrainActive", lib_kAffectingTerrainActive},
{"K_GetDefaultTerrain", lib_kGetDefaultTerrain},
{"K_GetTerrainForTextureName", lib_kGetTerrainForTextureName},
{"K_GetTerrainForTextureNum", lib_kGetTerrainForTextureNum},

View file

@ -3179,7 +3179,7 @@ void P_MobjCheckWater(mobj_t *mobj)
}
}
if (mobj->terrain != NULL && B_UseTerrainDef())
if (mobj->terrain != NULL && K_AffectingTerrainActive())
{
if (mobj->terrain->flags & TRF_LIQUID)
{
@ -8345,7 +8345,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((B_UseTerrainDef() && mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
if ((K_AffectingTerrainActive() && 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);
@ -8417,7 +8417,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((B_UseTerrainDef() && mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
if ((K_AffectingTerrainActive() && 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);
@ -8449,7 +8449,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
if (grounded)
{
sector_t *sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((B_UseTerrainDef() && mobj->terrain && mobj->terrain->pogoSpring > 0) || (sec2 && (sec2->specialflags & (SSF_YELLOWPOGOSPRING|SSF_REDPOGOSPRING)))
if ((K_AffectingTerrainActive() && 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

@ -3529,7 +3529,7 @@ static boolean P_CheckLineSideTripWire(line_t *ld, int p)
sda = &sides[n];
terrain = K_GetTerrainForTextureNum(sda->midtexture);
terraintripwire = (B_UseTerrainDef() && terrain && (terrain->flags & TRF_TRIPWIRE));
terraintripwire = (K_AffectingTerrainActive() && terrain && (terrain->flags & TRF_TRIPWIRE));
tripwire = terraintripwire ? terraintripwire : ld->tripwire;
if (terraintripwire)

View file

@ -5085,7 +5085,7 @@ static void P_ProcessSpeedPad(player_t *player, sector_t *sector, sector_t *rove
fixed_t sfxnum;
size_t i;
if (player->mo->terrain && player->mo->terrain->speedPad > 0 && B_UseTerrainDef())
if (player->mo->terrain && player->mo->terrain->speedPad > 0 && K_AffectingTerrainActive())
{
// Don't double process Speed Pads.
return;
@ -5182,7 +5182,7 @@ static void P_ProcessSpeedPad(player_t *player, sector_t *sector, sector_t *rove
static void P_ProcessPogoSpring(player_t *player, boolean isTouching, int type)
{
if (player->mo->terrain && player->mo->terrain->pogoSpring > 0 && B_UseTerrainDef())
if (player->mo->terrain && player->mo->terrain->pogoSpring > 0 && K_AffectingTerrainActive())
{
// Don't double process Pogo Springs.
return;
@ -5212,7 +5212,7 @@ static void P_ProcessPogoSpring(player_t *player, boolean isTouching, int type)
static void P_ProcessBoostPanel(player_t *player, boolean isTouching, int type)
{
if (player->mo->terrain && B_UseTerrainDef())
if (player->mo->terrain && K_AffectingTerrainActive())
{
if (player->mo->terrain->flags & TRF_SNEAKERPANEL)
{