mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-24 11:42:03 +00:00
Store bustable FOF data directly in ffloor_t instead of referring to master line
This commit is contained in:
parent
be92ed7091
commit
1f041496c7
6 changed files with 182 additions and 119 deletions
|
@ -9688,20 +9688,26 @@ struct {
|
|||
{"FF_FLOATBOB",FF_FLOATBOB}, ///< Floats on water and bobs if you step on it.
|
||||
{"FF_NORETURN",FF_NORETURN}, ///< Used with ::FF_CRUMBLE. Will not return to its original position after falling.
|
||||
{"FF_CRUMBLE",FF_CRUMBLE}, ///< Falls 2 seconds after being stepped on, and randomly brings all touching crumbling 3dfloors down with it, providing their master sectors share the same tag (allows crumble platforms above or below, to also exist).
|
||||
{"FF_SHATTERBOTTOM",FF_SHATTERBOTTOM}, ///< Used with ::FF_BUSTUP. Like FF_SHATTER, but only breaks from the bottom. Good for springing up through rubble.
|
||||
{"FF_GOOWATER",FF_GOOWATER}, ///< Used with ::FF_SWIMMABLE. Makes thick bouncey goop.
|
||||
{"FF_MARIO",FF_MARIO}, ///< Acts like a question block when hit from underneath. Goodie spawned at top is determined by master sector.
|
||||
{"FF_BUSTUP",FF_BUSTUP}, ///< You can spin through/punch this block and it will crumble!
|
||||
{"FF_QUICKSAND",FF_QUICKSAND}, ///< Quicksand!
|
||||
{"FF_PLATFORM",FF_PLATFORM}, ///< You can jump up through this to the top.
|
||||
{"FF_REVERSEPLATFORM",FF_REVERSEPLATFORM}, ///< A fall-through floor in normal gravity, a platform in reverse gravity.
|
||||
{"FF_INTANGIBLEFLATS",FF_INTANGIBLEFLATS}, ///< Both flats are intangible, but the sides are still solid.
|
||||
{"FF_INTANGABLEFLATS",FF_INTANGIBLEFLATS}, ///< Both flats are intangable, but the sides are still solid.
|
||||
{"FF_SHATTER",FF_SHATTER}, ///< Used with ::FF_BUSTUP. Bustable on mere touch.
|
||||
{"FF_SPINBUST",FF_SPINBUST}, ///< Used with ::FF_BUSTUP. Also bustable if you're in your spinning frames.
|
||||
{"FF_STRONGBUST",FF_STRONGBUST}, ///< Used with ::FF_BUSTUP. Only bustable by "strong" characters (Knuckles) and abilities (bouncing, twinspin, melee).
|
||||
{"FF_RIPPLE",FF_RIPPLE}, ///< Ripple the flats
|
||||
{"FF_COLORMAPONLY",FF_COLORMAPONLY}, ///< Only copy the colormap, not the lightlevel
|
||||
{"FF_GOOWATER",FF_GOOWATER}, ///< Used with ::FF_SWIMMABLE. Makes thick bouncey goop.
|
||||
|
||||
// Bustable FOF type
|
||||
{"BT_TOUCH",BT_TOUCH},
|
||||
{"BT_SPIN",BT_SPIN},
|
||||
{"BT_REGULAR",BT_REGULAR},
|
||||
{"BT_STRONG",BT_STRONG},
|
||||
|
||||
// Bustable FOF flags
|
||||
{"BF_PUSHABLES",BF_PUSHABLES},
|
||||
{"BF_EXECUTOR",BF_EXECUTOR},
|
||||
{"BF_ONLYBOTTOM",BF_ONLYBOTTOM},
|
||||
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
// Node flags
|
||||
|
|
|
@ -187,6 +187,9 @@ enum ffloor_e {
|
|||
ffloor_next,
|
||||
ffloor_prev,
|
||||
ffloor_alpha,
|
||||
ffloor_busttype,
|
||||
ffloor_bustflags,
|
||||
ffloor_busttag,
|
||||
};
|
||||
|
||||
static const char *const ffloor_opt[] = {
|
||||
|
@ -205,6 +208,9 @@ static const char *const ffloor_opt[] = {
|
|||
"next",
|
||||
"prev",
|
||||
"alpha",
|
||||
"busttype",
|
||||
"bustflags",
|
||||
"busttag",
|
||||
NULL};
|
||||
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
|
@ -1752,6 +1758,15 @@ static int ffloor_get(lua_State *L)
|
|||
case ffloor_alpha:
|
||||
lua_pushinteger(L, ffloor->alpha);
|
||||
return 1;
|
||||
case ffloor_busttype:
|
||||
lua_pushinteger(L, ffloor->busttype);
|
||||
return 1;
|
||||
case ffloor_bustflags:
|
||||
lua_pushinteger(L, ffloor->bustflags);
|
||||
return 1;
|
||||
case ffloor_busttag:
|
||||
lua_pushinteger(L, ffloor->busttag);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
57
src/p_mobj.c
57
src/p_mobj.c
|
@ -1691,8 +1691,7 @@ static void P_PushableCheckBustables(mobj_t *mo)
|
|||
if (!(rover->flags & FF_BUSTUP))
|
||||
continue;
|
||||
|
||||
// Bustable by pushables?
|
||||
if (!(rover->master->args[3] & TMFB_PUSHABLES))
|
||||
if (!(rover->bustflags & BF_PUSHABLES))
|
||||
continue;
|
||||
|
||||
if (rover->master->frontsector->crumblestate != CRUMBLE_NONE)
|
||||
|
@ -1702,7 +1701,7 @@ static void P_PushableCheckBustables(mobj_t *mo)
|
|||
bottomheight = P_GetFOFBottomZ(mo, node->m_sector, rover, mo->x, mo->y, NULL);
|
||||
|
||||
// Height checks
|
||||
if (rover->flags & FF_SHATTERBOTTOM)
|
||||
if (rover->bustflags & BF_ONLYBOTTOM)
|
||||
{
|
||||
if (mo->z + mo->momz + mo->height < bottomheight)
|
||||
continue;
|
||||
|
@ -1710,36 +1709,42 @@ static void P_PushableCheckBustables(mobj_t *mo)
|
|||
if (mo->z + mo->height > bottomheight)
|
||||
continue;
|
||||
}
|
||||
else if (rover->flags & FF_SPINBUST)
|
||||
{
|
||||
if (mo->z + mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (mo->z + mo->height < bottomheight)
|
||||
continue;
|
||||
}
|
||||
else if (rover->flags & FF_SHATTER)
|
||||
{
|
||||
if (mo->z + mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (mo->z + mo->momz + mo->height < bottomheight)
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mo->z >= topheight)
|
||||
continue;
|
||||
switch (rover->busttype)
|
||||
{
|
||||
case BT_TOUCH:
|
||||
if (mo->z + mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (mo->z + mo->height < bottomheight)
|
||||
continue;
|
||||
if (mo->z + mo->momz + mo->height < bottomheight)
|
||||
continue;
|
||||
|
||||
break;
|
||||
case BT_SPIN:
|
||||
if (mo->z + mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (mo->z + mo->height < bottomheight)
|
||||
continue;
|
||||
|
||||
break;
|
||||
default:
|
||||
if (mo->z >= topheight)
|
||||
continue;
|
||||
|
||||
if (mo->z + mo->height < bottomheight)
|
||||
continue;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
EV_CrumbleChain(NULL, rover); // node->m_sector
|
||||
|
||||
// Run a linedef executor??
|
||||
if (rover->master->args[3] & TMFB_EXECUTOR)
|
||||
P_LinedefExecute((INT16)(rover->master->args[4]), mo, node->m_sector);
|
||||
if (rover->bustflags & BF_EXECUTOR)
|
||||
P_LinedefExecute(rover->busttag, mo, node->m_sector);
|
||||
|
||||
goto bustupdone;
|
||||
}
|
||||
|
@ -2831,7 +2836,7 @@ static void P_CheckMarioBlocks(mobj_t *mo)
|
|||
if (*rover->bottomheight != mo->ceilingz)
|
||||
continue;
|
||||
|
||||
if (rover->flags & FF_SHATTERBOTTOM) // Brick block!
|
||||
if (rover->flags & FF_GOOWATER) // Brick block!
|
||||
EV_CrumbleChain(node->m_sector, rover);
|
||||
else // Question block!
|
||||
EV_MarioBlock(rover, node->m_sector, mo);
|
||||
|
|
41
src/p_spec.c
41
src/p_spec.c
|
@ -5867,12 +5867,12 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f
|
|||
if (flags & FF_QUICKSAND)
|
||||
CheckForQuicksand = true;
|
||||
|
||||
if ((flags & FF_BUSTUP) || (flags & FF_SHATTER) || (flags & FF_SPINBUST))
|
||||
if (flags & FF_BUSTUP)
|
||||
CheckForBustableBlocks = true;
|
||||
|
||||
if ((flags & FF_MARIO))
|
||||
{
|
||||
if (!(flags & FF_SHATTERBOTTOM)) // Don't change the textures of a brick block, just a question block
|
||||
if (!(flags & FF_GOOWATER)) // Don't change the textures of a brick block, just a question block
|
||||
P_AddBlockThinker(sec2, master);
|
||||
CheckForMarioBlocks = true;
|
||||
}
|
||||
|
@ -6875,7 +6875,7 @@ void P_SpawnSpecials(boolean fromnetsave)
|
|||
case 250: // Mario Block
|
||||
ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_CUTLEVEL|FF_MARIO;
|
||||
if (lines[i].args[1] & TMFM_BRICK)
|
||||
ffloorflags |= FF_SHATTERBOTTOM;
|
||||
ffloorflags |= FF_GOOWATER;
|
||||
if (lines[i].args[1] & TMFM_INVISIBLE)
|
||||
ffloorflags &= ~(FF_SOLID|FF_RENDERALL|FF_CUTLEVEL);
|
||||
|
||||
|
@ -6891,36 +6891,53 @@ void P_SpawnSpecials(boolean fromnetsave)
|
|||
}
|
||||
|
||||
case 254: // Bustable block
|
||||
{
|
||||
UINT8 busttype = BT_REGULAR;
|
||||
UINT8 bustflags = 0;
|
||||
|
||||
ffloorflags = FF_EXISTS|FF_BLOCKOTHERS|FF_RENDERALL|FF_BUSTUP;
|
||||
|
||||
//Bustable type
|
||||
switch (lines[i].args[1])
|
||||
{
|
||||
case TMFB_TOUCH:
|
||||
ffloorflags |= FF_SHATTER;
|
||||
busttype = BT_TOUCH;
|
||||
break;
|
||||
case TMFB_SPIN:
|
||||
ffloorflags |= FF_SPINBUST;
|
||||
busttype = BT_SPIN;
|
||||
break;
|
||||
case TMFB_REGULAR:
|
||||
busttype = BT_REGULAR;
|
||||
break;
|
||||
case TMFB_STRONG:
|
||||
ffloorflags |= FF_STRONGBUST;
|
||||
break;
|
||||
default:
|
||||
busttype = BT_STRONG;
|
||||
break;
|
||||
}
|
||||
|
||||
//Translucent?
|
||||
if (lines[i].args[2])
|
||||
ffloorflags |= FF_TRANSLUCENT;
|
||||
|
||||
//Flags
|
||||
if (lines[i].args[3] & TMFB_PUSHABLES)
|
||||
bustflags |= BF_PUSHABLES;
|
||||
if (lines[i].args[3] & TMFB_EXECUTOR)
|
||||
bustflags |= BF_EXECUTOR;
|
||||
if (lines[i].args[3] & TMFB_ONLYBOTTOM)
|
||||
ffloorflags |= FF_SHATTERBOTTOM;
|
||||
bustflags |= BF_ONLYBOTTOM;
|
||||
|
||||
if (!(ffloorflags & FF_SHATTER) || ffloorflags & FF_SHATTERBOTTOM)
|
||||
if (busttype != BT_TOUCH || bustflags & BF_ONLYBOTTOM)
|
||||
ffloorflags |= FF_BLOCKPLAYER;
|
||||
|
||||
P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
|
||||
for (s = -1; (s = P_FindSectorFromTag(lines[i].args[0], s)) >= 0 ;)
|
||||
{
|
||||
ffloor_t *fflr = P_AddFakeFloor(§ors[s], lines[i].frontsector, lines + i, ffloorflags, secthinkers);
|
||||
fflr->busttype = busttype;
|
||||
fflr->bustflags = bustflags;
|
||||
fflr->busttag = lines[i].args[4];
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case 257: // Quicksand
|
||||
ffloorflags = FF_EXISTS|FF_QUICKSAND|FF_RENDERALL|FF_ALLSIDES|FF_CUTSPRITES;
|
||||
if (!(lines[i].args[1]))
|
||||
|
|
144
src/p_user.c
144
src/p_user.c
|
@ -2543,58 +2543,56 @@ static boolean P_PlayerCanBust(player_t *player, ffloor_t *rover)
|
|||
/*if (rover->master->frontsector->crumblestate != CRUMBLE_NONE)
|
||||
return false;*/
|
||||
|
||||
// If it's an FF_SHATTER, you can break it just by touching it.
|
||||
if (rover->flags & FF_SHATTER)
|
||||
return true;
|
||||
|
||||
// If it's an FF_SPINBUST, you can break it if you are in your spinning frames
|
||||
// (either from jumping or spindashing).
|
||||
if (rover->flags & FF_SPINBUST)
|
||||
switch (rover->busttype)
|
||||
{
|
||||
case BT_TOUCH: // Shatters on contact
|
||||
return true;
|
||||
case BT_SPIN: // Can be busted by spinning (either from jumping or spindashing)
|
||||
if ((player->pflags & PF_SPINNING) && !(player->pflags & PF_STARTDASH))
|
||||
return true;
|
||||
|
||||
if ((player->pflags & PF_JUMPED) && !(player->pflags & PF_NOJUMPDAMAGE))
|
||||
return true;
|
||||
|
||||
/* FALLTHRU */
|
||||
case BT_REGULAR:
|
||||
// Spinning (and not jumping)
|
||||
if ((player->pflags & PF_SPINNING) && !(player->pflags & PF_JUMPED))
|
||||
return true;
|
||||
|
||||
// Super
|
||||
if (player->powers[pw_super])
|
||||
return true;
|
||||
|
||||
// Dashmode
|
||||
if ((player->charflags & (SF_DASHMODE|SF_MACHINE)) == (SF_DASHMODE|SF_MACHINE) && player->dashmode >= DASHMODE_THRESHOLD)
|
||||
return true;
|
||||
|
||||
// NiGHTS drill
|
||||
if (player->pflags & PF_DRILLING)
|
||||
return true;
|
||||
|
||||
// Recording for Metal Sonic
|
||||
if (metalrecording)
|
||||
return true;
|
||||
|
||||
/* FALLTHRU */
|
||||
case BT_STRONG: // Requires a "strong ability"
|
||||
if (player->charability == CA_GLIDEANDCLIMB)
|
||||
return true;
|
||||
|
||||
if (player->pflags & PF_BOUNCING)
|
||||
return true;
|
||||
|
||||
if (player->charability == CA_TWINSPIN && player->panim == PA_ABILITY)
|
||||
return true;
|
||||
|
||||
if (player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Strong abilities can break even FF_STRONGBUST.
|
||||
if (player->charability == CA_GLIDEANDCLIMB)
|
||||
return true;
|
||||
|
||||
if (player->pflags & PF_BOUNCING)
|
||||
return true;
|
||||
|
||||
if (player->charability == CA_TWINSPIN && player->panim == PA_ABILITY)
|
||||
return true;
|
||||
|
||||
if (player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2)
|
||||
return true;
|
||||
|
||||
// Everyone else is out of luck.
|
||||
if (rover->flags & FF_STRONGBUST)
|
||||
return false;
|
||||
|
||||
// Spinning (and not jumping)
|
||||
if ((player->pflags & PF_SPINNING) && !(player->pflags & PF_JUMPED))
|
||||
return true;
|
||||
|
||||
// Super
|
||||
if (player->powers[pw_super])
|
||||
return true;
|
||||
|
||||
// Dashmode
|
||||
if ((player->charflags & (SF_DASHMODE|SF_MACHINE)) == (SF_DASHMODE|SF_MACHINE) && player->dashmode >= DASHMODE_THRESHOLD)
|
||||
return true;
|
||||
|
||||
// NiGHTS drill
|
||||
if (player->pflags & PF_DRILLING)
|
||||
return true;
|
||||
|
||||
// Recording for Metal Sonic
|
||||
if (metalrecording)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -2645,7 +2643,7 @@ static void P_CheckBustableBlocks(player_t *player)
|
|||
}
|
||||
|
||||
// Height checks
|
||||
if (rover->flags & FF_SHATTERBOTTOM)
|
||||
if (rover->bustflags & BF_ONLYBOTTOM)
|
||||
{
|
||||
if (player->mo->z + player->mo->momz + player->mo->height < bottomheight)
|
||||
continue;
|
||||
|
@ -2653,35 +2651,41 @@ static void P_CheckBustableBlocks(player_t *player)
|
|||
if (player->mo->z + player->mo->height > bottomheight)
|
||||
continue;
|
||||
}
|
||||
else if (rover->flags & FF_SPINBUST)
|
||||
{
|
||||
if (player->mo->z + player->mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (player->mo->z + player->mo->height < bottomheight)
|
||||
continue;
|
||||
}
|
||||
else if (rover->flags & FF_SHATTER)
|
||||
{
|
||||
if (player->mo->z + player->mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (player->mo->z + player->mo->momz + player->mo->height < bottomheight)
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (player->mo->z >= topheight)
|
||||
continue;
|
||||
switch (rover->busttype)
|
||||
{
|
||||
case BT_TOUCH:
|
||||
if (player->mo->z + player->mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (player->mo->z + player->mo->height < bottomheight)
|
||||
continue;
|
||||
if (player->mo->z + player->mo->momz + player->mo->height < bottomheight)
|
||||
continue;
|
||||
|
||||
break;
|
||||
case BT_SPIN:
|
||||
if (player->mo->z + player->mo->momz > topheight)
|
||||
continue;
|
||||
|
||||
if (player->mo->z + player->mo->height < bottomheight)
|
||||
continue;
|
||||
|
||||
break;
|
||||
default:
|
||||
if (player->mo->z >= topheight)
|
||||
continue;
|
||||
|
||||
if (player->mo->z + player->mo->height < bottomheight)
|
||||
continue;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Impede the player's fall a bit
|
||||
if (((rover->flags & FF_SPINBUST) || (rover->flags & FF_SHATTER)) && player->mo->z >= topheight)
|
||||
if (((rover->busttype == BT_TOUCH) || (rover->busttype == BT_SPIN)) && player->mo->z >= topheight)
|
||||
player->mo->momz >>= 1;
|
||||
else if (rover->flags & FF_SHATTER)
|
||||
else if (rover->busttype == BT_TOUCH)
|
||||
{
|
||||
player->mo->momx >>= 1;
|
||||
player->mo->momy >>= 1;
|
||||
|
@ -2693,8 +2697,8 @@ static void P_CheckBustableBlocks(player_t *player)
|
|||
EV_CrumbleChain(NULL, rover); // node->m_sector
|
||||
|
||||
// Run a linedef executor??
|
||||
if (rover->master->args[3] & TMFB_EXECUTOR)
|
||||
P_LinedefExecute((INT16)(rover->master->args[4]), player->mo, node->m_sector);
|
||||
if (rover->bustflags & BF_EXECUTOR)
|
||||
P_LinedefExecute(rover->busttag, player->mo, node->m_sector);
|
||||
|
||||
goto bustupdone;
|
||||
}
|
||||
|
@ -8669,7 +8673,7 @@ static void P_MovePlayer(player_t *player)
|
|||
#endif
|
||||
|
||||
// Look for blocks to bust up
|
||||
// Because of FF_SHATTER, we should look for blocks constantly,
|
||||
// Because of BT_TOUCH, we should look for blocks constantly,
|
||||
// not just when spinning or playing as Knuckles
|
||||
if (CheckForBustableBlocks)
|
||||
P_CheckBustableBlocks(player);
|
||||
|
|
26
src/r_defs.h
26
src/r_defs.h
|
@ -137,21 +137,32 @@ typedef enum
|
|||
FF_FLOATBOB = 0x40000, ///< Floats on water and bobs if you step on it.
|
||||
FF_NORETURN = 0x80000, ///< Used with ::FF_CRUMBLE. Will not return to its original position after falling.
|
||||
FF_CRUMBLE = 0x100000, ///< Falls 2 seconds after being stepped on, and randomly brings all touching crumbling 3dfloors down with it, providing their master sectors share the same tag (allows crumble platforms above or below, to also exist).
|
||||
FF_SHATTERBOTTOM = 0x200000, ///< Used with ::FF_BUSTUP. Like FF_SHATTER, but only breaks from the bottom. Good for springing up through rubble.
|
||||
FF_GOOWATER = 0x200000, ///< Used with ::FF_SWIMMABLE. Makes thick bouncey goop.
|
||||
FF_MARIO = 0x400000, ///< Acts like a question block when hit from underneath. Goodie spawned at top is determined by master sector.
|
||||
FF_BUSTUP = 0x800000, ///< You can spin through/punch this block and it will crumble!
|
||||
FF_QUICKSAND = 0x1000000, ///< Quicksand!
|
||||
FF_PLATFORM = 0x2000000, ///< You can jump up through this to the top.
|
||||
FF_REVERSEPLATFORM = 0x4000000, ///< A fall-through floor in normal gravity, a platform in reverse gravity.
|
||||
FF_INTANGIBLEFLATS = 0x6000000, ///< Both flats are intangible, but the sides are still solid.
|
||||
FF_SHATTER = 0x8000000, ///< Used with ::FF_BUSTUP. Bustable on mere touch.
|
||||
FF_SPINBUST = 0x10000000, ///< Used with ::FF_BUSTUP. Also bustable if you're in your spinning frames.
|
||||
FF_STRONGBUST = 0x20000000, ///< Used with ::FF_BUSTUP. Only bustable by "strong" characters (Knuckles) and abilities (bouncing, twinspin, melee).
|
||||
FF_RIPPLE = 0x40000000, ///< Ripple the flats
|
||||
FF_COLORMAPONLY = 0x80000000, ///< Only copy the colormap, not the lightlevel
|
||||
FF_GOOWATER = FF_SHATTERBOTTOM, ///< Used with ::FF_SWIMMABLE. Makes thick bouncey goop.
|
||||
} ffloortype_e;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BT_TOUCH,
|
||||
BT_SPIN,
|
||||
BT_REGULAR,
|
||||
BT_STRONG,
|
||||
} busttype_e;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BF_PUSHABLES = 1,
|
||||
BF_EXECUTOR = 1<<1,
|
||||
BF_ONLYBOTTOM = 1<<2,
|
||||
} bustflags_e;
|
||||
|
||||
typedef struct ffloor_s
|
||||
{
|
||||
fixed_t *topheight;
|
||||
|
@ -184,6 +195,11 @@ typedef struct ffloor_s
|
|||
INT32 alpha;
|
||||
tic_t norender; // for culling
|
||||
|
||||
// Only relevant for FF_BUSTUP
|
||||
UINT8 busttype;
|
||||
UINT8 bustflags;
|
||||
INT16 busttag;
|
||||
|
||||
// these are saved for netgames, so do not let Lua touch these!
|
||||
ffloortype_e spawnflags; // flags the 3D floor spawned with
|
||||
INT32 spawnalpha; // alpha the 3D floor spawned with
|
||||
|
|
Loading…
Reference in a new issue