]> 4ch.mooo.com Git - 16.git/blob - 16/keen456/KEEN4-6/CK_DEF.H
extrcted keen code remake
[16.git] / 16 / keen456 / KEEN4-6 / CK_DEF.H
1 /* Reconstructed Commander Keen 4-6 Source Code\r
2  * Copyright (C) 2021 K1n9_Duk3\r
3  *\r
4  * This file is loosely based on:\r
5  * Keen Dreams Source Code\r
6  * Copyright (C) 2014 Javier M. Chavez\r
7  *\r
8  * This program is free software; you can redistribute it and/or modify\r
9  * it under the terms of the GNU General Public License as published by\r
10  * the Free Software Foundation; either version 2 of the License, or\r
11  * (at your option) any later version.\r
12  *\r
13  * This program is distributed in the hope that it will be useful,\r
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
16  * GNU General Public License for more details.\r
17  *\r
18  * You should have received a copy of the GNU General Public License along\r
19  * with this program; if not, write to the Free Software Foundation, Inc.,\r
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
21  */\r
22 \r
23 #ifndef __CK_DEF__\r
24 #define __CK_DEF__\r
25 \r
26 #include <BIOS.H>\r
27 #include <CONIO.H>\r
28 \r
29 #include "ID_HEADS.H"\r
30 \r
31 /*\r
32 =============================================================================\r
33 \r
34                                                  GLOBAL CONSTANTS & MACROS\r
35 \r
36 =============================================================================\r
37 */\r
38 \r
39 #define MAXACTORS 100\r
40 \r
41 #define GAMELEVELS 25\r
42 \r
43 #define CONVERT_GLOBAL_TO_TILE(x)  ((x)>>(G_T_SHIFT))\r
44 #define CONVERT_TILE_TO_GLOBAL(x)  ((x)<<(G_T_SHIFT))\r
45 #define CONVERT_GLOBAL_TO_PIXEL(x) ((x)>>(G_P_SHIFT))\r
46 #define CONVERT_PIXEL_TO_GLOBAL(x) ((x)<<(G_P_SHIFT))\r
47 #define CONVERT_PIXEL_TO_TILE(x)   ((x)>>(P_T_SHIFT))\r
48 #define CONVERT_TILE_TO_PIXEL(x)   ((x)<<(P_T_SHIFT))\r
49 \r
50 #define SPAWN_ADJUST_Y(y, h) (CONVERT_TILE_TO_GLOBAL(y) + (CONVERT_PIXEL_TO_GLOBAL(16-(h))))\r
51 \r
52 #define ARRAYLENGTH(x) (sizeof(x)/sizeof(*(x)))\r
53 \r
54 #define CA_UnmarkGrChunk(num) (grneeded[num] &= ~ca_levelbit)\r
55 \r
56 #define SetPalette(pal) {_ES=FP_SEG(pal); _DX=FP_OFF(pal); _AX=0x1002; geninterrupt(0x10);}\r
57 #define SetPaletteEx(pal) {(pal)[16] = bordercolor; SetPalette(pal);}\r
58 \r
59 //HACK IMPORTS:\r
60 void RFL_InitAnimList(void);\r
61 void CA_FreeGraphics(void);\r
62 void CA_SetGrPurge(void);\r
63 \r
64 /*\r
65 Note:\r
66 \r
67 The ID software memory manager doesn't care about the different purge levels.\r
68 Using PURGE_FIST is identical to using PURGE_LAST.\r
69 */\r
70 #define PURGE_FIRST 3\r
71 #define PURGE_LAST 1\r
72 \r
73 #define PLATFORMBLOCK 31\r
74 #define DIRARROWSTART 91\r
75 #define DIRARROWEND   (DIRARROWSTART+arrow_None)\r
76 \r
77 /*\r
78 =============================================================================\r
79 \r
80                                                    GLOBAL TYPES\r
81 \r
82 =============================================================================\r
83 */\r
84 \r
85 //SDL-style integer types - just to make future SDL ports easier\r
86 typedef unsigned int Uint16;\r
87 typedef signed int Sint16;\r
88 typedef unsigned char Uint8;\r
89 typedef signed char Sint8;\r
90 typedef unsigned long Uint32;\r
91 typedef signed long Sint32;\r
92 //Note: only the game code (CK_*.C, K?_*.C) uses these!\r
93 \r
94 //some compile-time checks to make sure the ints have the correct size\r
95 #if (sizeof(Uint16) != 2)\r
96 #error 'Uint16' has wrong size\r
97 #elif (sizeof(Sint16) != 2)\r
98 #error 'Sint16' has wrong size\r
99 #elif (sizeof(Uint8) != 1)\r
100 #error 'Uint8' has wrong size\r
101 #elif (sizeof(Sint8) != 1)\r
102 #error 'Sint8' has wrong size\r
103 #elif (sizeof(Uint32) != 4)\r
104 #error 'Uint32' has wrong size\r
105 #elif (sizeof(Sint32) != 4)\r
106 #error 'Sint32' has wrong size\r
107 #endif\r
108 \r
109 typedef enum {\r
110         arrow_North,     // 0\r
111         arrow_East,      // 1\r
112         arrow_South,     // 2\r
113         arrow_West,      // 3\r
114         arrow_NorthEast, // 4\r
115         arrow_SouthEast, // 5\r
116         arrow_SouthWest, // 6\r
117         arrow_NorthWest, // 7\r
118         arrow_None       // 8\r
119 } arrowdirtype;\r
120 \r
121 typedef enum {\r
122         ex_stillplaying, //  0\r
123         ex_died,         //  1\r
124         ex_completed,    //  2\r
125         ex_rescued,      //  3, only in Keen 4\r
126         ex_warped,       //  4\r
127         ex_resetgame,    //  5\r
128         ex_loadedgame,   //  6\r
129         ex_foot,         //  7, only in Keen 4\r
130         ex_abortgame,    //  8\r
131         ex_sandwich,     //  9, only in Keen 6\r
132         ex_hook,         // 10, only in Keen 6\r
133         ex_card,         // 11, only in Keen 6\r
134         ex_molly,        // 12, only in Keen 6\r
135         ex_portout,      // 13, only in Keen 5\r
136         ex_fusebroke,    // 14, only in Keen 5\r
137         ex_qedbroke,     // 15, only in Keen 5\r
138         NUMEXITTYPES\r
139 } exittype;\r
140 \r
141 typedef enum\r
142 {\r
143         INTILE_NOTHING,        //  0\r
144         INTILE_POLE,           //  1\r
145         INTILE_DOOR,           //  2\r
146         INTILE_DEADLY,         //  3\r
147         INTILE_DROP,           //  4\r
148         INTILE_SWITCH0,        //  5\r
149         INTILE_SWITCH1,        //  6\r
150         INTILE_GEMSOCKET0,     //  7\r
151         INTILE_GEMSOCKET1,     //  8\r
152         INTILE_GEMSOCKET2,     //  9\r
153         INTILE_GEMSOCKET3,     // 10\r
154         INTILE_SHORESOUTH,     // 11\r
155         INTILE_SHOREWEST,      // 12\r
156         INTILE_SHORENORTH,     // 13\r
157         INTILE_SHOREEAST,      // 14\r
158         INTILE_BRIDGESWITCH,   // 15\r
159         INTILE_MOON,           // 16\r
160         INTILE_DIRARROW,       // 17 (not used in the code, but assigned to tiles in Keen 5 & 6)\r
161         INTILE_BRIDGE,         // 18\r
162         INTILE_FORCEFIELD,     // 19\r
163         INTILE_TELEPORT,       // 20\r
164         INTILE_BONUS100,       // 21\r
165         INTILE_BONUS200,       // 22\r
166         INTILE_BONUS500,       // 23\r
167         INTILE_BONUS1000,      // 24\r
168         INTILE_BONUS2000,      // 25\r
169         INTILE_BONUS5000,      // 26\r
170         INTILE_EXTRALIFE,      // 27\r
171         INTILE_AMMO,           // 28\r
172         INTILE_29,             // 29 (never used)\r
173         INTILE_FORCEFIELDEND,  // 30\r
174         INTILE_AMPTONCOMPUTER, // 31\r
175         INTILE_KEYCARDDOOR,    // 32\r
176         INTILE_ELEVATORLEFT,   // 33\r
177         INTILE_ELEVATORRIGHT,  // 34\r
178 \r
179         INTILE_FOREGROUND = 0x80\r
180 } intiletype;\r
181 \r
182 #define INTILE_TYPEMASK (INTILE_FOREGROUND-1)\r
183 \r
184 typedef enum\r
185 {\r
186         nothing,         //  0\r
187         inertobj,        //  1\r
188         keenobj,         //  2\r
189         stunshotobj,     //  3\r
190 #if defined KEEN4\r
191         bonusobj,        //  4\r
192         slugobj,         //  5\r
193         oracleobj,       //  6\r
194         classtype_7,     //  7, never used\r
195         eggobj,          //  8\r
196         madmushroomobj,  //  9\r
197         arachnutobj,     // 10\r
198         skypestobj,      // 11\r
199         wormouthobj,     // 12\r
200         thundercloudobj, // 13\r
201         berkeloidobj,    // 14\r
202         bounderobj,      // 15\r
203         inchwormobj,     // 16\r
204         footobj,         // 17\r
205         lickobj,         // 18\r
206         mimrockobj,      // 19\r
207         platformobj,     // 20\r
208         dopefishobj,     // 21\r
209         schoolfishobj,   // 22\r
210         pixieobj,        // 23\r
211         lindseyobj,      // 24\r
212         lightningobj,    // 25\r
213         treasureeaterobj,// 26\r
214         eggbirdobj,      // 27\r
215         classtype_28,    // 28, never used\r
216         classtype_29,    // 29, never used\r
217         scubaobj,        // 30\r
218         mshotobj,        // 31\r
219         mineobj,         // 32\r
220         stunnedobj,      // 33\r
221         flagobj,         // 34\r
222 #elif defined KEEN5\r
223         mshotobj,        //  4\r
224         bonusobj,        //  5\r
225         platformobj,     //  6\r
226         stunnedobj,      //  7\r
227         flagobj,         //  8\r
228         sparkyobj,       //  9\r
229         mineobj,         // 10\r
230         slicestarobj,    // 11\r
231         roboredobj,      // 12\r
232         spirogripobj,    // 13\r
233         amptonobj,       // 14\r
234         cannonobj,       // 15\r
235         volteobj,        // 16\r
236         shelleyobj,      // 17, never used\r
237         spindredobj,     // 18\r
238         shikadimasterobj,// 19\r
239         shikadiobj,      // 20\r
240         petobj,          // 21\r
241         spherefulobj,    // 22\r
242         scottieobj,      // 23\r
243         teleporterobj,   // 24\r
244         qedobj,          // 25\r
245 #elif defined KEEN6\r
246         mshotobj,        //  4\r
247         bonusobj,        //  5\r
248         platformobj,     //  6\r
249         bloogobj,        //  7\r
250         bloogletobj,     //  8\r
251         classtype_9,     //  9, never used\r
252         fleexobj,        // 10\r
253         classtype_11,    // 11, never used\r
254         mollyobj,        // 12\r
255         babobbaobj,      // 13\r
256         bobbaobj,        // 14\r
257         classtype_15,    // 15\r
258         nospikeobj,      // 16\r
259         gikobj,          // 17\r
260         cannonobj,       // 18\r
261         orbatrixobj,     // 19\r
262         bipobj,          // 20\r
263         flectobj,        // 21\r
264         blorbobj,        // 22\r
265         ceilickobj,      // 23\r
266         blooguardobj,    // 24\r
267         stunnedobj,      // 25\r
268         bipshipobj,      // 26\r
269         sandwichobj,     // 27\r
270         hookobj,         // 28\r
271         passcardobj,     // 29\r
272         grabbiterobj,    // 30\r
273         rocketobj,       // 31\r
274         grapplespotobj,  // 32\r
275         satelliteobj,    // 33\r
276         satellitestopobj,// 34\r
277         flagobj,         // 35\r
278 #endif\r
279         NUMCLASSTYPES\r
280 } classtype;\r
281 \r
282 typedef struct statestruct\r
283 {\r
284         Sint16 leftshapenum, rightshapenum;\r
285         enum {step,slide,think,stepthink,slidethink} progress;\r
286         boolean skippable;\r
287         boolean pushtofloor;\r
288         Sint16 tictime;\r
289         Sint16 xmove;\r
290         Sint16 ymove;\r
291         void (*think) (struct objstruct*);\r
292         void (*contact) (struct objstruct*, struct objstruct*);\r
293         void (*react) (struct objstruct*);\r
294         struct statestruct *nextstate;\r
295 } statetype;\r
296 \r
297 typedef struct objstruct\r
298 {\r
299         classtype obclass;\r
300         enum {ac_no, ac_yes, ac_allways, ac_removable} active;\r
301         boolean needtoreact;\r
302         enum {cl_noclip, cl_midclip, cl_fullclip} needtoclip;\r
303         Uint16 nothink;\r
304         Uint16 x, y;\r
305         Sint16 xdir, ydir;\r
306         Sint16 xmove, ymove;\r
307         Sint16 xspeed, yspeed;\r
308         Sint16 ticcount;\r
309         statetype *state;\r
310         Uint16 shapenum;\r
311         Uint16 priority;\r
312         Uint16 left, top, right, bottom, midx;\r
313         Uint16 tileleft, tiletop, tileright, tilebottom, tilemidx;\r
314         Sint16 hitnorth, hiteast, hitsouth, hitwest;\r
315         Sint16 temp1, temp2, temp3, temp4;\r
316         void *sprite;\r
317         struct objstruct *next, *prev;\r
318 } objtype;\r
319 \r
320 typedef struct\r
321 {\r
322         Uint16 worldx, worldy;\r
323         boolean leveldone[GAMELEVELS];\r
324         Sint32 score, nextextra;\r
325         Sint16 ammo, drops;\r
326 #if defined KEEN4\r
327         Sint16 wetsuit;\r
328         Sint16 rescued;\r
329 #elif defined KEEN5\r
330         boolean keycard;\r
331         Sint16 destroyed;       // never used\r
332         Sint16 numfuses;\r
333 #elif defined KEEN6\r
334         Sint16 sandwichstate, hookstate, passcardstate, rocketstate;\r
335 #endif\r
336         Sint16 keys[4];\r
337         Sint16 mapon;\r
338         Sint16 lives;\r
339         Sint16 difficulty;\r
340         objtype *riding;\r
341 } gametype;\r
342 \r
343 /*\r
344 =============================================================================\r
345 \r
346                                                 CK_MAIN DEFINITIONS\r
347 \r
348 =============================================================================\r
349 */\r
350 \r
351 extern char str[80], str2[20];\r
352 extern boolean storedemo;\r
353 \r
354 void SizeText(char *text, Uint16 *width, Uint16 *height);\r
355 \r
356 /*\r
357 =============================================================================\r
358 \r
359                                                 CK_DEMO DEFINITIONS\r
360 \r
361 =============================================================================\r
362 */\r
363 \r
364 extern boolean scorescreenkludge;\r
365 \r
366 void CheckLastScan(void);\r
367 #if GRMODE == EGAGR\r
368 void Terminator(void);\r
369 void StarWars(void);\r
370 #endif\r
371 void ShowTitle(void);\r
372 #if GRMODE == CGAGR\r
373 void ShowCredits(void);\r
374 #endif\r
375 void RunDemo(Sint16 num);\r
376 void DrawHighScores(void);\r
377 void CheckHighScore(Sint32 score, Sint16 completed);\r
378 void ShowHighScores(void);\r
379 \r
380 /*\r
381 =============================================================================\r
382 \r
383                                                 CK_GAME DEFINITIONS\r
384 \r
385 =============================================================================\r
386 */\r
387 \r
388 void FreeGraphics(void);\r
389 void NewGame(void);\r
390 boolean SaveTheGame(Sint16 handle);\r
391 boolean LoadTheGame(Sint16 handle);\r
392 void ResetGame(void);\r
393 void SetupGameLevel(boolean loadnow);\r
394 void DialogDraw(char *title, Uint16 numcache);\r
395 void DialogUpdate(void);\r
396 void DialogFinish(void);\r
397 void StartDemoRecord(void);\r
398 void EndDemoRecord(void);\r
399 void GameLoop(void);\r
400 void HandleDeath(void);\r
401 \r
402 /*\r
403 =============================================================================\r
404 \r
405                                                 CK_PLAY DEFINITIONS\r
406 \r
407 =============================================================================\r
408 */\r
409 \r
410 extern boolean singlestep, jumpcheat, godmode, keenkilled;\r
411 extern exittype playstate;\r
412 extern gametype gamestate;\r
413 extern objtype *new, *check, *player, *scoreobj;\r
414 extern Uint16 originxtilemax, originytilemax;\r
415 extern ControlInfo c;\r
416 extern boolean button2, button3;        // never used\r
417 extern objtype dummyobj;\r
418 extern Sint16 invincible;\r
419 extern boolean oldshooting, showscorebox, joypad;\r
420 extern Sint16 groundslam;\r
421 extern boolean debugok;\r
422 extern boolean jumpbutton, jumpheld, pogobutton, pogoheld, firebutton, fireheld, upheld;\r
423 \r
424 \r
425 void CheckKeys(void);\r
426 void StatusWindow(void);\r
427 void CenterActor(objtype *ob);\r
428 void WorldScrollScreen(objtype *ob);\r
429 void ScrollScreen(objtype *ob);\r
430 void InitObjArray(void);\r
431 Sint16 GetNewObj(boolean usedummy);\r
432 void RemoveObj(objtype *ob);\r
433 void GivePoints(Uint16 points);\r
434 void StopMusic(void);\r
435 void StartMusic(Uint16 num);\r
436 void PlayLoop(void);\r
437 \r
438 /*\r
439 =============================================================================\r
440 \r
441                                                 CK_TEXT DEFINITIONS\r
442 \r
443 =============================================================================\r
444 */\r
445 \r
446 void HelpScreens(void);\r
447 void FinaleLayout(void);\r
448 \r
449 /*\r
450 =============================================================================\r
451 \r
452                                                 CK_STATE DEFINITIONS\r
453 \r
454 =============================================================================\r
455 */\r
456 \r
457 extern Sint16 wallclip[8][16];\r
458 \r
459 extern Sint16 xtry;\r
460 extern Sint16 ytry;\r
461 extern boolean playerkludgeclipcancel;\r
462 \r
463 void MoveObjVert(objtype *ob, Sint16 ymove);\r
464 void MoveObjHoriz(objtype *ob, Sint16 xmove);\r
465 void PlayerBottomKludge(objtype *ob);\r
466 void PlayerTopKludge(objtype *ob);\r
467 void ClipToEnds(objtype *ob);\r
468 void ClipToSides(objtype *ob);\r
469 boolean CheckPosition(objtype *ob);\r
470 boolean StatePositionOk(objtype *ob, statetype *state);\r
471 \r
472 #ifdef KEEN5\r
473 void CalcBounds(objtype *ob);\r
474 #endif\r
475 \r
476 void ClipToWalls(objtype *ob);\r
477 void FullClipToWalls(objtype *ob);\r
478 void PushObj(objtype *ob);\r
479 void ClipToSpriteSide(objtype *push, objtype *solid);\r
480 void ClipToSpriteTop(objtype *push, objtype *solid);\r
481 void ClipToSprite(objtype *push, objtype *solid, boolean squish);\r
482 Sint16 DoActor(objtype *ob, Sint16 numtics);\r
483 void StateMachine(objtype *ob);\r
484 void NewState(objtype *ob, statetype *state);\r
485 void ChangeState(objtype *ob, statetype *state);\r
486 boolean OnScreen(objtype *ob);\r
487 void DoGravity(objtype *ob);\r
488 void DoWeakGravity(objtype *ob);\r
489 void DoTinyGravity(objtype *ob);\r
490 void AccelerateX(objtype *ob, Sint16 dir, Sint16 maxspeed);\r
491 void AccelerateXv(objtype *ob, Sint16 dir, Sint16 maxspeed);\r
492 void AccelerateY(objtype *ob, Sint16 dir, Sint16 maxspeed);\r
493 void FrictionX(objtype *ob);\r
494 void FrictionY(objtype *ob);\r
495 void StunObj(objtype *ob, objtype *shot, statetype *stunstate);\r
496 void T_Projectile(objtype *ob);\r
497 void T_WeakProjectile(objtype *ob);\r
498 void ProjectileThink1(objtype *ob);\r
499 void T_Velocity(objtype *ob);\r
500 void SetReactThink(objtype *ob);\r
501 void T_Stunned(objtype *ob);\r
502 void C_Lethal(objtype *ob, objtype *hit);\r
503 void R_Draw(objtype *ob);\r
504 void R_Walk(objtype *ob);\r
505 void R_WalkNormal(objtype *ob);\r
506 void BadState(void);\r
507 void R_Stunned(objtype *ob);\r
508 \r
509 extern statetype sc_deadstate;\r
510 extern statetype sc_badstate;\r
511 \r
512 /*\r
513 =============================================================================\r
514 \r
515                                                 CK_KEEN DEFINITIONS\r
516 \r
517 =============================================================================\r
518 */\r
519 \r
520 extern Uint16 bounceangle[8][8];\r
521 #ifndef KEEN4\r
522 extern arrowdirtype arrowflip[];\r
523 #endif\r
524 \r
525 extern statetype s_keenstand;\r
526 extern statetype s_keenpauselook;\r
527 extern statetype s_keenwait1;\r
528 extern statetype s_keenwait2;\r
529 extern statetype s_keenwait3;\r
530 extern statetype s_keenwait4;\r
531 extern statetype s_keenwait5;\r
532 extern statetype s_keenwait6;\r
533 extern statetype s_keenmoon1;\r
534 extern statetype s_keenmoon2;\r
535 extern statetype s_keenmoon3;\r
536 extern statetype s_keenread;\r
537 extern statetype s_keenread2;\r
538 extern statetype s_keenread3;\r
539 extern statetype s_keenread4;\r
540 extern statetype s_keenread5;\r
541 extern statetype s_keenread6;\r
542 extern statetype s_keenread7;\r
543 extern statetype s_keenstopread;\r
544 extern statetype s_keenstopread2;\r
545 extern statetype s_keenstopread3;\r
546 extern statetype s_keenlookup;\r
547 extern statetype s_keenlookup2;\r
548 extern statetype s_keenlookdown;\r
549 extern statetype s_keenlookdown2;\r
550 extern statetype s_keenlookdown3;\r
551 extern statetype s_keenlookdown4;\r
552 extern statetype s_keendrop;\r
553 extern statetype s_keendead;\r
554 extern statetype s_keendie1;\r
555 extern statetype s_keendie2;\r
556 #ifdef KEEN4\r
557 extern statetype s_keensuitdie1;\r
558 extern statetype s_keensuitdie2;\r
559 #endif\r
560 extern statetype s_keenshoot1;\r
561 extern statetype s_keenshoot2;\r
562 extern statetype s_keenshootup1;\r
563 extern statetype s_keenshootup2;\r
564 extern statetype s_keenswitch;\r
565 extern statetype s_keenswitch2;\r
566 extern statetype s_keenkey;\r
567 extern statetype s_keenlineup;\r
568 extern statetype s_keenenter1;\r
569 extern statetype s_keenenter2;\r
570 extern statetype s_keenenter3;\r
571 extern statetype s_keenenter4;\r
572 extern statetype s_keenenter5;\r
573 extern statetype s_keenpole;\r
574 extern statetype s_keenclimb1;\r
575 extern statetype s_keenclimb2;\r
576 extern statetype s_keenclimb3;\r
577 extern statetype s_keenslide1;\r
578 extern statetype s_keenslide2;\r
579 extern statetype s_keenslide3;\r
580 extern statetype s_keenslide4;\r
581 extern statetype s_keenpoleshoot1;\r
582 extern statetype s_keenpoleshoot2;\r
583 extern statetype s_keenpoleshootup1;\r
584 extern statetype s_keenpoleshootup2;\r
585 extern statetype s_keenpoleshootdown1;\r
586 extern statetype s_keenpoleshootdown2;\r
587 extern statetype s_keenwalk1;\r
588 extern statetype s_keenwalk2;\r
589 extern statetype s_keenwalk3;\r
590 extern statetype s_keenwalk4;\r
591 extern statetype s_keenpogodown;\r
592 extern statetype s_keenpogo;\r
593 extern statetype s_keenpogo2;\r
594 extern statetype s_keenjump1;\r
595 extern statetype s_keenjump2;\r
596 extern statetype s_keenjump3;\r
597 extern statetype s_keenjump4;\r
598 extern statetype s_keenairshoot1;\r
599 extern statetype s_keenairshoot2;\r
600 extern statetype s_keenairshoot3;\r
601 extern statetype s_keenairshootup1;\r
602 extern statetype s_keenairshootup2;\r
603 extern statetype s_keenairshootup3;\r
604 extern statetype s_keenairshootdown1;\r
605 extern statetype s_keenairshootdown2;\r
606 extern statetype s_keenairshootdown3;\r
607 extern statetype s_keenholdon;\r
608 extern statetype s_keenholdon2;\r
609 extern statetype s_keenclimbup;\r
610 extern statetype s_keenclimbup2;\r
611 extern statetype s_keenclimbup3;\r
612 extern statetype s_keenclimbup4;\r
613 extern statetype s_keenclimbup5;\r
614 \r
615 extern Sint16 slopespeed[8];\r
616 extern Sint16 polexspeed[3];\r
617 \r
618 extern Sint16 shotsinclip[4];\r
619 extern Sint16 bonussound[];\r
620 extern Sint16 bonuspoints[];\r
621 extern Sint16 bonussprite[];\r
622 \r
623 extern Uint16 zeromap;\r
624 \r
625 extern Sint16 singlegravity;\r
626 extern Sint16 jumptime;\r
627 extern Sint32 leavepoletime;\r
628 extern Sint16 moonok;\r
629 \r
630 void SpawnKeen(Sint16 x, Sint16 y, Sint16 dir);\r
631 boolean CheckGrabPole(objtype *ob);\r
632 boolean CheckEnterHouse(objtype *ob);\r
633 void WalkSound1(objtype *ob);\r
634 void WalkSound2(objtype *ob);\r
635 void KeenStandThink(objtype *ob);\r
636 void KeenPauseThink(objtype *ob);\r
637 void KeenReadThink(objtype *ob);\r
638 void KeenLookUpThink(objtype *ob);\r
639 void KeenLookDownThink(objtype *ob);\r
640 void KeenWalkThink(objtype *ob);\r
641 void T_LineUp(objtype *ob);\r
642 void KeenEnterThink(objtype *ob);\r
643 void KeenSwitchThink(objtype *ob);\r
644 void KeenKeyThink(objtype *ob);\r
645 void KeenAirThink(objtype *ob);\r
646 void KeenBounceThink(objtype *ob);\r
647 void KeenPogoThink(objtype *ob);\r
648 void PoleActions(objtype *ob);\r
649 void KeenPoleThink(objtype *ob);\r
650 void KeenClimbThink(objtype *ob);\r
651 void KeenDropThink(objtype *ob);\r
652 void KeenDropDownThink(objtype *ob);\r
653 void KeenHoldThink(objtype *ob);\r
654 void KeenShootThink(objtype *ob);\r
655 void T_PullUp1(objtype *ob);\r
656 void T_PullUp2(objtype *ob);\r
657 void T_PullUp3(objtype *ob);\r
658 void T_PulledUp(objtype *ob);\r
659 void KeenDieThink(objtype *ob);\r
660 void KillKeen(void);\r
661 void KeenContact(objtype *ob, objtype *hit);\r
662 void KeenPosContact(objtype *ob, objtype *hit);\r
663 void HandleRiding(objtype *ob);\r
664 void TileBonus(Uint16 x, Uint16 y, Uint16 bonus);\r
665 void GiveDrop(Uint16 x, Uint16 y);\r
666 void CheckInTiles(objtype *ob);\r
667 void KeenSimpleReact(objtype *ob);\r
668 void KeenStandReact(objtype *ob);\r
669 void KeenWalkReact(objtype *ob);\r
670 void KeenAirReact(objtype *ob);\r
671 void KeenPogoReact(objtype *ob);\r
672 void KeenPoleReact(objtype *ob);\r
673 \r
674 \r
675 /*\r
676 =============================================================================\r
677 \r
678                                                 CK_KEEN2 DEFINITIONS\r
679 \r
680 =============================================================================\r
681 */\r
682 \r
683 extern statetype s_score;\r
684 extern statetype s_demo;\r
685 void SpawnScore(void);\r
686 void UpdateScore(objtype *ob);\r
687 void DrawDemoPlaque(objtype *ob);\r
688 \r
689 extern statetype s_worldkeen;\r
690 extern statetype s_worldkeenwave1;\r
691 extern statetype s_worldkeenwave2;\r
692 extern statetype s_worldkeenwave3;\r
693 extern statetype s_worldkeenwave4;\r
694 extern statetype s_worldkeenwave5;\r
695 extern statetype s_worldkeenwalk;\r
696 void SpawnWorldKeen(Sint16 x, Sint16 y);\r
697 #ifdef KEEN5\r
698 void SpawnWorldKeenPort(Uint16 tileX, Uint16 tileY);\r
699 #endif\r
700 void CheckEnterLevel(objtype *ob);\r
701 void T_KeenWorld(objtype *ob);\r
702 void T_KeenWorldWalk(objtype *ob);\r
703 void CheckWorldInTiles(objtype *ob);\r
704 \r
705 #ifdef KEEN4\r
706 extern statetype s_keenonfoot1;\r
707 extern statetype s_keenonfoot2;\r
708 extern statetype s_worldswim;\r
709 void T_FootFly(objtype *ob);\r
710 void T_KeenWorldSwim(objtype *ob);\r
711 #endif\r
712 \r
713 #ifdef KEEN5\r
714 extern statetype s_worldelevate;\r
715 void T_Elevate(objtype *ob);\r
716 #endif\r
717 \r
718 extern statetype s_flagwave1;\r
719 extern statetype s_flagwave2;\r
720 extern statetype s_flagwave3;\r
721 extern statetype s_flagwave4;\r
722 void SpawnFlag(Sint16 x, Sint16 y);\r
723 \r
724 #ifndef KEEN5\r
725 extern statetype s_throwflag0;\r
726 extern statetype s_throwflag1;\r
727 extern statetype s_throwflag2;\r
728 extern statetype s_throwflag3;\r
729 extern statetype s_throwflag4;\r
730 extern statetype s_throwflag5;\r
731 extern statetype s_throwflag6;\r
732 void SpawnThrowFlag(Sint16 x, Sint16 y);\r
733 void TossThink(objtype *ob);\r
734 void PathThink(objtype *ob);\r
735 void FlagAlign(objtype *ob);\r
736 #endif\r
737 \r
738 extern statetype s_stunray1;\r
739 extern statetype s_stunray2;\r
740 extern statetype s_stunray3;\r
741 extern statetype s_stunray4;\r
742 extern statetype s_stunhit;\r
743 extern statetype s_stunhit2;\r
744 void SpawnShot(Uint16 x, Uint16 y, Direction dir);\r
745 void ExplodeShot(objtype *ob);\r
746 void T_Shot(objtype *ob);\r
747 void R_Shot(objtype *ob);\r
748 \r
749 extern statetype s_door1;\r
750 extern statetype s_door2;\r
751 extern statetype s_door3;\r
752 void DoorOpen(objtype *ob);\r
753 \r
754 #ifdef KEEN5\r
755 extern statetype s_carddoor;\r
756 void CardDoorOpen(objtype *ob);\r
757 #endif\r
758 \r
759 /*\r
760 =============================================================================\r
761 \r
762                                                 OTHER DEFINITIONS\r
763 \r
764 =============================================================================\r
765 */\r
766 \r
767 #if defined KEEN4\r
768 #include "K4_DEF.H"\r
769 #elif defined KEEN5\r
770 #include "K5_DEF.H"\r
771 #elif defined KEEN6\r
772 #include "K6_DEF.H"\r
773 #endif\r
774 \r
775 #endif