2006-02-24 04:48:15 +00:00
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
// $Id:$
//
// Copyright (C) 1993-1996 by id Software, Inc.
//
// This source is available for distribution and/or modification
// only under the terms of the DOOM Source Code License as
// published by id Software. All rights reserved.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
// for more details.
//
// DESCRIPTION:
// Play functions, animation, global header.
//
//-----------------------------------------------------------------------------
# ifndef __P_LOCAL__
# define __P_LOCAL__
2011-07-06 15:31:05 +00:00
# include "doomtype.h"
# include "tables.h"
2006-02-24 04:48:15 +00:00
2016-02-15 01:14:34 +00:00
class player_t ;
class AActor ;
struct FPlayerStart ;
class PClassActor ;
struct fixedvec3 ;
class APlayerPawn ;
struct line_t ;
struct sector_t ;
struct msecnode_t ;
struct secplane_t ;
2016-02-15 12:40:31 +00:00
struct FCheckPosition ;
2008-04-08 08:53:42 +00:00
2006-02-24 04:48:15 +00:00
# include <stdlib.h>
2009-12-01 01:15:49 +00:00
# define STEEPSLOPE 46342 // [RH] Minimum floorplane.c value for walking
2006-02-24 04:48:15 +00:00
# define BONUSADD 6
// mapblocks are used to check movement
// against lines and things
# define MAPBLOCKUNITS 128
# define MAPBLOCKSIZE (MAPBLOCKUNITS*FRACUNIT)
# define MAPBLOCKSHIFT (FRACBITS+7)
# define MAPBMASK (MAPBLOCKSIZE-1)
# define MAPBTOFRAC (MAPBLOCKSHIFT-FRACBITS)
2012-03-28 03:49:38 +00:00
// Inspired by Maes
extern int bmapnegx ;
extern int bmapnegy ;
inline int GetSafeBlockX ( int blockx )
{
blockx > > = MAPBLOCKSHIFT ;
return ( blockx < = bmapnegx ) ? blockx & 0x1FF : blockx ;
}
inline int GetSafeBlockX ( long long blockx )
{
blockx > > = MAPBLOCKSHIFT ;
return int ( ( blockx < = bmapnegx ) ? blockx & 0x1FF : blockx ) ;
}
inline int GetSafeBlockY ( int blocky )
{
blocky > > = MAPBLOCKSHIFT ;
return ( blocky < = bmapnegy ) ? blocky & 0x1FF : blocky ;
}
inline int GetSafeBlockY ( long long blocky )
{
blocky > > = MAPBLOCKSHIFT ;
return int ( ( blocky < = bmapnegy ) ? blocky & 0x1FF : blocky ) ;
}
2006-02-24 04:48:15 +00:00
// MAXRADIUS is for precalculated sector block boxes
// the spider demon is larger,
// but we do not have any moving sectors nearby
# define MAXRADIUS 0 /*32*FRACUNIT*/
//#define GRAVITY FRACUNIT
# define MAXMOVE (30*FRACUNIT)
2010-01-06 04:36:38 +00:00
# define TALKRANGE (128*FRACUNIT)
2006-02-24 04:48:15 +00:00
# define USERANGE (64*FRACUNIT)
# define MELEERANGE (64*FRACUNIT)
# define MISSILERANGE (32*64*FRACUNIT)
# define PLAYERMISSILERANGE (8192*FRACUNIT) // [RH] New MISSILERANGE for players
// follow a player exlusively for 3 seconds
2015-10-14 12:36:30 +00:00
// No longer used.
// #define BASETHRESHOLD 100
2006-02-24 04:48:15 +00:00
//
// P_PSPR
//
2013-01-03 02:08:08 +00:00
void P_SetupPsprites ( player_t * curplayer , bool startweaponup ) ;
2006-02-24 04:48:15 +00:00
void P_MovePsprites ( player_t * curplayer ) ;
void P_DropWeapon ( player_t * player ) ;
//
// P_USER
//
void P_FallingDamage ( AActor * ent ) ;
void P_PlayerThink ( player_t * player ) ;
void P_PredictPlayer ( player_t * player ) ;
void P_UnPredictPlayer ( ) ;
2014-10-12 11:29:15 +00:00
void P_PredictionLerpReset ( ) ;
2006-02-24 04:48:15 +00:00
//
// P_MOBJ
//
# define ONFLOORZ FIXED_MIN
# define ONCEILINGZ FIXED_MAX
# define FLOATRANDZ (FIXED_MAX-1)
2013-01-03 02:08:08 +00:00
# define SPF_TEMPPLAYER 1 // spawning a short-lived dummy player
# define SPF_WEAPONFULLYUP 2 // spawn with weapon already raised
2016-02-15 01:14:34 +00:00
APlayerPawn * P_SpawnPlayer ( FPlayerStart * mthing , int playernum , int flags = 0 ) ;
2006-05-11 05:00:35 +00:00
2006-02-24 04:48:15 +00:00
void P_ThrustMobj ( AActor * mo , angle_t angle , fixed_t move ) ;
int P_FaceMobj ( AActor * source , AActor * target , angle_t * delta ) ;
2011-11-24 04:27:47 +00:00
bool P_SeekerMissile ( AActor * actor , angle_t thresh , angle_t turnMax , bool precise = false , bool usecurspeed = false ) ;
2006-02-24 04:48:15 +00:00
2008-04-04 14:31:20 +00:00
enum EPuffFlags
{
PF_HITTHING = 1 ,
PF_MELEERANGE = 2 ,
2011-06-13 10:34:46 +00:00
PF_TEMPORARY = 4 ,
2013-02-27 10:35:44 +00:00
PF_HITTHINGBLEED = 8 ,
PF_NORANDOMZ = 16
2008-04-04 14:31:20 +00:00
} ;
2015-01-30 02:53:08 +00:00
AActor * P_SpawnPuff ( AActor * source , PClassActor * pufftype , fixed_t x , fixed_t y , fixed_t z , angle_t dir , int updown , int flags = 0 , AActor * vict = NULL ) ;
2016-01-19 12:59:53 +00:00
inline AActor * P_SpawnPuff ( AActor * source , PClassActor * pufftype , const fixedvec3 & pos , angle_t dir , int updown , int flags = 0 , AActor * vict = NULL )
2016-01-20 21:49:57 +00:00
{
return P_SpawnPuff ( source , pufftype , pos . x , pos . y , pos . z , dir , updown , flags , vict ) ;
}
2006-02-24 04:48:15 +00:00
void P_SpawnBlood ( fixed_t x , fixed_t y , fixed_t z , angle_t dir , int damage , AActor * originator ) ;
2016-01-20 21:49:57 +00:00
inline void P_SpawnBlood ( const fixedvec3 & pos , angle_t dir , int damage , AActor * originator )
{
P_SpawnBlood ( pos . x , pos . y , pos . z , dir , damage , originator ) ;
}
2006-02-24 04:48:15 +00:00
void P_BloodSplatter ( fixed_t x , fixed_t y , fixed_t z , AActor * originator ) ;
void P_BloodSplatter2 ( fixed_t x , fixed_t y , fixed_t z , AActor * originator ) ;
void P_RipperBlood ( AActor * mo , AActor * bleeder ) ;
int P_GetThingFloorType ( AActor * thing ) ;
2006-10-22 10:32:41 +00:00
void P_ExplodeMissile ( AActor * missile , line_t * explodeline , AActor * target ) ;
2006-02-24 04:48:15 +00:00
2016-01-19 12:59:53 +00:00
AActor * P_OldSpawnMissile ( AActor * source , AActor * owner , AActor * dest , PClassActor * type ) ;
2010-04-03 04:07:17 +00:00
AActor * P_SpawnMissile ( AActor * source , AActor * dest , PClassActor * type , AActor * owner = NULL ) ;
AActor * P_SpawnMissileZ ( AActor * source , fixed_t z , AActor * dest , PClassActor * type ) ;
AActor * P_SpawnMissileXYZ ( fixed_t x , fixed_t y , fixed_t z , AActor * source , AActor * dest , PClassActor * type , bool checkspawn = true , AActor * owner = NULL ) ;
2016-01-19 12:43:11 +00:00
inline AActor * P_SpawnMissileXYZ ( const fixedvec3 & pos , AActor * source , AActor * dest , PClassActor * type , bool checkspawn = true , AActor * owner = NULL )
2016-01-20 21:49:57 +00:00
{
return P_SpawnMissileXYZ ( pos . x , pos . y , pos . z , source , dest , type , checkspawn , owner ) ;
}
2010-03-25 20:38:00 +00:00
AActor * P_SpawnMissileAngle ( AActor * source , PClassActor * type , angle_t angle , fixed_t velz ) ;
AActor * P_SpawnMissileAngleSpeed ( AActor * source , PClassActor * type , angle_t angle , fixed_t velz , fixed_t speed ) ;
AActor * P_SpawnMissileAngleZ ( AActor * source , fixed_t z , PClassActor * type , angle_t angle , fixed_t velz ) ;
AActor * P_SpawnMissileAngleZSpeed ( AActor * source , fixed_t z , PClassActor * type , angle_t angle , fixed_t velz , fixed_t speed , AActor * owner = NULL , bool checkspawn = true ) ;
AActor * P_SpawnMissileZAimed ( AActor * source , fixed_t z , AActor * dest , PClassActor * type ) ;
AActor * P_SpawnPlayerMissile ( AActor * source , PClassActor * type ) ;
AActor * P_SpawnPlayerMissile ( AActor * source , PClassActor * type , angle_t angle ) ;
AActor * P_SpawnPlayerMissile ( AActor * source , fixed_t x , fixed_t y , fixed_t z , PClassActor * type , angle_t angle ,
2015-09-08 15:40:21 +00:00
AActor * * pLineTarget = NULL , AActor * * MissileActor = NULL , bool nofreeaim = false , bool noautoaim = false ) ;
2006-02-24 04:48:15 +00:00
2007-12-09 03:40:02 +00:00
void P_CheckFakeFloorTriggers ( AActor * mo , fixed_t oldz , bool oldz_has_viewheight = false ) ;
2006-02-24 04:48:15 +00:00
2010-04-03 04:07:17 +00:00
AActor * P_SpawnSubMissile ( AActor * source , PClassActor * type , AActor * target ) ; // Strife uses it
2006-02-24 04:48:15 +00:00
//
// [RH] P_THINGS
//
2015-04-04 22:31:15 +00:00
extern FClassMap SpawnableThings ;
extern FClassMap StrifeTypes ;
2006-02-24 04:48:15 +00:00
2006-10-27 03:03:34 +00:00
bool P_Thing_Spawn ( int tid , AActor * source , int type , angle_t angle , bool fog , int newtid ) ;
bool P_Thing_Projectile ( int tid , AActor * source , int type , const char * type_name , angle_t angle ,
2006-02-24 04:48:15 +00:00
fixed_t speed , fixed_t vspeed , int dest , AActor * forcedest , int gravity , int newtid ,
bool leadTarget ) ;
2006-10-27 03:03:34 +00:00
bool P_MoveThing ( AActor * source , fixed_t x , fixed_t y , fixed_t z , bool fog ) ;
bool P_Thing_Move ( int tid , AActor * source , int mapspot , bool fog ) ;
- Moved the implementation for the Thing_Damage special into another function
so that I can create the ACS function Thing_Damage2. It's exactly the same as
Thing_Damage, except the damage type is specified by name. When I did this,
I noticed that it didn't do anything useful for a TID of 0, so I made it
affect the activator in that case.
- Added a new SetActorState ACS function:
int SetActorState (int tid, str statename, optional bool exact);
If tid is 0, it affects the script activator, otherwise it affects all the
matching actors. Statename is the name of the state you want to put the
actor in. The final parameter, exact, specifies whether or not partial
state name matches are accepted. If you don't specify it or set it to
false, if you try to do something like:
SetActorState (0, "Foo.Bar");
And the actor has a Foo state but no Foo.Bar state, it will enter the Foo
state. If you set exact to true:
SetActorState (0, "Foo.Bar", true);
Then the actor must have a Foo.Bar state, or it will not change state at
all, even if it has a Foo state.
The return value for this function is the number of actors that successfully
changed state. Note that you should refrain from using this function to
enter special states such as Death, or unpredictable results could occur.
SVN r505 (trunk)
2007-03-23 22:26:14 +00:00
int P_Thing_Damage ( int tid , AActor * whofor0 , int amount , FName type ) ;
2009-09-08 03:19:57 +00:00
void P_Thing_SetVelocity ( AActor * actor , fixed_t vx , fixed_t vy , fixed_t vz , bool add , bool setbob ) ;
2008-12-06 10:22:37 +00:00
void P_RemoveThing ( AActor * actor ) ;
2014-11-27 21:12:33 +00:00
bool P_Thing_Raise ( AActor * thing , AActor * raiser ) ;
2014-09-23 10:10:39 +00:00
bool P_Thing_CanRaise ( AActor * thing ) ;
2013-06-07 03:31:30 +00:00
PClassActor * P_GetSpawnableType ( int spawnnum ) ;
2015-04-03 22:39:09 +00:00
void InitSpawnablesFromMapinfo ( ) ;
2015-10-03 22:28:54 +00:00
int P_Thing_Warp ( AActor * caller , AActor * reference , fixed_t xofs , fixed_t yofs , fixed_t zofs , angle_t angle , int flags , fixed_t heightoffset , fixed_t radiusoffset , angle_t pitch ) ;
2015-07-31 06:40:33 +00:00
2016-01-20 21:49:57 +00:00
enum WARPF
{
2015-07-31 06:40:33 +00:00
WARPF_ABSOLUTEOFFSET = 0x1 ,
WARPF_ABSOLUTEANGLE = 0x2 ,
WARPF_USECALLERANGLE = 0x4 ,
WARPF_NOCHECKPOSITION = 0x8 ,
WARPF_INTERPOLATE = 0x10 ,
WARPF_WARPINTERPOLATION = 0x20 ,
WARPF_COPYINTERPOLATION = 0x40 ,
WARPF_STOP = 0x80 ,
WARPF_TOFLOOR = 0x100 ,
WARPF_TESTONLY = 0x200 ,
WARPF_ABSOLUTEPOSITION = 0x400 ,
WARPF_BOB = 0x800 ,
WARPF_MOVEPTR = 0x1000 ,
WARPF_USEPTR = 0x2000 ,
2015-07-31 12:54:01 +00:00
WARPF_USETID = 0x2000 ,
2015-10-03 22:28:54 +00:00
WARPF_COPYVELOCITY = 0x4000 ,
WARPF_COPYPITCH = 0x8000 ,
2016-01-20 21:49:57 +00:00
} ;
2015-07-31 06:40:33 +00:00
2006-02-24 04:48:15 +00:00
2009-09-16 15:54:04 +00:00
AActor * P_BlockmapSearch ( AActor * mo , int distance , AActor * ( * check ) ( AActor * , int , void * ) , void * params = NULL ) ;
2012-04-19 03:22:06 +00:00
AActor * P_RoughMonsterSearch ( AActor * mo , int distance , bool onlyseekable = false ) ;
2006-02-24 04:48:15 +00:00
//
// P_MAP
//
2008-04-08 10:47:28 +00:00
2006-02-24 04:48:15 +00:00
// If "floatok" true, move would be ok
// if within "tmfloorz - tmceilingz".
extern msecnode_t * sector_list ; // phares 3/16/98
extern TArray < line_t * > spechit ;
2006-09-14 00:02:31 +00:00
bool P_TestMobjLocation ( AActor * mobj ) ;
2008-04-10 14:38:43 +00:00
bool P_TestMobjZ ( AActor * mobj , bool quick = true , AActor * * pOnmobj = NULL ) ;
2012-04-06 04:46:45 +00:00
bool P_CheckPosition ( AActor * thing , fixed_t x , fixed_t y , FCheckPosition & tm , bool actorsonly = false ) ;
bool P_CheckPosition ( AActor * thing , fixed_t x , fixed_t y , bool actorsonly = false ) ;
2016-01-20 21:49:57 +00:00
inline bool P_CheckPosition ( AActor * thing , const fixedvec3 & pos , bool actorsonly = false )
{
return P_CheckPosition ( thing , pos . x , pos . y , actorsonly ) ;
}
2006-02-24 04:48:15 +00:00
AActor * P_CheckOnmobj ( AActor * thing ) ;
void P_FakeZMovement ( AActor * mo ) ;
2011-12-06 08:36:28 +00:00
bool P_TryMove ( AActor * thing , fixed_t x , fixed_t y , int dropoff , const secplane_t * onfloor , FCheckPosition & tm , bool missileCheck = false ) ;
2009-09-15 14:16:55 +00:00
bool P_TryMove ( AActor * thing , fixed_t x , fixed_t y , int dropoff , const secplane_t * onfloor = NULL ) ;
2009-01-07 18:45:39 +00:00
bool P_CheckMove ( AActor * thing , fixed_t x , fixed_t y ) ;
2009-09-14 20:47:53 +00:00
void P_ApplyTorque ( AActor * mo ) ;
2016-01-20 21:49:57 +00:00
bool P_TeleportMove ( AActor * thing , fixed_t x , fixed_t y , fixed_t z , bool telefrag , bool modifyactor = true ) ; // [RH] Added z and telefrag parameters
inline bool P_TeleportMove ( AActor * thing , const fixedvec3 & pos , bool telefrag , bool modifyactor = true )
{
return P_TeleportMove ( thing , pos . x , pos . y , pos . z , telefrag , modifyactor ) ;
}
2016-01-29 02:08:09 +00:00
void P_PlayerStartStomp ( AActor * actor , bool mononly = false ) ; // [RH] Stomp on things for a newly spawned player
2006-02-24 04:48:15 +00:00
void P_SlideMove ( AActor * mo , fixed_t tryx , fixed_t tryy , int numsteps ) ;
bool P_BounceWall ( AActor * mo ) ;
2012-04-26 03:50:11 +00:00
bool P_BounceActor ( AActor * mo , AActor * BlockingMobj , bool ontop ) ;
bool P_CheckSight ( const AActor * t1 , const AActor * t2 , int flags = 0 ) ;
2010-03-27 07:42:31 +00:00
enum ESightFlags
{
SF_IGNOREVISIBILITY = 1 ,
SF_SEEPASTSHOOTABLELINES = 2 ,
SF_SEEPASTBLOCKEVERYTHING = 4 ,
SF_IGNOREWATERBOUNDARY = 8
} ;
2006-02-24 04:48:15 +00:00
void P_ResetSightCounters ( bool full ) ;
2010-01-06 04:36:38 +00:00
bool P_TalkFacing ( AActor * player ) ;
2006-02-24 04:48:15 +00:00
void P_UseLines ( player_t * player ) ;
bool P_UsePuzzleItem ( AActor * actor , int itemType ) ;
2012-04-08 05:39:46 +00:00
enum
{
FFCF_ONLYSPAWNPOS = 1 ,
2012-04-08 21:12:14 +00:00
FFCF_SAMESECTOR = 2 ,
FFCF_ONLY3DFLOORS = 4 , // includes 3D midtexes
2012-04-14 03:55:46 +00:00
FFCF_3DRESTRICT = 8 , // ignore 3D midtexes and floors whose floorz are above thing's z
2016-02-16 15:40:53 +00:00
FFCF_NOPORTALS = 16 , // ignore portals (considers them impassable.)
2016-02-19 13:08:41 +00:00
FFCF_NOFLOOR = 32 ,
FFCF_NOCEILING = 64 ,
2012-04-08 05:39:46 +00:00
} ;
void P_FindFloorCeiling ( AActor * actor , int flags = 0 ) ;
2006-02-24 04:48:15 +00:00
2008-03-22 12:17:52 +00:00
bool P_ChangeSector ( sector_t * sector , int crunch , int amt , int floorOrCeil , bool isreset ) ;
2006-02-24 04:48:15 +00:00
2011-11-07 01:23:23 +00:00
fixed_t P_AimLineAttack ( AActor * t1 , angle_t angle , fixed_t distance , AActor * * pLineTarget = NULL , fixed_t vrange = 0 , int flags = 0 , AActor * target = NULL , AActor * friender = NULL ) ;
2010-03-28 10:51:35 +00:00
2012-06-22 03:56:08 +00:00
enum // P_AimLineAttack flags
2010-03-28 10:51:35 +00:00
{
ALF_FORCENOSMART = 1 ,
ALF_CHECK3D = 2 ,
ALF_CHECKNONSHOOTABLE = 4 ,
ALF_CHECKCONVERSATION = 8 ,
2011-11-07 01:23:23 +00:00
ALF_NOFRIENDS = 16 ,
2010-03-28 10:51:35 +00:00
} ;
2013-02-27 10:35:44 +00:00
enum // P_LineAttack flags
{
LAF_ISMELEEATTACK = 1 ,
2015-01-20 01:35:00 +00:00
LAF_NORANDOMPUFFZ = 2 ,
LAF_NOIMPACTDECAL = 4
2013-02-27 10:35:44 +00:00
} ;
2013-06-26 00:23:01 +00:00
AActor * P_LineAttack ( AActor * t1 , angle_t angle , fixed_t distance , int pitch , int damage , FName damageType , PClassActor * pufftype , int flags = 0 , AActor * * victim = NULL , int * actualdamage = NULL ) ;
2013-06-24 14:42:43 +00:00
AActor * P_LineAttack ( AActor * t1 , angle_t angle , fixed_t distance , int pitch , int damage , FName damageType , FName pufftype , int flags = 0 , AActor * * victim = NULL , int * actualdamage = NULL ) ;
2006-02-24 04:48:15 +00:00
void P_TraceBleed ( int damage , fixed_t x , fixed_t y , fixed_t z , AActor * target , angle_t angle , int pitch ) ;
void P_TraceBleed ( int damage , AActor * target , angle_t angle , int pitch ) ;
void P_TraceBleed ( int damage , AActor * target , AActor * missile ) ; // missile version
void P_TraceBleed ( int damage , AActor * target ) ; // random direction version
bool P_HitFloor ( AActor * thing ) ;
2016-01-20 21:49:57 +00:00
bool P_HitWater ( AActor * thing , sector_t * sec , fixed_t splashx = FIXED_MIN , fixed_t splashy = FIXED_MIN , fixed_t splashz = FIXED_MIN , bool checkabove = false , bool alert = true , bool force = false ) ;
2009-10-17 11:30:44 +00:00
void P_CheckSplash ( AActor * self , fixed_t distance ) ;
2015-08-01 07:42:31 +00:00
void P_RailAttack ( AActor * source , int damage , int offset_xy , fixed_t offset_z = 0 , int color1 = 0 , int color2 = 0 , double maxdiff = 0 , int flags = 0 , PClassActor * puff = NULL , angle_t angleoffset = 0 , angle_t pitchoffset = 0 , fixed_t distance = 8192 * FRACUNIT , int duration = 0 , double sparsity = 1.0 , double drift = 1.0 , PClassActor * spawnclass = NULL , int SpiralOffset = 270 ) ; // [RH] Shoot a railgun
2012-06-22 03:56:08 +00:00
enum // P_RailAttack / A_RailAttack / A_CustomRailgun / P_DrawRailTrail flags
{
RAF_SILENT = 1 ,
RAF_NOPIERCE = 2 ,
RAF_EXPLICITANGLE = 4 ,
RAF_FULLBRIGHT = 8 ,
RAF_CENTERZ = 16 ,
} ;
2012-04-07 12:57:44 +00:00
2013-03-21 03:06:04 +00:00
bool P_CheckMissileSpawn ( AActor * missile , fixed_t maxdist ) ;
2006-11-25 12:25:05 +00:00
void P_PlaySpawnSound ( AActor * missile , AActor * spawner ) ;
2006-02-24 04:48:15 +00:00
// [RH] Position the chasecam
2008-04-09 18:35:21 +00:00
void P_AimCamera ( AActor * t1 , fixed_t & x , fixed_t & y , fixed_t & z , sector_t * & sec ) ;
2006-02-24 04:48:15 +00:00
// [RH] Means of death
2012-08-30 04:01:50 +00:00
enum
{
RADF_HURTSOURCE = 1 ,
RADF_NOIMPACTDAMAGE = 2 ,
RADF_SOURCEISSPOT = 4 ,
RADF_NODAMAGE = 8 ,
} ;
2009-06-27 19:37:53 +00:00
void P_RadiusAttack ( AActor * spot , AActor * source , int damage , int distance ,
2012-08-30 04:01:50 +00:00
FName damageType , int flags , int fulldamagedistance = 0 ) ;
2006-02-24 04:48:15 +00:00
2006-05-18 04:25:26 +00:00
void P_DelSector_List ( ) ;
2006-02-24 04:48:15 +00:00
void P_DelSeclist ( msecnode_t * ) ; // phares 3/16/98
2014-06-15 15:19:05 +00:00
msecnode_t * P_DelSecnode ( msecnode_t * ) ;
2006-02-24 04:48:15 +00:00
void P_CreateSecNodeList ( AActor * , fixed_t , fixed_t ) ; // phares 3/14/98
int P_GetMoveFactor ( const AActor * mo , int * frictionp ) ; // phares 3/6/98
int P_GetFriction ( const AActor * mo , int * frictionfactor ) ;
2006-09-14 00:02:31 +00:00
bool Check_Sides ( AActor * , int , int ) ; // phares
2006-02-24 04:48:15 +00:00
// [RH]
2009-01-04 15:00:29 +00:00
const secplane_t * P_CheckSlopeWalk ( AActor * actor , fixed_t & xmove , fixed_t & ymove ) ;
2006-02-24 04:48:15 +00:00
//
// P_SETUP
//
2006-09-14 00:02:31 +00:00
extern BYTE * rejectmatrix ; // for fast sight rejection
2006-02-24 04:48:15 +00:00
//
// P_INTER
//
void P_TouchSpecialThing ( AActor * special , AActor * toucher ) ;
2013-01-02 04:39:59 +00:00
int P_DamageMobj ( AActor * target , AActor * inflictor , AActor * source , int damage , FName mod , int flags = 0 ) ;
2011-06-13 10:39:14 +00:00
void P_PoisonMobj ( AActor * target , AActor * inflictor , AActor * source , int damage , int duration , int period , FName type ) ;
2012-03-15 21:21:00 +00:00
bool P_GiveBody ( AActor * actor , int num , int max = 0 ) ;
2009-06-07 09:41:22 +00:00
bool P_PoisonPlayer ( player_t * player , AActor * poisoner , AActor * source , int poison ) ;
2006-02-24 04:48:15 +00:00
void P_PoisonDamage ( player_t * player , AActor * source , int damage , bool playPainSound ) ;
2008-06-02 16:56:53 +00:00
enum EDmgFlags
{
DMG_NO_ARMOR = 1 ,
DMG_INFLICTOR_IS_PUFF = 2 ,
DMG_THRUSTLESS = 4 ,
2009-05-23 08:30:36 +00:00
DMG_FORCED = 8 ,
2009-12-13 05:04:12 +00:00
DMG_NO_FACTOR = 16 ,
2012-05-13 07:54:44 +00:00
DMG_PLAYERATTACK = 32 ,
2013-07-25 22:52:12 +00:00
DMG_FOILINVUL = 64 ,
2014-10-25 04:14:07 +00:00
DMG_FOILBUDDHA = 128 ,
2014-10-28 03:29:10 +00:00
DMG_NO_PROTECT = 256 ,
2008-06-02 16:56:53 +00:00
} ;
2006-02-24 04:48:15 +00:00
//
// P_SPEC
//
2011-07-05 13:33:02 +00:00
bool P_AlignFlat ( int linenum , int side , int fc ) ;
2006-02-24 04:48:15 +00:00
# endif // __P_LOCAL__