]> 4ch.mooo.com Git - 16.git/blobdiff - 16/keen456/KEEN4-6/CK_DEF.H
extrcted keen code remake
[16.git] / 16 / keen456 / KEEN4-6 / CK_DEF.H
diff --git a/16/keen456/KEEN4-6/CK_DEF.H b/16/keen456/KEEN4-6/CK_DEF.H
new file mode 100755 (executable)
index 0000000..62e7944
--- /dev/null
@@ -0,0 +1,775 @@
+/* Reconstructed Commander Keen 4-6 Source Code\r
+ * Copyright (C) 2021 K1n9_Duk3\r
+ *\r
+ * This file is loosely based on:\r
+ * Keen Dreams Source Code\r
+ * Copyright (C) 2014 Javier M. Chavez\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along\r
+ * with this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+ */\r
+\r
+#ifndef __CK_DEF__\r
+#define __CK_DEF__\r
+\r
+#include <BIOS.H>\r
+#include <CONIO.H>\r
+\r
+#include "ID_HEADS.H"\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                GLOBAL CONSTANTS & MACROS\r
+\r
+=============================================================================\r
+*/\r
+\r
+#define MAXACTORS 100\r
+\r
+#define GAMELEVELS 25\r
+\r
+#define CONVERT_GLOBAL_TO_TILE(x)  ((x)>>(G_T_SHIFT))\r
+#define CONVERT_TILE_TO_GLOBAL(x)  ((x)<<(G_T_SHIFT))\r
+#define CONVERT_GLOBAL_TO_PIXEL(x) ((x)>>(G_P_SHIFT))\r
+#define CONVERT_PIXEL_TO_GLOBAL(x) ((x)<<(G_P_SHIFT))\r
+#define CONVERT_PIXEL_TO_TILE(x)   ((x)>>(P_T_SHIFT))\r
+#define CONVERT_TILE_TO_PIXEL(x)   ((x)<<(P_T_SHIFT))\r
+\r
+#define SPAWN_ADJUST_Y(y, h) (CONVERT_TILE_TO_GLOBAL(y) + (CONVERT_PIXEL_TO_GLOBAL(16-(h))))\r
+\r
+#define ARRAYLENGTH(x) (sizeof(x)/sizeof(*(x)))\r
+\r
+#define CA_UnmarkGrChunk(num) (grneeded[num] &= ~ca_levelbit)\r
+\r
+#define SetPalette(pal) {_ES=FP_SEG(pal); _DX=FP_OFF(pal); _AX=0x1002; geninterrupt(0x10);}\r
+#define SetPaletteEx(pal) {(pal)[16] = bordercolor; SetPalette(pal);}\r
+\r
+//HACK IMPORTS:\r
+void RFL_InitAnimList(void);\r
+void CA_FreeGraphics(void);\r
+void CA_SetGrPurge(void);\r
+\r
+/*\r
+Note:\r
+\r
+The ID software memory manager doesn't care about the different purge levels.\r
+Using PURGE_FIST is identical to using PURGE_LAST.\r
+*/\r
+#define PURGE_FIRST 3\r
+#define PURGE_LAST 1\r
+\r
+#define PLATFORMBLOCK 31\r
+#define DIRARROWSTART 91\r
+#define DIRARROWEND   (DIRARROWSTART+arrow_None)\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                  GLOBAL TYPES\r
+\r
+=============================================================================\r
+*/\r
+\r
+//SDL-style integer types - just to make future SDL ports easier\r
+typedef unsigned int Uint16;\r
+typedef signed int Sint16;\r
+typedef unsigned char Uint8;\r
+typedef signed char Sint8;\r
+typedef unsigned long Uint32;\r
+typedef signed long Sint32;\r
+//Note: only the game code (CK_*.C, K?_*.C) uses these!\r
+\r
+//some compile-time checks to make sure the ints have the correct size\r
+#if (sizeof(Uint16) != 2)\r
+#error 'Uint16' has wrong size\r
+#elif (sizeof(Sint16) != 2)\r
+#error 'Sint16' has wrong size\r
+#elif (sizeof(Uint8) != 1)\r
+#error 'Uint8' has wrong size\r
+#elif (sizeof(Sint8) != 1)\r
+#error 'Sint8' has wrong size\r
+#elif (sizeof(Uint32) != 4)\r
+#error 'Uint32' has wrong size\r
+#elif (sizeof(Sint32) != 4)\r
+#error 'Sint32' has wrong size\r
+#endif\r
+\r
+typedef enum {\r
+       arrow_North,     // 0\r
+       arrow_East,      // 1\r
+       arrow_South,     // 2\r
+       arrow_West,      // 3\r
+       arrow_NorthEast, // 4\r
+       arrow_SouthEast, // 5\r
+       arrow_SouthWest, // 6\r
+       arrow_NorthWest, // 7\r
+       arrow_None       // 8\r
+} arrowdirtype;\r
+\r
+typedef enum {\r
+       ex_stillplaying, //  0\r
+       ex_died,         //  1\r
+       ex_completed,    //  2\r
+       ex_rescued,      //  3, only in Keen 4\r
+       ex_warped,       //  4\r
+       ex_resetgame,    //  5\r
+       ex_loadedgame,   //  6\r
+       ex_foot,         //  7, only in Keen 4\r
+       ex_abortgame,    //  8\r
+       ex_sandwich,     //  9, only in Keen 6\r
+       ex_hook,         // 10, only in Keen 6\r
+       ex_card,         // 11, only in Keen 6\r
+       ex_molly,        // 12, only in Keen 6\r
+       ex_portout,      // 13, only in Keen 5\r
+       ex_fusebroke,    // 14, only in Keen 5\r
+       ex_qedbroke,     // 15, only in Keen 5\r
+       NUMEXITTYPES\r
+} exittype;\r
+\r
+typedef enum\r
+{\r
+       INTILE_NOTHING,        //  0\r
+       INTILE_POLE,           //  1\r
+       INTILE_DOOR,           //  2\r
+       INTILE_DEADLY,         //  3\r
+       INTILE_DROP,           //  4\r
+       INTILE_SWITCH0,        //  5\r
+       INTILE_SWITCH1,        //  6\r
+       INTILE_GEMSOCKET0,     //  7\r
+       INTILE_GEMSOCKET1,     //  8\r
+       INTILE_GEMSOCKET2,     //  9\r
+       INTILE_GEMSOCKET3,     // 10\r
+       INTILE_SHORESOUTH,     // 11\r
+       INTILE_SHOREWEST,      // 12\r
+       INTILE_SHORENORTH,     // 13\r
+       INTILE_SHOREEAST,      // 14\r
+       INTILE_BRIDGESWITCH,   // 15\r
+       INTILE_MOON,           // 16\r
+       INTILE_DIRARROW,       // 17 (not used in the code, but assigned to tiles in Keen 5 & 6)\r
+       INTILE_BRIDGE,         // 18\r
+       INTILE_FORCEFIELD,     // 19\r
+       INTILE_TELEPORT,       // 20\r
+       INTILE_BONUS100,       // 21\r
+       INTILE_BONUS200,       // 22\r
+       INTILE_BONUS500,       // 23\r
+       INTILE_BONUS1000,      // 24\r
+       INTILE_BONUS2000,      // 25\r
+       INTILE_BONUS5000,      // 26\r
+       INTILE_EXTRALIFE,      // 27\r
+       INTILE_AMMO,           // 28\r
+       INTILE_29,             // 29 (never used)\r
+       INTILE_FORCEFIELDEND,  // 30\r
+       INTILE_AMPTONCOMPUTER, // 31\r
+       INTILE_KEYCARDDOOR,    // 32\r
+       INTILE_ELEVATORLEFT,   // 33\r
+       INTILE_ELEVATORRIGHT,  // 34\r
+\r
+       INTILE_FOREGROUND = 0x80\r
+} intiletype;\r
+\r
+#define INTILE_TYPEMASK (INTILE_FOREGROUND-1)\r
+\r
+typedef enum\r
+{\r
+       nothing,         //  0\r
+       inertobj,        //  1\r
+       keenobj,         //  2\r
+       stunshotobj,     //  3\r
+#if defined KEEN4\r
+       bonusobj,        //  4\r
+       slugobj,         //  5\r
+       oracleobj,       //  6\r
+       classtype_7,     //  7, never used\r
+       eggobj,          //  8\r
+       madmushroomobj,  //  9\r
+       arachnutobj,     // 10\r
+       skypestobj,      // 11\r
+       wormouthobj,     // 12\r
+       thundercloudobj, // 13\r
+       berkeloidobj,    // 14\r
+       bounderobj,      // 15\r
+       inchwormobj,     // 16\r
+       footobj,         // 17\r
+       lickobj,         // 18\r
+       mimrockobj,      // 19\r
+       platformobj,     // 20\r
+       dopefishobj,     // 21\r
+       schoolfishobj,   // 22\r
+       pixieobj,        // 23\r
+       lindseyobj,      // 24\r
+       lightningobj,    // 25\r
+       treasureeaterobj,// 26\r
+       eggbirdobj,      // 27\r
+       classtype_28,    // 28, never used\r
+       classtype_29,    // 29, never used\r
+       scubaobj,        // 30\r
+       mshotobj,        // 31\r
+       mineobj,         // 32\r
+       stunnedobj,      // 33\r
+       flagobj,         // 34\r
+#elif defined KEEN5\r
+       mshotobj,        //  4\r
+       bonusobj,        //  5\r
+       platformobj,     //  6\r
+       stunnedobj,      //  7\r
+       flagobj,         //  8\r
+       sparkyobj,       //  9\r
+       mineobj,         // 10\r
+       slicestarobj,    // 11\r
+       roboredobj,      // 12\r
+       spirogripobj,    // 13\r
+       amptonobj,       // 14\r
+       cannonobj,       // 15\r
+       volteobj,        // 16\r
+       shelleyobj,      // 17, never used\r
+       spindredobj,     // 18\r
+       shikadimasterobj,// 19\r
+       shikadiobj,      // 20\r
+       petobj,          // 21\r
+       spherefulobj,    // 22\r
+       scottieobj,      // 23\r
+       teleporterobj,   // 24\r
+       qedobj,          // 25\r
+#elif defined KEEN6\r
+       mshotobj,        //  4\r
+       bonusobj,        //  5\r
+       platformobj,     //  6\r
+       bloogobj,        //  7\r
+       bloogletobj,     //  8\r
+       classtype_9,     //  9, never used\r
+       fleexobj,        // 10\r
+       classtype_11,    // 11, never used\r
+       mollyobj,        // 12\r
+       babobbaobj,      // 13\r
+       bobbaobj,        // 14\r
+       classtype_15,    // 15\r
+       nospikeobj,      // 16\r
+       gikobj,          // 17\r
+       cannonobj,       // 18\r
+       orbatrixobj,     // 19\r
+       bipobj,          // 20\r
+       flectobj,        // 21\r
+       blorbobj,        // 22\r
+       ceilickobj,      // 23\r
+       blooguardobj,    // 24\r
+       stunnedobj,      // 25\r
+       bipshipobj,      // 26\r
+       sandwichobj,     // 27\r
+       hookobj,         // 28\r
+       passcardobj,     // 29\r
+       grabbiterobj,    // 30\r
+       rocketobj,       // 31\r
+       grapplespotobj,  // 32\r
+       satelliteobj,    // 33\r
+       satellitestopobj,// 34\r
+       flagobj,         // 35\r
+#endif\r
+       NUMCLASSTYPES\r
+} classtype;\r
+\r
+typedef struct statestruct\r
+{\r
+       Sint16 leftshapenum, rightshapenum;\r
+       enum {step,slide,think,stepthink,slidethink} progress;\r
+       boolean skippable;\r
+       boolean pushtofloor;\r
+       Sint16 tictime;\r
+       Sint16 xmove;\r
+       Sint16 ymove;\r
+       void (*think) (struct objstruct*);\r
+       void (*contact) (struct objstruct*, struct objstruct*);\r
+       void (*react) (struct objstruct*);\r
+       struct statestruct *nextstate;\r
+} statetype;\r
+\r
+typedef struct objstruct\r
+{\r
+       classtype obclass;\r
+       enum {ac_no, ac_yes, ac_allways, ac_removable} active;\r
+       boolean needtoreact;\r
+       enum {cl_noclip, cl_midclip, cl_fullclip} needtoclip;\r
+       Uint16 nothink;\r
+       Uint16 x, y;\r
+       Sint16 xdir, ydir;\r
+       Sint16 xmove, ymove;\r
+       Sint16 xspeed, yspeed;\r
+       Sint16 ticcount;\r
+       statetype *state;\r
+       Uint16 shapenum;\r
+       Uint16 priority;\r
+       Uint16 left, top, right, bottom, midx;\r
+       Uint16 tileleft, tiletop, tileright, tilebottom, tilemidx;\r
+       Sint16 hitnorth, hiteast, hitsouth, hitwest;\r
+       Sint16 temp1, temp2, temp3, temp4;\r
+       void *sprite;\r
+       struct objstruct *next, *prev;\r
+} objtype;\r
+\r
+typedef struct\r
+{\r
+       Uint16 worldx, worldy;\r
+       boolean leveldone[GAMELEVELS];\r
+       Sint32 score, nextextra;\r
+       Sint16 ammo, drops;\r
+#if defined KEEN4\r
+       Sint16 wetsuit;\r
+       Sint16 rescued;\r
+#elif defined KEEN5\r
+       boolean keycard;\r
+       Sint16 destroyed;       // never used\r
+       Sint16 numfuses;\r
+#elif defined KEEN6\r
+       Sint16 sandwichstate, hookstate, passcardstate, rocketstate;\r
+#endif\r
+       Sint16 keys[4];\r
+       Sint16 mapon;\r
+       Sint16 lives;\r
+       Sint16 difficulty;\r
+       objtype *riding;\r
+} gametype;\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_MAIN DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern char str[80], str2[20];\r
+extern boolean storedemo;\r
+\r
+void SizeText(char *text, Uint16 *width, Uint16 *height);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_DEMO DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern boolean scorescreenkludge;\r
+\r
+void CheckLastScan(void);\r
+#if GRMODE == EGAGR\r
+void Terminator(void);\r
+void StarWars(void);\r
+#endif\r
+void ShowTitle(void);\r
+#if GRMODE == CGAGR\r
+void ShowCredits(void);\r
+#endif\r
+void RunDemo(Sint16 num);\r
+void DrawHighScores(void);\r
+void CheckHighScore(Sint32 score, Sint16 completed);\r
+void ShowHighScores(void);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_GAME DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+void FreeGraphics(void);\r
+void NewGame(void);\r
+boolean SaveTheGame(Sint16 handle);\r
+boolean LoadTheGame(Sint16 handle);\r
+void ResetGame(void);\r
+void SetupGameLevel(boolean loadnow);\r
+void DialogDraw(char *title, Uint16 numcache);\r
+void DialogUpdate(void);\r
+void DialogFinish(void);\r
+void StartDemoRecord(void);\r
+void EndDemoRecord(void);\r
+void GameLoop(void);\r
+void HandleDeath(void);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_PLAY DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern boolean singlestep, jumpcheat, godmode, keenkilled;\r
+extern exittype playstate;\r
+extern gametype gamestate;\r
+extern objtype *new, *check, *player, *scoreobj;\r
+extern Uint16 originxtilemax, originytilemax;\r
+extern ControlInfo c;\r
+extern boolean button2, button3;       // never used\r
+extern objtype dummyobj;\r
+extern Sint16 invincible;\r
+extern boolean oldshooting, showscorebox, joypad;\r
+extern Sint16 groundslam;\r
+extern boolean debugok;\r
+extern boolean jumpbutton, jumpheld, pogobutton, pogoheld, firebutton, fireheld, upheld;\r
+\r
+\r
+void CheckKeys(void);\r
+void StatusWindow(void);\r
+void CenterActor(objtype *ob);\r
+void WorldScrollScreen(objtype *ob);\r
+void ScrollScreen(objtype *ob);\r
+void InitObjArray(void);\r
+Sint16 GetNewObj(boolean usedummy);\r
+void RemoveObj(objtype *ob);\r
+void GivePoints(Uint16 points);\r
+void StopMusic(void);\r
+void StartMusic(Uint16 num);\r
+void PlayLoop(void);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_TEXT DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+void HelpScreens(void);\r
+void FinaleLayout(void);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_STATE DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern Sint16 wallclip[8][16];\r
+\r
+extern Sint16 xtry;\r
+extern Sint16 ytry;\r
+extern boolean playerkludgeclipcancel;\r
+\r
+void MoveObjVert(objtype *ob, Sint16 ymove);\r
+void MoveObjHoriz(objtype *ob, Sint16 xmove);\r
+void PlayerBottomKludge(objtype *ob);\r
+void PlayerTopKludge(objtype *ob);\r
+void ClipToEnds(objtype *ob);\r
+void ClipToSides(objtype *ob);\r
+boolean CheckPosition(objtype *ob);\r
+boolean StatePositionOk(objtype *ob, statetype *state);\r
+\r
+#ifdef KEEN5\r
+void CalcBounds(objtype *ob);\r
+#endif\r
+\r
+void ClipToWalls(objtype *ob);\r
+void FullClipToWalls(objtype *ob);\r
+void PushObj(objtype *ob);\r
+void ClipToSpriteSide(objtype *push, objtype *solid);\r
+void ClipToSpriteTop(objtype *push, objtype *solid);\r
+void ClipToSprite(objtype *push, objtype *solid, boolean squish);\r
+Sint16 DoActor(objtype *ob, Sint16 numtics);\r
+void StateMachine(objtype *ob);\r
+void NewState(objtype *ob, statetype *state);\r
+void ChangeState(objtype *ob, statetype *state);\r
+boolean OnScreen(objtype *ob);\r
+void DoGravity(objtype *ob);\r
+void DoWeakGravity(objtype *ob);\r
+void DoTinyGravity(objtype *ob);\r
+void AccelerateX(objtype *ob, Sint16 dir, Sint16 maxspeed);\r
+void AccelerateXv(objtype *ob, Sint16 dir, Sint16 maxspeed);\r
+void AccelerateY(objtype *ob, Sint16 dir, Sint16 maxspeed);\r
+void FrictionX(objtype *ob);\r
+void FrictionY(objtype *ob);\r
+void StunObj(objtype *ob, objtype *shot, statetype *stunstate);\r
+void T_Projectile(objtype *ob);\r
+void T_WeakProjectile(objtype *ob);\r
+void ProjectileThink1(objtype *ob);\r
+void T_Velocity(objtype *ob);\r
+void SetReactThink(objtype *ob);\r
+void T_Stunned(objtype *ob);\r
+void C_Lethal(objtype *ob, objtype *hit);\r
+void R_Draw(objtype *ob);\r
+void R_Walk(objtype *ob);\r
+void R_WalkNormal(objtype *ob);\r
+void BadState(void);\r
+void R_Stunned(objtype *ob);\r
+\r
+extern statetype sc_deadstate;\r
+extern statetype sc_badstate;\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_KEEN DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern Uint16 bounceangle[8][8];\r
+#ifndef KEEN4\r
+extern arrowdirtype arrowflip[];\r
+#endif\r
+\r
+extern statetype s_keenstand;\r
+extern statetype s_keenpauselook;\r
+extern statetype s_keenwait1;\r
+extern statetype s_keenwait2;\r
+extern statetype s_keenwait3;\r
+extern statetype s_keenwait4;\r
+extern statetype s_keenwait5;\r
+extern statetype s_keenwait6;\r
+extern statetype s_keenmoon1;\r
+extern statetype s_keenmoon2;\r
+extern statetype s_keenmoon3;\r
+extern statetype s_keenread;\r
+extern statetype s_keenread2;\r
+extern statetype s_keenread3;\r
+extern statetype s_keenread4;\r
+extern statetype s_keenread5;\r
+extern statetype s_keenread6;\r
+extern statetype s_keenread7;\r
+extern statetype s_keenstopread;\r
+extern statetype s_keenstopread2;\r
+extern statetype s_keenstopread3;\r
+extern statetype s_keenlookup;\r
+extern statetype s_keenlookup2;\r
+extern statetype s_keenlookdown;\r
+extern statetype s_keenlookdown2;\r
+extern statetype s_keenlookdown3;\r
+extern statetype s_keenlookdown4;\r
+extern statetype s_keendrop;\r
+extern statetype s_keendead;\r
+extern statetype s_keendie1;\r
+extern statetype s_keendie2;\r
+#ifdef KEEN4\r
+extern statetype s_keensuitdie1;\r
+extern statetype s_keensuitdie2;\r
+#endif\r
+extern statetype s_keenshoot1;\r
+extern statetype s_keenshoot2;\r
+extern statetype s_keenshootup1;\r
+extern statetype s_keenshootup2;\r
+extern statetype s_keenswitch;\r
+extern statetype s_keenswitch2;\r
+extern statetype s_keenkey;\r
+extern statetype s_keenlineup;\r
+extern statetype s_keenenter1;\r
+extern statetype s_keenenter2;\r
+extern statetype s_keenenter3;\r
+extern statetype s_keenenter4;\r
+extern statetype s_keenenter5;\r
+extern statetype s_keenpole;\r
+extern statetype s_keenclimb1;\r
+extern statetype s_keenclimb2;\r
+extern statetype s_keenclimb3;\r
+extern statetype s_keenslide1;\r
+extern statetype s_keenslide2;\r
+extern statetype s_keenslide3;\r
+extern statetype s_keenslide4;\r
+extern statetype s_keenpoleshoot1;\r
+extern statetype s_keenpoleshoot2;\r
+extern statetype s_keenpoleshootup1;\r
+extern statetype s_keenpoleshootup2;\r
+extern statetype s_keenpoleshootdown1;\r
+extern statetype s_keenpoleshootdown2;\r
+extern statetype s_keenwalk1;\r
+extern statetype s_keenwalk2;\r
+extern statetype s_keenwalk3;\r
+extern statetype s_keenwalk4;\r
+extern statetype s_keenpogodown;\r
+extern statetype s_keenpogo;\r
+extern statetype s_keenpogo2;\r
+extern statetype s_keenjump1;\r
+extern statetype s_keenjump2;\r
+extern statetype s_keenjump3;\r
+extern statetype s_keenjump4;\r
+extern statetype s_keenairshoot1;\r
+extern statetype s_keenairshoot2;\r
+extern statetype s_keenairshoot3;\r
+extern statetype s_keenairshootup1;\r
+extern statetype s_keenairshootup2;\r
+extern statetype s_keenairshootup3;\r
+extern statetype s_keenairshootdown1;\r
+extern statetype s_keenairshootdown2;\r
+extern statetype s_keenairshootdown3;\r
+extern statetype s_keenholdon;\r
+extern statetype s_keenholdon2;\r
+extern statetype s_keenclimbup;\r
+extern statetype s_keenclimbup2;\r
+extern statetype s_keenclimbup3;\r
+extern statetype s_keenclimbup4;\r
+extern statetype s_keenclimbup5;\r
+\r
+extern Sint16 slopespeed[8];\r
+extern Sint16 polexspeed[3];\r
+\r
+extern Sint16 shotsinclip[4];\r
+extern Sint16 bonussound[];\r
+extern Sint16 bonuspoints[];\r
+extern Sint16 bonussprite[];\r
+\r
+extern Uint16 zeromap;\r
+\r
+extern Sint16 singlegravity;\r
+extern Sint16 jumptime;\r
+extern Sint32 leavepoletime;\r
+extern Sint16 moonok;\r
+\r
+void SpawnKeen(Sint16 x, Sint16 y, Sint16 dir);\r
+boolean CheckGrabPole(objtype *ob);\r
+boolean CheckEnterHouse(objtype *ob);\r
+void WalkSound1(objtype *ob);\r
+void WalkSound2(objtype *ob);\r
+void KeenStandThink(objtype *ob);\r
+void KeenPauseThink(objtype *ob);\r
+void KeenReadThink(objtype *ob);\r
+void KeenLookUpThink(objtype *ob);\r
+void KeenLookDownThink(objtype *ob);\r
+void KeenWalkThink(objtype *ob);\r
+void T_LineUp(objtype *ob);\r
+void KeenEnterThink(objtype *ob);\r
+void KeenSwitchThink(objtype *ob);\r
+void KeenKeyThink(objtype *ob);\r
+void KeenAirThink(objtype *ob);\r
+void KeenBounceThink(objtype *ob);\r
+void KeenPogoThink(objtype *ob);\r
+void PoleActions(objtype *ob);\r
+void KeenPoleThink(objtype *ob);\r
+void KeenClimbThink(objtype *ob);\r
+void KeenDropThink(objtype *ob);\r
+void KeenDropDownThink(objtype *ob);\r
+void KeenHoldThink(objtype *ob);\r
+void KeenShootThink(objtype *ob);\r
+void T_PullUp1(objtype *ob);\r
+void T_PullUp2(objtype *ob);\r
+void T_PullUp3(objtype *ob);\r
+void T_PulledUp(objtype *ob);\r
+void KeenDieThink(objtype *ob);\r
+void KillKeen(void);\r
+void KeenContact(objtype *ob, objtype *hit);\r
+void KeenPosContact(objtype *ob, objtype *hit);\r
+void HandleRiding(objtype *ob);\r
+void TileBonus(Uint16 x, Uint16 y, Uint16 bonus);\r
+void GiveDrop(Uint16 x, Uint16 y);\r
+void CheckInTiles(objtype *ob);\r
+void KeenSimpleReact(objtype *ob);\r
+void KeenStandReact(objtype *ob);\r
+void KeenWalkReact(objtype *ob);\r
+void KeenAirReact(objtype *ob);\r
+void KeenPogoReact(objtype *ob);\r
+void KeenPoleReact(objtype *ob);\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               CK_KEEN2 DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern statetype s_score;\r
+extern statetype s_demo;\r
+void SpawnScore(void);\r
+void UpdateScore(objtype *ob);\r
+void DrawDemoPlaque(objtype *ob);\r
+\r
+extern statetype s_worldkeen;\r
+extern statetype s_worldkeenwave1;\r
+extern statetype s_worldkeenwave2;\r
+extern statetype s_worldkeenwave3;\r
+extern statetype s_worldkeenwave4;\r
+extern statetype s_worldkeenwave5;\r
+extern statetype s_worldkeenwalk;\r
+void SpawnWorldKeen(Sint16 x, Sint16 y);\r
+#ifdef KEEN5\r
+void SpawnWorldKeenPort(Uint16 tileX, Uint16 tileY);\r
+#endif\r
+void CheckEnterLevel(objtype *ob);\r
+void T_KeenWorld(objtype *ob);\r
+void T_KeenWorldWalk(objtype *ob);\r
+void CheckWorldInTiles(objtype *ob);\r
+\r
+#ifdef KEEN4\r
+extern statetype s_keenonfoot1;\r
+extern statetype s_keenonfoot2;\r
+extern statetype s_worldswim;\r
+void T_FootFly(objtype *ob);\r
+void T_KeenWorldSwim(objtype *ob);\r
+#endif\r
+\r
+#ifdef KEEN5\r
+extern statetype s_worldelevate;\r
+void T_Elevate(objtype *ob);\r
+#endif\r
+\r
+extern statetype s_flagwave1;\r
+extern statetype s_flagwave2;\r
+extern statetype s_flagwave3;\r
+extern statetype s_flagwave4;\r
+void SpawnFlag(Sint16 x, Sint16 y);\r
+\r
+#ifndef KEEN5\r
+extern statetype s_throwflag0;\r
+extern statetype s_throwflag1;\r
+extern statetype s_throwflag2;\r
+extern statetype s_throwflag3;\r
+extern statetype s_throwflag4;\r
+extern statetype s_throwflag5;\r
+extern statetype s_throwflag6;\r
+void SpawnThrowFlag(Sint16 x, Sint16 y);\r
+void TossThink(objtype *ob);\r
+void PathThink(objtype *ob);\r
+void FlagAlign(objtype *ob);\r
+#endif\r
+\r
+extern statetype s_stunray1;\r
+extern statetype s_stunray2;\r
+extern statetype s_stunray3;\r
+extern statetype s_stunray4;\r
+extern statetype s_stunhit;\r
+extern statetype s_stunhit2;\r
+void SpawnShot(Uint16 x, Uint16 y, Direction dir);\r
+void ExplodeShot(objtype *ob);\r
+void T_Shot(objtype *ob);\r
+void R_Shot(objtype *ob);\r
+\r
+extern statetype s_door1;\r
+extern statetype s_door2;\r
+extern statetype s_door3;\r
+void DoorOpen(objtype *ob);\r
+\r
+#ifdef KEEN5\r
+extern statetype s_carddoor;\r
+void CardDoorOpen(objtype *ob);\r
+#endif\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                               OTHER DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+#if defined KEEN4\r
+#include "K4_DEF.H"\r
+#elif defined KEEN5\r
+#include "K5_DEF.H"\r
+#elif defined KEEN6\r
+#include "K6_DEF.H"\r
+#endif\r
+\r
+#endif
\ No newline at end of file