From 8244d1ea07fa66db2c323c4ea81bb775fbf44198 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 19 Mar 2008 22:47:04 +0000 Subject: [PATCH] - Added a new parameter to all crushing action specials that selects which crushing mode is used: 0 uses the game's default for compatibility, 1 uses Doom's mode (crushers continue to move while damaging any actors ) and 2 uses Hexen's mode (crushers stay at blocking actor's top until they die). Since Generic_Crusher already used all 5 args I created a second version for Hexen crushing mode. - Added PICKUP flag to DECORATE. SVN r817 (trunk) --- docs/rh-log.txt | 7 ++ src/actionspecials.h | 19 +++-- src/dsectoreffect.cpp | 6 +- src/dsectoreffect.h | 14 ++-- src/g_strife/a_alienspectres.cpp | 4 +- src/g_strife/a_crusader.cpp | 2 +- src/g_strife/a_strifestuff.cpp | 2 +- src/p_ceiling.cpp | 9 +- src/p_doors.cpp | 6 +- src/p_enemy.cpp | 6 +- src/p_floor.cpp | 11 ++- src/p_lnspec.cpp | 119 ++++++++++++++------------- src/p_pillar.cpp | 22 ++--- src/p_plats.cpp | 4 +- src/p_spec.h | 15 ++-- src/thingdef/thingdef_properties.cpp | 1 + src/version.h | 2 +- 17 files changed, 140 insertions(+), 109 deletions(-) diff --git a/docs/rh-log.txt b/docs/rh-log.txt index e73203aebb..37c6ea5113 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,11 @@ March 19, 2008 (Changes by Graf Zahl) +- Added a new parameter to all crushing action specials that selects + which crushing mode is used: 0 uses the game's default for compatibility, + 1 uses Doom's mode (crushers continue to move while damaging any actors ) and + 2 uses Hexen's mode (crushers stay at blocking actor's top until they die). + Since Generic_Crusher already used all 5 args I created a second version for + Hexen crushing mode. +- Added PICKUP flag to DECORATE. - Integrated xlatcc into ZDoom.exe so that the linedef translation files don't need to be compiled and can be stored as text in zdoom.pk3. - Removed thingdef_specials.h and thingdef_specials.gperf and replaced diff --git a/src/actionspecials.h b/src/actionspecials.h index a2bd0e0bb1..efe7ad58e3 100644 --- a/src/actionspecials.h +++ b/src/actionspecials.h @@ -25,7 +25,7 @@ DEFINE_SPECIAL(Floor_RaiseToHighest, 24, 2, 2) DEFINE_SPECIAL(Floor_RaiseToNearest, 25, 2, 2) DEFINE_SPECIAL(Stairs_BuildDown, 26, 5, 5) DEFINE_SPECIAL(Stairs_BuildUp, 27, 5, 5) -DEFINE_SPECIAL(Floor_RaiseAndCrush, 28, 3, 3) +DEFINE_SPECIAL(Floor_RaiseAndCrush, 28, 3, 4) DEFINE_SPECIAL(Pillar_Build, 29, 3, 3) DEFINE_SPECIAL(Pillar_Open, 30, 4, 4) DEFINE_SPECIAL(Stairs_BuildDownSync, 31, 4, 4) @@ -39,10 +39,10 @@ DEFINE_SPECIAL(Ceiling_Waggle, 38, 5, 5) // [RH] Complement of Floor_Waggle DEFINE_SPECIAL(Teleport_ZombieChanger, 39, 2, 2) // [RH] Needed for Strife DEFINE_SPECIAL(Ceiling_LowerByValue, 40, 3, 3) DEFINE_SPECIAL(Ceiling_RaiseByValue, 41, 3, 3) -DEFINE_SPECIAL(Ceiling_CrushAndRaise, 42, 3, 3) -DEFINE_SPECIAL(Ceiling_LowerAndCrush, 43, 3, 3) +DEFINE_SPECIAL(Ceiling_CrushAndRaise, 42, 3, 4) +DEFINE_SPECIAL(Ceiling_LowerAndCrush, 43, 3, 4) DEFINE_SPECIAL(Ceiling_CrushStop, 44, 1, 1) -DEFINE_SPECIAL(Ceiling_CrushRaiseAndStay, 45, 3, 3) +DEFINE_SPECIAL(Ceiling_CrushRaiseAndStay, 45, 3, 4) DEFINE_SPECIAL(Floor_CrushStop, 46, 1, 1) DEFINE_SPECIAL(Ceiling_MoveToValue, 47, 3, 4) DEFINE_SPECIAL(Sector_Attach3dMidtex, 48, -1, -1) @@ -80,7 +80,7 @@ DEFINE_SPECIAL(Polyobj_OR_RotateLeft, 90, 3, 3) DEFINE_SPECIAL(Polyobj_OR_RotateRight, 91, 3, 3) DEFINE_SPECIAL(Polyobj_OR_Move, 92, 4, 4) DEFINE_SPECIAL(Polyobj_OR_MoveTimes8, 93, 4, 4) -DEFINE_SPECIAL(Pillar_BuildAndCrush, 94, 4, 4) +DEFINE_SPECIAL(Pillar_BuildAndCrush, 94, 4, 5) DEFINE_SPECIAL(FloorAndCeiling_LowerByValue, 95, 3, 3) DEFINE_SPECIAL(FloorAndCeiling_RaiseByValue, 96, 3, 3) @@ -133,6 +133,7 @@ DEFINE_SPECIAL(Sector_Set3DFloor, 160, -1, -1) DEFINE_SPECIAL(Sector_SetContents, 161, -1, -1) // [RH] Begin new specials for ZDoom +DEFINE_SPECIAL(Generic_Crusher2, 169, 5, 5) DEFINE_SPECIAL(Sector_SetCeilingScale2, 170, 3, 3) DEFINE_SPECIAL(Sector_SetFloorScale2, 171, 3, 3) DEFINE_SPECIAL(Plat_UpNearestWaitDownStay, 172, 3, 3) @@ -158,9 +159,9 @@ DEFINE_SPECIAL(SetPlayerProperty, 191, 3, 3) DEFINE_SPECIAL(Ceiling_LowerToHighestFloor, 192, 2, 2) DEFINE_SPECIAL(Ceiling_LowerInstant, 193, 3, 3) DEFINE_SPECIAL(Ceiling_RaiseInstant, 194, 3, 3) -DEFINE_SPECIAL(Ceiling_CrushRaiseAndStayA, 195, 4, 4) -DEFINE_SPECIAL(Ceiling_CrushAndRaiseA, 196, 4, 4) -DEFINE_SPECIAL(Ceiling_CrushAndRaiseSilentA, 197, 4, 4) +DEFINE_SPECIAL(Ceiling_CrushRaiseAndStayA, 195, 4, 5) +DEFINE_SPECIAL(Ceiling_CrushAndRaiseA, 196, 4, 5) +DEFINE_SPECIAL(Ceiling_CrushAndRaiseSilentA, 197, 4, 5) DEFINE_SPECIAL(Ceiling_RaiseByValueTimes8, 198, 3, 3) DEFINE_SPECIAL(Ceiling_LowerByValueTimes8, 199, 3, 3) DEFINE_SPECIAL(Generic_Floor, 200, 5, 5) @@ -218,6 +219,6 @@ DEFINE_SPECIAL(FloorAndCeiling_LowerRaise, 251, 3, 3) DEFINE_SPECIAL(Ceiling_RaiseToNearest, 252, 2, 2) DEFINE_SPECIAL(Ceiling_LowerToLowest, 253, 2, 2) DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 2) -DEFINE_SPECIAL(Ceiling_CrushRaiseAndStaySilA, 255, 4, 4) +DEFINE_SPECIAL(Ceiling_CrushRaiseAndStaySilA, 255, 4, 5) #undef DEFINE_SPECIAL diff --git a/src/dsectoreffect.cpp b/src/dsectoreffect.cpp index 57d821c44b..e940503902 100644 --- a/src/dsectoreffect.cpp +++ b/src/dsectoreffect.cpp @@ -121,7 +121,7 @@ bool DMover::MoveAttached(int crush, fixed_t move, int floorOrCeiling, bool rese // dest is the desired d value for the plane // DMover::EResult DMover::MovePlane (fixed_t speed, fixed_t dest, int crush, - int floorOrCeiling, int direction) + int floorOrCeiling, int direction, bool hexencrush) { bool flag; fixed_t lastpos; @@ -228,7 +228,7 @@ DMover::EResult DMover::MovePlane (fixed_t speed, fixed_t dest, int crush, flag = P_ChangeSector (m_Sector, crush, speed, 0); if (flag) { - if (crush >= 0 && gameinfo.gametype != GAME_Hexen) + if (crush >= 0 && !hexencrush) { m_Sector->floortexz += m_Sector->floorplane.HeightDiff (lastpos); m_Sector->AdjustFloorClip (); @@ -294,7 +294,7 @@ DMover::EResult DMover::MovePlane (fixed_t speed, fixed_t dest, int crush, flag = P_ChangeSector (m_Sector, crush, -speed, 1); if (flag) { - if (crush >= 0 && gameinfo.gametype != GAME_Hexen) + if (crush >= 0 && !hexencrush) { m_Sector->ceilingtexz += m_Sector->ceilingplane.HeightDiff (lastpos); return crushed; diff --git a/src/dsectoreffect.h b/src/dsectoreffect.h index 9c1673913f..0a54f9e77c 100644 --- a/src/dsectoreffect.h +++ b/src/dsectoreffect.h @@ -30,24 +30,24 @@ protected: enum EResult { ok, crushed, pastdest }; private: bool MoveAttached(int crush, fixed_t move, int floorOrCeiling, bool resetfailed); - EResult MovePlane (fixed_t speed, fixed_t dest, int crush, int floorOrCeiling, int direction); + EResult MovePlane (fixed_t speed, fixed_t dest, int crush, int floorOrCeiling, int direction, bool hexencrush); protected: DMover (); - inline EResult MoveFloor (fixed_t speed, fixed_t dest, int crush, int direction) + inline EResult MoveFloor (fixed_t speed, fixed_t dest, int crush, int direction, bool hexencrush) { - return MovePlane (speed, dest, crush, 0, direction); + return MovePlane (speed, dest, crush, 0, direction, hexencrush); } inline EResult MoveFloor (fixed_t speed, fixed_t dest, int direction) { - return MovePlane (speed, dest, -1, 0, direction); + return MovePlane (speed, dest, -1, 0, direction, false); } - inline EResult MoveCeiling (fixed_t speed, fixed_t dest, int crush, int direction) + inline EResult MoveCeiling (fixed_t speed, fixed_t dest, int crush, int direction, bool hexencrush) { - return MovePlane (speed, dest, crush, 1, direction); + return MovePlane (speed, dest, crush, 1, direction, hexencrush); } inline EResult MoveCeiling (fixed_t speed, fixed_t dest, int direction) { - return MovePlane (speed, dest, -1, 1, direction); + return MovePlane (speed, dest, -1, 1, direction, false); } }; diff --git a/src/g_strife/a_alienspectres.cpp b/src/g_strife/a_alienspectres.cpp index d8bf2a5708..b8e83e1724 100644 --- a/src/g_strife/a_alienspectres.cpp +++ b/src/g_strife/a_alienspectres.cpp @@ -503,7 +503,7 @@ void A_AlienSpectreDeath (AActor *self) if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre1)) { - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 999, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorLowerToLowest, NULL, 999, FRACUNIT, 0, 0, 0, false); log = 95; } else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre2)) @@ -575,7 +575,7 @@ void A_AlienSpectreDeath (AActor *self) { // Another Sigil piece. Woohoo! log = 83; } - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0, false); } else { diff --git a/src/g_strife/a_crusader.cpp b/src/g_strife/a_crusader.cpp index fcd94cc8d1..58bf70b7c2 100644 --- a/src/g_strife/a_crusader.cpp +++ b/src/g_strife/a_crusader.cpp @@ -223,7 +223,7 @@ void A_CrusaderDeath (AActor *self) { if (CheckBossDeath (self)) { - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 667, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorLowerToLowest, NULL, 667, FRACUNIT, 0, 0, 0, false); } } diff --git a/src/g_strife/a_strifestuff.cpp b/src/g_strife/a_strifestuff.cpp index f0379c420a..cf396d9c28 100644 --- a/src/g_strife/a_strifestuff.cpp +++ b/src/g_strife/a_strifestuff.cpp @@ -674,7 +674,7 @@ void APowerCoupling::Die (AActor *source, AActor *inflictor) P_NoiseAlert (source, this); } EV_DoDoor (DDoor::doorClose, NULL, players[i].mo, 225, 2*FRACUNIT, 0, 0, 0); - EV_DoFloor (DFloor::floorLowerToHighest, NULL, 44, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorLowerToHighest, NULL, 44, FRACUNIT, 0, 0, 0, false); players[i].mo->GiveInventoryType (QuestItemClasses[5]); S_Sound (CHAN_VOICE, "svox/voc13", 1, ATTN_NORM); players[i].SetLogNumber (13); diff --git a/src/p_ceiling.cpp b/src/p_ceiling.cpp index ad528584fa..b6cfe14e1a 100644 --- a/src/p_ceiling.cpp +++ b/src/p_ceiling.cpp @@ -56,7 +56,8 @@ void DCeiling::Serialize (FArchive &arc) << m_Texture << m_NewSpecial << m_Tag - << m_OldDirection; + << m_OldDirection + << m_Hexencrush; } void DCeiling::PlayCeilingSound () @@ -121,7 +122,7 @@ void DCeiling::Tick () case -1: // DOWN - res = MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction); + res = MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction, m_Hexencrush); if (res == pastdest) { @@ -180,6 +181,7 @@ DCeiling::DCeiling (sector_t *sec, fixed_t speed1, fixed_t speed2, int silent) : DMovingCeiling (sec) { m_Crush = -1; + m_Hexencrush = false; m_Speed = m_Speed1 = speed1; m_Speed2 = speed2; m_Silent = silent; @@ -192,7 +194,7 @@ DCeiling::DCeiling (sector_t *sec, fixed_t speed1, fixed_t speed2, int silent) // [RH] Added tag, speed, speed2, height, crush, silent, change params bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, int tag, fixed_t speed, fixed_t speed2, fixed_t height, - int crush, int silent, int change) + int crush, int silent, int change, bool hexencrush) { int secnum; bool rtn; @@ -382,6 +384,7 @@ manual_ceiling: ceiling->m_Tag = tag; ceiling->m_Type = type; ceiling->m_Crush = crush; + ceiling->m_Hexencrush = hexencrush; // Do not interpolate instant movement ceilings. // Note for ZDoomGL: Check to make sure that you update the sector diff --git a/src/p_doors.cpp b/src/p_doors.cpp index 863e47a47e..5eb427686b 100644 --- a/src/p_doors.cpp +++ b/src/p_doors.cpp @@ -121,7 +121,7 @@ void DDoor::Tick () case -1: // DOWN - res = MoveCeiling (m_Speed, m_BotDist, -1, m_Direction); + res = MoveCeiling (m_Speed, m_BotDist, -1, m_Direction, false); // killough 10/98: implement gradual lighting effects if (m_LightTag != 0 && m_TopDist != -m_Sector->floorplane.d) @@ -168,7 +168,7 @@ void DDoor::Tick () case 1: // UP - res = MoveCeiling (m_Speed, m_TopDist, -1, m_Direction); + res = MoveCeiling (m_Speed, m_TopDist, -1, m_Direction, false); // killough 10/98: implement gradual lighting effects if (m_LightTag != 0 && m_TopDist != -m_Sector->floorplane.d) @@ -552,7 +552,7 @@ bool DAnimatedDoor::StartClosing () } fixed_t topdist = m_Sector->ceilingplane.d; - if (MoveCeiling (2048*FRACUNIT, m_BotDist, 0, -1) == crushed) + if (MoveCeiling (2048*FRACUNIT, m_BotDist, 0, -1, false) == crushed) { return false; } diff --git a/src/p_enemy.cpp b/src/p_enemy.cpp index ce509b4ae5..974987e45c 100644 --- a/src/p_enemy.cpp +++ b/src/p_enemy.cpp @@ -2707,13 +2707,13 @@ void A_BossDeath (AActor *actor) { if (type == NAME_Fatso) { - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0, false); return; } if (type == NAME_Arachnotron) { - EV_DoFloor (DFloor::floorRaiseByTexture, NULL, 667, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorRaiseByTexture, NULL, 667, FRACUNIT, 0, 0, 0, false); return; } } @@ -2722,7 +2722,7 @@ void A_BossDeath (AActor *actor) switch (level.flags & LEVEL_SPECACTIONSMASK) { case LEVEL_SPECLOWERFLOOR: - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0); + EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0, false); return; case LEVEL_SPECOPENDOOR: diff --git a/src/p_floor.cpp b/src/p_floor.cpp index 469cfab61d..13b438ed97 100644 --- a/src/p_floor.cpp +++ b/src/p_floor.cpp @@ -55,7 +55,8 @@ void DFloor::Serialize (FArchive &arc) << m_Delay << m_PauseTime << m_StepTime - << m_PerStepTime; + << m_PerStepTime + << m_Hexencrush; } IMPLEMENT_CLASS (DElevator) @@ -133,7 +134,7 @@ void DFloor::Tick () if (m_Type == waitStair) return; - res = MoveFloor (m_Speed, m_FloorDestDist, m_Crush, m_Direction); + res = MoveFloor (m_Speed, m_FloorDestDist, m_Crush, m_Direction, m_Hexencrush); if (res == pastdest) { @@ -325,7 +326,7 @@ DFloor::DFloor (sector_t *sec) // [RH] Added tag, speed, height, crush, change params. // bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - fixed_t speed, fixed_t height, int crush, int change) + fixed_t speed, fixed_t height, int crush, int change, bool hexencrush) { int secnum; bool rtn; @@ -368,6 +369,7 @@ manual_floor: floor = new DFloor (sec); floor->m_Type = floortype; floor->m_Crush = -1; + floor->m_Hexencrush = hexencrush; floor->m_Speed = speed; floor->m_ResetCount = 0; // [RH] floor->m_OrgDist = sec->floorplane.d; // [RH] @@ -761,6 +763,7 @@ manual_stair: floor->m_StepTime = floor->m_PerStepTime = persteptime; floor->m_Crush = (!usespecials && speed == 4*FRACUNIT) ? 10 : -1; //jff 2/27/98 fix uninitialized crush field + floor->m_Hexencrush = false; floor->m_Speed = speed; height = sec->floorplane.ZatPoint (0, 0) + stairstep; @@ -929,6 +932,7 @@ bool EV_DoDonut (int tag, fixed_t pillarspeed, fixed_t slimespeed) floor = new DFloor (s2); floor->m_Type = DFloor::donutRaise; floor->m_Crush = -1; + floor->m_Hexencrush = false; floor->m_Direction = 1; floor->m_Sector = s2; floor->m_Speed = slimespeed; @@ -942,6 +946,7 @@ bool EV_DoDonut (int tag, fixed_t pillarspeed, fixed_t slimespeed) floor = new DFloor (s1); floor->m_Type = DFloor::floorLowerToNearest; floor->m_Crush = -1; + floor->m_Hexencrush = false; floor->m_Direction = -1; floor->m_Sector = s1; floor->m_Speed = pillarspeed; diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index c43e00b785..e20dd4df85 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -61,6 +61,7 @@ #define TICS(a) (((a)*TICRATE)/35) #define OCTICS(a) (((a)*TICRATE)/8) #define BYTEANGLE(a) ((angle_t)((a)<<24)) +#define CRUSHTYPE(a) ((a)==1? false : (a)==2? true : gameinfo.gametype == GAME_Hexen) static FRandom pr_glass ("GlassBreak"); @@ -221,61 +222,61 @@ FUNC(LS_Generic_Door) FUNC(LS_Floor_LowerByValue) // Floor_LowerByValue (tag, speed, height) { - return EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2, 0, 0); + return EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2, 0, 0, false); } FUNC(LS_Floor_LowerToLowest) // Floor_LowerToLowest (tag, speed) { - return EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Floor_LowerToHighest) // Floor_LowerToHighest (tag, speed, adjust) { - return EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), (arg2-128)*FRACUNIT, 0, 0); + return EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), (arg2-128)*FRACUNIT, 0, 0, false); } FUNC(LS_Floor_LowerToNearest) // Floor_LowerToNearest (tag, speed) { - return EV_DoFloor (DFloor::floorLowerToNearest, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoFloor (DFloor::floorLowerToNearest, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Floor_RaiseByValue) // Floor_RaiseByValue (tag, speed, height) { - return EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2, 0, 0); + return EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2, 0, 0, false); } FUNC(LS_Floor_RaiseToHighest) // Floor_RaiseToHighest (tag, speed) { - return EV_DoFloor (DFloor::floorRaiseToHighest, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoFloor (DFloor::floorRaiseToHighest, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Floor_RaiseToNearest) // Floor_RaiseToNearest (tag, speed) { - return EV_DoFloor (DFloor::floorRaiseToNearest, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoFloor (DFloor::floorRaiseToNearest, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Floor_RaiseAndCrush) -// Floor_RaiseAndCrush (tag, speed, crush) +// Floor_RaiseAndCrush (tag, speed, crush, crushmode) { - return EV_DoFloor (DFloor::floorRaiseAndCrush, ln, arg0, SPEED(arg1), 0, arg2, 0); + return EV_DoFloor (DFloor::floorRaiseAndCrush, ln, arg0, SPEED(arg1), 0, arg2, 0, CRUSHTYPE(arg3)); } FUNC(LS_Floor_RaiseByValueTimes8) // FLoor_RaiseByValueTimes8 (tag, speed, height) { - return EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2*8, 0, 0); + return EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2*8, 0, 0, false); } FUNC(LS_Floor_LowerByValueTimes8) // Floor_LowerByValueTimes8 (tag, speed, height) { - return EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2*8, 0, 0); + return EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), FRACUNIT*arg2*8, 0, 0, false); } FUNC(LS_Floor_CrushStop) @@ -287,51 +288,51 @@ FUNC(LS_Floor_CrushStop) FUNC(LS_Floor_LowerInstant) // Floor_LowerInstant (tag, unused, height) { - return EV_DoFloor (DFloor::floorLowerInstant, ln, arg0, 0, arg2*FRACUNIT*8, 0, 0); + return EV_DoFloor (DFloor::floorLowerInstant, ln, arg0, 0, arg2*FRACUNIT*8, 0, 0, false); } FUNC(LS_Floor_RaiseInstant) // Floor_RaiseInstant (tag, unused, height) { - return EV_DoFloor (DFloor::floorRaiseInstant, ln, arg0, 0, arg2*FRACUNIT*8, 0, 0); + return EV_DoFloor (DFloor::floorRaiseInstant, ln, arg0, 0, arg2*FRACUNIT*8, 0, 0, false); } FUNC(LS_Floor_MoveToValueTimes8) // Floor_MoveToValueTimes8 (tag, speed, height, negative) { return EV_DoFloor (DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), - arg2*FRACUNIT*8*(arg3?-1:1), 0, 0); + arg2*FRACUNIT*8*(arg3?-1:1), 0, 0, false); } FUNC(LS_Floor_MoveToValue) // Floor_MoveToValue (tag, speed, height, negative) { return EV_DoFloor (DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), - arg2*FRACUNIT*(arg3?-1:1), 0, 0); + arg2*FRACUNIT*(arg3?-1:1), 0, 0, false); } FUNC(LS_Floor_RaiseToLowestCeiling) // Floor_RaiseToLowestCeiling (tag, speed) { - return EV_DoFloor (DFloor::floorRaiseToLowestCeiling, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoFloor (DFloor::floorRaiseToLowestCeiling, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Floor_RaiseByTexture) // Floor_RaiseByTexture (tag, speed) { - return EV_DoFloor (DFloor::floorRaiseByTexture, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoFloor (DFloor::floorRaiseByTexture, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Floor_RaiseByValueTxTy) // Floor_RaiseByValueTxTy (tag, speed, height) { - return EV_DoFloor (DFloor::floorRaiseAndChange, ln, arg0, SPEED(arg1), arg2*FRACUNIT, 0, 0); + return EV_DoFloor (DFloor::floorRaiseAndChange, ln, arg0, SPEED(arg1), arg2*FRACUNIT, 0, 0, false); } FUNC(LS_Floor_LowerToLowestTxTy) // Floor_LowerToLowestTxTy (tag, speed) { - return EV_DoFloor (DFloor::floorLowerAndChange, ln, arg0, SPEED(arg1), arg2*FRACUNIT, 0, 0); + return EV_DoFloor (DFloor::floorLowerAndChange, ln, arg0, SPEED(arg1), arg2*FRACUNIT, 0, 0, false); } FUNC(LS_Floor_Waggle) @@ -397,7 +398,7 @@ FUNC(LS_Generic_Floor) } return EV_DoFloor (type, ln, arg0, SPEED(arg1), arg2*FRACUNIT, - (arg4 & 16) ? 20 : -1, arg4 & 7); + (arg4 & 16) ? 20 : -1, arg4 & 7, false); } @@ -453,55 +454,55 @@ FUNC(LS_Generic_Stairs) FUNC(LS_Pillar_Build) // Pillar_Build (tag, speed, height) { - return EV_DoPillar (DPillar::pillarBuild, arg0, SPEED(arg1), arg2*FRACUNIT, 0, -1); + return EV_DoPillar (DPillar::pillarBuild, arg0, SPEED(arg1), arg2*FRACUNIT, 0, -1, false); } FUNC(LS_Pillar_BuildAndCrush) -// Pillar_BuildAndCrush (tag, speed, height, crush) +// Pillar_BuildAndCrush (tag, speed, height, crush, crushtype) { - return EV_DoPillar (DPillar::pillarBuild, arg0, SPEED(arg1), arg2*FRACUNIT, 0, arg3); + return EV_DoPillar (DPillar::pillarBuild, arg0, SPEED(arg1), arg2*FRACUNIT, 0, arg3, CRUSHTYPE(arg4)); } FUNC(LS_Pillar_Open) // Pillar_Open (tag, speed, f_height, c_height) { - return EV_DoPillar (DPillar::pillarOpen, arg0, SPEED(arg1), arg2*FRACUNIT, arg3*FRACUNIT, -1); + return EV_DoPillar (DPillar::pillarOpen, arg0, SPEED(arg1), arg2*FRACUNIT, arg3*FRACUNIT, -1, false); } FUNC(LS_Ceiling_LowerByValue) // Ceiling_LowerByValue (tag, speed, height) { - return EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT, -1, 0, 0, false); } FUNC(LS_Ceiling_RaiseByValue) // Ceiling_RaiseByValue (tag, speed, height) { - return EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT, -1, 0, 0, false); } FUNC(LS_Ceiling_LowerByValueTimes8) // Ceiling_LowerByValueTimes8 (tag, speed, height) { - return EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT*8, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT*8, -1, 0, 0, false); } FUNC(LS_Ceiling_RaiseByValueTimes8) // Ceiling_RaiseByValueTimes8 (tag, speed, height) { - return EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT*8, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2*FRACUNIT*8, -1, 0, 0, false); } FUNC(LS_Ceiling_CrushAndRaise) -// Ceiling_CrushAndRaise (tag, speed, crush) +// Ceiling_CrushAndRaise (tag, speed, crush, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 0, arg2, 0, 0); + return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 0, arg2, 0, 0, CRUSHTYPE(arg3)); } FUNC(LS_Ceiling_LowerAndCrush) -// Ceiling_LowerAndCrush (tag, speed, crush) +// Ceiling_LowerAndCrush (tag, speed, crush, crushtype) { - return EV_DoCeiling (DCeiling::ceilLowerAndCrush, ln, arg0, SPEED(arg1), SPEED(arg1), 0, arg2, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerAndCrush, ln, arg0, SPEED(arg1), SPEED(arg1), 0, arg2, 0, 0, CRUSHTYPE(arg3)); } FUNC(LS_Ceiling_CrushStop) @@ -511,83 +512,83 @@ FUNC(LS_Ceiling_CrushStop) } FUNC(LS_Ceiling_CrushRaiseAndStay) -// Ceiling_CrushRaiseAndStay (tag, speed, crush) +// Ceiling_CrushRaiseAndStay (tag, speed, crush, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 0, arg2, 0, 0); + return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 0, arg2, 0, 0, CRUSHTYPE(arg3)); } FUNC(LS_Ceiling_MoveToValueTimes8) // Ceiling_MoveToValueTimes8 (tag, speed, height, negative) { return EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, - arg2*FRACUNIT*8*((arg3) ? -1 : 1), -1, 0, 0); + arg2*FRACUNIT*8*((arg3) ? -1 : 1), -1, 0, 0, false); } FUNC(LS_Ceiling_MoveToValue) // Ceiling_MoveToValue (tag, speed, height, negative) { return EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, - arg2*FRACUNIT*((arg3) ? -1 : 1), -1, 0, 0); + arg2*FRACUNIT*((arg3) ? -1 : 1), -1, 0, 0, false); } FUNC(LS_Ceiling_LowerToHighestFloor) // Ceiling_LowerToHighestFloor (tag, speed) { - return EV_DoCeiling (DCeiling::ceilLowerToHighestFloor, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerToHighestFloor, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0, false); } FUNC(LS_Ceiling_LowerInstant) // Ceiling_LowerInstant (tag, unused, height) { - return EV_DoCeiling (DCeiling::ceilLowerInstant, ln, arg0, 0, 0, arg2*FRACUNIT*8, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerInstant, ln, arg0, 0, 0, arg2*FRACUNIT*8, -1, 0, 0, false); } FUNC(LS_Ceiling_RaiseInstant) // Ceiling_RaiseInstant (tag, unused, height) { - return EV_DoCeiling (DCeiling::ceilRaiseInstant, ln, arg0, 0, 0, arg2*FRACUNIT*8, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilRaiseInstant, ln, arg0, 0, 0, arg2*FRACUNIT*8, -1, 0, 0, false); } FUNC(LS_Ceiling_CrushRaiseAndStayA) -// Ceiling_CrushRaiseAndStayA (tag, dnspeed, upspeed, damage) +// Ceiling_CrushRaiseAndStayA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0); + return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0, CRUSHTYPE(arg4)); } FUNC(LS_Ceiling_CrushRaiseAndStaySilA) -// Ceiling_CrushRaiseAndStaySilA (tag, dnspeed, upspeed, damage) +// Ceiling_CrushRaiseAndStaySilA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0); + return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0, CRUSHTYPE(arg4)); } FUNC(LS_Ceiling_CrushAndRaiseA) -// Ceiling_CrushAndRaiseA (tag, dnspeed, upspeed, damage) +// Ceiling_CrushAndRaiseA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0); + return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0, CRUSHTYPE(arg4)); } FUNC(LS_Ceiling_CrushAndRaiseSilentA) -// Ceiling_CrushAndRaiseSilentA (tag, dnspeed, upspeed, damage) +// Ceiling_CrushAndRaiseSilentA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0); + return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0, CRUSHTYPE(arg4)); } FUNC(LS_Ceiling_RaiseToNearest) // Ceiling_RaiseToNearest (tag, speed) { - return EV_DoCeiling (DCeiling::ceilRaiseToNearest, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilRaiseToNearest, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0, false); } FUNC(LS_Ceiling_LowerToLowest) // Ceiling_LowerToLowest (tag, speed) { - return EV_DoCeiling (DCeiling::ceilLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0, false); } FUNC(LS_Ceiling_LowerToFloor) // Ceiling_LowerToFloor (tag, speed) { - return EV_DoCeiling (DCeiling::ceilLowerToFloor, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0); + return EV_DoCeiling (DCeiling::ceilLowerToFloor, ln, arg0, SPEED(arg1), 0, 0, -1, 0, 0, false); } FUNC(LS_Generic_Ceiling) @@ -618,14 +619,22 @@ FUNC(LS_Generic_Ceiling) } return EV_DoCeiling (type, ln, arg0, SPEED(arg1), SPEED(arg1), arg2*FRACUNIT, - (arg4 & 16) ? 20 : -1, 0, arg4 & 7); + (arg4 & 16) ? 20 : -1, 0, arg4 & 7, false); } FUNC(LS_Generic_Crusher) // Generic_Crusher (tag, dnspeed, upspeed, silent, damage) { return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), - SPEED(arg2), 0, arg4, arg3 ? 2 : 0, 0); + SPEED(arg2), 0, arg4, arg3 ? 2 : 0, 0, false); +} + +FUNC(LS_Generic_Crusher2) +// Generic_Crusher2 (tag, dnspeed, upspeed, silent, damage) +{ + // same as above but uses Hexen's crushing method. + return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), + SPEED(arg2), 0, arg4, arg3 ? 2 : 0, 0, true); } FUNC(LS_Plat_PerpetualRaise) @@ -1633,8 +1642,8 @@ FUNC(LS_FloorAndCeiling_RaiseByValue) FUNC(LS_FloorAndCeiling_LowerRaise) // FloorAndCeiling_LowerRaise (tag, fspeed, cspeed) { - return EV_DoCeiling (DCeiling::ceilRaiseToHighest, ln, arg0, SPEED(arg2), 0, 0, 0, 0, 0) | - EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, 0); + return EV_DoCeiling (DCeiling::ceilRaiseToHighest, ln, arg0, SPEED(arg2), 0, 0, 0, 0, 0, false) | + EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, 0, false); } FUNC(LS_Elevator_MoveToFloor) @@ -2952,7 +2961,7 @@ lnSpecFunc LineSpecials[256] = LS_NOP, // 166 LS_NOP, // 167 LS_NOP, // 168 - LS_NOP, // 169 + LS_Generic_Crusher2, LS_Sector_SetCeilingScale2, LS_Sector_SetFloorScale2, LS_Plat_UpNearestWaitDownStay, diff --git a/src/p_pillar.cpp b/src/p_pillar.cpp index 47182c9567..96bf375344 100644 --- a/src/p_pillar.cpp +++ b/src/p_pillar.cpp @@ -52,7 +52,8 @@ void DPillar::Serialize (FArchive &arc) << m_CeilingSpeed << m_FloorTarget << m_CeilingTarget - << m_Crush; + << m_Crush + << m_Hexencrush; } void DPillar::Tick () @@ -65,13 +66,13 @@ void DPillar::Tick () if (m_Type == pillarBuild) { - r = MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, 1); - s = MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, -1); + r = MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, 1, m_Hexencrush); + s = MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, -1, m_Hexencrush); } else { - r = MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, -1); - s = MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, 1); + r = MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, -1, m_Hexencrush); + s = MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, 1, m_Hexencrush); } if (r == pastdest && s == pastdest) @@ -83,17 +84,17 @@ void DPillar::Tick () { if (r == crushed) { - MoveFloor (m_FloorSpeed, oldfloor, -1, -1); + MoveFloor (m_FloorSpeed, oldfloor, -1, -1, m_Hexencrush); } if (s == crushed) { - MoveCeiling (m_CeilingSpeed, oldceiling, -1, 1); + MoveCeiling (m_CeilingSpeed, oldceiling, -1, 1, m_Hexencrush); } } } DPillar::DPillar (sector_t *sector, EPillar type, fixed_t speed, - fixed_t floordist, fixed_t ceilingdist, int crush) + fixed_t floordist, fixed_t ceilingdist, int crush, bool hexencrush) : DMover (sector) { fixed_t newheight; @@ -105,6 +106,7 @@ DPillar::DPillar (sector_t *sector, EPillar type, fixed_t speed, m_Type = type; m_Crush = crush; + m_Hexencrush = hexencrush; if (type == pillarBuild) { @@ -173,7 +175,7 @@ DPillar::DPillar (sector_t *sector, EPillar type, fixed_t speed, } bool EV_DoPillar (DPillar::EPillar type, int tag, fixed_t speed, fixed_t height, - fixed_t height2, int crush) + fixed_t height2, int crush, bool hexencrush) { bool rtn = false; int secnum = -1; @@ -197,7 +199,7 @@ bool EV_DoPillar (DPillar::EPillar type, int tag, fixed_t speed, fixed_t height, continue; rtn = true; - new DPillar (sec, type, speed, height, height2, crush); + new DPillar (sec, type, speed, height, height2, crush, hexencrush); } return rtn; } diff --git a/src/p_plats.cpp b/src/p_plats.cpp index f1da293066..c5858278df 100644 --- a/src/p_plats.cpp +++ b/src/p_plats.cpp @@ -73,7 +73,7 @@ void DPlat::Tick () switch (m_Status) { case up: - res = MoveFloor (m_Speed, m_High, m_Crush, 1); + res = MoveFloor (m_Speed, m_High, m_Crush, 1, false); if (res == crushed && (m_Crush == -1)) { @@ -115,7 +115,7 @@ void DPlat::Tick () break; case down: - res = MoveFloor (m_Speed, m_Low, -1, -1); + res = MoveFloor (m_Speed, m_Low, -1, -1, false); if (res == pastdest) { diff --git a/src/p_spec.h b/src/p_spec.h index 713f18bcad..6ee3ef143a 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -490,7 +490,7 @@ public: }; DPillar (sector_t *sector, EPillar type, fixed_t speed, fixed_t height, - fixed_t height2, int crush); + fixed_t height2, int crush, bool hexencrush); void Serialize (FArchive &arc); void Tick (); @@ -502,6 +502,7 @@ protected: fixed_t m_FloorTarget; fixed_t m_CeilingTarget; int m_Crush; + bool m_Hexencrush; private: DPillar (); @@ -516,7 +517,7 @@ inline FArchive &operator<< (FArchive &arc, DPillar::EPillar &type) } bool EV_DoPillar (DPillar::EPillar type, int tag, fixed_t speed, fixed_t height, - fixed_t height2, int crush); + fixed_t height2, int crush, bool hexencrush); // // P_DOORS @@ -682,6 +683,7 @@ protected: fixed_t m_Speed1; // [RH] dnspeed of crushers fixed_t m_Speed2; // [RH] upspeed of crushers int m_Crush; + bool m_Hexencrush; int m_Silent; int m_Direction; // 1 = up, 0 = waiting, -1 = down @@ -700,14 +702,14 @@ private: friend bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, int tag, fixed_t speed, fixed_t speed2, fixed_t height, - int crush, int silent, int change); + int crush, int silent, int change, bool hexencrush); friend bool EV_CeilingCrushStop (int tag); friend void P_ActivateInStasisCeiling (int tag); }; bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, int tag, fixed_t speed, fixed_t speed2, fixed_t height, - int crush, int silent, int change); + int crush, int silent, int change, bool hexencrush); bool EV_CeilingCrushStop (int tag); void P_ActivateInStasisCeiling (int tag); @@ -781,6 +783,7 @@ public: protected: EFloor m_Type; int m_Crush; + bool m_Hexencrush; int m_Direction; short m_NewSpecial; short m_Texture; @@ -802,7 +805,7 @@ protected: fixed_t stairsize, fixed_t speed, int delay, int reset, int igntxt, int usespecials); friend bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - fixed_t speed, fixed_t height, int crush, int change); + fixed_t speed, fixed_t height, int crush, int change, bool hexencrush); friend bool EV_FloorCrushStop (int tag); friend bool EV_DoDonut (int tag, fixed_t pillarspeed, fixed_t slimespeed); private: @@ -813,7 +816,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, fixed_t stairsize, fixed_t speed, int delay, int reset, int igntxt, int usespecials); bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - fixed_t speed, fixed_t height, int crush, int change); + fixed_t speed, fixed_t height, int crush, int change, bool hexencrush); bool EV_FloorCrushStop (int tag); bool EV_DoDonut (int tag, fixed_t pillarspeed, fixed_t slimespeed); diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index 093068a241..32f236e3b3 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -100,6 +100,7 @@ enum static flagdef ActorFlags[]= { + DEFINE_FLAG(MF, PICKUP, APlayerPawn, flags), DEFINE_FLAG(MF, SOLID, AActor, flags), DEFINE_FLAG(MF, SHOOTABLE, AActor, flags), DEFINE_FLAG(MF, NOSECTOR, AActor, flags), diff --git a/src/version.h b/src/version.h index b305d5c79d..83a79acc58 100644 --- a/src/version.h +++ b/src/version.h @@ -75,7 +75,7 @@ // SAVESIG should match SAVEVER. // MINSAVEVER is the minimum level snapshot version that can be loaded. -#define MINSAVEVER 810 +#define MINSAVEVER 817 #if SVN_REVISION_NUMBER == 0 // This can happen if svnrevision is not updated properly (e.g. compiling while offline)