mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-10 23:01:59 +00:00
- fixed: Boom's generalized doors are not retriggerable, even if they are not remote. (Patch by Gez)
SVN r3555 (trunk)
This commit is contained in:
parent
8f5eff419d
commit
52bb3a4dbe
4 changed files with 16 additions and 10 deletions
|
@ -412,7 +412,7 @@ DDoor::DDoor (sector_t *sec, EVlDoor type, fixed_t speed, int delay, int lightTa
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||||
int tag, int speed, int delay, int lock, int lightTag)
|
int tag, int speed, int delay, int lock, int lightTag, bool boomgen)
|
||||||
{
|
{
|
||||||
bool rtn = false;
|
bool rtn = false;
|
||||||
int secnum;
|
int secnum;
|
||||||
|
@ -440,6 +440,9 @@ bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||||
// if door already has a thinker, use it
|
// if door already has a thinker, use it
|
||||||
if (sec->PlaneMoving(sector_t::ceiling))
|
if (sec->PlaneMoving(sector_t::ceiling))
|
||||||
{
|
{
|
||||||
|
// Boom used remote door logic for generalized doors, even if they are manual
|
||||||
|
if (boomgen)
|
||||||
|
return false;
|
||||||
if (sec->ceilingdata->IsKindOf (RUNTIME_CLASS(DDoor)))
|
if (sec->ceilingdata->IsKindOf (RUNTIME_CLASS(DDoor)))
|
||||||
{
|
{
|
||||||
DDoor *door = barrier_cast<DDoor *>(sec->ceilingdata);
|
DDoor *door = barrier_cast<DDoor *>(sec->ceilingdata);
|
||||||
|
@ -485,7 +488,7 @@ bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||||
while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0)
|
while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0)
|
||||||
{
|
{
|
||||||
sec = §ors[secnum];
|
sec = §ors[secnum];
|
||||||
// if the ceiling already moving, don't start the door action
|
// if the ceiling is already moving, don't start the door action
|
||||||
if (sec->PlaneMoving(sector_t::ceiling))
|
if (sec->PlaneMoving(sector_t::ceiling))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -252,8 +252,9 @@ FUNC(LS_Generic_Door)
|
||||||
{
|
{
|
||||||
int tag, lightTag;
|
int tag, lightTag;
|
||||||
DDoor::EVlDoor type;
|
DDoor::EVlDoor type;
|
||||||
|
bool boomgen = false;
|
||||||
|
|
||||||
switch (arg2 & 127)
|
switch (arg2 & 63)
|
||||||
{
|
{
|
||||||
case 0: type = DDoor::doorRaise; break;
|
case 0: type = DDoor::doorRaise; break;
|
||||||
case 1: type = DDoor::doorOpen; break;
|
case 1: type = DDoor::doorOpen; break;
|
||||||
|
@ -261,6 +262,8 @@ FUNC(LS_Generic_Door)
|
||||||
case 3: type = DDoor::doorClose; break;
|
case 3: type = DDoor::doorClose; break;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
|
// Boom doesn't allow manual generalized doors to be activated while they move
|
||||||
|
if (arg2 & 64) boomgen = true;
|
||||||
if (arg2 & 128)
|
if (arg2 & 128)
|
||||||
{
|
{
|
||||||
// New for 2.0.58: Finally support BOOM's local door light effect
|
// New for 2.0.58: Finally support BOOM's local door light effect
|
||||||
|
@ -272,7 +275,7 @@ FUNC(LS_Generic_Door)
|
||||||
tag = arg0;
|
tag = arg0;
|
||||||
lightTag = 0;
|
lightTag = 0;
|
||||||
}
|
}
|
||||||
return EV_DoDoor (type, ln, it, tag, SPEED(arg1), OCTICS(arg3), arg4, lightTag);
|
return EV_DoDoor (type, ln, it, tag, SPEED(arg1), OCTICS(arg3), arg4, lightTag, boomgen);
|
||||||
}
|
}
|
||||||
|
|
||||||
FUNC(LS_Floor_LowerByValue)
|
FUNC(LS_Floor_LowerByValue)
|
||||||
|
|
|
@ -535,7 +535,7 @@ protected:
|
||||||
|
|
||||||
friend bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
friend bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||||
int tag, int speed, int delay, int lock,
|
int tag, int speed, int delay, int lock,
|
||||||
int lightTag);
|
int lightTag, bool boomgen);
|
||||||
friend void P_SpawnDoorCloseIn30 (sector_t *sec);
|
friend void P_SpawnDoorCloseIn30 (sector_t *sec);
|
||||||
friend void P_SpawnDoorRaiseIn5Mins (sector_t *sec);
|
friend void P_SpawnDoorRaiseIn5Mins (sector_t *sec);
|
||||||
private:
|
private:
|
||||||
|
@ -545,7 +545,7 @@ private:
|
||||||
|
|
||||||
bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||||
int tag, int speed, int delay, int lock,
|
int tag, int speed, int delay, int lock,
|
||||||
int lightTag);
|
int lightTag, bool boomgen = false);
|
||||||
void P_SpawnDoorCloseIn30 (sector_t *sec);
|
void P_SpawnDoorCloseIn30 (sector_t *sec);
|
||||||
void P_SpawnDoorRaiseIn5Mins (sector_t *sec);
|
void P_SpawnDoorRaiseIn5Mins (sector_t *sec);
|
||||||
|
|
||||||
|
|
|
@ -494,10 +494,10 @@ include "xlat/defines.i"
|
||||||
0x0008 : D_NORMAL,
|
0x0008 : D_NORMAL,
|
||||||
0x0010 : D_FAST,
|
0x0010 : D_FAST,
|
||||||
0x0018 : D_TURBO]
|
0x0018 : D_TURBO]
|
||||||
arg3 = 0x0060 [0x0000 : 0,
|
arg3 = 0x0060 [0x0000 : 64,
|
||||||
0x0020 : 1,
|
0x0020 : 65,
|
||||||
0x0040 : 2,
|
0x0040 : 66,
|
||||||
0x0060 : 3]
|
0x0060 : 67]
|
||||||
arg4 = 0x0300 [0x0000 : 8,
|
arg4 = 0x0300 [0x0000 : 8,
|
||||||
0x0100 : 34,
|
0x0100 : 34,
|
||||||
0x0200 : 69,
|
0x0200 : 69,
|
||||||
|
|
Loading…
Reference in a new issue