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

射击游戏

开发平台:

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. //
  19. //
  20. //-----------------------------------------------------------------------------
  21. #ifndef __D_PLAYER__
  22. #define __D_PLAYER__
  23. // The player data structure depends on a number
  24. // of other structs: items (internal inventory),
  25. // animation states (closely tied to the sprites
  26. // used to represent them, unfortunately).
  27. #include "d_items.h"
  28. #include "p_pspr.h"
  29. // In addition, the player is just a special
  30. // case of the generic moving object/actor.
  31. #include "p_mobj.h"
  32. // Finally, for odd reasons, the player input
  33. // is buffered within the player data struct,
  34. // as commands per game tick.
  35. #include "d_ticcmd.h"
  36. #ifdef __GNUG__
  37. #pragma interface
  38. #endif
  39. //
  40. // Player states.
  41. //
  42. typedef enum
  43. {
  44.     // Playing or camping.
  45.     PST_LIVE,
  46.     // Dead on the ground, view follows killer.
  47.     PST_DEAD,
  48.     // Ready to restart/respawn???
  49.     PST_REBORN
  50. } playerstate_t;
  51. //
  52. // Player internal flags, for cheats and debug.
  53. //
  54. typedef enum
  55. {
  56.     // No clipping, walk through barriers.
  57.     CF_NOCLIP = 1,
  58.     // No damage, no health loss.
  59.     CF_GODMODE = 2,
  60.     // Not really a cheat, just a debug aid.
  61.     CF_NOMOMENTUM = 4
  62. } cheat_t;
  63. //
  64. // Extended player object info: player_t
  65. //
  66. typedef struct player_s
  67. {
  68.     mobj_t* mo;
  69.     playerstate_t playerstate;
  70.     ticcmd_t cmd;
  71.     // Determine POV,
  72.     //  including viewpoint bobbing during movement.
  73.     // Focal origin above r.z
  74.     fixed_t viewz;
  75.     // Base height above floor for viewz.
  76.     fixed_t viewheight;
  77.     // Bob/squat speed.
  78.     fixed_t          deltaviewheight;
  79.     // bounded/scaled total momentum.
  80.     fixed_t          bob;
  81.     // This is only used between levels,
  82.     // mo->health is used during levels.
  83.     int health;
  84.     int armorpoints;
  85.     // Armor type is 0-2.
  86.     int armortype;
  87.     // Power ups. invinc and invis are tic counters.
  88.     int powers[NUMPOWERS];
  89.     boolean cards[NUMCARDS];
  90.     boolean backpack;
  91.     
  92.     // Frags, kills of other players.
  93.     int frags[MAXPLAYERS];
  94.     weapontype_t readyweapon;
  95.     
  96.     // Is wp_nochange if not changing.
  97.     weapontype_t pendingweapon;
  98.     boolean weaponowned[NUMWEAPONS];
  99.     int ammo[NUMAMMO];
  100.     int maxammo[NUMAMMO];
  101.     // True if button down last tic.
  102.     int attackdown;
  103.     int usedown;
  104.     // Bit flags, for cheats and debug.
  105.     // See cheat_t, above.
  106.     int cheats;
  107.     // Refired shots are less accurate.
  108.     int refire;
  109.      // For intermission stats.
  110.     int killcount;
  111.     int itemcount;
  112.     int secretcount;
  113.     // Hint messages.
  114.     char* message;
  115.     
  116.     // For screen flashing (red or bright).
  117.     int damagecount;
  118.     int bonuscount;
  119.     // Who did damage (NULL for floors/ceilings).
  120.     mobj_t* attacker;
  121.     
  122.     // So gun flashes light up areas.
  123.     int extralight;
  124.     // Current PLAYPAL, ???
  125.     //  can be set to REDCOLORMAP for pain, etc.
  126.     int fixedcolormap;
  127.     // Player skin colorshift,
  128.     //  0-3 for which color to draw player.
  129.     int colormap;
  130.     // Overlay view sprites (gun, etc).
  131.     pspdef_t psprites[NUMPSPRITES];
  132.     // True if secret level has been done.
  133.     boolean didsecret;
  134. } player_t;
  135. //
  136. // INTERMISSION
  137. // Structure passed e.g. to WI_Start(wb)
  138. //
  139. typedef struct
  140. {
  141.     boolean in; // whether the player is in game
  142.     
  143.     // Player stats, kills, collected items etc.
  144.     int skills;
  145.     int sitems;
  146.     int ssecret;
  147.     int stime; 
  148.     int frags[4];
  149.     int score; // current score on entry, modified on return
  150.   
  151. } wbplayerstruct_t;
  152. typedef struct
  153. {
  154.     int epsd; // episode # (0-2)
  155.     // if true, splash the secret level
  156.     boolean didsecret;
  157.     
  158.     // previous and next levels, origin 0
  159.     int last;
  160.     int next;
  161.     
  162.     int maxkills;
  163.     int maxitems;
  164.     int maxsecret;
  165.     int maxfrags;
  166.     // the par time
  167.     int partime;
  168.     
  169.     // index of this player in game
  170.     int pnum;
  171.     wbplayerstruct_t plyr[MAXPLAYERS];
  172. } wbstartstruct_t;
  173. #endif
  174. //-----------------------------------------------------------------------------
  175. //
  176. // $Log:$
  177. //
  178. //-----------------------------------------------------------------------------