Back to the Vavoom Forum Archives
Firebrand
Index: progs/common/engine/GameObject.vc =================================================================== --- progs/common/engine/GameObject.vc (revision 4303) +++ progs/common/engine/GameObject.vc (working copy) @@ -141,7 +141,9 @@ ML_BLOCK_FLOATERS = 0x00040000, ML_CLIP_MIDTEX = 0x00080000, // Automatic for every Strife line ML_WRAP_MIDTEX = 0x00100000, - ML_FIRSTSIDEONLY = 0x00800000; // Actiavte only when crossed from front side. + ML_FIRSTSIDEONLY = 0x00800000, // Actiavte only when crossed from front side. + ML_KEEPDATA = 0x01000000; // Keep FloorData or CeilingData after activating them. + // Used to simulate original Heretic behaviour. // These will be converted. const int Index: progs/common/linespec/FloorMover.vc =================================================================== --- progs/common/linespec/FloorMover.vc (revision 4303) +++ progs/common/linespec/FloorMover.vc (working copy) @@ -258,12 +258,22 @@ DestHeight = Level.FindNextHighestFloor(Sector, &Spot); Spot.z = DestHeight; FloorDestDist = DotProduct(Sector->floor.normal, Spot); + // NO MORE DAMAGE, IF APPLICABLE if (Line) { Sector->floor.pic = Line->frontsector->floor.pic; + Sector->special = (Sector->special & SECSPEC_SECRET_MASK) | + (Line->frontsector->special & ~SECSPEC_SECRET_MASK); + if (Line->flags & ML_KEEPDATA) + { + // Don't destroy the thinker + Not_Keep = false; + } } - // NO MORE DAMAGE, IF APPLICABLE - Sector->special &= SECSPEC_SECRET_MASK; + else + { + Sector->special &= SECSPEC_SECRET_MASK; + } SeqName = LineSpecialLevelInfo(Level).DefaultFloorAltSound; break; Index: progs/common/linespec/SectorMover.vc =================================================================== --- progs/common/linespec/SectorMover.vc (revision 4303) +++ progs/common/linespec/SectorMover.vc (working copy) @@ -25,6 +25,8 @@ class SectorMover : SectorThinker; +bool Not_Keep; // This flag let's us know if we can destroy FloorData + //========================================================================== // // Finished @@ -33,14 +35,17 @@ void Finished() { - if (Sector->FloorData == self) - Sector->FloorData = none; - if (Sector->CeilingData == self) - Sector->CeilingData = none; - if (Sector->LightingData == self) - Sector->LightingData = none; - RemoveAffector(); - Destroy(); + if (Not_Keep) + { + if (Sector->FloorData == self) + Sector->FloorData = none; + if (Sector->CeilingData == self) + Sector->CeilingData = none; + if (Sector->LightingData == self) + Sector->LightingData = none; + RemoveAffector(); + Destroy(); + } } //************************************************************************** @@ -98,7 +103,7 @@ /*if (flag) { sector->floor.dist = lastpos; - P_ChangeSector(sector, crush); + XLevel.ChangeSector(sector, crush); return RES_CRUSHED; }*/ } @@ -233,4 +238,5 @@ defaultproperties { + Not_Keep = true; } Index: progs/doom/game/MainGameInfo.vc =================================================================== --- progs/doom/game/MainGameInfo.vc (revision 4303) +++ progs/doom/game/MainGameInfo.vc (working copy) @@ -540,7 +540,8 @@ //========================================================================== void SetLineTrans(int i, int special, int arg1, int arg2, int arg3, - int arg4, int arg5, int spac, int repeat, optional int monst) + int arg4, int arg5, int spac, int repeat, optional int monst, + optional int not_destroy) { spec_trans_tab.special = special; spec_trans_tab.arg1 = arg1; @@ -551,6 +552,7 @@ spec_trans_tab.spac = spac; spec_trans_tab.repeat = repeat; spec_trans_tab.monst = monst; + spec_trans_tab.not_destroy = not_destroy; } //========================================================================== @@ -1010,6 +1012,11 @@ { line->flags &= ~ML_MONSTERSCANACTIVATE; } + // Check to see if we want thinkers destroyed or not + if (spec_trans_tab[OldSpec].not_destroy) + { + line->flags |= ML_KEEPDATA; + } } //========================================================================== Index: progs/heretic/game/MainGameInfo.vc =================================================================== --- progs/heretic/game/MainGameInfo.vc (revision 4303) +++ progs/heretic/game/MainGameInfo.vc (working copy) @@ -43,6 +43,7 @@ int spac; int repeat; int monst; + int not_destroy; }; spec_trans_t spec_trans_tab[NUM_SPECIALS]; @@ -210,9 +211,9 @@ SetLineTrans(18, LNSPEC_FloorRaiseToNearest, -1, 8, 0, 0, 0, SPAC_Use, false); SetLineTrans(19, LNSPEC_FloorLowerToHighest, -1, 8, 128, 0, 0, SPAC_Cross, false); - SetLineTrans(20, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Use, false); + SetLineTrans(20, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Use, false, false, true); SetLineTrans(21, LNSPEC_PlatDownWaitUpStayLip, -1, 32, 105, 0, 0, SPAC_Use, false); - SetLineTrans(22, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Cross, false); + SetLineTrans(22, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Cross, false, false, true); SetLineTrans(23, LNSPEC_FloorLowerToLowest, -1, 8, 0, 0, 0, SPAC_Use, false); SetLineTrans(24, LNSPEC_FloorRaiseToLowestCeiling, -1, 8, 0, 0, 0, SPAC_Impact, false); SetLineTrans(25, LNSPEC_CeilingCrushAndRaiseA, -1, 8, 8, 10, 0, SPAC_Cross, false); @@ -239,7 +240,7 @@ SetLineTrans(44, LNSPEC_CeilingLowerAndCrush, -1, 8, 0, 0, 0, SPAC_Cross, false); SetLineTrans(45, LNSPEC_FloorLowerToHighest, -1, 8, 128, 0, 0, SPAC_Use, true); SetLineTrans(46, LNSPEC_DoorOpen, -1, 16, 0, 0, 0, SPAC_Impact, true, true); - SetLineTrans(47, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Impact, false); + SetLineTrans(47, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Impact, false, false, true); SetLineTrans(48, LNSPEC_ScrollTextureLeft, 64, 0, 0, 0, 0, SPAC_Cross, false); SetLineTrans(49, LNSPEC_CeilingCrushAndRaiseA, -1, 8, 8, 10, 0, SPAC_Use, false); @@ -262,7 +263,7 @@ SetLineTrans(65, LNSPEC_FloorRaiseAndCrush, -1, 8, 10, 0, 0, SPAC_Use, true); SetLineTrans(66, LNSPEC_FloorRaiseByValueChangeTex, -1, 4, 3, 0, 0, SPAC_Use, true); SetLineTrans(67, LNSPEC_FloorRaiseByValueChangeTex, -1, 4, 4, 0, 0, SPAC_Use, true); - SetLineTrans(68, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Use, true); + SetLineTrans(68, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Use, true, false, true); SetLineTrans(69, LNSPEC_FloorRaiseToNearest, -1, 8, 0, 0, 0, SPAC_Use, true); SetLineTrans(70, LNSPEC_FloorLowerToHighest, -1, 32, 136, 0, 0, SPAC_Use, true); @@ -292,7 +293,7 @@ SetLineTrans(92, LNSPEC_FloorRaiseByValue, -1, 8, 24, 0, 0, SPAC_Cross, true); SetLineTrans(93, LNSPEC_FloorRaiseByValueChange, -1, 8, 24, 0, 0, SPAC_Cross, true); SetLineTrans(94, LNSPEC_FloorRaiseAndCrush, -1, 8, 10, 0, 0, SPAC_Cross, true); - SetLineTrans(95, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Cross, true); + SetLineTrans(95, LNSPEC_FloorRaiseToNearestChange, -1, 4, 0, 0, 0, SPAC_Cross, true, false, true); SetLineTrans(96, LNSPEC_FloorRaiseByTexture, -1, 8, 0, 0, 0, SPAC_Cross, true); SetLineTrans(97, LNSPEC_Teleport, 0, -1, 0, 0, 0, SPAC_Cross, true, true); SetLineTrans(98, LNSPEC_FloorLowerToHighest, -1, 32, 136, 0, 0, SPAC_Cross, true); @@ -315,7 +316,8 @@ //========================================================================== void SetLineTrans(int i, int special, int arg1, int arg2, int arg3, - int arg4, int arg5, int spac, int repeat, optional int monst) + int arg4, int arg5, int spac, int repeat, optional int monst, + optional int not_destroy) { spec_trans_tab.special = special; spec_trans_tab.arg1 = arg1; @@ -326,6 +328,7 @@ spec_trans_tab.spac = spac; spec_trans_tab.repeat = repeat; spec_trans_tab.monst = monst; + spec_trans_tab.not_destroy = not_destroy; } //========================================================================== @@ -417,6 +420,11 @@ { line->flags &= ~ML_MONSTERSCANACTIVATE; } + // Check to see if we want thinkers destroyed or not + if (spec_trans_tab[OldSpec].not_destroy) + { + line->flags |= ML_KEEPDATA; + } } //========================================================================== Index: progs/strife/game/MainGameInfo.vc =================================================================== --- progs/strife/game/MainGameInfo.vc (revision 4303) +++ progs/strife/game/MainGameInfo.vc (working copy) @@ -344,7 +344,8 @@ //========================================================================== void SetLineTrans(int i, int special, int arg1, int arg2, int arg3, - int arg4, int arg5, int spac, int repeat, optional int monst) + int arg4, int arg5, int spac, int repeat, optional int monst, + optional int not_destroy) { spec_trans_tab.special = special; spec_trans_tab.arg1 = arg1; @@ -355,6 +356,7 @@ spec_trans_tab.spac = spac; spec_trans_tab.repeat = repeat; spec_trans_tab.monst = monst; + spec_trans_tab.not_destroy = not_destroy; } //========================================================================== @@ -474,6 +476,11 @@ print("Translucent flag not compatible with line special"); } } + // Check to see if we want thinkers destroyed or not + if (spec_trans_tab[OldSpec].not_destroy) + { + line->flags |= ML_KEEPDATA; + } } //========================================================================== Index: source/p_gameobject.h =================================================================== --- source/p_gameobject.h (revision 4303) +++ source/p_gameobject.h (working copy) @@ -125,6 +125,8 @@ ML_CLIP_MIDTEX = 0x00080000, // Automatic for every Strife line ML_WRAP_MIDTEX = 0x00100000, ML_FIRSTSIDEONLY = 0x00800000, // Actiavte only when crossed from front side. + ML_KEEPDATA = 0x01000000, // Keep FloorData or CeilingData after activating them. + // Used to simulate original Heretic behaviour. ML_SPAC_SHIFT = 10, ML_SPAC_MASK = 0x00001c00,
Janis Legzdinsh