mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +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,
|
||||
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;
|
||||
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 (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)))
|
||||
{
|
||||
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)
|
||||
{
|
||||
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))
|
||||
continue;
|
||||
|
||||
|
|
|
@ -252,8 +252,9 @@ FUNC(LS_Generic_Door)
|
|||
{
|
||||
int tag, lightTag;
|
||||
DDoor::EVlDoor type;
|
||||
bool boomgen = false;
|
||||
|
||||
switch (arg2 & 127)
|
||||
switch (arg2 & 63)
|
||||
{
|
||||
case 0: type = DDoor::doorRaise; break;
|
||||
case 1: type = DDoor::doorOpen; break;
|
||||
|
@ -261,6 +262,8 @@ FUNC(LS_Generic_Door)
|
|||
case 3: type = DDoor::doorClose; break;
|
||||
default: return false;
|
||||
}
|
||||
// Boom doesn't allow manual generalized doors to be activated while they move
|
||||
if (arg2 & 64) boomgen = true;
|
||||
if (arg2 & 128)
|
||||
{
|
||||
// New for 2.0.58: Finally support BOOM's local door light effect
|
||||
|
@ -272,7 +275,7 @@ FUNC(LS_Generic_Door)
|
|||
tag = arg0;
|
||||
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)
|
||||
|
|
|
@ -535,7 +535,7 @@ protected:
|
|||
|
||||
friend bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||
int tag, int speed, int delay, int lock,
|
||||
int lightTag);
|
||||
int lightTag, bool boomgen);
|
||||
friend void P_SpawnDoorCloseIn30 (sector_t *sec);
|
||||
friend void P_SpawnDoorRaiseIn5Mins (sector_t *sec);
|
||||
private:
|
||||
|
@ -545,7 +545,7 @@ private:
|
|||
|
||||
bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing,
|
||||
int tag, int speed, int delay, int lock,
|
||||
int lightTag);
|
||||
int lightTag, bool boomgen = false);
|
||||
void P_SpawnDoorCloseIn30 (sector_t *sec);
|
||||
void P_SpawnDoorRaiseIn5Mins (sector_t *sec);
|
||||
|
||||
|
|
|
@ -494,10 +494,10 @@ include "xlat/defines.i"
|
|||
0x0008 : D_NORMAL,
|
||||
0x0010 : D_FAST,
|
||||
0x0018 : D_TURBO]
|
||||
arg3 = 0x0060 [0x0000 : 0,
|
||||
0x0020 : 1,
|
||||
0x0040 : 2,
|
||||
0x0060 : 3]
|
||||
arg3 = 0x0060 [0x0000 : 64,
|
||||
0x0020 : 65,
|
||||
0x0040 : 66,
|
||||
0x0060 : 67]
|
||||
arg4 = 0x0300 [0x0000 : 8,
|
||||
0x0100 : 34,
|
||||
0x0200 : 69,
|
||||
|
|
Loading…
Reference in a new issue