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
27 =============================================================================
\r
31 =============================================================================
\r
35 #define MINMEMORY 255000l
\r
37 #define MINMEMORY 300000l
\r
40 #define STARPALETTE {0, 1, 24, 25, 4, 28, 6, 7, 31, 31, 31, 31, 31, 31, 31, 31, 0}
\r
41 #define INTROPALETTE {0, 5, 5, 21, 1, 1, 1, 1, 17, 17, 17, 17, 19, 19, 19, 19, 0}
\r
42 #define SHRINKPALETTE {0, 5, 5, 21, 1, 1, 1, 1, 17, 17, 17, 17, 19, 19, 19, 5, 0}
\r
44 #define HIGHSCORE_LEFT 40
\r
45 #define HIGHSCORE_TOP 51
\r
46 #define HIGHSCORE_RIGHT 280
\r
47 #define HIGHSCORE_MAP 18
\r
49 #define STATUS_PRESSKEY_X 120
\r
51 #define WORLDMAPNAME "Fribbulus Xax"
\r
52 #define DROPSNAME "VIVAS"
\r
54 #define STARWARSMUSIC 13
\r
55 #define ENDINGMUSIC 1
\r
57 // levels in this range can NOT be re-entered (BWB level should be > MAXDONELEVEL)
\r
58 #define MINDONELEVEL 1
\r
59 #define MAXDONELEVEL 16
\r
61 #define INACTIVATEDIST 4
\r
64 // tiles for worldmap teleporters
\r
66 #define TELEPORTERTILE1 2613 // tile animation for teleporting out
\r
67 #define TELEPORTERTILE2 2629 // tile after teleporting out
\r
68 #define TELEPORTERTILE3 TELEPORTERTILE1 // tile animation for teleporting in
\r
69 #define TELEPORTERTILE4 TELEPORTERTILE2 // tile after teleporting in
\r
71 #define TELEPORERTILEMASK 3 // animation has 4 frames
\r
73 extern Sint16 groundslam;
\r
76 //#define US_ManualCheck() true
\r
77 boolean US_ManualCheck(void);
\r
80 =============================================================================
\r
84 =============================================================================
\r
87 extern char far swtext[];
\r
88 extern char far *levelnames[GAMELEVELS];
\r
89 extern char far *levelenter[GAMELEVELS];
\r
91 void ScanInfoPlane(void);
\r
93 extern statetype s_keenstun;
\r
95 void FlipBigSwitch(objtype *ob, boolean isup);
\r
96 void GotSandwich(void);
\r
98 void GotPasscard(void);
\r
102 =============================================================================
\r
104 K6_ACT1 DEFINITIONS
\r
106 =============================================================================
\r
109 extern Sint16 pdirx[];
\r
110 extern Sint16 pdiry[];
\r
112 void C_ClipSide(objtype *ob, objtype *hit);
\r
113 void C_ClipTop(objtype *ob, objtype *hit);
\r
114 void R_Land(objtype *ob);
\r
115 void R_Bounce(objtype *ob);
\r
117 extern statetype s_bonus1;
\r
118 extern statetype s_bonus2;
\r
119 extern statetype s_bonusfly1;
\r
120 extern statetype s_bonusfly2;
\r
121 extern statetype s_bonusrise;
\r
123 extern statetype s_splash1;
\r
124 extern statetype s_splash2;
\r
125 extern statetype s_splash3;
\r
126 extern statetype s_splash4;
\r
128 extern Uint16 bonusshape[];
\r
130 void SpawnBonus(Uint16 tileX, Uint16 tileY, Uint16 type);
\r
131 void SpawnSplash(Uint16 tileX, Uint16 tileY);
\r
132 void T_Bonus(objtype *ob);
\r
133 void T_FlyBonus(objtype *ob);
\r
135 extern statetype s_grabbiter1;
\r
136 extern statetype s_grabbiter2;
\r
137 extern statetype s_grabbitersleep1;
\r
138 extern statetype s_grabbitersleep2;
\r
140 void SpawnGrabbiter(Uint16 tileX, Uint16 tileY);
\r
141 void C_Grabbiter(objtype *ob, objtype *hit);
\r
143 extern statetype s_rocket;
\r
144 extern statetype s_rocketfly1;
\r
145 extern statetype s_rocketfly2;
\r
146 extern statetype s_keenrocket;
\r
148 void SpawnRocket(Uint16 tileX, Uint16 tileY, Uint16 state);
\r
149 void T_Rocket(objtype *ob);
\r
150 void C_Rocket(objtype *ob, objtype *hit);
\r
151 void C_RocketFly(objtype *ob, objtype *hit);
\r
152 void T_RocketFly(objtype *ob);
\r
154 extern statetype s_grapplespot;
\r
155 extern statetype s_throwrope1;
\r
156 extern statetype s_throwrope2;
\r
157 extern statetype s_climbrope1;
\r
158 extern statetype s_climbrope2;
\r
159 extern statetype s_maprope;
\r
160 extern statetype s_mapropeshort;
\r
162 void SpawnGrappleSpot(Uint16 tileX, Uint16 tileY, Uint16 type);
\r
163 void T_ThrowRope(objtype *ob);
\r
164 void T_ClimbRope(objtype *ob);
\r
165 void C_GrappleSpot(objtype *ob, objtype *hit);
\r
167 extern statetype s_satellitestopspot;
\r
168 extern statetype s_worldkeensatellite;
\r
169 extern statetype s_satellite1;
\r
170 extern statetype s_satellite2;
\r
171 extern statetype s_satellite3;
\r
172 extern statetype s_satellite4;
\r
174 void SpawnSatelliteStop(Uint16 tileX, Uint16 tileY, Uint16 type);
\r
175 void SpawnSatellite(Uint16 tileX, Uint16 tileY);
\r
176 void T_Satellite(objtype *ob);
\r
177 void C_Satellite(objtype *ob, objtype *hit);
\r
178 void R_WorldKeenSatellite(objtype *ob);
\r
180 extern statetype s_sandwich;
\r
182 void SpawnSandwich(Uint16 tileX, Uint16 tileY);
\r
184 extern statetype s_hook;
\r
186 void SpawnHook(Uint16 tileX, Uint16 tileY);
\r
188 extern statetype s_passcard;
\r
190 void SpawnPasscard(Uint16 tileX, Uint16 tileY);
\r
191 void C_Molly(objtype *ob, objtype *hit);
\r
193 extern statetype s_molly1;
\r
194 extern statetype s_molly2;
\r
195 extern statetype s_molly3;
\r
196 extern statetype s_molly4;
\r
198 void SpawnMolly(Uint16 tileX, Uint16 tileY);
\r
200 extern statetype s_platform;
\r
202 void SpawnPlatform(Uint16 tileX, Uint16 tileY, Sint16 dir);
\r
203 void T_Platform(objtype *ob);
\r
205 extern statetype s_dropplatsit;
\r
206 extern statetype s_fallplatfall;
\r
207 extern statetype s_fallplatrise;
\r
209 void SpawnDropPlat(Uint16 tileX, Uint16 tileY);
\r
210 void T_DropPlatSit(objtype *ob);
\r
211 void T_DropPlatFall(objtype *ob);
\r
212 void T_DropPlatRise(objtype *ob);
\r
214 extern statetype s_staticplatform;
\r
216 void SpawnStaticPlat(Uint16 tileX, Uint16 tileY);
\r
218 extern statetype s_goplat;
\r
220 void SpawnGoPlat(Uint16 tileX, Uint16 tileY, Sint16 dir);
\r
221 void T_GoPlat(objtype *ob);
\r
222 void R_GoPlat(objtype *ob);
\r
224 extern statetype s_sneakplatsit;
\r
225 extern statetype s_sneakplatdodge;
\r
226 extern statetype s_sneakplatreturn;
\r
228 void SpawnSneakPlat(Uint16 tileX, Uint16 tileY);
\r
229 void T_SneakPlat(objtype *ob);
\r
231 extern statetype s_bloogwalk1;
\r
232 extern statetype s_bloogwalk2;
\r
233 extern statetype s_bloogwalk3;
\r
234 extern statetype s_bloogwalk4;
\r
235 extern statetype s_bloogstun;
\r
237 void SpawnBloog(Uint16 tileX, Uint16 tileY);
\r
238 void T_BloogWalk(objtype *ob);
\r
239 void C_Bloog(objtype *ob, objtype *hit);
\r
241 extern statetype s_blooguardwalk1;
\r
242 extern statetype s_blooguardwalk2;
\r
243 extern statetype s_blooguardwalk3;
\r
244 extern statetype s_blooguardwalk4;
\r
245 extern statetype s_blooguardattack1;
\r
246 extern statetype s_blooguardattack2;
\r
247 extern statetype s_blooguardattack3;
\r
248 extern statetype s_blooguardattack4;
\r
249 extern statetype s_blooguardstun;
\r
251 void SpawnBlooguard(Uint16 tileX, Uint16 tileY);
\r
252 void T_BlooguardWalk(objtype *ob);
\r
253 void T_BlooguardAttack(objtype *ob);
\r
254 void C_Blooguard(objtype *ob, objtype *hit);
\r
255 void R_Blooguard(objtype *ob);
\r
257 extern statetype s_rbloogletwalk1;
\r
258 extern statetype s_rbloogletwalk2;
\r
259 extern statetype s_rbloogletwalk3;
\r
260 extern statetype s_rbloogletwalk4;
\r
261 extern statetype s_rbloogletstun;
\r
262 extern statetype s_ybloogletwalk1;
\r
263 extern statetype s_ybloogletwalk2;
\r
264 extern statetype s_ybloogletwalk3;
\r
265 extern statetype s_ybloogletwalk4;
\r
266 extern statetype s_ybloogletstun;
\r
267 extern statetype s_bbloogletwalk1;
\r
268 extern statetype s_bbloogletwalk2;
\r
269 extern statetype s_bbloogletwalk3;
\r
270 extern statetype s_bbloogletwalk4;
\r
271 extern statetype s_bbloogletstun;
\r
272 extern statetype s_gbloogletwalk1;
\r
273 extern statetype s_gbloogletwalk2;
\r
274 extern statetype s_gbloogletwalk3;
\r
275 extern statetype s_gbloogletwalk4;
\r
276 extern statetype s_gbloogletstun;
\r
278 void SpawnBlooglet(Uint16 tileX, Uint16 tileY, Sint16 type);
\r
279 void C_Blooglet(objtype *ob, objtype *hit);
\r
282 =============================================================================
\r
284 K6_ACT2 DEFINITIONS
\r
286 =============================================================================
\r
289 extern statetype s_nospikestand;
\r
290 extern statetype s_nospikewalk1;
\r
291 extern statetype s_nospikewalk2;
\r
292 extern statetype s_nospikewalk3;
\r
293 extern statetype s_nospikewalk4;
\r
294 extern statetype s_nospikerun1;
\r
295 extern statetype s_nospikerun2;
\r
296 extern statetype s_nospikerun3;
\r
297 extern statetype s_nospikerun4;
\r
298 extern statetype s_nospikeconfused1;
\r
299 extern statetype s_nospikeconfused2;
\r
300 extern statetype s_nospikeconfused3;
\r
301 extern statetype s_nospikefall;
\r
302 extern statetype s_nospikestun;
\r
304 void SpawnNospike(Uint16 tileX, Uint16 tileY);
\r
305 void T_NospikeWalk(objtype *ob);
\r
306 void T_NospikeRun(objtype *ob);
\r
307 void C_Nospike(objtype *ob, objtype *hit);
\r
308 void T_NospikeConfused(objtype* ob);
\r
309 void R_NospikeConfused(objtype *ob);
\r
310 void R_NospikeFall(objtype *ob);
\r
311 void R_NospikeRun(objtype *ob);
\r
313 extern statetype s_gikwalk1;
\r
314 extern statetype s_gikwalk2;
\r
315 extern statetype s_gikwalk3;
\r
316 extern statetype s_gikjump;
\r
317 extern statetype s_gikslide1;
\r
318 extern statetype s_gikslide2;
\r
319 extern statetype s_gikstand;
\r
321 void SpawnGik(Uint16 tileX, Uint16 tileY);
\r
322 void T_GikWalk(objtype *ob);
\r
323 void T_GikSlide(objtype *ob);
\r
324 void R_GikJump(objtype *ob);
\r
325 void R_GikSlide(objtype *ob);
\r
327 extern statetype s_cannon;
\r
328 extern statetype s_cannonfire;
\r
329 extern statetype s_cshot1;
\r
330 extern statetype s_cshot2;
\r
331 extern statetype s_cshot3;
\r
332 extern statetype s_cshot4;
\r
333 extern statetype s_cshothit1;
\r
334 extern statetype s_cshothit2;
\r
336 void SpawnCannon(Uint16 tileX, Uint16 tileY, Sint16 dir);
\r
337 void T_Cannon(objtype *ob);
\r
338 void C_CShot(objtype *ob, objtype *hit);
\r
339 void R_CShot(objtype *ob);
\r
341 extern statetype s_orbatrix1;
\r
342 extern statetype s_orbatrix2;
\r
343 extern statetype s_orbatrixcurl1;
\r
344 extern statetype s_orbatrixcurl2;
\r
345 extern statetype s_orbatrixcurl3;
\r
346 extern statetype s_orbatrixuncurl1;
\r
347 extern statetype s_orbatrixuncurl2;
\r
348 extern statetype s_orbatrixidle1;
\r
349 extern statetype s_orbatrixidle2;
\r
350 extern statetype s_orbatrixidle3;
\r
351 extern statetype s_orbatrixidle4;
\r
352 extern statetype s_orbatrixbounce1;
\r
353 extern statetype s_orbatrixbounce2;
\r
354 extern statetype s_orbatrixbounce3;
\r
355 extern statetype s_orbatrixbounce4;
\r
357 void SpawnOrbatrix(Uint16 tileX, Uint16 tileY);
\r
358 void T_OrbatrixFly(objtype *ob);
\r
359 void C_Orbatrix(objtype *ob, objtype *hit);
\r
360 void R_Orbatrix(objtype *ob);
\r
361 void R_OrbatrixBounce(objtype *ob);
\r
362 void T_OrbatrixCurl(objtype *ob);
\r
363 void T_OrbatrixUncurl(objtype *ob);
\r
364 void C_OrbatrixBounce(objtype *ob, objtype *hit);
\r
366 extern statetype s_bipstand;
\r
367 extern statetype s_bipwalk1;
\r
368 extern statetype s_bipwalk2;
\r
369 extern statetype s_bipwalk3;
\r
370 extern statetype s_bipwalk4;
\r
371 extern statetype s_bipsquished;
\r
373 void T_BipWalk(objtype *ob);
\r
374 void C_Bip(objtype *ob, objtype *hit);
\r
376 extern statetype s_bipship;
\r
377 extern statetype s_bipshipshot;
\r
378 extern statetype s_bipshipturn1;
\r
379 extern statetype s_bipshipturn2;
\r
380 extern statetype s_bipshipturn3;
\r
381 extern statetype s_bipshipturn4;
\r
382 extern statetype s_bipshipexplode1;
\r
383 extern statetype s_bipshipexplode2;
\r
384 extern statetype s_bipshipexplode3;
\r
385 extern statetype s_bipshipsmoke1;
\r
386 extern statetype s_bipshipsmoke2;
\r
388 void SpawnBipship(Uint16 tileX, Uint16 tileY);
\r
389 void R_BipShot(objtype *ob);
\r
390 void T_BipshipTurn(objtype *ob);
\r
391 void T_BipshipFly(objtype *ob);
\r
392 void T_BipshipExplode(objtype *ob);
\r
393 void C_Bipship(objtype *ob, objtype *hit);
\r
395 extern statetype s_flectstand;
\r
396 extern statetype s_flectturn;
\r
397 extern statetype s_flectwalk1;
\r
398 extern statetype s_flectwalk2;
\r
399 extern statetype s_flectwalk3;
\r
400 extern statetype s_flectwalk4;
\r
401 extern statetype s_flectstun;
\r
403 void SpawnFlect(Uint16 tileX, Uint16 tileY);
\r
404 void T_FlectStand(objtype *ob);
\r
405 void T_FlectWalk(objtype *ob);
\r
406 void C_Flect(objtype *ob, objtype *hit);
\r
407 void R_Flect(objtype *ob);
\r
410 =============================================================================
\r
412 K6_ACT3 DEFINITIONS
\r
414 =============================================================================
\r
417 extern statetype s_fleexwalk1;
\r
418 extern statetype s_fleexwalk2;
\r
419 extern statetype s_fleexrun1;
\r
420 extern statetype s_fleexrun2;
\r
421 extern statetype s_fleexrun3;
\r
422 extern statetype s_fleexrun4;
\r
423 extern statetype s_fleexlook1;
\r
424 extern statetype s_fleexlook2;
\r
425 extern statetype s_fleexstun;
\r
427 void SpawnFleex(Uint16 tileX, Uint16 tileY);
\r
428 void T_FleexWalk(objtype *ob);
\r
429 void T_FleexLook(objtype *ob);
\r
430 void C_Fleex(objtype *ob, objtype *hit);
\r
432 extern statetype s_bobbajump1;
\r
433 extern statetype s_bobbajump2;
\r
434 extern statetype s_bobbastand;
\r
435 extern statetype s_bobbaattack;
\r
436 extern statetype s_bobbashot1;
\r
437 extern statetype s_bobbashot2;
\r
438 extern statetype s_bobbashot3;
\r
439 extern statetype s_bobbashot4;
\r
440 extern statetype s_bobbashot5;
\r
441 extern statetype s_bobbashot6;
\r
442 extern statetype s_bobbashot7;
\r
443 extern statetype s_bobbashot8;
\r
444 extern statetype s_bobbashotvanish1;
\r
445 extern statetype s_bobbashotvanish2;
\r
446 extern statetype s_bobbashotvanish3;
\r
448 void SpawnBobba(Uint16 tileX, Uint16 tileY);
\r
449 void T_BobbaShot(objtype *ob);
\r
450 void T_BobbaStand(objtype *ob);
\r
451 void C_Bobba(objtype *ob, objtype *hit);
\r
452 void R_Bobba(objtype *ob);
\r
453 void R_BobbaShot(objtype *ob);
\r
455 extern statetype s_babobbajump1;
\r
456 extern statetype s_babobbajump2;
\r
457 extern statetype s_babobbastand;
\r
458 extern statetype s_babobbaattack;
\r
459 extern statetype s_babobbastun1;
\r
460 extern statetype s_babobbastun2;
\r
461 extern statetype s_babobbasleep1;
\r
462 extern statetype s_babobbasleep2;
\r
463 extern statetype s_babobbasleep3;
\r
464 extern statetype s_babobbasleep4;
\r
465 extern statetype s_babobbasleep5;
\r
466 extern statetype s_babobbasleep6;
\r
467 extern statetype s_babobbasleep7;
\r
468 extern statetype s_babobbashot1;
\r
469 extern statetype s_babobbashot2;
\r
470 extern statetype s_babobbashot3;
\r
471 extern statetype s_babobbashotvanish1;
\r
472 extern statetype s_babobbashotvanish2;
\r
474 void SpawnBabobba(Uint16 tileX, Uint16 tileY);
\r
475 void T_BabobbaStand(objtype *ob);
\r
476 void C_Babobba(objtype *ob, objtype *hit);
\r
477 void C_BabobbaSleep(objtype *ob, objtype *hit);
\r
478 void R_Babobba(objtype *ob);
\r
479 void T_BabobbaShot(objtype *ob);
\r
480 void T_BabobbaShotVanish(objtype *ob);
\r
482 extern statetype s_blorb1;
\r
483 extern statetype s_blorb2;
\r
484 extern statetype s_blorb3;
\r
486 void SpawnBlorb(Uint16 tileX, Uint16 tileY);
\r
487 void R_Blorb(objtype *ob);
\r
489 extern statetype s_ceilickhidden;
\r
490 extern statetype s_ceilickattack1;
\r
491 extern statetype s_ceilickattack2;
\r
492 extern statetype s_ceilickattack3;
\r
493 extern statetype s_ceilickattack4;
\r
494 extern statetype s_ceilickattack5;
\r
495 extern statetype s_ceilickattack6;
\r
496 extern statetype s_ceilickattack7;
\r
497 extern statetype s_ceilickattack8;
\r
498 extern statetype s_ceilickattack9;
\r
499 extern statetype s_ceilickattack10;
\r
500 extern statetype s_ceilickattack11;
\r
501 extern statetype s_ceilicklaugh1;
\r
502 extern statetype s_ceilicklaugh2;
\r
503 extern statetype s_ceilicklaugh3;
\r
504 extern statetype s_ceilicklaugh4;
\r
505 extern statetype s_ceilicklaugh5;
\r
506 extern statetype s_ceilicklaugh6;
\r
507 extern statetype s_ceilicklaugh7;
\r
508 extern statetype s_ceilicklaugh8;
\r
509 extern statetype s_ceilicklaugh9;
\r
510 extern statetype s_ceilickstun;
\r
512 void SpawnCeilick(Uint16 tileX, Uint16 tileY);
\r
513 void T_CeilickHidden(objtype *ob);
\r
514 void T_CeilickLaugh(objtype *ob);
\r
515 void T_CeilickStunned(objtype *ob);
\r
516 void C_Ceilick(objtype *ob, objtype *hit);
\r