1 /* Reconstructed Commander Keen 4-6 Source Code
\r
2 * Copyright (C) 2021 K1n9_Duk3
\r
4 * This file is loosely based on:
\r
5 * Keen Dreams Source Code
\r
6 * Copyright (C) 2014 Javier M. Chavez
\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
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
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
29 #include "ID_HEADS.H"
\r
32 =============================================================================
\r
34 GLOBAL CONSTANTS & MACROS
\r
36 =============================================================================
\r
39 #define MAXACTORS 100
\r
41 #define GAMELEVELS 25
\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
50 #define SPAWN_ADJUST_Y(y, h) (CONVERT_TILE_TO_GLOBAL(y) + (CONVERT_PIXEL_TO_GLOBAL(16-(h))))
\r
52 #define ARRAYLENGTH(x) (sizeof(x)/sizeof(*(x)))
\r
54 #define CA_UnmarkGrChunk(num) (grneeded[num] &= ~ca_levelbit)
\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
60 void RFL_InitAnimList(void);
\r
61 void CA_FreeGraphics(void);
\r
62 void CA_SetGrPurge(void);
\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
70 #define PURGE_FIRST 3
\r
71 #define PURGE_LAST 1
\r
73 #define PLATFORMBLOCK 31
\r
74 #define DIRARROWSTART 91
\r
75 #define DIRARROWEND (DIRARROWSTART+arrow_None)
\r
78 =============================================================================
\r
82 =============================================================================
\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
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
114 arrow_NorthEast, // 4
\r
115 arrow_SouthEast, // 5
\r
116 arrow_SouthWest, // 6
\r
117 arrow_NorthWest, // 7
\r
122 ex_stillplaying, // 0
\r
125 ex_rescued, // 3, only in Keen 4
\r
128 ex_loadedgame, // 6
\r
129 ex_foot, // 7, only in Keen 4
\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
143 INTILE_NOTHING, // 0
\r
146 INTILE_DEADLY, // 3
\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
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
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
179 INTILE_FOREGROUND = 0x80
\r
182 #define INTILE_TYPEMASK (INTILE_FOREGROUND-1)
\r
194 classtype_7, // 7, never used
\r
196 madmushroomobj, // 9
\r
200 thundercloudobj, // 13
\r
201 berkeloidobj, // 14
\r
209 schoolfishobj, // 22
\r
212 lightningobj, // 25
\r
213 treasureeaterobj,// 26
\r
215 classtype_28, // 28, never used
\r
216 classtype_29, // 29, never used
\r
222 #elif defined KEEN5
\r
230 slicestarobj, // 11
\r
232 spirogripobj, // 13
\r
236 shelleyobj, // 17, never used
\r
238 shikadimasterobj,// 19
\r
241 spherefulobj, // 22
\r
243 teleporterobj, // 24
\r
245 #elif defined KEEN6
\r
251 classtype_9, // 9, never used
\r
253 classtype_11, // 11, never used
\r
257 classtype_15, // 15
\r
266 blooguardobj, // 24
\r
272 grabbiterobj, // 30
\r
274 grapplespotobj, // 32
\r
275 satelliteobj, // 33
\r
276 satellitestopobj,// 34
\r
282 typedef struct statestruct
\r
284 Sint16 leftshapenum, rightshapenum;
\r
285 enum {step,slide,think,stepthink,slidethink} progress;
\r
287 boolean pushtofloor;
\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
297 typedef struct objstruct
\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
306 Sint16 xmove, ymove;
\r
307 Sint16 xspeed, yspeed;
\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
317 struct objstruct *next, *prev;
\r
322 Uint16 worldx, worldy;
\r
323 boolean leveldone[GAMELEVELS];
\r
324 Sint32 score, nextextra;
\r
325 Sint16 ammo, drops;
\r
329 #elif defined KEEN5
\r
331 Sint16 destroyed; // never used
\r
333 #elif defined KEEN6
\r
334 Sint16 sandwichstate, hookstate, passcardstate, rocketstate;
\r
344 =============================================================================
\r
346 CK_MAIN DEFINITIONS
\r
348 =============================================================================
\r
351 extern char str[80], str2[20];
\r
352 extern boolean storedemo;
\r
354 void SizeText(char *text, Uint16 *width, Uint16 *height);
\r
357 =============================================================================
\r
359 CK_DEMO DEFINITIONS
\r
361 =============================================================================
\r
364 extern boolean scorescreenkludge;
\r
366 void CheckLastScan(void);
\r
367 #if GRMODE == EGAGR
\r
368 void Terminator(void);
\r
369 void StarWars(void);
\r
371 void ShowTitle(void);
\r
372 #if GRMODE == CGAGR
\r
373 void ShowCredits(void);
\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
381 =============================================================================
\r
383 CK_GAME DEFINITIONS
\r
385 =============================================================================
\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
403 =============================================================================
\r
405 CK_PLAY DEFINITIONS
\r
407 =============================================================================
\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
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
439 =============================================================================
\r
441 CK_TEXT DEFINITIONS
\r
443 =============================================================================
\r
446 void HelpScreens(void);
\r
447 void FinaleLayout(void);
\r
450 =============================================================================
\r
452 CK_STATE DEFINITIONS
\r
454 =============================================================================
\r
457 extern Sint16 wallclip[8][16];
\r
459 extern Sint16 xtry;
\r
460 extern Sint16 ytry;
\r
461 extern boolean playerkludgeclipcancel;
\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
473 void CalcBounds(objtype *ob);
\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
509 extern statetype sc_deadstate;
\r
510 extern statetype sc_badstate;
\r
513 =============================================================================
\r
515 CK_KEEN DEFINITIONS
\r
517 =============================================================================
\r
520 extern Uint16 bounceangle[8][8];
\r
522 extern arrowdirtype arrowflip[];
\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
557 extern statetype s_keensuitdie1;
\r
558 extern statetype s_keensuitdie2;
\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
615 extern Sint16 slopespeed[8];
\r
616 extern Sint16 polexspeed[3];
\r
618 extern Sint16 shotsinclip[4];
\r
619 extern Sint16 bonussound[];
\r
620 extern Sint16 bonuspoints[];
\r
621 extern Sint16 bonussprite[];
\r
623 extern Uint16 zeromap;
\r
625 extern Sint16 singlegravity;
\r
626 extern Sint16 jumptime;
\r
627 extern Sint32 leavepoletime;
\r
628 extern Sint16 moonok;
\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
676 =============================================================================
\r
678 CK_KEEN2 DEFINITIONS
\r
680 =============================================================================
\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
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
698 void SpawnWorldKeenPort(Uint16 tileX, Uint16 tileY);
\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
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
714 extern statetype s_worldelevate;
\r
715 void T_Elevate(objtype *ob);
\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
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
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
749 extern statetype s_door1;
\r
750 extern statetype s_door2;
\r
751 extern statetype s_door3;
\r
752 void DoorOpen(objtype *ob);
\r
755 extern statetype s_carddoor;
\r
756 void CardDoorOpen(objtype *ob);
\r
760 =============================================================================
\r
764 =============================================================================
\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