mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-31 05:30:48 +00:00
Replace verticalflip in sector_t with a sector flag that's accessible via Lua and UDMF
This commit is contained in:
parent
86e2fefcac
commit
b3863c57be
10 changed files with 20 additions and 11 deletions
|
@ -79,6 +79,7 @@ sectorflags
|
||||||
triggerspecial_touch = "Trigger on Edge Touch";
|
triggerspecial_touch = "Trigger on Edge Touch";
|
||||||
triggerspecial_headbump = "Trigger on Headbump";
|
triggerspecial_headbump = "Trigger on Headbump";
|
||||||
invertprecip = "Invert Precipitation";
|
invertprecip = "Invert Precipitation";
|
||||||
|
gravityflip = "Flip Objects in Reverse Gravity";
|
||||||
heatwave = "Heat Wave";
|
heatwave = "Heat Wave";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -340,7 +340,7 @@ static inline int lib_getenum(lua_State *L)
|
||||||
}
|
}
|
||||||
else if (fastncmp("MSF_", word, 3)) {
|
else if (fastncmp("MSF_", word, 3)) {
|
||||||
p = word + 4;
|
p = word + 4;
|
||||||
for (i = 0; i < 5; i++)
|
for (i = 0; i < 6; i++)
|
||||||
if (MSF_LIST[i] && fastcmp(p, MSF_LIST[i])) {
|
if (MSF_LIST[i] && fastcmp(p, MSF_LIST[i])) {
|
||||||
lua_pushinteger(L, ((lua_Integer)1 << i));
|
lua_pushinteger(L, ((lua_Integer)1 << i));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -4472,11 +4472,12 @@ const char *const ML_LIST[16] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Sector flags
|
// Sector flags
|
||||||
const char *const MSF_LIST[5] = {
|
const char *const MSF_LIST[6] = {
|
||||||
"FLIPSPECIAL_FLOOR",
|
"FLIPSPECIAL_FLOOR",
|
||||||
"FLIPSPECIAL_CEILING",
|
"FLIPSPECIAL_CEILING",
|
||||||
"TRIGGERSPECIAL_TOUCH",
|
"TRIGGERSPECIAL_TOUCH",
|
||||||
"TRIGGERSPECIAL_HEADBUMP",
|
"TRIGGERSPECIAL_HEADBUMP",
|
||||||
|
"GRAVITYFLIP",
|
||||||
"HEATWAVE",
|
"HEATWAVE",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ extern const char *const MAPTHINGFLAG_LIST[4];
|
||||||
extern const char *const PLAYERFLAG_LIST[];
|
extern const char *const PLAYERFLAG_LIST[];
|
||||||
extern const char *const GAMETYPERULE_LIST[];
|
extern const char *const GAMETYPERULE_LIST[];
|
||||||
extern const char *const ML_LIST[16]; // Linedef flags
|
extern const char *const ML_LIST[16]; // Linedef flags
|
||||||
extern const char* const MSF_LIST[5]; // Sector flags
|
extern const char* const MSF_LIST[6]; // Sector flags
|
||||||
extern const char *COLOR_ENUMS[];
|
extern const char *COLOR_ENUMS[];
|
||||||
extern const char *const POWERS_LIST[];
|
extern const char *const POWERS_LIST[];
|
||||||
extern const char *const HUDITEMS_LIST[];
|
extern const char *const HUDITEMS_LIST[];
|
||||||
|
|
|
@ -753,6 +753,7 @@ static int sector_set(lua_State *L)
|
||||||
return LUA_ErrSetDirectly(L, "sector_t", "taglist");
|
return LUA_ErrSetDirectly(L, "sector_t", "taglist");
|
||||||
case sector_flags:
|
case sector_flags:
|
||||||
sector->flags = luaL_checkinteger(L, 3);
|
sector->flags = luaL_checkinteger(L, 3);
|
||||||
|
CheckForReverseGravity |= (sector->flags & MSF_GRAVITYFLIP);
|
||||||
break;
|
break;
|
||||||
case sector_gravity:
|
case sector_gravity:
|
||||||
sector->gravity = luaL_checkfixed(L, 3);
|
sector->gravity = luaL_checkfixed(L, 3);
|
||||||
|
|
|
@ -1463,7 +1463,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
|
|
||||||
gravityadd = -FixedMul(gravity, gravfactor);
|
gravityadd = -FixedMul(gravity, gravfactor);
|
||||||
|
|
||||||
if (rover->master->frontsector->verticalflip && gravityadd > 0)
|
if ((rover->master->frontsector->flags & MSF_GRAVITYFLIP) && gravityadd > 0)
|
||||||
mo->eflags |= MFE_VERTICALFLIP;
|
mo->eflags |= MFE_VERTICALFLIP;
|
||||||
|
|
||||||
no3dfloorgrav = false;
|
no3dfloorgrav = false;
|
||||||
|
@ -1475,7 +1475,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
{
|
{
|
||||||
gravityadd = -FixedMul(gravity, P_GetSectorGravityFactor(mo->subsector->sector));
|
gravityadd = -FixedMul(gravity, P_GetSectorGravityFactor(mo->subsector->sector));
|
||||||
|
|
||||||
if (mo->subsector->sector->verticalflip && gravityadd > 0)
|
if ((mo->subsector->sector->flags & MSF_GRAVITYFLIP) && gravityadd > 0)
|
||||||
mo->eflags |= MFE_VERTICALFLIP;
|
mo->eflags |= MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1213,7 +1213,10 @@ static void UnArchiveSectors(void)
|
||||||
sectors[i].ceilinglightabsolute = READUINT8(save_p);
|
sectors[i].ceilinglightabsolute = READUINT8(save_p);
|
||||||
}
|
}
|
||||||
if (diff3 & SD_FLAG)
|
if (diff3 & SD_FLAG)
|
||||||
|
{
|
||||||
sectors[i].flags = READUINT32(save_p);
|
sectors[i].flags = READUINT32(save_p);
|
||||||
|
CheckForReverseGravity |= (sectors[i].flags & MSF_GRAVITYFLIP);
|
||||||
|
}
|
||||||
if (diff3 & SD_GRAVITY)
|
if (diff3 & SD_GRAVITY)
|
||||||
sectors[i].gravity = READFIXED(save_p);
|
sectors[i].gravity = READFIXED(save_p);
|
||||||
|
|
||||||
|
|
|
@ -1000,7 +1000,6 @@ static void P_InitializeSector(sector_t *ss)
|
||||||
ss->extra_colormap = NULL;
|
ss->extra_colormap = NULL;
|
||||||
|
|
||||||
ss->gravityptr = NULL;
|
ss->gravityptr = NULL;
|
||||||
ss->verticalflip = false;
|
|
||||||
|
|
||||||
ss->cullheight = NULL;
|
ss->cullheight = NULL;
|
||||||
|
|
||||||
|
@ -1674,6 +1673,8 @@ static void ParseTextmapSectorParameter(UINT32 i, char *param, char *val)
|
||||||
sectors[i].flags |= MSF_TRIGGERSPECIAL_HEADBUMP;
|
sectors[i].flags |= MSF_TRIGGERSPECIAL_HEADBUMP;
|
||||||
else if (fastcmp(param, "invertprecip") && fastcmp("true", val))
|
else if (fastcmp(param, "invertprecip") && fastcmp("true", val))
|
||||||
sectors[i].flags |= MSF_INVERTPRECIP;
|
sectors[i].flags |= MSF_INVERTPRECIP;
|
||||||
|
else if (fastcmp(param, "gravityflip") && fastcmp("true", val))
|
||||||
|
sectors[i].flags |= MSF_GRAVITYFLIP;
|
||||||
else if (fastcmp(param, "heatwave") && fastcmp("true", val))
|
else if (fastcmp(param, "heatwave") && fastcmp("true", val))
|
||||||
sectors[i].flags |= MSF_HEATWAVE;
|
sectors[i].flags |= MSF_HEATWAVE;
|
||||||
else if (fastcmp(param, "friction"))
|
else if (fastcmp(param, "friction"))
|
||||||
|
|
|
@ -5994,6 +5994,8 @@ void P_SpawnSpecials(boolean fromnetsave)
|
||||||
sector = sectors;
|
sector = sectors;
|
||||||
for (i = 0; i < numsectors; i++, sector++)
|
for (i = 0; i < numsectors; i++, sector++)
|
||||||
{
|
{
|
||||||
|
CheckForReverseGravity |= (sector->flags & MSF_GRAVITYFLIP);
|
||||||
|
|
||||||
if (!sector->special)
|
if (!sector->special)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -6116,11 +6118,11 @@ void P_SpawnSpecials(boolean fromnetsave)
|
||||||
sectors[s].gravityptr = §ors[sec].floorheight; // This allows it to change in realtime!
|
sectors[s].gravityptr = §ors[sec].floorheight; // This allows it to change in realtime!
|
||||||
|
|
||||||
if (lines[i].flags & ML_NOCLIMB)
|
if (lines[i].flags & ML_NOCLIMB)
|
||||||
sectors[s].verticalflip = true;
|
sectors[s].flags |= MSF_GRAVITYFLIP;
|
||||||
else
|
else
|
||||||
sectors[s].verticalflip = false;
|
sectors[s].flags &= ~MSF_GRAVITYFLIP;
|
||||||
|
|
||||||
CheckForReverseGravity = sectors[s].verticalflip;
|
CheckForReverseGravity |= (sectors[s].flags & MSF_GRAVITYFLIP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -284,7 +284,8 @@ typedef enum
|
||||||
MSF_TRIGGERSPECIAL_HEADBUMP = 1<<3,
|
MSF_TRIGGERSPECIAL_HEADBUMP = 1<<3,
|
||||||
// invertprecip - inverts presence of precipitation
|
// invertprecip - inverts presence of precipitation
|
||||||
MSF_INVERTPRECIP = 1<<4,
|
MSF_INVERTPRECIP = 1<<4,
|
||||||
MSF_HEATWAVE = 1<<5, // heat wave effect
|
MSF_GRAVITYFLIP = 1<<5,
|
||||||
|
MSF_HEATWAVE = 1<<6,
|
||||||
} sectorflags_t;
|
} sectorflags_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -368,7 +369,6 @@ typedef struct sector_s
|
||||||
|
|
||||||
fixed_t gravity; // per-sector gravity factor
|
fixed_t gravity; // per-sector gravity factor
|
||||||
fixed_t *gravityptr; // For binary format: Read gravity from floor height of master sector
|
fixed_t *gravityptr; // For binary format: Read gravity from floor height of master sector
|
||||||
boolean verticalflip; // If gravity < 0, then allow flipped physics
|
|
||||||
sectorflags_t flags;
|
sectorflags_t flags;
|
||||||
|
|
||||||
INT32 friction;
|
INT32 friction;
|
||||||
|
|
Loading…
Reference in a new issue