Adjust some stuff to accout for how the map header toggle works
This commit is contained in:
parent
b087b5e372
commit
c1ca05c6c5
11 changed files with 65 additions and 43 deletions
10
src/am_map.c
10
src/am_map.c
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue