mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-25 22:01:01 +00:00
Implement FOF types 252-256
This commit is contained in:
parent
15defaebeb
commit
e3b86d0c74
5 changed files with 114 additions and 27 deletions
|
@ -1699,6 +1699,51 @@ udmf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
252
|
||||||
|
{
|
||||||
|
title = "Bustable Block";
|
||||||
|
prefix = "(252)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Bustable type";
|
||||||
|
type = 11;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
0 = "Touch";
|
||||||
|
1 = "Spin";
|
||||||
|
2 = "Regular";
|
||||||
|
3 = "Strong";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arg2
|
||||||
|
{
|
||||||
|
title = "Translucent?"
|
||||||
|
type = 11;
|
||||||
|
enum = "noyes";
|
||||||
|
}
|
||||||
|
arg3
|
||||||
|
{
|
||||||
|
title = "Flags";
|
||||||
|
type = 12;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
1 = "Bustable by pushables";
|
||||||
|
2 = "Trigger linedef executor";
|
||||||
|
4 = "Only bustable from below";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arg4
|
||||||
|
{
|
||||||
|
title = "Linedef executor tag";
|
||||||
|
type = 15;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
258
|
258
|
||||||
{
|
{
|
||||||
title = "Laser";
|
title = "Laser";
|
||||||
|
|
|
@ -1688,8 +1688,8 @@ static void P_PushableCheckBustables(mobj_t *mo)
|
||||||
|
|
||||||
if (!(rover->flags & FF_BUSTUP)) continue;
|
if (!(rover->flags & FF_BUSTUP)) continue;
|
||||||
|
|
||||||
// Needs ML_EFFECT4 flag for pushables to break it
|
// Bustable by pushables?
|
||||||
if (!(rover->master->flags & ML_EFFECT4)) continue;
|
if (!(rover->master->args[3] & 1)) continue;
|
||||||
|
|
||||||
if (!rover->master->frontsector->crumblestate)
|
if (!rover->master->frontsector->crumblestate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2983,6 +2983,45 @@ static void P_ConvertBinaryMap(void)
|
||||||
M_Memcpy(lines[i].stringargs[0], buffer, strlen(buffer) + 1);
|
M_Memcpy(lines[i].stringargs[0], buffer, strlen(buffer) + 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 252: //FOF: Shatter block
|
||||||
|
case 253: //FOF: Shatter block, translucent
|
||||||
|
case 254: //FOF: Bustable block
|
||||||
|
case 255: //FOF: Spin-bustable block
|
||||||
|
case 256: //FOF: Spin-bustable block, translucent
|
||||||
|
lines[i].args[0] = lines[i].tag;
|
||||||
|
|
||||||
|
//Bustable type
|
||||||
|
if (lines[i].special <= 253)
|
||||||
|
lines[i].args[1] = 0;
|
||||||
|
else if (lines[i].special >= 255)
|
||||||
|
lines[i].args[1] = 1;
|
||||||
|
else if (lines[i].flags & ML_NOCLIMB)
|
||||||
|
lines[i].args[1] = 3;
|
||||||
|
else
|
||||||
|
lines[i].args[1] = 2;
|
||||||
|
|
||||||
|
//Translucency
|
||||||
|
if (lines[i].special == 253 || lines[i].special == 256)
|
||||||
|
{
|
||||||
|
lines[i].args[2] = 1;
|
||||||
|
if (sides[lines[i].sidenum[0]].toptexture > 0)
|
||||||
|
lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
|
||||||
|
else
|
||||||
|
lines[i].alpha = FRACUNIT/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lines[i].flags & ML_EFFECT4)
|
||||||
|
lines[i].args[3] |= 1; //Bustable by pushables
|
||||||
|
if (lines[i].flags & ML_EFFECT5)
|
||||||
|
{
|
||||||
|
lines[i].args[3] |= 2; //Trigger linedef executor
|
||||||
|
lines[i].args[4] = P_AproxDistance(lines[i].dx, lines[i].dy) >> FRACBITS;
|
||||||
|
}
|
||||||
|
if (lines[i].special == 252 && lines[i].flags & ML_NOCLIMB)
|
||||||
|
lines[i].args[4] |= 4; //Bust only from below
|
||||||
|
|
||||||
|
lines[i].special = 254;
|
||||||
|
break;
|
||||||
case 258: //FOF: Laser
|
case 258: //FOF: Laser
|
||||||
lines[i].args[0] = lines[i].tag;
|
lines[i].args[0] = lines[i].tag;
|
||||||
if (lines[i].flags & ML_EFFECT1)
|
if (lines[i].flags & ML_EFFECT1)
|
||||||
|
|
47
src/p_spec.c
47
src/p_spec.c
|
@ -7008,34 +7008,37 @@ void P_SpawnSpecials(boolean fromnetsave)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 252: // Shatter block (breaks when touched)
|
|
||||||
ffloorflags = FF_EXISTS|FF_BLOCKOTHERS|FF_RENDERALL|FF_BUSTUP|FF_SHATTER;
|
|
||||||
if (lines[i].flags & ML_NOCLIMB)
|
|
||||||
ffloorflags |= FF_BLOCKPLAYER|FF_SHATTERBOTTOM;
|
|
||||||
|
|
||||||
P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 253: // Translucent shatter block (see 76)
|
|
||||||
P_AddFakeFloorsByLine(i, FF_EXISTS|FF_BLOCKOTHERS|FF_RENDERALL|FF_BUSTUP|FF_SHATTER|FF_TRANSLUCENT, secthinkers);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 254: // Bustable block
|
case 254: // Bustable block
|
||||||
ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_BUSTUP;
|
ffloorflags = FF_EXISTS|FF_BLOCKOTHERS|FF_RENDERALL|FF_BUSTUP;
|
||||||
if (lines[i].flags & ML_NOCLIMB)
|
|
||||||
|
//Bustable type
|
||||||
|
switch (lines[i].args[1])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ffloorflags |= FF_SHATTER;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ffloorflags |= FF_SPINBUST;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
ffloorflags |= FF_STRONGBUST;
|
ffloorflags |= FF_STRONGBUST;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lines[i].args[2])
|
||||||
|
ffloorflags |= FF_TRANSLUCENT;
|
||||||
|
|
||||||
|
if (lines[i].args[2] & 4)
|
||||||
|
ffloorflags |= FF_SHATTERBOTTOM;
|
||||||
|
|
||||||
|
if (!(ffloorflags & FF_SHATTER) || ffloorflags & FF_SHATTERBOTTOM)
|
||||||
|
ffloorflags |= FF_BLOCKPLAYER;
|
||||||
|
|
||||||
P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
|
P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 255: // Spin bust block (breaks when jumped or spun downwards onto)
|
|
||||||
P_AddFakeFloorsByLine(i, FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_BUSTUP|FF_SPINBUST, secthinkers);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 256: // Translucent spin bust block (see 78)
|
|
||||||
P_AddFakeFloorsByLine(i, FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_BUSTUP|FF_SPINBUST|FF_TRANSLUCENT, secthinkers);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 257: // Quicksand
|
case 257: // Quicksand
|
||||||
ffloorflags = FF_EXISTS|FF_QUICKSAND|FF_RENDERALL|FF_ALLSIDES|FF_CUTSPRITES;
|
ffloorflags = FF_EXISTS|FF_QUICKSAND|FF_RENDERALL|FF_ALLSIDES|FF_CUTSPRITES;
|
||||||
if (lines[i].flags & ML_EFFECT5)
|
if (lines[i].flags & ML_EFFECT5)
|
||||||
|
|
|
@ -2659,8 +2659,8 @@ static void P_CheckBustableBlocks(player_t *player)
|
||||||
EV_CrumbleChain(NULL, rover); // node->m_sector
|
EV_CrumbleChain(NULL, rover); // node->m_sector
|
||||||
|
|
||||||
// Run a linedef executor??
|
// Run a linedef executor??
|
||||||
if (rover->master->flags & ML_EFFECT5)
|
if (rover->master->args[3] & 2)
|
||||||
P_LinedefExecute((INT16)(P_AproxDistance(rover->master->dx, rover->master->dy)>>FRACBITS), player->mo, node->m_sector);
|
P_LinedefExecute((INT16)(rover->master->args[4]), player->mo, node->m_sector);
|
||||||
|
|
||||||
goto bustupdone;
|
goto bustupdone;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue