- 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:
Christoph Oelckers 2012-04-12 12:42:00 +00:00
parent 8f5eff419d
commit 52bb3a4dbe
4 changed files with 16 additions and 10 deletions

View File

@ -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 = &sectors[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;

View File

@ -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)

View File

@ -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);

View File

@ -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,