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