qzdoom-gpl/src/p_lnspec.h
2016-01-06 02:05:39 +01:00

219 lines
5.7 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"
#define DEFINE_SPECIAL(name, num, min, max, map) name = num,
typedef enum {
#include "actionspecials.h"
} linespecial_t;
struct FLineSpecial
{
const char *name;
BYTE number;
SBYTE min_args;
SBYTE max_args;
BYTE map_args;
};
extern const FLineSpecial *LineSpecialsInfo[256];
typedef enum {
Init_Gravity = 0,
Init_Color = 1,
Init_Damage = 2,
Init_SectorLink = 3,
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,
Wind_East_Weak=40,
Wind_East_Medium,
Wind_East_Strong,
Wind_North_Weak,
Wind_North_Medium,
Wind_North_Strong,
Wind_South_Weak,
Wind_South_Medium,
Wind_South_Strong,
Wind_West_Weak,
Wind_West_Medium,
Wind_West_Strong,
// [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,
hDamage_Sludge = 85,
Sector_Outside = 87,
// And here are some for Strife
sLight_Strobe_Hurt = 104,
sDamage_Hellslime = 105,
Damage_InstantDeath = 115,
sDamage_SuperHellslime = 116,
Scroll_StrifeCurrent = 118,
Sector_Hidden = 195,
Sector_Heal = 196, // Caverns of Darkness healing sector
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_t;
class AActor;
FName MODtoDamageType (int mod);
typedef int (*lnSpecFunc)(struct line_t *line,
class AActor *activator,
bool backSide,
int arg1,
int arg2,
int arg3,
int arg4,
int arg5);
extern lnSpecFunc LineSpecials[256];
extern BYTE NamedACSToNormalACS[7];
static inline bool P_IsACSSpecial(int specnum)
{
return (specnum >= ACS_Execute && specnum <= ACS_LockedExecuteDoor) ||
specnum == ACS_ExecuteAlways;
}
int P_FindLineSpecial (const char *string, int *min_args=NULL, int *max_args=NULL);
bool P_ActivateThingSpecial(AActor * thing, AActor * trigger, bool death=false);
int P_ExecuteSpecial(int num,
struct line_t *line,
class AActor *activator,
bool backSide,
int arg1,
int arg2,
int arg3,
int arg4,
int arg5);
#endif //__P_LNSPEC_H__