Subversion Repositories Kolibri OS

Rev

Rev 9097 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #ifndef WL_DEF_H
  2. #define WL_DEF_H
  3.  
  4. // Defines which version shall be built and configures supported extra features
  5. #include "version.h"
  6.  
  7. #include <assert.h>
  8. #include <fcntl.h>
  9. #include <math.h>
  10. #include <ctype.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #if defined(_arch_dreamcast)
  14. #       include <string.h>
  15. #       include "dc/dc_main.h"
  16. #elif !defined(_WIN32)
  17. #       include <stdint.h>
  18. #       include <string.h>
  19. #       include <stdarg.h>
  20. #endif
  21. #include <SDL.h>
  22.  
  23. #if !defined O_BINARY
  24. #       define O_BINARY 0
  25. #endif
  26.  
  27. #pragma pack(1)
  28.  
  29. #if defined(_arch_dreamcast)
  30. #define YESBUTTONNAME "A"
  31. #define NOBUTTONNAME  "B"
  32. #elif defined(GP2X)
  33. #define YESBUTTONNAME "Y"
  34. #define NOBUTTONNAME  "B"
  35. #else
  36. #define YESBUTTONNAME "Y"
  37. #define NOBUTTONNAME  "N"
  38. #endif
  39.  
  40. #include "foreign.h"
  41.  
  42. #ifndef SPEAR
  43.     #include "audiowl6.h"
  44.     #ifdef UPLOAD
  45.         #include "gfxv_apo.h"
  46.     #else
  47.                 #ifdef JAPAN
  48.                         #include "gfxv_jap.h"
  49.                 #else
  50.                         #ifdef GOODTIMES
  51.                     #include "gfxv_wl6.h"
  52.                     #else
  53.                             #include "gfxv_apo.h"
  54.                         #endif
  55.         #endif
  56.     #endif
  57. #else
  58.     #include "audiosod.h"
  59.     #include "gfxv_sod.h"
  60.     #include "f_spear.h"
  61. #endif
  62.  
  63. typedef uint8_t byte;
  64. typedef uint16_t word;
  65. typedef int32_t fixed;
  66. typedef uint32_t longword;
  67. typedef int8_t boolean;
  68. typedef void * memptr;
  69.  
  70. typedef struct
  71. {
  72.     int x,y;
  73. } Point;
  74. typedef struct
  75. {
  76.     Point ul,lr;
  77. } Rect;
  78.  
  79. void Quit(const char *errorStr, ...);
  80.  
  81. #include "id_pm.h"
  82. #include "id_sd.h"
  83. #include "id_in.h"
  84. #include "id_vl.h"
  85. #include "id_vh.h"
  86. #include "id_us.h"
  87. #include "id_ca.h"
  88.  
  89. #include "wl_menu.h"
  90.  
  91. #define MAPSPOT(x,y,plane) (mapsegs[plane][((y)<<mapshift)+(x)])
  92.  
  93. #define SIGN(x)         ((x)>0?1:-1)
  94. #define ABS(x)          ((int)(x)>0?(x):-(x))
  95. #define LABS(x)         ((int32_t)(x)>0?(x):-(x))
  96.  
  97. #define abs(x) ABS(x)
  98.  
  99. /*
  100. =============================================================================
  101.  
  102.                             GLOBAL CONSTANTS
  103.  
  104. =============================================================================
  105. */
  106.  
  107. #define MAXTICS 10
  108. #define DEMOTICS        4
  109.  
  110. #define MAXACTORS       150         // max number of nazis, etc / map
  111. #define MAXSTATS        400         // max number of lamps, bonus, etc
  112. #define MAXDOORS        64          // max number of sliding doors
  113. #define MAXWALLTILES    64          // max number of wall tiles
  114.  
  115. //
  116. // tile constants
  117. //
  118.  
  119. #define ICONARROWS      90
  120. #define PUSHABLETILE    98
  121. #define EXITTILE        99          // at end of castle
  122. #define AREATILE        107         // first of NUMAREAS floor tiles
  123. #define NUMAREAS        37
  124. #define ELEVATORTILE    21
  125. #define AMBUSHTILE      106
  126. #define ALTELEVATORTILE 107
  127.  
  128. #define NUMBERCHARS     9
  129.  
  130.  
  131. //----------------
  132.  
  133. #define EXTRAPOINTS     40000
  134.  
  135. #define PLAYERSPEED     3000
  136. #define RUNSPEED        6000
  137.  
  138. #define SCREENSEG       0xa000
  139.  
  140. #define SCREENBWIDE     80
  141.  
  142. #define HEIGHTRATIO     0.50            // also defined in id_mm.c
  143.  
  144. #define BORDERCOLOR     3
  145. #define FLASHCOLOR      5
  146. #define FLASHTICS       4
  147.  
  148. #ifndef SPEAR
  149.     #define LRpack      8       // # of levels to store in endgame
  150. #else
  151.     #define LRpack      20
  152. #endif
  153.  
  154. #define PLAYERSIZE      MINDIST         // player radius
  155. #define MINACTORDIST    0x10000l        // minimum dist from player center
  156.                                         // to any actor center
  157.  
  158. #define NUMLATCHPICS    100
  159.  
  160. #undef M_PI
  161. #define PI              3.141592657
  162. #define M_PI PI
  163.  
  164. #define GLOBAL1         (1l<<16)
  165. #define TILEGLOBAL      GLOBAL1
  166. #define PIXGLOBAL       (GLOBAL1/64)
  167. #define TILESHIFT       16l
  168. #define UNSIGNEDSHIFT   8
  169.  
  170. #define ANGLES          360             // must be divisable by 4
  171. #define ANGLEQUAD       (ANGLES/4)
  172. #define FINEANGLES      3600
  173. #define ANG90           (FINEANGLES/4)
  174. #define ANG180          (ANG90*2)
  175. #define ANG270          (ANG90*3)
  176. #define ANG360          (ANG90*4)
  177. #define VANG90          (ANGLES/4)
  178. #define VANG180         (VANG90*2)
  179. #define VANG270         (VANG90*3)
  180. #define VANG360         (VANG90*4)
  181.  
  182. #define MINDIST         (0x5800l)
  183.  
  184. #define mapshift        6
  185. #define MAPSIZE         (1<<mapshift)
  186. #define maparea         MAPSIZE*MAPSIZE
  187.  
  188. #define mapheight       MAPSIZE
  189. #define mapwidth        MAPSIZE
  190.  
  191. #ifdef USE_HIRES
  192.  
  193. #define TEXTURESHIFT    7
  194. #define TEXTURESIZE     (1<<TEXTURESHIFT)
  195. #define TEXTUREFROMFIXEDSHIFT 2
  196. #define TEXTUREMASK     (TEXTURESIZE*(TEXTURESIZE-1))
  197.  
  198. #define SPRITESCALEFACTOR 1
  199.  
  200. #else
  201.  
  202. #define TEXTURESHIFT    6
  203. #define TEXTURESIZE     (1<<TEXTURESHIFT)
  204. #define TEXTUREFROMFIXEDSHIFT 4
  205. #define TEXTUREMASK     (TEXTURESIZE*(TEXTURESIZE-1))
  206.  
  207. #define SPRITESCALEFACTOR 2
  208.  
  209. #endif
  210.  
  211. #define NORTH   0
  212. #define EAST    1
  213. #define SOUTH   2
  214. #define WEST    3
  215.  
  216.  
  217. #define STATUSLINES     40
  218.  
  219. #define SCREENSIZE      (SCREENBWIDE*208)
  220. #define PAGE1START      0
  221. #define PAGE2START      (SCREENSIZE)
  222. #define PAGE3START      (SCREENSIZE*2u)
  223. #define FREESTART       (SCREENSIZE*3u)
  224.  
  225.  
  226. #define PIXRADIUS       512
  227.  
  228. #define STARTAMMO       8
  229.  
  230.  
  231. // object flag values
  232.  
  233. typedef enum
  234. {
  235.     FL_SHOOTABLE        = 0x00000001,
  236.     FL_BONUS            = 0x00000002,
  237.     FL_NEVERMARK        = 0x00000004,
  238.     FL_VISABLE          = 0x00000008,
  239.     FL_ATTACKMODE       = 0x00000010,
  240.     FL_FIRSTATTACK      = 0x00000020,
  241.     FL_AMBUSH           = 0x00000040,
  242.     FL_NONMARK          = 0x00000080,
  243.     FL_FULLBRIGHT       = 0x00000100,
  244. #ifdef USE_DIR3DSPR
  245.     // you can choose one of the following values in wl_act1.cpp
  246.     // to make a static sprite a directional 3d sprite
  247.     // (see example at the end of the statinfo array)
  248.     FL_DIR_HORIZ_MID    = 0x00000200,
  249.     FL_DIR_HORIZ_FW     = 0x00000400,
  250.     FL_DIR_HORIZ_BW     = 0x00000600,
  251.     FL_DIR_VERT_MID     = 0x00000a00,
  252.     FL_DIR_VERT_FW      = 0x00000c00,
  253.     FL_DIR_VERT_BW      = 0x00000e00,
  254.  
  255.     // these values are just used to improve readability of code
  256.     FL_DIR_NONE         = 0x00000000,
  257.     FL_DIR_POS_MID      = 0x00000200,
  258.     FL_DIR_POS_FW       = 0x00000400,
  259.     FL_DIR_POS_BW       = 0x00000600,
  260.     FL_DIR_POS_MASK     = 0x00000600,
  261.     FL_DIR_VERT_FLAG    = 0x00000800,
  262.     FL_DIR_MASK         = 0x00000e00,
  263. #endif
  264.     // next free bit is   0x00001000
  265. } objflag_t;
  266.  
  267.  
  268. //
  269. // sprite constants
  270. //
  271.  
  272. enum
  273. {
  274.     SPR_DEMO,
  275. #ifndef APOGEE_1_0
  276.     SPR_DEATHCAM,
  277. #endif
  278. //
  279. // static sprites
  280. //
  281.     SPR_STAT_0,SPR_STAT_1,SPR_STAT_2,SPR_STAT_3,
  282.     SPR_STAT_4,SPR_STAT_5,SPR_STAT_6,SPR_STAT_7,
  283.  
  284.     SPR_STAT_8,SPR_STAT_9,SPR_STAT_10,SPR_STAT_11,
  285.     SPR_STAT_12,SPR_STAT_13,SPR_STAT_14,SPR_STAT_15,
  286.  
  287.     SPR_STAT_16,SPR_STAT_17,SPR_STAT_18,SPR_STAT_19,
  288.     SPR_STAT_20,SPR_STAT_21,SPR_STAT_22,SPR_STAT_23,
  289.  
  290.     SPR_STAT_24,SPR_STAT_25,SPR_STAT_26,SPR_STAT_27,
  291.     SPR_STAT_28,SPR_STAT_29,SPR_STAT_30,SPR_STAT_31,
  292.  
  293.     SPR_STAT_32,SPR_STAT_33,SPR_STAT_34,SPR_STAT_35,
  294.     SPR_STAT_36,SPR_STAT_37,SPR_STAT_38,SPR_STAT_39,
  295.  
  296.     SPR_STAT_40,SPR_STAT_41,SPR_STAT_42,SPR_STAT_43,
  297.     SPR_STAT_44,SPR_STAT_45,SPR_STAT_46,SPR_STAT_47,
  298.  
  299. #ifdef SPEAR
  300.     SPR_STAT_48,SPR_STAT_49,SPR_STAT_50,SPR_STAT_51,
  301. #endif
  302.  
  303. //
  304. // guard
  305. //
  306.     SPR_GRD_S_1,SPR_GRD_S_2,SPR_GRD_S_3,SPR_GRD_S_4,
  307.     SPR_GRD_S_5,SPR_GRD_S_6,SPR_GRD_S_7,SPR_GRD_S_8,
  308.  
  309.     SPR_GRD_W1_1,SPR_GRD_W1_2,SPR_GRD_W1_3,SPR_GRD_W1_4,
  310.     SPR_GRD_W1_5,SPR_GRD_W1_6,SPR_GRD_W1_7,SPR_GRD_W1_8,
  311.  
  312.     SPR_GRD_W2_1,SPR_GRD_W2_2,SPR_GRD_W2_3,SPR_GRD_W2_4,
  313.     SPR_GRD_W2_5,SPR_GRD_W2_6,SPR_GRD_W2_7,SPR_GRD_W2_8,
  314.  
  315.     SPR_GRD_W3_1,SPR_GRD_W3_2,SPR_GRD_W3_3,SPR_GRD_W3_4,
  316.     SPR_GRD_W3_5,SPR_GRD_W3_6,SPR_GRD_W3_7,SPR_GRD_W3_8,
  317.  
  318.     SPR_GRD_W4_1,SPR_GRD_W4_2,SPR_GRD_W4_3,SPR_GRD_W4_4,
  319.     SPR_GRD_W4_5,SPR_GRD_W4_6,SPR_GRD_W4_7,SPR_GRD_W4_8,
  320.  
  321.     SPR_GRD_PAIN_1,SPR_GRD_DIE_1,SPR_GRD_DIE_2,SPR_GRD_DIE_3,
  322.     SPR_GRD_PAIN_2,SPR_GRD_DEAD,
  323.  
  324.     SPR_GRD_SHOOT1,SPR_GRD_SHOOT2,SPR_GRD_SHOOT3,
  325.  
  326. //
  327. // dogs
  328. //
  329.     SPR_DOG_W1_1,SPR_DOG_W1_2,SPR_DOG_W1_3,SPR_DOG_W1_4,
  330.     SPR_DOG_W1_5,SPR_DOG_W1_6,SPR_DOG_W1_7,SPR_DOG_W1_8,
  331.  
  332.     SPR_DOG_W2_1,SPR_DOG_W2_2,SPR_DOG_W2_3,SPR_DOG_W2_4,
  333.     SPR_DOG_W2_5,SPR_DOG_W2_6,SPR_DOG_W2_7,SPR_DOG_W2_8,
  334.  
  335.     SPR_DOG_W3_1,SPR_DOG_W3_2,SPR_DOG_W3_3,SPR_DOG_W3_4,
  336.     SPR_DOG_W3_5,SPR_DOG_W3_6,SPR_DOG_W3_7,SPR_DOG_W3_8,
  337.  
  338.     SPR_DOG_W4_1,SPR_DOG_W4_2,SPR_DOG_W4_3,SPR_DOG_W4_4,
  339.     SPR_DOG_W4_5,SPR_DOG_W4_6,SPR_DOG_W4_7,SPR_DOG_W4_8,
  340.  
  341.     SPR_DOG_DIE_1,SPR_DOG_DIE_2,SPR_DOG_DIE_3,SPR_DOG_DEAD,
  342.     SPR_DOG_JUMP1,SPR_DOG_JUMP2,SPR_DOG_JUMP3,
  343.  
  344.  
  345.  
  346. //
  347. // ss
  348. //
  349.     SPR_SS_S_1,SPR_SS_S_2,SPR_SS_S_3,SPR_SS_S_4,
  350.     SPR_SS_S_5,SPR_SS_S_6,SPR_SS_S_7,SPR_SS_S_8,
  351.  
  352.     SPR_SS_W1_1,SPR_SS_W1_2,SPR_SS_W1_3,SPR_SS_W1_4,
  353.     SPR_SS_W1_5,SPR_SS_W1_6,SPR_SS_W1_7,SPR_SS_W1_8,
  354.  
  355.     SPR_SS_W2_1,SPR_SS_W2_2,SPR_SS_W2_3,SPR_SS_W2_4,
  356.     SPR_SS_W2_5,SPR_SS_W2_6,SPR_SS_W2_7,SPR_SS_W2_8,
  357.  
  358.     SPR_SS_W3_1,SPR_SS_W3_2,SPR_SS_W3_3,SPR_SS_W3_4,
  359.     SPR_SS_W3_5,SPR_SS_W3_6,SPR_SS_W3_7,SPR_SS_W3_8,
  360.  
  361.     SPR_SS_W4_1,SPR_SS_W4_2,SPR_SS_W4_3,SPR_SS_W4_4,
  362.     SPR_SS_W4_5,SPR_SS_W4_6,SPR_SS_W4_7,SPR_SS_W4_8,
  363.  
  364.     SPR_SS_PAIN_1,SPR_SS_DIE_1,SPR_SS_DIE_2,SPR_SS_DIE_3,
  365.     SPR_SS_PAIN_2,SPR_SS_DEAD,
  366.  
  367.     SPR_SS_SHOOT1,SPR_SS_SHOOT2,SPR_SS_SHOOT3,
  368.  
  369. //
  370. // mutant
  371. //
  372.     SPR_MUT_S_1,SPR_MUT_S_2,SPR_MUT_S_3,SPR_MUT_S_4,
  373.     SPR_MUT_S_5,SPR_MUT_S_6,SPR_MUT_S_7,SPR_MUT_S_8,
  374.  
  375.     SPR_MUT_W1_1,SPR_MUT_W1_2,SPR_MUT_W1_3,SPR_MUT_W1_4,
  376.     SPR_MUT_W1_5,SPR_MUT_W1_6,SPR_MUT_W1_7,SPR_MUT_W1_8,
  377.  
  378.     SPR_MUT_W2_1,SPR_MUT_W2_2,SPR_MUT_W2_3,SPR_MUT_W2_4,
  379.     SPR_MUT_W2_5,SPR_MUT_W2_6,SPR_MUT_W2_7,SPR_MUT_W2_8,
  380.  
  381.     SPR_MUT_W3_1,SPR_MUT_W3_2,SPR_MUT_W3_3,SPR_MUT_W3_4,
  382.     SPR_MUT_W3_5,SPR_MUT_W3_6,SPR_MUT_W3_7,SPR_MUT_W3_8,
  383.  
  384.     SPR_MUT_W4_1,SPR_MUT_W4_2,SPR_MUT_W4_3,SPR_MUT_W4_4,
  385.     SPR_MUT_W4_5,SPR_MUT_W4_6,SPR_MUT_W4_7,SPR_MUT_W4_8,
  386.  
  387.     SPR_MUT_PAIN_1,SPR_MUT_DIE_1,SPR_MUT_DIE_2,SPR_MUT_DIE_3,
  388.     SPR_MUT_PAIN_2,SPR_MUT_DIE_4,SPR_MUT_DEAD,
  389.  
  390.     SPR_MUT_SHOOT1,SPR_MUT_SHOOT2,SPR_MUT_SHOOT3,SPR_MUT_SHOOT4,
  391.  
  392. //
  393. // officer
  394. //
  395.     SPR_OFC_S_1,SPR_OFC_S_2,SPR_OFC_S_3,SPR_OFC_S_4,
  396.     SPR_OFC_S_5,SPR_OFC_S_6,SPR_OFC_S_7,SPR_OFC_S_8,
  397.  
  398.     SPR_OFC_W1_1,SPR_OFC_W1_2,SPR_OFC_W1_3,SPR_OFC_W1_4,
  399.     SPR_OFC_W1_5,SPR_OFC_W1_6,SPR_OFC_W1_7,SPR_OFC_W1_8,
  400.  
  401.     SPR_OFC_W2_1,SPR_OFC_W2_2,SPR_OFC_W2_3,SPR_OFC_W2_4,
  402.     SPR_OFC_W2_5,SPR_OFC_W2_6,SPR_OFC_W2_7,SPR_OFC_W2_8,
  403.  
  404.     SPR_OFC_W3_1,SPR_OFC_W3_2,SPR_OFC_W3_3,SPR_OFC_W3_4,
  405.     SPR_OFC_W3_5,SPR_OFC_W3_6,SPR_OFC_W3_7,SPR_OFC_W3_8,
  406.  
  407.     SPR_OFC_W4_1,SPR_OFC_W4_2,SPR_OFC_W4_3,SPR_OFC_W4_4,
  408.     SPR_OFC_W4_5,SPR_OFC_W4_6,SPR_OFC_W4_7,SPR_OFC_W4_8,
  409.  
  410.     SPR_OFC_PAIN_1,SPR_OFC_DIE_1,SPR_OFC_DIE_2,SPR_OFC_DIE_3,
  411.     SPR_OFC_PAIN_2,SPR_OFC_DIE_4,SPR_OFC_DEAD,
  412.  
  413.     SPR_OFC_SHOOT1,SPR_OFC_SHOOT2,SPR_OFC_SHOOT3,
  414.  
  415. #ifndef SPEAR
  416. //
  417. // ghosts
  418. //
  419.     SPR_BLINKY_W1,SPR_BLINKY_W2,SPR_PINKY_W1,SPR_PINKY_W2,
  420.     SPR_CLYDE_W1,SPR_CLYDE_W2,SPR_INKY_W1,SPR_INKY_W2,
  421.  
  422. //
  423. // hans
  424. //
  425.     SPR_BOSS_W1,SPR_BOSS_W2,SPR_BOSS_W3,SPR_BOSS_W4,
  426.     SPR_BOSS_SHOOT1,SPR_BOSS_SHOOT2,SPR_BOSS_SHOOT3,SPR_BOSS_DEAD,
  427.  
  428.     SPR_BOSS_DIE1,SPR_BOSS_DIE2,SPR_BOSS_DIE3,
  429.  
  430. //
  431. // schabbs
  432. //
  433.     SPR_SCHABB_W1,SPR_SCHABB_W2,SPR_SCHABB_W3,SPR_SCHABB_W4,
  434.     SPR_SCHABB_SHOOT1,SPR_SCHABB_SHOOT2,
  435.  
  436.     SPR_SCHABB_DIE1,SPR_SCHABB_DIE2,SPR_SCHABB_DIE3,SPR_SCHABB_DEAD,
  437.     SPR_HYPO1,SPR_HYPO2,SPR_HYPO3,SPR_HYPO4,
  438.  
  439. //
  440. // fake
  441. //
  442.     SPR_FAKE_W1,SPR_FAKE_W2,SPR_FAKE_W3,SPR_FAKE_W4,
  443.     SPR_FAKE_SHOOT,SPR_FIRE1,SPR_FIRE2,
  444.  
  445.     SPR_FAKE_DIE1,SPR_FAKE_DIE2,SPR_FAKE_DIE3,SPR_FAKE_DIE4,
  446.     SPR_FAKE_DIE5,SPR_FAKE_DEAD,
  447.  
  448. //
  449. // hitler
  450. //
  451.     SPR_MECHA_W1,SPR_MECHA_W2,SPR_MECHA_W3,SPR_MECHA_W4,
  452.     SPR_MECHA_SHOOT1,SPR_MECHA_SHOOT2,SPR_MECHA_SHOOT3,SPR_MECHA_DEAD,
  453.  
  454.     SPR_MECHA_DIE1,SPR_MECHA_DIE2,SPR_MECHA_DIE3,
  455.  
  456.     SPR_HITLER_W1,SPR_HITLER_W2,SPR_HITLER_W3,SPR_HITLER_W4,
  457.     SPR_HITLER_SHOOT1,SPR_HITLER_SHOOT2,SPR_HITLER_SHOOT3,SPR_HITLER_DEAD,
  458.  
  459.     SPR_HITLER_DIE1,SPR_HITLER_DIE2,SPR_HITLER_DIE3,SPR_HITLER_DIE4,
  460.     SPR_HITLER_DIE5,SPR_HITLER_DIE6,SPR_HITLER_DIE7,
  461.  
  462. //
  463. // giftmacher
  464. //
  465.     SPR_GIFT_W1,SPR_GIFT_W2,SPR_GIFT_W3,SPR_GIFT_W4,
  466.     SPR_GIFT_SHOOT1,SPR_GIFT_SHOOT2,
  467.  
  468.     SPR_GIFT_DIE1,SPR_GIFT_DIE2,SPR_GIFT_DIE3,SPR_GIFT_DEAD,
  469. #endif
  470. //
  471. // Rocket, smoke and small explosion
  472. //
  473.     SPR_ROCKET_1,SPR_ROCKET_2,SPR_ROCKET_3,SPR_ROCKET_4,
  474.     SPR_ROCKET_5,SPR_ROCKET_6,SPR_ROCKET_7,SPR_ROCKET_8,
  475.  
  476.     SPR_SMOKE_1,SPR_SMOKE_2,SPR_SMOKE_3,SPR_SMOKE_4,
  477.     SPR_BOOM_1,SPR_BOOM_2,SPR_BOOM_3,
  478.  
  479. //
  480. // Angel of Death's DeathSparks(tm)
  481. //
  482. #ifdef SPEAR
  483.     SPR_HROCKET_1,SPR_HROCKET_2,SPR_HROCKET_3,SPR_HROCKET_4,
  484.     SPR_HROCKET_5,SPR_HROCKET_6,SPR_HROCKET_7,SPR_HROCKET_8,
  485.  
  486.     SPR_HSMOKE_1,SPR_HSMOKE_2,SPR_HSMOKE_3,SPR_HSMOKE_4,
  487.     SPR_HBOOM_1,SPR_HBOOM_2,SPR_HBOOM_3,
  488.  
  489.     SPR_SPARK1,SPR_SPARK2,SPR_SPARK3,SPR_SPARK4,
  490. #endif
  491.  
  492. #ifndef SPEAR
  493. //
  494. // gretel
  495. //
  496.     SPR_GRETEL_W1,SPR_GRETEL_W2,SPR_GRETEL_W3,SPR_GRETEL_W4,
  497.     SPR_GRETEL_SHOOT1,SPR_GRETEL_SHOOT2,SPR_GRETEL_SHOOT3,SPR_GRETEL_DEAD,
  498.  
  499.     SPR_GRETEL_DIE1,SPR_GRETEL_DIE2,SPR_GRETEL_DIE3,
  500.  
  501. //
  502. // fat face
  503. //
  504.     SPR_FAT_W1,SPR_FAT_W2,SPR_FAT_W3,SPR_FAT_W4,
  505.     SPR_FAT_SHOOT1,SPR_FAT_SHOOT2,SPR_FAT_SHOOT3,SPR_FAT_SHOOT4,
  506.  
  507.     SPR_FAT_DIE1,SPR_FAT_DIE2,SPR_FAT_DIE3,SPR_FAT_DEAD,
  508.  
  509. //
  510. // bj
  511. //
  512. #ifdef APOGEE_1_0
  513.     SPR_BJ_W1=360,
  514. #elif defined(APOGEE_1_1) && defined(UPLOAD)
  515.     SPR_BJ_W1=406,
  516. #else
  517.     SPR_BJ_W1,
  518. #endif
  519.     SPR_BJ_W2,SPR_BJ_W3,SPR_BJ_W4,
  520.     SPR_BJ_JUMP1,SPR_BJ_JUMP2,SPR_BJ_JUMP3,SPR_BJ_JUMP4,
  521. #else
  522. //
  523. // THESE ARE FOR 'SPEAR OF DESTINY'
  524. //
  525.  
  526. //
  527. // Trans Grosse
  528. //
  529.     SPR_TRANS_W1,SPR_TRANS_W2,SPR_TRANS_W3,SPR_TRANS_W4,
  530.     SPR_TRANS_SHOOT1,SPR_TRANS_SHOOT2,SPR_TRANS_SHOOT3,SPR_TRANS_DEAD,
  531.  
  532.     SPR_TRANS_DIE1,SPR_TRANS_DIE2,SPR_TRANS_DIE3,
  533.  
  534. //
  535. // Wilhelm
  536. //
  537.     SPR_WILL_W1,SPR_WILL_W2,SPR_WILL_W3,SPR_WILL_W4,
  538.     SPR_WILL_SHOOT1,SPR_WILL_SHOOT2,SPR_WILL_SHOOT3,SPR_WILL_SHOOT4,
  539.  
  540.     SPR_WILL_DIE1,SPR_WILL_DIE2,SPR_WILL_DIE3,SPR_WILL_DEAD,
  541.  
  542. //
  543. // UberMutant
  544. //
  545.     SPR_UBER_W1,SPR_UBER_W2,SPR_UBER_W3,SPR_UBER_W4,
  546.     SPR_UBER_SHOOT1,SPR_UBER_SHOOT2,SPR_UBER_SHOOT3,SPR_UBER_SHOOT4,
  547.  
  548.     SPR_UBER_DIE1,SPR_UBER_DIE2,SPR_UBER_DIE3,SPR_UBER_DIE4,
  549.     SPR_UBER_DEAD,
  550.  
  551. //
  552. // Death Knight
  553. //
  554.     SPR_DEATH_W1,SPR_DEATH_W2,SPR_DEATH_W3,SPR_DEATH_W4,
  555.     SPR_DEATH_SHOOT1,SPR_DEATH_SHOOT2,SPR_DEATH_SHOOT3,SPR_DEATH_SHOOT4,
  556.  
  557.     SPR_DEATH_DIE1,SPR_DEATH_DIE2,SPR_DEATH_DIE3,SPR_DEATH_DIE4,
  558.     SPR_DEATH_DIE5,SPR_DEATH_DIE6,SPR_DEATH_DEAD,
  559.  
  560. //
  561. // Ghost
  562. //
  563.     SPR_SPECTRE_W1,SPR_SPECTRE_W2,SPR_SPECTRE_W3,SPR_SPECTRE_W4,
  564.     SPR_SPECTRE_F1,SPR_SPECTRE_F2,SPR_SPECTRE_F3,SPR_SPECTRE_F4,
  565.  
  566. //
  567. // Angel of Death
  568. //
  569.     SPR_ANGEL_W1,SPR_ANGEL_W2,SPR_ANGEL_W3,SPR_ANGEL_W4,
  570.     SPR_ANGEL_SHOOT1,SPR_ANGEL_SHOOT2,SPR_ANGEL_TIRED1,SPR_ANGEL_TIRED2,
  571.  
  572.     SPR_ANGEL_DIE1,SPR_ANGEL_DIE2,SPR_ANGEL_DIE3,SPR_ANGEL_DIE4,
  573.     SPR_ANGEL_DIE5,SPR_ANGEL_DIE6,SPR_ANGEL_DIE7,SPR_ANGEL_DEAD,
  574.  
  575. #endif
  576.  
  577. //
  578. // player attack frames
  579. //
  580.     SPR_KNIFEREADY,SPR_KNIFEATK1,SPR_KNIFEATK2,SPR_KNIFEATK3,
  581.     SPR_KNIFEATK4,
  582.  
  583.     SPR_PISTOLREADY,SPR_PISTOLATK1,SPR_PISTOLATK2,SPR_PISTOLATK3,
  584.     SPR_PISTOLATK4,
  585.  
  586.     SPR_MACHINEGUNREADY,SPR_MACHINEGUNATK1,SPR_MACHINEGUNATK2,MACHINEGUNATK3,
  587.     SPR_MACHINEGUNATK4,
  588.  
  589.     SPR_CHAINREADY,SPR_CHAINATK1,SPR_CHAINATK2,SPR_CHAINATK3,
  590.     SPR_CHAINATK4,
  591.  
  592. };
  593.  
  594.  
  595. /*
  596. =============================================================================
  597.  
  598.                                GLOBAL TYPES
  599.  
  600. =============================================================================
  601. */
  602.  
  603. typedef enum {
  604.     di_north,
  605.     di_east,
  606.     di_south,
  607.     di_west
  608. } controldir_t;
  609.  
  610. typedef enum {
  611.     dr_normal,
  612.     dr_lock1,
  613.     dr_lock2,
  614.     dr_lock3,
  615.     dr_lock4,
  616.     dr_elevator
  617. } door_t;
  618.  
  619. typedef enum {
  620.     ac_badobject = -1,
  621.     ac_no,
  622.     ac_yes,
  623.     ac_allways
  624. } activetype;
  625.  
  626. typedef enum {
  627.     nothing,
  628.     playerobj,
  629.     inertobj,
  630.     guardobj,
  631.     officerobj,
  632.     ssobj,
  633.     dogobj,
  634.     bossobj,
  635.     schabbobj,
  636.     fakeobj,
  637.     mechahitlerobj,
  638.     mutantobj,
  639.     needleobj,
  640.     fireobj,
  641.     bjobj,
  642.     ghostobj,
  643.     realhitlerobj,
  644.     gretelobj,
  645.     giftobj,
  646.     fatobj,
  647.     rocketobj,
  648.  
  649.     spectreobj,
  650.     angelobj,
  651.     transobj,
  652.     uberobj,
  653.     willobj,
  654.     deathobj,
  655.     hrocketobj,
  656.     sparkobj
  657. } classtype;
  658.  
  659. typedef enum {
  660.     none,
  661.     block,
  662.     bo_gibs,
  663.     bo_alpo,
  664.     bo_firstaid,
  665.     bo_key1,
  666.     bo_key2,
  667.     bo_key3,
  668.     bo_key4,
  669.     bo_cross,
  670.     bo_chalice,
  671.     bo_bible,
  672.     bo_crown,
  673.     bo_clip,
  674.     bo_clip2,
  675.     bo_machinegun,
  676.     bo_chaingun,
  677.     bo_food,
  678.     bo_fullheal,
  679.     bo_25clip,
  680.     bo_spear
  681. } wl_stat_t;
  682.  
  683. typedef enum {
  684.     east,
  685.     northeast,
  686.     north,
  687.     northwest,
  688.     west,
  689.     southwest,
  690.     south,
  691.     southeast,
  692.     nodir
  693. } dirtype;
  694.  
  695.  
  696. #define NUMENEMIES  22
  697. typedef enum {
  698.     en_guard,
  699.     en_officer,
  700.     en_ss,
  701.     en_dog,
  702.     en_boss,
  703.     en_schabbs,
  704.     en_fake,
  705.     en_hitler,
  706.     en_mutant,
  707.     en_blinky,
  708.     en_clyde,
  709.     en_pinky,
  710.     en_inky,
  711.     en_gretel,
  712.     en_gift,
  713.     en_fat,
  714.     en_spectre,
  715.     en_angel,
  716.     en_trans,
  717.     en_uber,
  718.     en_will,
  719.     en_death
  720. } enemy_t;
  721.  
  722. typedef void (* statefunc) (void *);
  723.  
  724. typedef struct statestruct
  725. {
  726.     boolean rotate;
  727.     short   shapenum;           // a shapenum of -1 means get from ob->temp1
  728.     short   tictime;
  729.     void    (*think) (void *),(*action) (void *);
  730.     struct  statestruct *next;
  731. } statetype;
  732.  
  733.  
  734. //---------------------
  735. //
  736. // trivial actor structure
  737. //
  738. //---------------------
  739.  
  740. typedef struct statstruct
  741. {
  742.     byte      tilex,tiley;
  743.     short     shapenum;           // if shapenum == -1 the obj has been removed
  744.     byte      *visspot;
  745.     uint32_t  flags;
  746.     byte      itemnumber;
  747. } statobj_t;
  748.  
  749.  
  750. //---------------------
  751. //
  752. // door actor structure
  753. //
  754. //---------------------
  755.  
  756. typedef enum
  757. {
  758.     dr_open,dr_closed,dr_opening,dr_closing
  759. } doortype;
  760.  
  761. typedef struct doorstruct
  762. {
  763.     byte     tilex,tiley;
  764.     boolean  vertical;
  765.     byte     lock;
  766.     doortype action;
  767.     short    ticcount;
  768. } doorobj_t;
  769.  
  770.  
  771. //--------------------
  772. //
  773. // thinking actor structure
  774. //
  775. //--------------------
  776.  
  777. typedef struct objstruct
  778. {
  779.     activetype  active;
  780.     short       ticcount;
  781.     classtype   obclass;
  782.     statetype   *state;
  783.  
  784.     uint32_t    flags;              // FL_SHOOTABLE, etc
  785.  
  786.     int32_t     distance;           // if negative, wait for that door to open
  787.     dirtype     dir;
  788.  
  789.     fixed       x,y;
  790.     word        tilex,tiley;
  791.     byte        areanumber;
  792.  
  793.     short       viewx;
  794.     word        viewheight;
  795.     fixed       transx,transy;      // in global coord
  796.  
  797.     short       angle;
  798.     short       hitpoints;
  799.     int32_t     speed;
  800.  
  801.     short       temp1,temp2,hidden;
  802.     struct objstruct *next,*prev;
  803. } objtype;
  804.  
  805. enum
  806. {
  807.     bt_nobutton=-1,
  808.     bt_attack=0,
  809.     bt_strafe,
  810.     bt_run,
  811.     bt_use,
  812.     bt_readyknife,
  813.     bt_readypistol,
  814.     bt_readymachinegun,
  815.     bt_readychaingun,
  816.     bt_nextweapon,
  817.     bt_prevweapon,
  818.     bt_esc,
  819.     bt_pause,
  820.     bt_strafeleft,
  821.     bt_straferight,
  822.     bt_moveforward,
  823.     bt_movebackward,
  824.     bt_turnleft,
  825.     bt_turnright,
  826.     NUMBUTTONS
  827. };
  828.  
  829.  
  830. #define NUMWEAPONS      4
  831. typedef enum
  832. {
  833.     wp_knife,
  834.     wp_pistol,
  835.     wp_machinegun,
  836.     wp_chaingun
  837. } weapontype;
  838.  
  839.  
  840. enum
  841. {
  842.     gd_baby,
  843.     gd_easy,
  844.     gd_medium,
  845.     gd_hard
  846. };
  847.  
  848. //---------------
  849. //
  850. // gamestate structure
  851. //
  852. //---------------
  853.  
  854. typedef struct
  855. {
  856.     short       difficulty;
  857.     short       mapon;
  858.     int32_t     oldscore,score,nextextra;
  859.     short       lives;
  860.     short       health;
  861.     short       ammo;
  862.     short       keys;
  863.     weapontype  bestweapon,weapon,chosenweapon;
  864.  
  865.     short       faceframe;
  866.     short       attackframe,attackcount,weaponframe;
  867.  
  868.     short       episode,secretcount,treasurecount,killcount,
  869.                 secrettotal,treasuretotal,killtotal;
  870.     int32_t     TimeCount;
  871.     int32_t     killx,killy;
  872.     boolean     victoryflag;            // set during victory animations
  873. } gametype;
  874.  
  875.  
  876. typedef enum
  877. {
  878.     ex_stillplaying,
  879.     ex_completed,
  880.     ex_died,
  881.     ex_warped,
  882.     ex_resetgame,
  883.     ex_loadedgame,
  884.     ex_victorious,
  885.     ex_abort,
  886.     ex_demodone,
  887.     ex_secretlevel
  888. } exit_t;
  889.  
  890.  
  891. extern word *mapsegs[MAPPLANES];
  892. extern int mapon;
  893.  
  894. /*
  895. =============================================================================
  896.  
  897.                              WL_MAIN DEFINITIONS
  898.  
  899. =============================================================================
  900. */
  901.  
  902. extern  boolean  loadedgame;
  903. extern  fixed    focallength;
  904. extern  int      viewscreenx, viewscreeny;
  905. extern  int      viewwidth;
  906. extern  int      viewheight;
  907. extern  short    centerx;
  908. extern  int32_t  heightnumerator;
  909. extern  fixed    scale;
  910.  
  911. extern  int      dirangle[9];
  912.  
  913. extern  int      mouseadjustment;
  914. extern  int      shootdelta;
  915. extern  unsigned screenofs;
  916.  
  917. extern  boolean  startgame;
  918. extern  char     str[80];
  919. extern  char     configdir[256];
  920. extern  char     configname[13];
  921.  
  922. //
  923. // Command line parameter variables
  924. //
  925. extern  boolean  param_debugmode;
  926. extern  boolean  param_nowait;
  927. extern  int      param_difficulty;
  928. extern  int      param_tedlevel;
  929. extern  int      param_joystickindex;
  930. extern  int      param_joystickhat;
  931. extern  int      param_samplerate;
  932. extern  int      param_audiobuffer;
  933. extern  int      param_mission;
  934. extern  boolean  param_goodtimes;
  935. extern  boolean  param_ignorenumchunks;
  936.  
  937.  
  938. void            NewGame (int difficulty,int episode);
  939. void            CalcProjection (int32_t focal);
  940. void            NewViewSize (int width);
  941. boolean         SetViewSize (unsigned width, unsigned height);
  942. boolean         LoadTheGame(FILE *file,int x,int y);
  943. boolean         SaveTheGame(FILE *file,int x,int y);
  944. void            ShowViewSize (int width);
  945. void            ShutdownId (void);
  946.  
  947.  
  948. /*
  949. =============================================================================
  950.  
  951.                          WL_GAME DEFINITIONS
  952.  
  953. =============================================================================
  954. */
  955.  
  956. extern  gametype        gamestate;
  957. extern  byte            bordercol;
  958. extern  SDL_Surface     *latchpics[NUMLATCHPICS];
  959. extern  char            demoname[13];
  960.  
  961. void    SetupGameLevel (void);
  962. void    GameLoop (void);
  963. void    DrawPlayBorder (void);
  964. void    DrawStatusBorder (byte color);
  965. void    DrawPlayScreen (void);
  966. void    DrawPlayBorderSides (void);
  967. void    ShowActStatus();
  968.  
  969. void    PlayDemo (int demonumber);
  970. void    RecordDemo (void);
  971.  
  972.  
  973. #ifdef SPEAR
  974. extern  int32_t            spearx,speary;
  975. extern  unsigned        spearangle;
  976. extern  boolean         spearflag;
  977. #endif
  978.  
  979.  
  980. #define ClearMemory SD_StopDigitized
  981.  
  982.  
  983. // JAB
  984. #define PlaySoundLocTile(s,tx,ty)       PlaySoundLocGlobal(s,(((int32_t)(tx) << TILESHIFT) + (1L << (TILESHIFT - 1))),(((int32_t)ty << TILESHIFT) + (1L << (TILESHIFT - 1))))
  985. #define PlaySoundLocActor(s,ob)         PlaySoundLocGlobal(s,(ob)->x,(ob)->y)
  986. void    PlaySoundLocGlobal(word s,fixed gx,fixed gy);
  987. void UpdateSoundLoc(void);
  988.  
  989.  
  990. /*
  991. =============================================================================
  992.  
  993.                             WL_PLAY DEFINITIONS
  994.  
  995. =============================================================================
  996. */
  997.  
  998. #define BASEMOVE                35
  999. #define RUNMOVE                 70
  1000. #define BASETURN                35
  1001. #define RUNTURN                 70
  1002.  
  1003. #define JOYSCALE                2
  1004.  
  1005. extern  byte            tilemap[MAPSIZE][MAPSIZE];      // wall values only
  1006. extern  byte            spotvis[MAPSIZE][MAPSIZE];
  1007. extern  objtype         *actorat[MAPSIZE][MAPSIZE];
  1008.  
  1009. extern  objtype         *player;
  1010.  
  1011. extern  unsigned        tics;
  1012. extern  int             viewsize;
  1013.  
  1014. extern  int             lastgamemusicoffset;
  1015.  
  1016. //
  1017. // current user input
  1018. //
  1019. extern  int         controlx,controly;              // range from -100 to 100
  1020. extern  boolean     buttonstate[NUMBUTTONS];
  1021. extern  objtype     objlist[MAXACTORS];
  1022. extern  boolean     buttonheld[NUMBUTTONS];
  1023. extern  exit_t      playstate;
  1024. extern  boolean     madenoise;
  1025. extern  statobj_t   statobjlist[MAXSTATS];
  1026. extern  statobj_t   *laststatobj;
  1027. extern  objtype     *newobj,*killerobj;
  1028. extern  doorobj_t   doorobjlist[MAXDOORS];
  1029. extern  doorobj_t   *lastdoorobj;
  1030. extern  int         godmode;
  1031.  
  1032. extern  boolean     demorecord,demoplayback;
  1033. extern  int8_t      *demoptr, *lastdemoptr;
  1034. extern  memptr      demobuffer;
  1035.  
  1036. //
  1037. // control info
  1038. //
  1039. extern  boolean     mouseenabled,joystickenabled;
  1040. extern  int         dirscan[4];
  1041. extern  int         buttonscan[NUMBUTTONS];
  1042. extern  int         buttonmouse[4];
  1043. extern  int         buttonjoy[32];
  1044.  
  1045. void    InitActorList (void);
  1046. void    GetNewActor (void);
  1047. void    PlayLoop (void);
  1048.  
  1049. void    CenterWindow(word w,word h);
  1050.  
  1051. void    InitRedShifts (void);
  1052. void    FinishPaletteShifts (void);
  1053.  
  1054. void    RemoveObj (objtype *gone);
  1055. void    PollControls (void);
  1056. int     StopMusic(void);
  1057. void    StartMusic(void);
  1058. void    ContinueMusic(int offs);
  1059. void    StartDamageFlash (int damage);
  1060. void    StartBonusFlash (void);
  1061.  
  1062. #ifdef SPEAR
  1063. extern  int32_t     funnyticount;           // FOR FUNNY BJ FACE
  1064. #endif
  1065.  
  1066. extern  objtype     *objfreelist;     // *obj,*player,*lastobj,
  1067.  
  1068. extern  boolean     noclip,ammocheat;
  1069. extern  int         singlestep, extravbls;
  1070.  
  1071. /*
  1072. =============================================================================
  1073.  
  1074.                                 WL_INTER
  1075.  
  1076. =============================================================================
  1077. */
  1078.  
  1079. void IntroScreen (void);
  1080. void PG13(void);
  1081. void DrawHighScores(void);
  1082. void CheckHighScore (int32_t score,word other);
  1083. void Victory (void);
  1084. void LevelCompleted (void);
  1085. void ClearSplitVWB (void);
  1086.  
  1087. void PreloadGraphics(void);
  1088.  
  1089.  
  1090. /*
  1091. =============================================================================
  1092.  
  1093.                                 WL_DEBUG
  1094.  
  1095. =============================================================================
  1096. */
  1097.  
  1098. int DebugKeys (void);
  1099.  
  1100. /*
  1101. =============================================================================
  1102.  
  1103.                             WL_DRAW DEFINITIONS
  1104.  
  1105. =============================================================================
  1106. */
  1107.  
  1108. //
  1109. // math tables
  1110. //
  1111. extern  short *pixelangle;
  1112. extern  int32_t finetangent[FINEANGLES/4];
  1113. extern  fixed sintable[];
  1114. extern  fixed *costable;
  1115. extern  int *wallheight;
  1116. extern  word horizwall[],vertwall[];
  1117. extern  int32_t    lasttimecount;
  1118. extern  int32_t    frameon;
  1119.  
  1120. extern  unsigned screenloc[3];
  1121.  
  1122. extern  boolean fizzlein, fpscounter;
  1123.  
  1124. extern  fixed   viewx,viewy;                    // the focal point
  1125. extern  fixed   viewsin,viewcos;
  1126.  
  1127. void    ThreeDRefresh (void);
  1128. void    CalcTics (void);
  1129.  
  1130. typedef struct
  1131. {
  1132.     word leftpix,rightpix;
  1133.     word dataofs[64];
  1134. // table data after dataofs[rightpix-leftpix+1]
  1135. } t_compshape;
  1136.  
  1137. /*
  1138. =============================================================================
  1139.  
  1140.                              WL_STATE DEFINITIONS
  1141.  
  1142. =============================================================================
  1143. */
  1144. #define TURNTICS        10
  1145. #define SPDPATROL       512
  1146. #define SPDDOG          1500
  1147.  
  1148.  
  1149. void    InitHitRect (objtype *ob, unsigned radius);
  1150. void    SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);
  1151. void    NewState (objtype *ob, statetype *state);
  1152.  
  1153. boolean TryWalk (objtype *ob);
  1154. void    SelectChaseDir (objtype *ob);
  1155. void    SelectDodgeDir (objtype *ob);
  1156. void    SelectRunDir (objtype *ob);
  1157. void    MoveObj (objtype *ob, int32_t move);
  1158. boolean SightPlayer (objtype *ob);
  1159.  
  1160. void    KillActor (objtype *ob);
  1161. void    DamageActor (objtype *ob, unsigned damage);
  1162.  
  1163. boolean CheckLine (objtype *ob);
  1164. boolean CheckSight (objtype *ob);
  1165.  
  1166. /*
  1167. =============================================================================
  1168.  
  1169.                              WL_AGENT DEFINITIONS
  1170.  
  1171. =============================================================================
  1172. */
  1173.  
  1174. extern  short    anglefrac;
  1175. extern  int      facecount, facetimes;
  1176. extern  word     plux,pluy;         // player coordinates scaled to unsigned
  1177. extern  int32_t  thrustspeed;
  1178. extern  objtype  *LastAttacker;
  1179.  
  1180. void    Thrust (int angle, int32_t speed);
  1181. void    SpawnPlayer (int tilex, int tiley, int dir);
  1182. void    TakeDamage (int points,objtype *attacker);
  1183. void    GivePoints (int32_t points);
  1184. void    GetBonus (statobj_t *check);
  1185. void    GiveWeapon (int weapon);
  1186. void    GiveAmmo (int ammo);
  1187. void    GiveKey (int key);
  1188.  
  1189. //
  1190. // player state info
  1191. //
  1192.  
  1193. void    StatusDrawFace(unsigned picnum);
  1194. void    DrawFace (void);
  1195. void    DrawHealth (void);
  1196. void    HealSelf (int points);
  1197. void    DrawLevel (void);
  1198. void    DrawLives (void);
  1199. void    GiveExtraMan (void);
  1200. void    DrawScore (void);
  1201. void    DrawWeapon (void);
  1202. void    DrawKeys (void);
  1203. void    DrawAmmo (void);
  1204.  
  1205.  
  1206. /*
  1207. =============================================================================
  1208.  
  1209.                              WL_ACT1 DEFINITIONS
  1210.  
  1211. =============================================================================
  1212. */
  1213.  
  1214. extern  doorobj_t doorobjlist[MAXDOORS];
  1215. extern  doorobj_t *lastdoorobj;
  1216. extern  short     doornum;
  1217.  
  1218. extern  word      doorposition[MAXDOORS];
  1219.  
  1220. extern  byte      areaconnect[NUMAREAS][NUMAREAS];
  1221.  
  1222. extern  boolean   areabyplayer[NUMAREAS];
  1223.  
  1224. extern word     pwallstate;
  1225. extern word     pwallpos;        // amount a pushable wall has been moved (0-63)
  1226. extern word     pwallx,pwally;
  1227. extern byte     pwalldir,pwalltile;
  1228.  
  1229.  
  1230. void InitDoorList (void);
  1231. void InitStaticList (void);
  1232. void SpawnStatic (int tilex, int tiley, int type);
  1233. void SpawnDoor (int tilex, int tiley, boolean vertical, int lock);
  1234. void MoveDoors (void);
  1235. void MovePWalls (void);
  1236. void OpenDoor (int door);
  1237. void PlaceItemType (int itemtype, int tilex, int tiley);
  1238. void PushWall (int checkx, int checky, int dir);
  1239. void OperateDoor (int door);
  1240. void InitAreas (void);
  1241.  
  1242. /*
  1243. =============================================================================
  1244.  
  1245.                              WL_ACT2 DEFINITIONS
  1246.  
  1247. =============================================================================
  1248. */
  1249.  
  1250. #define s_nakedbody s_static10
  1251.  
  1252. extern  statetype s_grddie1;
  1253. extern  statetype s_dogdie1;
  1254. extern  statetype s_ofcdie1;
  1255. extern  statetype s_mutdie1;
  1256. extern  statetype s_ssdie1;
  1257. extern  statetype s_bossdie1;
  1258. extern  statetype s_schabbdie1;
  1259. extern  statetype s_fakedie1;
  1260. extern  statetype s_mechadie1;
  1261. extern  statetype s_hitlerdie1;
  1262. extern  statetype s_greteldie1;
  1263. extern  statetype s_giftdie1;
  1264. extern  statetype s_fatdie1;
  1265.  
  1266. extern  statetype s_spectredie1;
  1267. extern  statetype s_angeldie1;
  1268. extern  statetype s_transdie0;
  1269. extern  statetype s_uberdie0;
  1270. extern  statetype s_willdie1;
  1271. extern  statetype s_deathdie1;
  1272.  
  1273.  
  1274. extern  statetype s_grdchase1;
  1275. extern  statetype s_dogchase1;
  1276. extern  statetype s_ofcchase1;
  1277. extern  statetype s_sschase1;
  1278. extern  statetype s_mutchase1;
  1279. extern  statetype s_bosschase1;
  1280. extern  statetype s_schabbchase1;
  1281. extern  statetype s_fakechase1;
  1282. extern  statetype s_mechachase1;
  1283. extern  statetype s_gretelchase1;
  1284. extern  statetype s_giftchase1;
  1285. extern  statetype s_fatchase1;
  1286.  
  1287. extern  statetype s_spectrechase1;
  1288. extern  statetype s_angelchase1;
  1289. extern  statetype s_transchase1;
  1290. extern  statetype s_uberchase1;
  1291. extern  statetype s_willchase1;
  1292. extern  statetype s_deathchase1;
  1293.  
  1294. extern  statetype s_blinkychase1;
  1295. extern  statetype s_hitlerchase1;
  1296.  
  1297. extern  statetype s_grdpain;
  1298. extern  statetype s_grdpain1;
  1299. extern  statetype s_ofcpain;
  1300. extern  statetype s_ofcpain1;
  1301. extern  statetype s_sspain;
  1302. extern  statetype s_sspain1;
  1303. extern  statetype s_mutpain;
  1304. extern  statetype s_mutpain1;
  1305.  
  1306. extern  statetype s_deathcam;
  1307.  
  1308. extern  statetype s_schabbdeathcam2;
  1309. extern  statetype s_hitlerdeathcam2;
  1310. extern  statetype s_giftdeathcam2;
  1311. extern  statetype s_fatdeathcam2;
  1312.  
  1313. void SpawnStand (enemy_t which, int tilex, int tiley, int dir);
  1314. void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir);
  1315. void KillActor (objtype *ob);
  1316.  
  1317. void SpawnDeadGuard (int tilex, int tiley);
  1318. void SpawnBoss (int tilex, int tiley);
  1319. void SpawnGretel (int tilex, int tiley);
  1320. void SpawnTrans (int tilex, int tiley);
  1321. void SpawnUber (int tilex, int tiley);
  1322. void SpawnWill (int tilex, int tiley);
  1323. void SpawnDeath (int tilex, int tiley);
  1324. void SpawnAngel (int tilex, int tiley);
  1325. void SpawnSpectre (int tilex, int tiley);
  1326. void SpawnGhosts (int which, int tilex, int tiley);
  1327. void SpawnSchabbs (int tilex, int tiley);
  1328. void SpawnGift (int tilex, int tiley);
  1329. void SpawnFat (int tilex, int tiley);
  1330. void SpawnFakeHitler (int tilex, int tiley);
  1331. void SpawnHitler (int tilex, int tiley);
  1332.  
  1333. void A_DeathScream (objtype *ob);
  1334. void SpawnBJVictory (void);
  1335.  
  1336. /*
  1337. =============================================================================
  1338.  
  1339.                              WL_TEXT DEFINITIONS
  1340.  
  1341. =============================================================================
  1342. */
  1343.  
  1344. extern  char    helpfilename[],endfilename[];
  1345.  
  1346. extern  void    HelpScreens(void);
  1347. extern  void    EndText(void);
  1348.  
  1349.  
  1350. /*
  1351. =============================================================================
  1352.  
  1353.                                GP2X DEFINITIONS
  1354.  
  1355. =============================================================================
  1356. */
  1357.  
  1358. #if defined(GP2X)
  1359.  
  1360. #if defined(GP2X_940)
  1361. void GP2X_MemoryInit(void);
  1362. void GP2X_Shutdown(void);
  1363. #endif
  1364. void GP2X_ButtonDown(int button);
  1365. void GP2X_ButtonUp(int button);
  1366.  
  1367. #endif
  1368.  
  1369.  
  1370. /*
  1371. =============================================================================
  1372.  
  1373.                              MISC DEFINITIONS
  1374.  
  1375. =============================================================================
  1376. */
  1377.  
  1378. static inline fixed FixedMul(fixed a, fixed b)
  1379. {
  1380.         return (fixed)(((int64_t)a * b + 0x8000) >> 16);
  1381. }
  1382.  
  1383. #ifdef PLAYDEMOLIKEORIGINAL
  1384.     #define DEMOCHOOSE_ORIG_SDL(orig, sdl) ((demorecord || demoplayback) ? (orig) : (sdl))
  1385.     #define DEMOCOND_ORIG                  (demorecord || demoplayback)
  1386.     #define DEMOIF_SDL                     if(DEMOCOND_SDL)
  1387. #else
  1388.     #define DEMOCHOOSE_ORIG_SDL(orig, sdl) (sdl)
  1389.     #define DEMOCOND_ORIG                  false
  1390.     #define DEMOIF_SDL
  1391. #endif
  1392. #define DEMOCOND_SDL                   (!DEMOCOND_ORIG)
  1393.  
  1394. #define GetTicks() ((SDL_GetTicks()*7)/100)
  1395.  
  1396. #define ISPOINTER(x) ((((uintptr_t)(x)) & ~0xffff) != 0)
  1397.  
  1398. #define CHECKMALLOCRESULT(x) if(!(x)) Quit("Out of memory at %s:%i", __FILE__, __LINE__)
  1399.  
  1400. #ifdef _WIN32
  1401.     #define strcasecmp stricmp
  1402.     #define strncasecmp strnicmp
  1403.     #define snprintf _snprintf
  1404. #else
  1405.     /*static inline char* itoa(int value, char* string, int radix)
  1406.     {
  1407.             sprintf(string, "%d", value);
  1408.             return string;
  1409.     }*/
  1410.  
  1411.     static inline char* ltoa(long value, char* string, int radix)
  1412.     {
  1413.             sprintf(string, "%ld", value);
  1414.             return string;
  1415.     }
  1416. #endif
  1417.  
  1418. #define lengthof(x) (sizeof(x) / sizeof(*(x)))
  1419. #define endof(x)    ((x) + lengthof(x))
  1420.  
  1421. static inline word READWORD(byte *&ptr)
  1422. {
  1423.     word val = ptr[0] | ptr[1] << 8;
  1424.     ptr += 2;
  1425.     return val;
  1426. }
  1427.  
  1428. static inline longword READLONGWORD(byte *&ptr)
  1429. {
  1430.     longword val = ptr[0] | ptr[1] << 8 | ptr[2] << 16 | ptr[3] << 24;
  1431.     ptr += 4;
  1432.     return val;
  1433. }
  1434.  
  1435.  
  1436. /*
  1437. =============================================================================
  1438.  
  1439.                            FEATURE DEFINITIONS
  1440.  
  1441. =============================================================================
  1442. */
  1443.  
  1444. #ifdef USE_FEATUREFLAGS
  1445.     // The currently available feature flags
  1446.     #define FF_STARSKY      0x0001
  1447.     #define FF_PARALLAXSKY  0x0002
  1448.     #define FF_CLOUDSKY     0x0004
  1449.     #define FF_RAIN         0x0010
  1450.     #define FF_SNOW         0x0020
  1451.  
  1452.     // The ffData... variables contain the 16-bit values of the according corners of the current level.
  1453.     // The corners are overwritten with adjacent tiles after initialization in SetupGameLevel
  1454.     // to avoid interpretation as e.g. doors.
  1455.     extern int ffDataTopLeft, ffDataTopRight, ffDataBottomLeft, ffDataBottomRight;
  1456.  
  1457.     /*************************************************************
  1458.      * Current usage of ffData... variables:
  1459.      * ffDataTopLeft:     lower 8-bit: ShadeDefID
  1460.      * ffDataTopRight:    FeatureFlags
  1461.      * ffDataBottomLeft:  CloudSkyDefID or ParallaxStartTexture
  1462.      * ffDataBottomRight: unused
  1463.      *************************************************************/
  1464.  
  1465.     // The feature flags are stored as a wall in the upper right corner of each level
  1466.     static inline word GetFeatureFlags()
  1467.     {
  1468.         return ffDataTopRight;
  1469.     }
  1470.  
  1471. #endif
  1472.  
  1473. #ifdef USE_FLOORCEILINGTEX
  1474.     void DrawFloorAndCeiling(byte *vbuf, unsigned vbufPitch, int min_wallheight);
  1475. #endif
  1476.  
  1477. #ifdef USE_PARALLAX
  1478.     void DrawParallax(byte *vbuf, unsigned vbufPitch);
  1479. #endif
  1480.  
  1481. #ifdef USE_DIR3DSPR
  1482.     void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob);
  1483. #endif
  1484.  
  1485. #endif
  1486.