p_local.h
上传用户:xuyinpeng
上传日期:2021-05-12
资源大小:455k
文件大小:6k
源码类别:

射击游戏

开发平台:

Visual C++

  1. // Emacs style mode select   -*- C++ -*- 
  2. //-----------------------------------------------------------------------------
  3. //
  4. // $Id:$
  5. //
  6. // Copyright (C) 1993-1996 by id Software, Inc.
  7. //
  8. // This source is available for distribution and/or modification
  9. // only under the terms of the DOOM Source Code License as
  10. // published by id Software. All rights reserved.
  11. //
  12. // The source is distributed in the hope that it will be useful,
  13. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
  15. // for more details.
  16. //
  17. // DESCRIPTION:
  18. // Play functions, animation, global header.
  19. //
  20. //-----------------------------------------------------------------------------
  21. #ifndef __P_LOCAL__
  22. #define __P_LOCAL__
  23. #ifndef __R_LOCAL__
  24. #include "r_local.h"
  25. #endif
  26. #define FLOATSPEED (FRACUNIT*4)
  27. #define MAXHEALTH 100
  28. #define VIEWHEIGHT (41*FRACUNIT)
  29. // mapblocks are used to check movement
  30. // against lines and things
  31. #define MAPBLOCKUNITS 128
  32. #define MAPBLOCKSIZE (MAPBLOCKUNITS*FRACUNIT)
  33. #define MAPBLOCKSHIFT (FRACBITS+7)
  34. #define MAPBMASK (MAPBLOCKSIZE-1)
  35. #define MAPBTOFRAC (MAPBLOCKSHIFT-FRACBITS)
  36. // player radius for movement checking
  37. #define PLAYERRADIUS 16*FRACUNIT
  38. // MAXRADIUS is for precalculated sector block boxes
  39. // the spider demon is larger,
  40. // but we do not have any moving sectors nearby
  41. #define MAXRADIUS 32*FRACUNIT
  42. #define GRAVITY FRACUNIT
  43. #define MAXMOVE (30*FRACUNIT)
  44. #define USERANGE (64*FRACUNIT)
  45. #define MELEERANGE (64*FRACUNIT)
  46. #define MISSILERANGE (32*64*FRACUNIT)
  47. // follow a player exlusively for 3 seconds
  48. #define BASETHRESHOLD   100
  49. //
  50. // P_TICK
  51. //
  52. // both the head and tail of the thinker list
  53. extern thinker_t thinkercap;
  54. void P_InitThinkers (void);
  55. void P_AddThinker (thinker_t* thinker);
  56. void P_RemoveThinker (thinker_t* thinker);
  57. //
  58. // P_PSPR
  59. //
  60. void P_SetupPsprites (player_t* curplayer);
  61. void P_MovePsprites (player_t* curplayer);
  62. void P_DropWeapon (player_t* player);
  63. //
  64. // P_USER
  65. //
  66. void P_PlayerThink (player_t* player);
  67. //
  68. // P_MOBJ
  69. //
  70. #define ONFLOORZ MININT
  71. #define ONCEILINGZ MAXINT
  72. // Time interval for item respawning.
  73. #define ITEMQUESIZE 128
  74. extern mapthing_t itemrespawnque[ITEMQUESIZE];
  75. extern int itemrespawntime[ITEMQUESIZE];
  76. extern int iquehead;
  77. extern int iquetail;
  78. void P_RespawnSpecials (void);
  79. mobj_t*
  80. P_SpawnMobj
  81. ( fixed_t x,
  82.   fixed_t y,
  83.   fixed_t z,
  84.   mobjtype_t type );
  85. void  P_RemoveMobj (mobj_t* th);
  86. boolean P_SetMobjState (mobj_t* mobj, statenum_t state);
  87. void  P_MobjThinker (mobj_t* mobj);
  88. void P_SpawnPuff (fixed_t x, fixed_t y, fixed_t z);
  89. void  P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, int damage);
  90. mobj_t* P_SpawnMissile (mobj_t* source, mobj_t* dest, mobjtype_t type);
  91. void P_SpawnPlayerMissile (mobj_t* source, mobjtype_t type);
  92. //
  93. // P_ENEMY
  94. //
  95. void P_NoiseAlert (mobj_t* target, mobj_t* emmiter);
  96. //
  97. // P_MAPUTL
  98. //
  99. typedef struct
  100. {
  101.     fixed_t x;
  102.     fixed_t y;
  103.     fixed_t dx;
  104.     fixed_t dy;
  105.     
  106. } divline_t;
  107. typedef struct
  108. {
  109.     fixed_t frac; // along trace line
  110.     boolean isaline;
  111.     union {
  112. mobj_t* thing;
  113. line_t* line;
  114.     } d;
  115. } intercept_t;
  116. #define MAXINTERCEPTS 128
  117. extern intercept_t intercepts[MAXINTERCEPTS];
  118. extern intercept_t* intercept_p;
  119. typedef boolean (*traverser_t) (intercept_t *in);
  120. fixed_t P_AproxDistance (fixed_t dx, fixed_t dy);
  121. int  P_PointOnLineSide (fixed_t x, fixed_t y, line_t* line);
  122. int  P_PointOnDivlineSide (fixed_t x, fixed_t y, divline_t* line);
  123. void  P_MakeDivline (line_t* li, divline_t* dl);
  124. fixed_t P_InterceptVector (divline_t* v2, divline_t* v1);
  125. int  P_BoxOnLineSide (fixed_t* tmbox, line_t* ld);
  126. extern fixed_t opentop;
  127. extern fixed_t  openbottom;
  128. extern fixed_t openrange;
  129. extern fixed_t lowfloor;
  130. void  P_LineOpening (line_t* linedef);
  131. boolean P_BlockLinesIterator (int x, int y, boolean(*func)(line_t*) );
  132. boolean P_BlockThingsIterator (int x, int y, boolean(*func)(mobj_t*) );
  133. #define PT_ADDLINES 1
  134. #define PT_ADDTHINGS 2
  135. #define PT_EARLYOUT 4
  136. extern divline_t trace;
  137. boolean
  138. P_PathTraverse
  139. ( fixed_t x1,
  140.   fixed_t y1,
  141.   fixed_t x2,
  142.   fixed_t y2,
  143.   int flags,
  144.   boolean (*trav) (intercept_t *));
  145. void P_UnsetThingPosition (mobj_t* thing);
  146. void P_SetThingPosition (mobj_t* thing);
  147. //
  148. // P_MAP
  149. //
  150. // If "floatok" true, move would be ok
  151. // if within "tmfloorz - tmceilingz".
  152. extern boolean floatok;
  153. extern fixed_t tmfloorz;
  154. extern fixed_t tmceilingz;
  155. extern line_t* ceilingline;
  156. boolean P_CheckPosition (mobj_t *thing, fixed_t x, fixed_t y);
  157. boolean P_TryMove (mobj_t* thing, fixed_t x, fixed_t y);
  158. boolean P_TeleportMove (mobj_t* thing, fixed_t x, fixed_t y);
  159. void P_SlideMove (mobj_t* mo);
  160. boolean P_CheckSight (mobj_t* t1, mobj_t* t2);
  161. void  P_UseLines (player_t* player);
  162. boolean P_ChangeSector (sector_t* sector, boolean crunch);
  163. extern mobj_t* linetarget; // who got hit (or NULL)
  164. fixed_t
  165. P_AimLineAttack
  166. ( mobj_t* t1,
  167.   angle_t angle,
  168.   fixed_t distance );
  169. void
  170. P_LineAttack
  171. ( mobj_t* t1,
  172.   angle_t angle,
  173.   fixed_t distance,
  174.   fixed_t slope,
  175.   int damage );
  176. void
  177. P_RadiusAttack
  178. ( mobj_t* spot,
  179.   mobj_t* source,
  180.   int damage );
  181. //
  182. // P_SETUP
  183. //
  184. extern byte* rejectmatrix; // for fast sight rejection
  185. extern short* blockmaplump; // offsets in blockmap are from here
  186. extern short* blockmap;
  187. extern int bmapwidth;
  188. extern int bmapheight; // in mapblocks
  189. extern fixed_t bmaporgx;
  190. extern fixed_t bmaporgy; // origin of block map
  191. extern mobj_t** blocklinks; // for thing chains
  192. //
  193. // P_INTER
  194. //
  195. extern int maxammo[NUMAMMO];
  196. extern int clipammo[NUMAMMO];
  197. void
  198. P_TouchSpecialThing
  199. ( mobj_t* special,
  200.   mobj_t* toucher );
  201. void
  202. P_DamageMobj
  203. ( mobj_t* target,
  204.   mobj_t* inflictor,
  205.   mobj_t* source,
  206.   int damage );
  207. //
  208. // P_SPEC
  209. //
  210. #include "p_spec.h"
  211. #endif // __P_LOCAL__
  212. //-----------------------------------------------------------------------------
  213. //
  214. // $Log:$
  215. //
  216. //-----------------------------------------------------------------------------