mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-30 07:41:22 +00:00
063c85b157
with an FString now. - Fixed: The music strings in the default level info were never freed and caused memory leaks when used repeatedly. - Fixed: The intermusic string in the level info was never freed. - Fixed: The default fire obituary should only be printed if the damage came from the environment. If it comes from a monster the monster specific obituary should be used instead. - Added custom damage types from the floating point test release. - Changed Pain Elemental's massacre check. Now A_PainDie checks for the damage type and doesn't spawn anything if it is NAME_Massacre. A_PainDie can also be used by other actors so a more generalized approach is needed than hard coding it into the Pain Elemental. - Converted a few of Doom's monsters to DECORATE because I couldn't test the first version of the custom state code with the corpses inheriting from them. - Added custom states from last year's floating point test release and fixed some bugs I found in that code. Unfortunately it wasn't all salvageable and it was easier to recreate some parts from scratch. SVN r368 (trunk)
443 lines
10 KiB
C++
443 lines
10 KiB
C++
/*
|
|
** p_lnspec.h
|
|
** New line and sector specials (Using Hexen as a base.)
|
|
**
|
|
**---------------------------------------------------------------------------
|
|
** Copyright 1998-2006 Randy Heit
|
|
** All rights reserved.
|
|
**
|
|
** Redistribution and use in source and binary forms, with or without
|
|
** modification, are permitted provided that the following conditions
|
|
** are met:
|
|
**
|
|
** 1. Redistributions of source code must retain the above copyright
|
|
** notice, this list of conditions and the following disclaimer.
|
|
** 2. Redistributions in binary form must reproduce the above copyright
|
|
** notice, this list of conditions and the following disclaimer in the
|
|
** documentation and/or other materials provided with the distribution.
|
|
** 3. The name of the author may not be used to endorse or promote products
|
|
** derived from this software without specific prior written permission.
|
|
**
|
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
**---------------------------------------------------------------------------
|
|
**
|
|
*/
|
|
|
|
#ifndef __P_LNSPEC_H__
|
|
#define __P_LNSPEC_H__
|
|
|
|
#include "doomtype.h"
|
|
|
|
typedef enum {
|
|
Polyobj_StartLine = 1,
|
|
Polyobj_RotateLeft = 2,
|
|
Polyobj_RotateRight = 3,
|
|
Polyobj_Move = 4,
|
|
Polyobj_ExplicitLine = 5,
|
|
Polyobj_MoveTimes8 = 6,
|
|
Polyobj_DoorSwing = 7,
|
|
Polyobj_DoorSlide = 8,
|
|
|
|
Line_Horizon = 9, // [RH] draw one-sided wall at horizon
|
|
|
|
Door_Close = 10,
|
|
Door_Open = 11,
|
|
Door_Raise = 12,
|
|
Door_LockedRaise = 13,
|
|
Door_Animated = 14,
|
|
|
|
Autosave = 15, // [RH] Save the game *now*
|
|
Transfer_WallLight = 16,
|
|
Thing_Raise = 17,
|
|
StartConversation = 18,
|
|
|
|
Floor_LowerByValue = 20,
|
|
Floor_LowerToLowest = 21,
|
|
Floor_LowerToNearest = 22,
|
|
Floor_RaiseByValue = 23,
|
|
Floor_RaiseToHighest = 24,
|
|
Floor_RaiseToNearest = 25,
|
|
|
|
Stairs_BuildDown = 26,
|
|
Stairs_BuildUp = 27,
|
|
|
|
Floor_RaiseAndCrush = 28,
|
|
|
|
Pillar_Build = 29,
|
|
Pillar_Open = 30,
|
|
|
|
Stairs_BuildDownSync = 31,
|
|
Stairs_BuildUpSync = 32,
|
|
|
|
ForceField = 33, // [RH] Strife's forcefield special (148)
|
|
ClearForceField = 34, // [RH] Remove Strife's forcefield from tagged sectors
|
|
|
|
Floor_RaiseByValueTimes8 = 35,
|
|
Floor_LowerByValueTimes8 = 36,
|
|
|
|
Ceiling_Waggle = 38, // [RH] Complement of Floor_Waggle
|
|
Teleport_ZombieChanger = 39, // [RH] Needed for Strife
|
|
|
|
Ceiling_LowerByValue = 40,
|
|
Ceiling_RaiseByValue = 41,
|
|
Ceiling_CrushAndRaise = 42,
|
|
Ceiling_LowerAndCrush = 43,
|
|
Ceiling_CrushStop = 44,
|
|
Ceiling_CrushRaiseAndStay = 45,
|
|
|
|
Floor_CrushStop = 46,
|
|
|
|
GlassBreak = 49,
|
|
ExtraFloor_LightOnly = 50,
|
|
|
|
Plat_PerpetualRaise = 60,
|
|
Plat_Stop = 61,
|
|
Plat_DownWaitUpStay = 62,
|
|
Plat_DownByValue = 63,
|
|
Plat_UpWaitDownStay = 64,
|
|
Plat_UpByValue = 65,
|
|
|
|
Floor_LowerInstant = 66,
|
|
Floor_RaiseInstant = 67,
|
|
Floor_MoveToValueTimes8 = 68,
|
|
|
|
Ceiling_MoveToValueTimes8 = 69,
|
|
|
|
Teleport = 70,
|
|
Teleport_NoFog = 71,
|
|
|
|
ThrustThing = 72,
|
|
DamageThing = 73,
|
|
|
|
Teleport_NewMap = 74,
|
|
Teleport_EndGame = 75,
|
|
TeleportOther = 76,
|
|
TeleportGroup = 77,
|
|
TeleportInSector = 78,
|
|
|
|
ACS_Execute = 80,
|
|
ACS_Suspend = 81,
|
|
ACS_Terminate = 82,
|
|
ACS_LockedExecute = 83,
|
|
ACS_ExecuteWithResult = 84,
|
|
ACS_LockedExecuteDoor = 85,
|
|
|
|
Polyobj_OR_RotateLeft = 90,
|
|
Polyobj_OR_RotateRight = 91,
|
|
Polyobj_OR_Move = 92,
|
|
Polyobj_OR_MoveTimes8 = 93,
|
|
|
|
Pillar_BuildAndCrush = 94,
|
|
|
|
FloorAndCeiling_LowerByValue = 95,
|
|
FloorAndCeiling_RaiseByValue = 96,
|
|
|
|
Scroll_Texture_Left = 100,
|
|
Scroll_Texture_Right = 101,
|
|
Scroll_Texture_Up = 102,
|
|
Scroll_Texture_Down = 103,
|
|
|
|
Light_ForceLightning = 109,
|
|
Light_RaiseByValue = 110,
|
|
Light_LowerByValue = 111,
|
|
Light_ChangeToValue = 112,
|
|
Light_Fade = 113,
|
|
Light_Glow = 114,
|
|
Light_Flicker = 115,
|
|
Light_Strobe = 116,
|
|
Light_Stop = 117,
|
|
|
|
Thing_Damage = 119,
|
|
|
|
Radius_Quake = 120, // Earthquake
|
|
|
|
Line_SetIdentification = 121,
|
|
#if 0 // Skull Tag specials that might be added later
|
|
Thing_SetGravity = 122,
|
|
Thing_ReverseGravity = 123,
|
|
Thing_RevertGravity = 124,
|
|
#endif
|
|
Thing_Move = 125,
|
|
#if 0 // Skull Tag special I doubt I will add
|
|
Thing_SetSprite = 126,
|
|
#endif
|
|
Thing_SetSpecial = 127,
|
|
ThrustThingZ = 128,
|
|
|
|
UsePuzzleItem = 129,
|
|
|
|
Thing_Activate = 130,
|
|
Thing_Deactivate = 131,
|
|
Thing_Remove = 132,
|
|
Thing_Destroy = 133,
|
|
Thing_Projectile = 134,
|
|
Thing_Spawn = 135,
|
|
Thing_ProjectileGravity = 136,
|
|
Thing_SpawnNoFog = 137,
|
|
|
|
Floor_Waggle = 138,
|
|
|
|
Thing_SpawnFacing = 139,
|
|
|
|
Sector_ChangeSound = 140,
|
|
|
|
// GZDoom/Vavoom specials (put here so that they don't get accidentally redefined)
|
|
Sector_SetPlaneReflection = 159,
|
|
Sector_Set3DFloor = 160,
|
|
Sector_SetContents = 161,
|
|
|
|
// [RH] Begin new specials for ZDoom
|
|
Sector_SetCeilingScale2 = 170,
|
|
Sector_SetFloorScale2 = 171,
|
|
|
|
Plat_UpNearestWaitDownStay = 172,
|
|
NoiseAlert = 173,
|
|
SendToCommunicator = 174,
|
|
Thing_ProjectileIntercept = 175,
|
|
Thing_ChangeTID = 176,
|
|
Thing_Hate = 177,
|
|
Thing_ProjectileAimed = 178,
|
|
ChangeSkill = 179,
|
|
Thing_SetTranslation = 180,
|
|
Plane_Align = 181,
|
|
|
|
Line_Mirror = 182,
|
|
Line_AlignCeiling = 183,
|
|
Line_AlignFloor = 184,
|
|
|
|
Sector_SetRotation = 185,
|
|
Sector_SetCeilingOffset = 186,
|
|
Sector_SetFloorOffset = 187,
|
|
Sector_SetCeilingScale = 188,
|
|
Sector_SetFloorScale = 189,
|
|
|
|
Static_Init = 190,
|
|
|
|
SetPlayerProperty = 191,
|
|
|
|
Ceiling_LowerToHighestFloor = 192,
|
|
Ceiling_LowerInstant = 193,
|
|
Ceiling_RaiseInstant = 194,
|
|
Ceiling_CrushRaiseAndStayA = 195,
|
|
Ceiling_CrushAndRaiseA = 196,
|
|
Ceiling_CrushAndRaiseSilentA = 197,
|
|
Ceiling_RaiseByValueTimes8 = 198,
|
|
Ceiling_LowerByValueTimes8 = 199,
|
|
|
|
Generic_Floor = 200,
|
|
Generic_Ceiling = 201,
|
|
Generic_Door = 202,
|
|
Generic_Lift = 203,
|
|
Generic_Stairs = 204,
|
|
Generic_Crusher = 205,
|
|
|
|
Plat_DownWaitUpStayLip = 206,
|
|
Plat_PerpetualRaiseLip = 207,
|
|
|
|
TranslucentLine = 208,
|
|
Transfer_Heights = 209,
|
|
Transfer_FloorLight = 210,
|
|
Transfer_CeilingLight = 211,
|
|
|
|
Sector_SetColor = 212,
|
|
Sector_SetFade = 213,
|
|
Sector_SetDamage = 214,
|
|
|
|
Teleport_Line = 215,
|
|
|
|
Sector_SetGravity = 216,
|
|
|
|
Stairs_BuildUpDoom = 217,
|
|
|
|
Sector_SetWind = 218,
|
|
Sector_SetFriction = 219,
|
|
Sector_SetCurrent = 220,
|
|
|
|
Scroll_Texture_Both = 221,
|
|
Scroll_Texture_Model = 222,
|
|
Scroll_Floor = 223,
|
|
Scroll_Ceiling = 224,
|
|
Scroll_Texture_Offsets = 225,
|
|
|
|
ACS_ExecuteAlways = 226,
|
|
|
|
PointPush_SetForce = 227,
|
|
|
|
Plat_RaiseAndStayTx0 = 228,
|
|
|
|
Thing_SetGoal = 229,
|
|
|
|
Plat_UpByValueStayTx = 230,
|
|
Plat_ToggleCeiling = 231,
|
|
|
|
Light_StrobeDoom = 232,
|
|
Light_MinNeighbor = 233,
|
|
Light_MaxNeighbor = 234,
|
|
|
|
Floor_TransferTrigger = 235,
|
|
Floor_TransferNumeric = 236,
|
|
|
|
ChangeCamera = 237,
|
|
|
|
Floor_RaiseToLowestCeiling = 238,
|
|
Floor_RaiseByValueTxTy = 239,
|
|
Floor_RaiseByTexture = 240,
|
|
Floor_LowerToLowestTxTy = 241,
|
|
Floor_LowerToHighest = 242,
|
|
|
|
Exit_Normal = 243,
|
|
Exit_Secret = 244,
|
|
|
|
Elevator_RaiseToNearest = 245,
|
|
Elevator_MoveToFloor = 246,
|
|
Elevator_LowerToNearest = 247,
|
|
|
|
HealThing = 248,
|
|
Door_CloseWaitOpen = 249,
|
|
|
|
Floor_Donut = 250,
|
|
|
|
FloorAndCeiling_LowerRaise = 251,
|
|
|
|
Ceiling_RaiseToNearest = 252,
|
|
Ceiling_LowerToLowest = 253,
|
|
Ceiling_LowerToFloor = 254,
|
|
Ceiling_CrushRaiseAndStaySilA = 255
|
|
} linespecial_t;
|
|
|
|
typedef enum {
|
|
Init_Gravity = 0,
|
|
Init_Color = 1,
|
|
Init_Damage = 2,
|
|
NUM_STATIC_INITS,
|
|
Init_TransferSky = 255
|
|
} staticinit_t;
|
|
|
|
typedef enum {
|
|
Light_Phased = 1,
|
|
LightSequenceStart = 2,
|
|
LightSequenceSpecial1 = 3,
|
|
LightSequenceSpecial2 = 4,
|
|
|
|
Stairs_Special1 = 26,
|
|
Stairs_Special2 = 27,
|
|
|
|
// [RH] Equivalents for DOOM's sector specials
|
|
dLight_Flicker = 65,
|
|
dLight_StrobeFast = 66,
|
|
dLight_StrobeSlow = 67,
|
|
dLight_Strobe_Hurt = 68,
|
|
dDamage_Hellslime = 69,
|
|
dDamage_Nukage = 71,
|
|
dLight_Glow = 72,
|
|
dSector_DoorCloseIn30 = 74,
|
|
dDamage_End = 75,
|
|
dLight_StrobeSlowSync = 76,
|
|
dLight_StrobeFastSync = 77,
|
|
dSector_DoorRaiseIn5Mins = 78,
|
|
dFriction_Low = 79,
|
|
dDamage_SuperHellslime = 80,
|
|
dLight_FireFlicker = 81,
|
|
dDamage_LavaWimpy = 82,
|
|
dDamage_LavaHefty = 83,
|
|
dScroll_EastLavaDamage = 84,
|
|
|
|
// And here are some for Strife
|
|
sLight_Strobe_Hurt = 104,
|
|
sDamage_Hellslime = 105,
|
|
Damage_InstantDeath = 115,
|
|
sDamage_SuperHellslime = 116,
|
|
Scroll_StrifeCurrent = 118,
|
|
|
|
// Caverns of Darkness healing sector
|
|
Sector_Heal = 196,
|
|
|
|
Light_OutdoorLightning = 197,
|
|
Light_IndoorLightning1 = 198,
|
|
Light_IndoorLightning2 = 199,
|
|
|
|
Sky2 = 200,
|
|
|
|
// Hexen-type scrollers
|
|
Scroll_North_Slow = 201,
|
|
Scroll_North_Medium = 202,
|
|
Scroll_North_Fast = 203,
|
|
Scroll_East_Slow = 204,
|
|
Scroll_East_Medium = 205,
|
|
Scroll_East_Fast = 206,
|
|
Scroll_South_Slow = 207,
|
|
Scroll_South_Medium = 208,
|
|
Scroll_South_Fast = 209,
|
|
Scroll_West_Slow = 210,
|
|
Scroll_West_Medium = 211,
|
|
Scroll_West_Fast = 212,
|
|
Scroll_NorthWest_Slow = 213,
|
|
Scroll_NorthWest_Medium = 214,
|
|
Scroll_NorthWest_Fast = 215,
|
|
Scroll_NorthEast_Slow = 216,
|
|
Scroll_NorthEast_Medium = 217,
|
|
Scroll_NorthEast_Fast = 218,
|
|
Scroll_SouthEast_Slow = 219,
|
|
Scroll_SouthEast_Medium = 220,
|
|
Scroll_SouthEast_Fast = 221,
|
|
Scroll_SouthWest_Slow = 222,
|
|
Scroll_SouthWest_Medium = 223,
|
|
Scroll_SouthWest_Fast = 224,
|
|
|
|
// Heretic-type scrollers
|
|
Carry_East5 = 225,
|
|
Carry_East10,
|
|
Carry_East25,
|
|
Carry_East30,
|
|
Carry_East35,
|
|
Carry_North5,
|
|
Carry_North10,
|
|
Carry_North25,
|
|
Carry_North30,
|
|
Carry_North35,
|
|
Carry_South5,
|
|
Carry_South10,
|
|
Carry_South25,
|
|
Carry_South30,
|
|
Carry_South35,
|
|
Carry_West5,
|
|
Carry_West10,
|
|
Carry_West25,
|
|
Carry_West30,
|
|
Carry_West35
|
|
|
|
} sectorspecial_t;
|
|
|
|
// [RH] Equivalents for BOOM's generalized sector types
|
|
|
|
#define DAMAGE_MASK 0x0300
|
|
#define SECRET_MASK 0x0400
|
|
#define FRICTION_MASK 0x0800
|
|
#define PUSH_MASK 0x1000
|
|
|
|
struct line_s;
|
|
class AActor;
|
|
|
|
FName MODtoDamageType (int mod);
|
|
|
|
typedef int (*lnSpecFunc)(struct line_s *line,
|
|
class AActor *activator,
|
|
bool backSide,
|
|
int arg1,
|
|
int arg2,
|
|
int arg3,
|
|
int arg4,
|
|
int arg5);
|
|
|
|
extern lnSpecFunc LineSpecials[256];
|
|
|
|
#endif //__P_LNSPEC_H__
|