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

射击游戏

开发平台:

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. //  Internally used data structures for virtually everything,
  19. //   key definitions, lots of other stuff.
  20. //
  21. //-----------------------------------------------------------------------------
  22. #ifndef __DOOMDEF__
  23. #define __DOOMDEF__
  24. #include <stdio.h>
  25. #include <string.h>
  26. //
  27. // Global parameters/defines.
  28. //
  29. // DOOM version
  30. enum { VERSION =  109 };
  31. // Game mode handling - identify IWAD version
  32. //  to handle IWAD dependend animations etc.
  33. typedef enum
  34. {
  35.   shareware, // DOOM 1 shareware, E1, M9
  36.   registered, // DOOM 1 registered, E3, M27
  37.   commercial, // DOOM 2 retail, E1 M34
  38.   // DOOM 2 german edition not handled
  39.   retail, // DOOM 1 retail, E4, M36
  40.   addon_tnt,    // DOOM 2 TNT
  41.   addon_plut,   // DOOM 2 Plutonia
  42.   indetermined // Well, no IWAD found.
  43.   
  44. } GameMode_t;
  45. // Mission packs - might be useful for TC stuff?
  46. typedef enum
  47. {
  48.   doom, // DOOM 1
  49.   doom2, // DOOM 2
  50.   pack_tnt, // TNT mission pack
  51.   pack_plut, // Plutonia pack
  52.   none
  53. } GameMission_t;
  54. // Identify language to use, software localization.
  55. typedef enum
  56. {
  57.   english,
  58.   french,
  59.   german,
  60.   unknown
  61. } Language_t;
  62. // If rangecheck is undefined,
  63. // most parameter validation debugging code will not be compiled
  64. #define RANGECHECK
  65. // Do or do not use external soundserver.
  66. // The sndserver binary to be run separately
  67. //  has been introduced by Dave Taylor.
  68. // The integrated sound support is experimental,
  69. //  and unfinished. Default is synchronous.
  70. // Experimental asynchronous timer based is
  71. //  handled by SNDINTR. 
  72. #define SNDSERV  1
  73. //#define SNDINTR  1
  74. // This one switches between MIT SHM (no proper mouse)
  75. // and XFree86 DGA (mickey sampling). The original
  76. // linuxdoom used SHM, which is default.
  77. //#define X11_DGA 1
  78. //
  79. // For resize of screen, at start of game.
  80. // It will not work dynamically, see visplanes.
  81. //
  82. #define BASE_WIDTH 320
  83. // It is educational but futile to change this
  84. //  scaling e.g. to 2. Drawing of status bar,
  85. //  menues etc. is tied to the scale implied
  86. //  by the graphics.
  87. #define SCREEN_MUL 1
  88. #define INV_ASPECT_RATIO 0.625 // 0.75, ideally
  89. // Defines suck. C sucks.
  90. // C++ might sucks for OOP, but it sure is a better C.
  91. // So there.
  92. //#define SCREENWIDTH  640
  93. extern int SCREENWIDTH;
  94. //SCREEN_MUL*BASE_WIDTH //320
  95. //#define SCREENHEIGHT 480
  96. extern int SCREENHEIGHT;
  97. //(int)(SCREEN_MUL*BASE_WIDTH*INV_ASPECT_RATIO) //200
  98. // The maximum number of players, multiplayer/networking.
  99. #define MAXPLAYERS 4
  100. // State updates, number of tics / second.
  101. #define TICRATE 35
  102. // The current state of the game: whether we are
  103. // playing, gazing at the intermission screen,
  104. // the game final animation, or a demo. 
  105. typedef enum
  106. {
  107.     GS_LEVEL,
  108.     GS_INTERMISSION,
  109.     GS_FINALE,
  110.     GS_DEMOSCREEN
  111. } gamestate_t;
  112. //
  113. // Difficulty/skill settings/filters.
  114. //
  115. // Skill flags.
  116. #define MTF_EASY 1
  117. #define MTF_NORMAL 2
  118. #define MTF_HARD 4
  119. // Deaf monsters/do not react to sound.
  120. #define MTF_AMBUSH 8
  121. typedef enum
  122. {
  123.     sk_baby,
  124.     sk_easy,
  125.     sk_medium,
  126.     sk_hard,
  127.     sk_nightmare
  128. } skill_t;
  129. //
  130. // Key cards.
  131. //
  132. typedef enum
  133. {
  134.     it_bluecard,
  135.     it_yellowcard,
  136.     it_redcard,
  137.     it_blueskull,
  138.     it_yellowskull,
  139.     it_redskull,
  140.     
  141.     NUMCARDS
  142.     
  143. } card_t;
  144. // The defined weapons,
  145. //  including a marker indicating
  146. //  user has not changed weapon.
  147. typedef enum
  148. {
  149.     wp_fist,
  150.     wp_pistol,
  151.     wp_shotgun,
  152.     wp_chaingun,
  153.     wp_missile,
  154.     wp_plasma,
  155.     wp_bfg,
  156.     wp_chainsaw,
  157.     wp_supershotgun,
  158.     NUMWEAPONS,
  159.     
  160.     // No pending weapon change.
  161.     wp_nochange
  162. } weapontype_t;
  163. // Ammunition types defined.
  164. typedef enum
  165. {
  166.     am_clip, // Pistol / chaingun ammo.
  167.     am_shell, // Shotgun / double barreled shotgun.
  168.     am_cell, // Plasma rifle, BFG.
  169.     am_misl, // Missile launcher.
  170.     NUMAMMO,
  171.     am_noammo // Unlimited for chainsaw / fist.
  172. } ammotype_t;
  173. // Power up artifacts.
  174. typedef enum
  175. {
  176.     pw_invulnerability,
  177.     pw_strength,
  178.     pw_invisibility,
  179.     pw_ironfeet,
  180.     pw_allmap,
  181.     pw_infrared,
  182.     NUMPOWERS
  183.     
  184. } powertype_t;
  185. //
  186. // Power up durations,
  187. //  how many seconds till expiration,
  188. //  assuming TICRATE is 35 ticks/second.
  189. //
  190. typedef enum
  191. {
  192.     INVULNTICS = (30*TICRATE),
  193.     INVISTICS = (60*TICRATE),
  194.     INFRATICS = (120*TICRATE),
  195.     IRONTICS = (60*TICRATE)
  196.     
  197. } powerduration_t;
  198. //
  199. // DOOM keyboard definition.
  200. // This is the stuff configured by Setup.Exe.
  201. // Most key data are simple ascii (uppercased).
  202. //
  203. //#define KEY_RIGHTARROW   0xae
  204. //#define KEY_LEFTARROW   0xac
  205. //#define KEY_UPARROW       0xad
  206. //#define KEY_DOWNARROW   0xaf
  207. //#define KEY_ESCAPE 27
  208. //#define KEY_ENTER 13
  209. //#define KEY_TAB 9
  210. //#define KEY_F1 (0x80+0x3b)
  211. //#define KEY_F2 (0x80+0x3c)
  212. //#define KEY_F3 (0x80+0x3d)
  213. //#define KEY_F4 (0x80+0x3e)
  214. //#define KEY_F5 (0x80+0x3f)
  215. //#define KEY_F6 (0x80+0x40)
  216. //#define KEY_F7 (0x80+0x41)
  217. //#define KEY_F8 (0x80+0x42)
  218. //#define KEY_F9 (0x80+0x43)
  219. //#define KEY_F10 (0x80+0x44)
  220. //#define KEY_F11 (0x80+0x57)
  221. //#define KEY_F12 (0x80+0x58)
  222. //#define KEY_BACKSPACE        127
  223. #define KEY_PAUSE 0xff
  224. //#define KEY_EQUALS 0x3d
  225. //#define KEY_MINUS 0x2d
  226. #define KEY_CAPITAL 0x3a
  227. //#define KEY_RSHIFT (0x80+0x36)
  228. //#define KEY_RCTRL (0x80+0x1d)
  229. //#define KEY_RALT (0x80+0x38)
  230. //#define KEY_LALT KEY_RALT
  231. //#define KEY_CONSOLE '`'
  232. #define KEY_SCRNSHOT (0xB7)
  233. #define KEY_F1            0x3B
  234. #define KEY_F2            0x3C
  235. #define KEY_F3            0x3D
  236. #define KEY_F4            0x3E
  237. #define KEY_F5            0x3F
  238. #define KEY_F6            0x40
  239. #define KEY_F7            0x41
  240. #define KEY_F8            0x42
  241. #define KEY_F9            0x43
  242. #define KEY_F10           0x44
  243. #define KEY_F11           0x57
  244. #define KEY_F12           0x58
  245. #define KEY_A               0x1E
  246. #define KEY_B               0x30
  247. #define KEY_C               0x2E
  248. #define KEY_D               0x20
  249. #define KEY_E               0x12
  250. #define KEY_F               0x21
  251. #define KEY_G               0x22
  252. #define KEY_I               0x17
  253. #define KEY_H               0x23
  254. #define KEY_J               0x24
  255. #define KEY_K               0x25
  256. #define KEY_L               0x26
  257. #define KEY_M               0x32
  258. #define KEY_N               0x31
  259. #define KEY_O               0x18
  260. #define KEY_P               0x19
  261. #define KEY_Q               0x10
  262. #define KEY_R               0x13
  263. #define KEY_S               0x1F
  264. #define KEY_T               0x14
  265. #define KEY_U               0x16
  266. #define KEY_V               0x2F
  267. #define KEY_W               0x11
  268. #define KEY_X               0x2D
  269. #define KEY_Y               0x15
  270. #define KEY_Z               0x2C
  271. #define KEY_1               0x02
  272. #define KEY_2               0x03
  273. #define KEY_3               0x04
  274. #define KEY_4               0x05
  275. #define KEY_5               0x06
  276. #define KEY_6               0x07
  277. #define KEY_7               0x08
  278. #define KEY_8               0x09
  279. #define KEY_9               0x0A
  280. #define KEY_0               0x0B
  281. #define KEY_MINUS           0x0C    // - on main keyboard
  282. #define KEY_EQUALS          0x0D
  283. #define KEY_BACKSPACE       0x0E    // backspace
  284. #define KEY_ESCAPE       0x01
  285. #define KEY_ENTER       0x1C
  286. #define KEY_CONSOLE       0x29
  287. #define KEY_RIGHTARROW   0xCD
  288. #define KEY_LEFTARROW   0xCB
  289. #define KEY_UPARROW       0xC8
  290. #define KEY_DOWNARROW   0xD0
  291. #define KEY_SPACE           0x39
  292. #define KEY_TAB         0x0F
  293. #define KEY_RSHIFT          0x36
  294. #define KEY_RCTRL           0x9D
  295. #define KEY_RALT            0xB8    // right Alt
  296. #define KEY_LALT         KEY_RALT
  297. #define KEY_COMMA           0x33
  298. #define KEY_PERIOD          0x34    // . on main keyboard
  299. #define KEY_SLASH           0x35    // / on main keyboard
  300. // new keys not part of DOOM...
  301. #define KEY_LBRACKET        0x1A
  302. #define KEY_RBRACKET        0x1B
  303. #define KEY_SEMICOLON       0x27
  304. #define KEY_APOSTROPHE      0x28
  305. #define KEY_DIVIDE          0xB5    // / on numeric keypad
  306. #define KEY_MULTIPLY        0x37    // * on numeric keypad
  307. #define KEY_NUMLOCK         0x45
  308. #define KEY_SCROLL          0x46    // Scroll Lock
  309. #define KEY_NUMPAD7         0x47
  310. #define KEY_NUMPAD8         0x48
  311. #define KEY_NUMPAD9         0x49
  312. #define KEY_SUBTRACT        0x4A    // - on numeric keypad
  313. #define KEY_NUMPAD4         0x4B
  314. #define KEY_NUMPAD5         0x4C
  315. #define KEY_NUMPAD6         0x4D
  316. #define KEY_ADD             0x4E    // + on numeric keypad
  317. #define KEY_NUMPAD1         0x4F
  318. #define KEY_NUMPAD2         0x50
  319. #define KEY_NUMPAD3         0x51
  320. #define KEY_NUMPAD0         0x52
  321. #define KEY_DECIMAL         0x53    // . on numeric keypad
  322. #define KEY_HOME            0xC7    // Home on arrow keypad
  323. #define KEY_UP              0xC8    // UpArrow on arrow keypad
  324. #define KEY_PRIOR           0xC9    // PgUp on arrow keypad
  325. #define KEY_LEFT            0xCB    // LeftArrow on arrow keypad
  326. #define KEY_RIGHT           0xCD    // RightArrow on arrow keypad
  327. #define KEY_END             0xCF    // End on arrow keypad
  328. #define KEY_DOWN            0xD0    // DownArrow on arrow keypad
  329. #define KEY_NEXT            0xD1    // PgDn on arrow keypad
  330. #define KEY_INSERT          0xD2    // Insert on arrow keypad
  331. #define KEY_DELETE          0xD3    // Delete on arrow keypad
  332. extern unsigned char scan2char[256];
  333. /*
  334. #define DIK_ESCAPE          0x01
  335. #define DIK_1               0x02
  336. #define DIK_2               0x03
  337. #define DIK_3               0x04
  338. #define DIK_4               0x05
  339. #define DIK_5               0x06
  340. #define DIK_6               0x07
  341. #define DIK_7               0x08
  342. #define DIK_8               0x09
  343. #define DIK_9               0x0A
  344. #define DIK_0               0x0B
  345. #define DIK_MINUS           0x0C    // - on main keyboard
  346. #define DIK_EQUALS          0x0D
  347. #define DIK_BACK            0x0E    // backspace
  348. #define DIK_TAB             0x0F
  349. #define DIK_Q               0x10
  350. #define DIK_W               0x11
  351. #define DIK_E               0x12
  352. #define DIK_R               0x13
  353. #define DIK_T               0x14
  354. #define DIK_Y               0x15
  355. #define DIK_U               0x16
  356. #define DIK_I               0x17
  357. #define DIK_O               0x18
  358. #define DIK_P               0x19
  359. #define DIK_LBRACKET        0x1A
  360. #define DIK_RBRACKET        0x1B
  361. #define DIK_RETURN          0x1C    // Enter on main keyboard
  362. #define DIK_LCONTROL        0x1D
  363. #define DIK_A               0x1E
  364. #define DIK_S               0x1F
  365. #define DIK_D               0x20
  366. #define DIK_F               0x21
  367. #define DIK_G               0x22
  368. #define DIK_H               0x23
  369. #define DIK_J               0x24
  370. #define DIK_K               0x25
  371. #define DIK_L               0x26
  372. #define DIK_SEMICOLON       0x27
  373. #define DIK_APOSTROPHE      0x28
  374. #define DIK_GRAVE           0x29    // accent grave
  375. #define DIK_LSHIFT          0x2A
  376. #define DIK_BACKSLASH       0x2B
  377. #define DIK_Z               0x2C
  378. #define DIK_X               0x2D
  379. #define DIK_C               0x2E
  380. #define DIK_V               0x2F
  381. #define DIK_B               0x30
  382. #define DIK_N               0x31
  383. #define DIK_M               0x32
  384. #define DIK_COMMA           0x33
  385. #define DIK_PERIOD          0x34    // . on main keyboard
  386. #define DIK_SLASH           0x35    // / on main keyboard
  387. #define DIK_RSHIFT          0x36
  388. #define DIK_MULTIPLY        0x37    // * on numeric keypad
  389. #define DIK_LMENU           0x38    // left Alt
  390. #define DIK_SPACE           0x39
  391. #define DIK_CAPITAL         0x3A
  392. #define DIK_F1              0x3B
  393. #define DIK_F2              0x3C
  394. #define DIK_F3              0x3D
  395. #define DIK_F4              0x3E
  396. #define DIK_F5              0x3F
  397. #define DIK_F6              0x40
  398. #define DIK_F7              0x41
  399. #define DIK_F8              0x42
  400. #define DIK_F9              0x43
  401. #define DIK_F10             0x44
  402. #define DIK_NUMLOCK         0x45
  403. #define DIK_SCROLL          0x46    // Scroll Lock
  404. #define DIK_NUMPAD7         0x47
  405. #define DIK_NUMPAD8         0x48
  406. #define DIK_NUMPAD9         0x49
  407. #define DIK_SUBTRACT        0x4A    // - on numeric keypad
  408. #define DIK_NUMPAD4         0x4B
  409. #define DIK_NUMPAD5         0x4C
  410. #define DIK_NUMPAD6         0x4D
  411. #define DIK_ADD             0x4E    // + on numeric keypad
  412. #define DIK_NUMPAD1         0x4F
  413. #define DIK_NUMPAD2         0x50
  414. #define DIK_NUMPAD3         0x51
  415. #define DIK_NUMPAD0         0x52
  416. #define DIK_DECIMAL         0x53    // . on numeric keypad
  417. #define DIK_F11             0x57
  418. #define DIK_F12             0x58
  419. #define DIK_NUMPADENTER     0x9C    // Enter on numeric keypad
  420. #define DIK_RCONTROL        0x9D
  421. #define DIK_NUMPADCOMMA     0xB3    // , on numeric keypad (NEC PC98)
  422. #define DIK_DIVIDE          0xB5    // / on numeric keypad
  423. #define DIK_SYSRQ           0xB7
  424. #define DIK_RMENU           0xB8    // right Alt
  425. #define DIK_HOME            0xC7    // Home on arrow keypad
  426. #define DIK_UP              0xC8    // UpArrow on arrow keypad
  427. #define DIK_PRIOR           0xC9    // PgUp on arrow keypad
  428. #define DIK_LEFT            0xCB    // LeftArrow on arrow keypad
  429. #define DIK_RIGHT           0xCD    // RightArrow on arrow keypad
  430. #define DIK_END             0xCF    // End on arrow keypad
  431. #define DIK_DOWN            0xD0    // DownArrow on arrow keypad
  432. #define DIK_NEXT            0xD1    // PgDn on arrow keypad
  433. #define DIK_INSERT          0xD2    // Insert on arrow keypad
  434. #define DIK_DELETE          0xD3    // Delete on arrow keypad
  435. #define DIK_LWIN            0xDB    // Left Windows key
  436. #define DIK_RWIN            0xDC    // Right Windows key
  437. #define DIK_APPS            0xDD    // AppMenu key
  438. #define DIK_BACKSPACE       DIK_BACK            // backspace
  439. #define DIK_NUMPADSTAR      DIK_MULTIPLY        // * on numeric keypad
  440. #define DIK_LALT            DIK_LMENU           // left Alt
  441. #define DIK_CAPSLOCK        DIK_CAPITAL         // CapsLock
  442. #define DIK_NUMPADMINUS     DIK_SUBTRACT        // - on numeric keypad
  443. #define DIK_NUMPADPLUS      DIK_ADD             // + on numeric keypad
  444. #define DIK_NUMPADPERIOD    DIK_DECIMAL         // . on numeric keypad
  445. #define DIK_NUMPADSLASH     DIK_DIVIDE          // / on numeric keypad
  446. #define DIK_RALT            DIK_RMENU           // right Alt
  447. #define DIK_UPARROW         DIK_UP              // UpArrow on arrow keypad
  448. #define DIK_PGUP            DIK_PRIOR           // PgUp on arrow keypad
  449. #define DIK_LEFTARROW       DIK_LEFT            // LeftArrow on arrow keypad
  450. #define DIK_RIGHTARROW      DIK_RIGHT           // RightArrow on arrow keypad
  451. #define DIK_DOWNARROW       DIK_DOWN            // DownArrow on arrow keypad
  452. #define DIK_PGDN            DIK_NEXT            // PgDn on arrow keypad
  453. */
  454. // DOOM basic types (boolean),
  455. //  and max/min values.
  456. //#include "doomtype.h"
  457. // Fixed point.
  458. //#include "m_fixed.h"
  459. // Endianess handling.
  460. //#include "m_swap.h"
  461. // Binary Angles, sine/cosine/atan lookups.
  462. //#include "tables.h"
  463. // Event type.
  464. //#include "d_event.h"
  465. // Game function, skills.
  466. //#include "g_game.h"
  467. // All external data is defined here.
  468. //#include "doomdata.h"
  469. // All important printed strings.
  470. // Language selection (message strings).
  471. //#include "dstrings.h"
  472. // Player is a special actor.
  473. //struct player_s;
  474. //#include "d_items.h"
  475. //#include "d_player.h"
  476. //#include "p_mobj.h"
  477. //#include "d_net.h"
  478. // PLAY
  479. //#include "p_tick.h"
  480. // Header, generated by sound utility.
  481. // The utility was written by Dave Taylor.
  482. //#include "sounds.h"
  483. #endif          // __DOOMDEF__
  484. //-----------------------------------------------------------------------------
  485. //
  486. // $Log:$
  487. //
  488. //-----------------------------------------------------------------------------