ref: cb71cbe07a78cb7ce0a7af2fff80edc4396eda0d
parent: 97df2f32a622bd920bdcd75b6852e925b8383ceb
parent: 4372e7fd057b2050ccf5266185410edf9a7d4422
author: Turo Lamminen <turol@users.noreply.github.com>
date: Fri Nov 4 08:31:06 EDT 2022
Merge pull request #1538 from turol/hexen-prototypes Clean up Hexen prototypes
--- a/src/hexen/CMakeLists.txt
+++ b/src/hexen/CMakeLists.txt
@@ -14,6 +14,7 @@
m_random.c m_random.h
mn_menu.c
p_acs.c
+ p_action.h
p_anim.c
p_ceilng.c
p_doors.c
--- a/src/hexen/Makefile.am
+++ b/src/hexen/Makefile.am
@@ -22,6 +22,7 @@
m_random.c m_random.h \
mn_menu.c \
p_acs.c \
+ p_action.h \
p_anim.c \
p_ceilng.c \
p_doors.c \
--- a/src/hexen/h2def.h
+++ b/src/hexen/h2def.h
@@ -1106,4 +1106,7 @@
#include "sounds.h"
+#include "p_action.h"
+
+
#endif // __H2DEF__
--- a/src/hexen/info.c
+++ b/src/hexen/info.c
@@ -15,6 +15,8 @@
//
#include "h2def.h"
#include "i_swap.h"
+#include "p_local.h"
+
// generated by stateco
const char *sprnames[] = {
@@ -51,232 +53,6 @@
NULL
};
-void A_FreeTargMobj();
-void A_FlameCheck();
-void A_HideThing();
-void A_UnHideThing();
-void A_RestoreSpecialThing1();
-void A_RestoreSpecialThing2();
-void A_RestoreArtifact();
-void A_Summon();
-void A_ThrustInitUp();
-void A_ThrustInitDn();
-void A_ThrustRaise();
-void A_ThrustBlock();
-void A_ThrustImpale();
-void A_ThrustLower();
-void A_TeloSpawnC();
-void A_TeloSpawnB();
-void A_TeloSpawnA();
-void A_TeloSpawnD();
-void A_CheckTeleRing();
-void A_FogSpawn();
-void A_FogMove();
-void A_Quake();
-void A_ContMobjSound();
-void A_Scream();
-void A_Explode();
-void A_PoisonBagInit();
-void A_PoisonBagDamage();
-void A_PoisonBagCheck();
-void A_CheckThrowBomb();
-void A_NoGravity();
-void A_PotteryExplode();
-void A_PotteryChooseBit();
-void A_PotteryCheck();
-void A_CorpseBloodDrip();
-void A_CorpseExplode();
-void A_LeafSpawn();
-void A_LeafThrust();
-void A_LeafCheck();
-void A_BridgeInit();
-void A_BridgeOrbit();
-void A_TreeDeath();
-void A_PoisonShroom();
-void A_Pain();
-void A_SoAExplode();
-void A_BellReset1();
-void A_BellReset2();
-void A_NoBlocking();
-void A_Light0();
-void A_WeaponReady();
-void A_Lower();
-void A_Raise();
-void A_FPunchAttack();
-void A_ReFire();
-void A_FAxeAttack();
-void A_FHammerAttack();
-void A_FHammerThrow();
-void A_FSwordAttack();
-void A_FSwordFlames();
-void A_CMaceAttack();
-void A_CStaffInitBlink();
-void A_CStaffCheckBlink();
-void A_CStaffCheck();
-void A_CStaffAttack();
-void A_CStaffMissileSlither();
-void A_CFlameAttack();
-void A_CFlameRotate();
-void A_CFlamePuff();
-void A_CFlameMissile();
-void A_CHolyAttack();
-void A_CHolyPalette();
-void A_CHolySeek();
-void A_CHolyCheckScream();
-void A_CHolyTail();
-void A_CHolySpawnPuff();
-void A_CHolyAttack2();
-void A_MWandAttack();
-void A_LightningReady();
-void A_MLightningAttack();
-void A_LightningZap();
-void A_LightningClip();
-void A_LightningRemove();
-void A_LastZap();
-void A_ZapMimic();
-void A_MStaffAttack();
-void A_MStaffPalette();
-void A_MStaffWeave();
-void A_MStaffTrack();
-void A_SnoutAttack();
-void A_FireConePL1();
-void A_ShedShard();
-void A_AddPlayerCorpse();
-void A_SkullPop();
-void A_FreezeDeath();
-void A_FreezeDeathChunks();
-void A_CheckBurnGone();
-void A_CheckSkullFloor();
-void A_CheckSkullDone();
-void A_SpeedFade();
-void A_IceSetTics();
-void A_IceCheckHeadDone();
-void A_PigPain();
-void A_PigLook();
-void A_PigChase();
-void A_FaceTarget();
-void A_PigAttack();
-void A_QueueCorpse();
-void A_Look();
-void A_Chase();
-void A_CentaurAttack();
-void A_CentaurAttack2();
-void A_SetReflective();
-void A_CentaurDefend();
-void A_UnSetReflective();
-void A_CentaurDropStuff();
-void A_CheckFloor();
-void A_DemonAttack1();
-void A_DemonAttack2();
-void A_DemonDeath();
-void A_Demon2Death();
-void A_WraithRaiseInit();
-void A_WraithRaise();
-void A_WraithInit();
-void A_WraithLook();
-void A_WraithChase();
-void A_WraithFX3();
-void A_WraithMelee();
-void A_WraithMissile();
-void A_WraithFX2();
-void A_MinotaurFade1();
-void A_MinotaurFade2();
-void A_MinotaurLook();
-void A_MinotaurChase();
-void A_MinotaurRoam();
-void A_MinotaurAtk1();
-void A_MinotaurDecide();
-void A_MinotaurAtk2();
-void A_MinotaurAtk3();
-void A_MinotaurCharge();
-void A_SmokePuffExit();
-void A_MinotaurFade0();
-void A_MntrFloorFire();
-void A_SerpentChase();
-void A_SerpentHumpDecide();
-void A_SerpentUnHide();
-void A_SerpentRaiseHump();
-void A_SerpentLowerHump();
-void A_SerpentHide();
-void A_SerpentBirthScream();
-void A_SetShootable();
-void A_SerpentCheckForAttack();
-void A_UnSetShootable();
-void A_SerpentDiveSound();
-void A_SerpentWalk();
-void A_SerpentChooseAttack();
-void A_SerpentMeleeAttack();
-void A_SerpentMissileAttack();
-void A_SerpentHeadPop();
-void A_SerpentSpawnGibs();
-void A_SerpentHeadCheck();
-void A_FloatGib();
-void A_DelayGib();
-void A_SinkGib();
-void A_BishopDecide();
-void A_BishopDoBlur();
-void A_BishopSpawnBlur();
-void A_BishopChase();
-void A_BishopAttack();
-void A_BishopAttack2();
-void A_BishopPainBlur();
-void A_BishopPuff();
-void A_SetAltShadow();
-void A_BishopMissileWeave();
-void A_BishopMissileSeek();
-void A_DragonInitFlight();
-void A_DragonFlap();
-void A_DragonFlight();
-void A_DragonAttack();
-void A_DragonPain();
-void A_DragonCheckCrash();
-void A_DragonFX2();
-void A_ESound();
-void A_EttinAttack();
-void A_DropMace();
-void A_FiredRocks();
-void A_UnSetInvulnerable();
-void A_FiredChase();
-void A_FiredAttack();
-void A_FiredSplotch();
-void A_SmBounce();
-void A_IceGuyLook();
-void A_IceGuyChase();
-void A_IceGuyAttack();
-void A_IceGuyDie();
-void A_IceGuyMissilePuff();
-void A_IceGuyMissileExplode();
-void A_ClassBossHealth();
-void A_FastChase();
-void A_FighterAttack();
-void A_ClericAttack();
-void A_MageAttack();
-void A_SorcSpinBalls();
-void A_SpeedBalls();
-void A_SpawnFizzle();
-void A_SorcBossAttack();
-void A_SorcBallOrbit();
-void A_SorcBallPop();
-void A_BounceCheck();
-void A_SorcFX1Seek();
-void A_SorcFX2Split();
-void A_SorcFX2Orbit();
-void A_SorcererBishopEntry();
-void A_SpawnBishop();
-void A_SorcFX4Check();
-void A_KoraxStep2();
-void A_KoraxChase();
-void A_KoraxStep();
-void A_KoraxDecide();
-void A_KoraxMissile();
-void A_KoraxCommand();
-void A_KoraxBonePop();
-void A_KSpiritRoam();
-void A_KBoltRaise();
-void A_KBolt();
-void A_BatSpawnInit();
-void A_BatSpawn();
-void A_BatMove();
state_t states[NUMSTATES] = {
{SPR_MAN1, 0, -1, NULL, S_NULL, 0, 0}, // S_NULL
--- a/src/hexen/info.h
+++ b/src/hexen/info.h
@@ -3171,6 +3171,12 @@
NUMSTATES
} statenum_t;
+
+struct mobj_s;
+struct player_s;
+struct pspdef_s;
+
+
typedef struct
{
spritenum_t sprite;
--- /dev/null
+++ b/src/hexen/p_action.h
@@ -1,0 +1,240 @@
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+// Copyright(C) 2005-2014 Simon Howard
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+//
+// External definitions for action pointer functions.
+//
+
+#ifndef HEXEN_P_ACTION_H
+#define HEXEN_P_ACTION_H
+
+
+void A_FreeTargMobj(mobj_t *actor);
+void A_FlameCheck(mobj_t *actor);
+void A_HideThing(mobj_t *actor);
+void A_RestoreSpecialThing1(mobj_t *thing);
+void A_RestoreSpecialThing2(mobj_t *thing);
+void A_RestoreArtifact(mobj_t *arti);
+void A_Summon(mobj_t *actor);
+void A_ThrustInitUp(mobj_t *actor);
+void A_ThrustInitDn(mobj_t *actor);
+void A_ThrustRaise(mobj_t *actor);
+void A_ThrustBlock(mobj_t *actor);
+void A_ThrustImpale(mobj_t *actor);
+void A_ThrustLower(mobj_t *actor);
+void A_TeloSpawnC(mobj_t *actor);
+void A_TeloSpawnB(mobj_t *actor);
+void A_TeloSpawnA(mobj_t *actor);
+void A_TeloSpawnD(mobj_t *actor);
+void A_CheckTeleRing(mobj_t *actor);
+void A_FogSpawn(mobj_t *actor);
+void A_FogMove(mobj_t *actor);
+void A_Quake(mobj_t *actor);
+void A_ContMobjSound(mobj_t *actor);
+void A_Scream(mobj_t *actor);
+void A_PoisonBagInit(mobj_t *actor);
+void A_PoisonBagDamage(mobj_t *actor);
+void A_PoisonBagCheck(mobj_t *actor);
+void A_CheckThrowBomb(mobj_t *actor);
+void A_NoGravity(mobj_t *actor);
+void A_PotteryExplode(mobj_t *actor);
+void A_PotteryChooseBit(mobj_t *actor);
+void A_PotteryCheck(mobj_t *actor);
+void A_CorpseBloodDrip(mobj_t *actor);
+void A_CorpseExplode(mobj_t *actor);
+void A_LeafSpawn(mobj_t *actor);
+void A_LeafThrust(mobj_t *actor);
+void A_LeafCheck(mobj_t *actor);
+void A_BridgeInit(mobj_t *actor);
+void A_BridgeOrbit(mobj_t *actor);
+void A_TreeDeath(mobj_t *actor);
+void A_PoisonShroom(mobj_t *actor);
+void A_Pain(mobj_t *actor);
+void A_SoAExplode(mobj_t *actor);
+void A_BellReset1(mobj_t *actor);
+void A_BellReset2(mobj_t *actor);
+void A_Light0(player_t *player, pspdef_t *psp);
+void A_WeaponReady(player_t *player, pspdef_t *psp);
+void A_Lower(player_t *player, pspdef_t *psp);
+void A_Raise(player_t *player, pspdef_t *psp);
+void A_FPunchAttack(player_t *player, pspdef_t *psp);
+void A_ReFire(player_t *player, pspdef_t *psp);
+void A_FAxeAttack(player_t *player, pspdef_t *psp);
+void A_FHammerAttack(player_t *player, pspdef_t *psp);
+void A_FHammerThrow(player_t *player, pspdef_t *psp);
+void A_FSwordAttack(player_t *player, pspdef_t *psp);
+void A_FSwordFlames(mobj_t *actor);
+void A_CMaceAttack(player_t *player, pspdef_t *psp);
+void A_CStaffInitBlink(player_t *player, pspdef_t *psp);
+void A_CStaffCheckBlink(player_t *player, pspdef_t *psp);
+void A_CStaffCheck(player_t * player, pspdef_t *psp);
+void A_CStaffAttack(player_t *player, pspdef_t *psp);
+void A_CStaffMissileSlither(mobj_t *actor);
+void A_CFlameAttack(player_t *player, pspdef_t *psp);
+void A_CFlameRotate(mobj_t *actor);
+void A_CFlamePuff(mobj_t *actor);
+void A_CFlameMissile(mobj_t *actor);
+void A_CHolyAttack(player_t *player, pspdef_t *psp);
+void A_CHolyPalette(player_t *player, pspdef_t *psp);
+void A_CHolySeek(mobj_t *actor);
+void A_CHolyCheckScream(mobj_t *actor);
+void A_CHolyTail(mobj_t *actor);
+void A_CHolySpawnPuff(mobj_t *actor);
+void A_CHolyAttack2(mobj_t *actor);
+void A_MWandAttack(player_t *player, pspdef_t *psp);
+void A_LightningReady(player_t *player, pspdef_t *psp);
+void A_MLightningAttack(player_t *player, pspdef_t *psp);
+void A_LightningZap(mobj_t *actor);
+void A_LightningClip(mobj_t *actor);
+void A_LightningRemove(mobj_t *actor);
+void A_LastZap(mobj_t *actor);
+void A_ZapMimic(mobj_t *actor);
+void A_MStaffAttack(player_t *player, pspdef_t *psp);
+void A_MStaffPalette(player_t *player, pspdef_t *psp);
+void A_MStaffWeave(mobj_t *actor);
+void A_MStaffTrack(mobj_t *actor);
+void A_SnoutAttack(player_t *player, pspdef_t *psp);
+void A_FireConePL1(player_t * player, pspdef_t *psp);
+void A_ShedShard(mobj_t *actor);
+void A_AddPlayerCorpse(mobj_t *actor);
+void A_SkullPop(mobj_t *actor);
+void A_FreezeDeath(mobj_t *actor);
+void A_CheckBurnGone(mobj_t *actor);
+void A_CheckSkullFloor(mobj_t *actor);
+void A_CheckSkullDone(mobj_t *actor);
+void A_SpeedFade(mobj_t *actor);
+void A_IceSetTics(mobj_t *actor);
+void A_IceCheckHeadDone(mobj_t *actor);
+void A_PigPain(mobj_t *actor);
+void A_PigLook(mobj_t *actor);
+void A_PigChase(mobj_t *actor);
+void A_FaceTarget(mobj_t *actor);
+void A_PigAttack(mobj_t *actor);
+void A_QueueCorpse(mobj_t *actor);
+void A_Look(mobj_t *actor);
+void A_Chase(mobj_t *actor);
+void A_CentaurAttack(mobj_t *actor);
+void A_CentaurAttack2(mobj_t *actor);
+void A_SetReflective(mobj_t *actor);
+void A_CentaurDefend(mobj_t *actor);
+void A_UnSetReflective(mobj_t *actor);
+void A_CentaurDropStuff(mobj_t *actor);
+void A_CheckFloor(mobj_t *actor);
+void A_DemonAttack1(mobj_t *actor);
+void A_DemonAttack2(mobj_t *actor);
+void A_DemonDeath(mobj_t *actor);
+void A_Demon2Death(mobj_t *actor);
+void A_WraithRaiseInit(mobj_t *actor);
+void A_WraithRaise(mobj_t *actor);
+void A_WraithInit(mobj_t *actor);
+void A_WraithLook(mobj_t *actor);
+void A_WraithChase(mobj_t *actor);
+void A_WraithFX3(mobj_t *actor);
+void A_WraithMelee(mobj_t *actor);
+void A_WraithMissile(mobj_t *actor);
+void A_WraithFX2(mobj_t *actor);
+void A_MinotaurFade1(mobj_t *actor);
+void A_MinotaurFade2(mobj_t *actor);
+void A_MinotaurChase(mobj_t *actor);
+void A_MinotaurRoam(mobj_t *actor);
+void A_MinotaurAtk1(mobj_t *actor);
+void A_MinotaurDecide(mobj_t *actor);
+void A_MinotaurAtk2(mobj_t *actor);
+void A_MinotaurAtk3(mobj_t *actor);
+void A_MinotaurCharge(mobj_t *actor);
+void A_SmokePuffExit(mobj_t *actor);
+void A_MinotaurFade0(mobj_t *actor);
+void A_MntrFloorFire(mobj_t *actor);
+void A_SerpentChase(mobj_t *actor);
+void A_SerpentHumpDecide(mobj_t *actor);
+void A_SerpentUnHide(mobj_t *actor);
+void A_SerpentRaiseHump(mobj_t *actor);
+void A_SerpentLowerHump(mobj_t *actor);
+void A_SerpentHide(mobj_t *actor);
+void A_SerpentBirthScream(mobj_t *actor);
+void A_SetShootable(mobj_t *actor);
+void A_SerpentCheckForAttack(mobj_t *actor);
+void A_UnSetShootable(mobj_t *actor);
+void A_SerpentDiveSound(mobj_t *actor);
+void A_SerpentWalk(mobj_t *actor);
+void A_SerpentChooseAttack(mobj_t *actor);
+void A_SerpentMeleeAttack(mobj_t *actor);
+void A_SerpentMissileAttack(mobj_t *actor);
+void A_SerpentHeadPop(mobj_t *actor);
+void A_SerpentSpawnGibs(mobj_t *actor);
+void A_SerpentHeadCheck(mobj_t *actor);
+void A_FloatGib(mobj_t *actor);
+void A_DelayGib(mobj_t *actor);
+void A_SinkGib(mobj_t *actor);
+void A_BishopDecide(mobj_t *actor);
+void A_BishopDoBlur(mobj_t *actor);
+void A_BishopSpawnBlur(mobj_t *actor);
+void A_BishopChase(mobj_t *actor);
+void A_BishopAttack(mobj_t *actor);
+void A_BishopAttack2(mobj_t *actor);
+void A_BishopPainBlur(mobj_t *actor);
+void A_BishopPuff(mobj_t *actor);
+void A_SetAltShadow(mobj_t *actor);
+void A_BishopMissileWeave(mobj_t *actor);
+void A_BishopMissileSeek(mobj_t *actor);
+void A_DragonInitFlight(mobj_t *actor);
+void A_DragonFlap(mobj_t *actor);
+void A_DragonFlight(mobj_t *actor);
+void A_DragonAttack(mobj_t *actor);
+void A_DragonPain(mobj_t *actor);
+void A_DragonCheckCrash(mobj_t *actor);
+void A_DragonFX2(mobj_t *actor);
+void A_ESound(mobj_t *mo);
+void A_EttinAttack(mobj_t *actor);
+void A_DropMace(mobj_t *actor);
+void A_FiredRocks(mobj_t *actor);
+void A_UnSetInvulnerable(mobj_t *actor);
+void A_FiredChase(mobj_t *actor);
+void A_FiredAttack(mobj_t *actor);
+void A_FiredSplotch(mobj_t *actor);
+void A_SmBounce(mobj_t *actor);
+void A_IceGuyLook(mobj_t *actor);
+void A_IceGuyChase(mobj_t *actor);
+void A_IceGuyAttack(mobj_t *actor);
+void A_IceGuyDie(mobj_t *actor);
+void A_IceGuyMissilePuff(mobj_t *actor);
+void A_IceGuyMissileExplode(mobj_t *actor);
+void A_ClassBossHealth(mobj_t *actor);
+void A_FastChase(mobj_t *actor);
+void A_FighterAttack(mobj_t *actor);
+void A_ClericAttack(mobj_t *actor);
+void A_MageAttack(mobj_t *actor);
+void A_SorcBallPop(mobj_t *actor);
+void A_SorcFX2Split(mobj_t *actor);
+void A_SorcFX2Orbit(mobj_t *actor);
+void A_SorcererBishopEntry(mobj_t *actor);
+void A_SpawnBishop(mobj_t *actor);
+void A_SorcFX4Check(mobj_t *actor);
+void A_KoraxStep2(mobj_t *actor);
+void A_KoraxChase(mobj_t *actor);
+void A_KoraxStep(mobj_t *actor);
+void A_KoraxDecide(mobj_t *actor);
+void A_KoraxMissile(mobj_t *actor);
+void A_KoraxCommand(mobj_t *actor);
+void A_KoraxBonePop(mobj_t *actor);
+void A_KSpiritRoam(mobj_t *actor);
+void A_KBoltRaise(mobj_t *actor);
+void A_KBolt(mobj_t *actor);
+void A_BatSpawnInit(mobj_t *actor);
+void A_BatSpawn(mobj_t *actor);
+void A_BatMove(mobj_t *actor);
+
+
+#endif // HEXEN_P_ACTION_H
--- a/src/hexen/p_enemy.c
+++ b/src/hexen/p_enemy.c
@@ -1102,7 +1102,6 @@
//
//----------------------------------------------------------------------------
-void A_MinotaurLook(mobj_t * actor);
// Check the age of the minotaur and stomp it after MAULATORTICS of time
// have passed. Returns false if killed.
@@ -3854,8 +3853,6 @@
void A_IceGuyDie(mobj_t * actor)
{
- void A_FreezeDeathChunks(mobj_t * actor);
-
actor->momx = 0;
actor->momy = 0;
actor->momz = 0;
@@ -3931,22 +3928,6 @@
#define BALL1_ANGLEOFFSET 0
#define BALL2_ANGLEOFFSET (ANG_MAX/3)
#define BALL3_ANGLEOFFSET ((ANG_MAX/3)*2)
-
-void A_SorcBallOrbit(mobj_t * actor);
-void A_SorcSpinBalls(mobj_t * actor);
-void A_SpeedBalls(mobj_t * actor);
-void A_SlowBalls(mobj_t * actor);
-void A_StopBalls(mobj_t * actor);
-void A_AccelBalls(mobj_t * actor);
-void A_DecelBalls(mobj_t * actor);
-void A_SorcBossAttack(mobj_t * actor);
-void A_SpawnFizzle(mobj_t * actor);
-void A_CastSorcererSpell(mobj_t * actor);
-void A_SorcUpdateBallAngle(mobj_t * actor);
-void A_BounceCheck(mobj_t * actor);
-void A_SorcFX1Seek(mobj_t * actor);
-void A_SorcOffense1(mobj_t * actor);
-void A_SorcOffense2(mobj_t * actor);
// Spawn spinning balls above head - actor is sorcerer
--- a/src/hexen/p_local.h
+++ b/src/hexen/p_local.h
@@ -194,6 +194,23 @@
void A_CHolyAttack3(mobj_t *actor);
void A_FSwordAttack2(mobj_t *actor);
void A_MStaffAttack2(mobj_t *actor);
+void A_FreezeDeathChunks(mobj_t *actor);
+void A_SorcBallOrbit(mobj_t *actor);
+void A_SorcSpinBalls(mobj_t *actor);
+void A_SpeedBalls(mobj_t *actor);
+void A_SlowBalls(mobj_t *actor);
+void A_StopBalls(mobj_t *actor);
+void A_AccelBalls(mobj_t *actor);
+void A_DecelBalls(mobj_t *actor);
+void A_SorcBossAttack(mobj_t *actor);
+void A_SpawnFizzle(mobj_t *actor);
+void A_CastSorcererSpell(mobj_t *actor);
+void A_SorcUpdateBallAngle(mobj_t *actor);
+void A_BounceCheck(mobj_t *actor);
+void A_SorcFX1Seek(mobj_t *actor);
+void A_SorcOffense1(mobj_t *actor);
+void A_SorcOffense2(mobj_t *actor);
+void A_MinotaurLook(mobj_t *actor);
// ***** P_MAPUTL *****
--- a/src/hexen/p_spec.h
+++ b/src/hexen/p_spec.h
@@ -15,6 +15,10 @@
//
+#ifndef P_SPEC_H
+#define P_SPEC_H
+
+
extern int *TerrainTypes;
//
@@ -577,3 +581,6 @@
boolean EV_ThingDeactivate(int tid);
boolean EV_ThingRemove(int tid);
boolean EV_ThingDestroy(int tid);
+
+
+#endif // P_SPEC_H