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 310000l
\r
40 #define STARPALETTE {0, 1, 24, 30, 31, 28, 6, 7, 19, 19, 19, 19, 19, 19, 19, 19, 0}
\r
41 #define INTROPALETTE {0, 4, 4, 28, 1, 1, 1, 1, 17, 17, 17, 17, 19, 19, 19, 19, 0}
\r
42 #define SHRINKPALETTE {0, 4, 4, 28, 1, 1, 1, 1, 17, 17, 17, 17, 19, 19, 19, 4, 0}
\r
44 #define HIGHSCORE_LEFT 40
\r
45 #define HIGHSCORE_TOP 35
\r
46 #define HIGHSCORE_RIGHT 280
\r
47 #define HIGHSCORE_MAP 15
\r
49 #define STATUS_PRESSKEY_X 120
\r
51 #define WORLDMAPNAME "Armageddon"
\r
52 #define DROPSNAME "VITALIN"
\r
54 #define STARWARSMUSIC 17
\r
55 #define ENDINGMUSIC 14
\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 17
\r
61 #define INACTIVATEDIST 6
\r
64 // tiles for worldmap teleporters
\r
66 #define TELEPORTERTILE1 2687 // tile animation for teleporting out
\r
67 #define TELEPORTERTILE2 1063 // tile after teleporting out
\r
68 #define TELEPORTERTILE3 TELEPORTERTILE1 // tile animation for teleporting in
\r
69 #define TELEPORTERTILE4 0 // tile after teleporting in
\r
71 #define TELEPORERTILEMASK 1 // animation has 2 frames
\r
74 =============================================================================
\r
78 =============================================================================
\r
81 extern char far swtext[];
\r
82 extern char far *levelnames[GAMELEVELS];
\r
83 extern char far *levelenter[GAMELEVELS];
\r
85 void OpenMapDoor(Sint16 tileX, Sint16 tileY);
\r
86 void CloseMapDoor(Sint16 tileX, Sint16 tileY);
\r
87 void ScanInfoPlane(void);
\r
88 void GameOver(void);
\r
90 void FinishedFuse(void);
\r
93 =============================================================================
\r
97 =============================================================================
\r
100 extern Sint16 pdirx[];
\r
101 extern Sint16 pdiry[];
\r
103 Sint16 CheckSpawnShot(Uint16 x, Uint16 y, statetype *state);
\r
104 void C_ClipSide(objtype *ob, objtype *hit);
\r
105 void C_ClipTop(objtype *ob, objtype *hit);
\r
106 void R_Land(objtype *ob);
\r
107 void R_Bounce(objtype *ob);
\r
109 extern statetype s_bonus1;
\r
110 extern statetype s_bonus2;
\r
111 extern statetype s_bonusfly1;
\r
112 extern statetype s_bonusfly2;
\r
113 extern statetype s_bonusrise;
\r
114 extern statetype s_splash1;
\r
115 extern statetype s_splash2;
\r
116 extern statetype s_splash3;
\r
117 extern statetype s_splash4;
\r
119 extern Uint16 bonusshape[];
\r
121 void SpawnBonus(Uint16 tileX, Uint16 tileY, Uint16 type);
\r
122 void SpawnSplash(Uint16 tileX, Uint16 tileY);
\r
123 void T_Bonus(objtype *ob);
\r
124 void T_FlyBonus(objtype *ob);
\r
126 extern statetype s_teleport1;
\r
127 extern statetype s_teleport2;
\r
128 extern statetype s_teleportzap1;
\r
129 extern statetype s_teleportzap2;
\r
131 void SpawnTeleport(void);
\r
133 extern statetype s_fuseflash1;
\r
134 extern statetype s_fuseflash2;
\r
135 extern statetype s_fuseflash3;
\r
137 void SpawnFuseFlash(Uint16 tileX, Uint16 tileY);
\r
139 extern statetype s_deadmachine;
\r
141 void SpawnDeadMachine(void);
\r
142 void T_DeadMachine(objtype *ob);
\r
144 extern statetype s_platform;
\r
145 extern statetype s_slotplat1;
\r
146 extern statetype s_slotplat2;
\r
148 void SpawnPlatform(Uint16 tileX, Uint16 tileY, Sint16 dir, Sint16 type);
\r
149 void T_Platform(objtype *ob);
\r
150 void T_Slotplat(objtype *ob);
\r
152 extern statetype s_dropplatsit;
\r
153 extern statetype s_dropplatfall;
\r
154 extern statetype s_dropplatrise;
\r
156 void SpawnDropPlat(Uint16 tileX, Uint16 tileY);
\r
157 void T_DropPlatSit(objtype *ob);
\r
158 void T_DropPlatFall(objtype *ob);
\r
159 void T_DropPlatRise(objtype *ob);
\r
161 extern statetype s_statplat;
\r
163 void SpawnStaticPlat(Uint16 tileX, Uint16 tileY);
\r
165 extern statetype s_goplat;
\r
166 extern statetype s_slotgoplat1;
\r
167 extern statetype s_slotgoplat2;
\r
169 void SpawnGoPlat(Uint16 tileX, Uint16 tileY, Sint16 dir, Sint16 type);
\r
170 void T_GoPlat(objtype *ob);
\r
171 void T_GoSlotPlat(objtype *ob);
\r
173 extern statetype s_volte1;
\r
174 extern statetype s_volte2;
\r
175 extern statetype s_volte3;
\r
176 extern statetype s_volte4;
\r
177 extern statetype s_voltestun;
\r
179 void SpawnVolte(Uint16 tileX, Uint16 tileY);
\r
180 void T_Volte(objtype *ob);
\r
181 void C_Volte(objtype *ob, objtype *hit);
\r
183 extern statetype s_sneakplatsit;
\r
184 extern statetype s_sneakplatdodge;
\r
185 extern statetype s_sneakplatreturn;
\r
187 void SpawnSneakPlat(Uint16 tileX, Uint16 tileY);
\r
188 void T_SneakPlat(objtype *ob);
\r
190 extern statetype s_cannon;
\r
191 extern statetype s_cannonfire;
\r
192 extern statetype s_cshot1;
\r
193 extern statetype s_cshot2;
\r
194 extern statetype s_cshot3;
\r
195 extern statetype s_cshot4;
\r
196 extern statetype s_cshothit1;
\r
197 extern statetype s_cshothit2;
\r
199 void SpawnCannon(Uint16 tileX, Uint16 tileY, Sint16 dir);
\r
200 void T_Cannon(objtype *ob);
\r
201 void C_CShot(objtype *ob, objtype *hit);
\r
202 void R_CShot(objtype *ob);
\r
205 =============================================================================
\r
207 K5_ACT2 DEFINITIONS
\r
209 =============================================================================
\r
212 extern statetype s_sparkywalk1;
\r
213 extern statetype s_sparkywalk2;
\r
214 extern statetype s_sparkywalk3;
\r
215 extern statetype s_sparkywalk4;
\r
216 extern statetype s_sparkylook1;
\r
217 extern statetype s_sparkylook2;
\r
218 extern statetype s_sparkylook3;
\r
219 extern statetype s_sparkylook4;
\r
220 extern statetype s_sparkylook5;
\r
221 extern statetype s_sparkylook6;
\r
222 extern statetype s_sparkylook7;
\r
223 extern statetype s_sparkylook8;
\r
224 extern statetype s_sparkyspeed1;
\r
225 extern statetype s_sparkyspeed2;
\r
226 extern statetype s_sparkyspeed3;
\r
227 extern statetype s_sparkyspeed4;
\r
228 extern statetype s_sparkycharge1;
\r
229 extern statetype s_sparkycharge2;
\r
230 extern statetype s_sparkycharge3;
\r
231 extern statetype s_sparkycharge4;
\r
232 extern statetype s_sparkyturn1;
\r
233 extern statetype s_sparkyturn2;
\r
234 extern statetype s_sparkyturn3;
\r
235 extern statetype s_sparkystun;
\r
237 void SpawnSparky(Uint16 tileX, Uint16 tileY);
\r
238 void T_Sparky(objtype *ob);
\r
239 void T_ChargeCount(objtype *ob);
\r
240 void T_SparkyLookL(objtype *ob);
\r
241 void T_SparkyLookR(objtype *ob);
\r
242 void T_RunSnd1(objtype *ob);
\r
243 void T_RunSnd2(objtype *ob);
\r
244 void C_Sparky(objtype *ob, objtype *hit);
\r
245 void R_Sparky(objtype *ob);
\r
247 extern statetype s_amptonwalk1;
\r
248 extern statetype s_amptonwalk2;
\r
249 extern statetype s_amptonwalk3;
\r
250 extern statetype s_amptonwalk4;
\r
251 extern statetype s_amptonturn;
\r
252 extern statetype s_amptongrab1;
\r
253 extern statetype s_amptongrab2;
\r
254 extern statetype s_amptonclimb;
\r
255 extern statetype s_amptonrelease1;
\r
256 extern statetype s_amptonrelease2;
\r
257 extern statetype s_amptonfiddle1;
\r
258 extern statetype s_amptonfiddle2;
\r
259 extern statetype s_amptonfiddle3;
\r
260 extern statetype s_amptonfiddle4;
\r
261 extern statetype s_amptonfiddle5;
\r
262 extern statetype s_amptonstun;
\r
264 void SpawnAmpton(Uint16 tileX, Uint16 tileY);
\r
265 void T_Ampton(objtype *ob);
\r
266 void T_AmptonClimb(objtype *ob);
\r
267 void T_SetNoThink(objtype *ob);
\r
268 void C_Ampton(objtype *ob, objtype *hit);
\r
269 void R_Ampton(objtype *ob);
\r
271 extern statetype s_slicestarslide;
\r
272 extern statetype s_slicestarbounce;
\r
273 extern statetype s_slicestarboom;
\r
275 void SpawnSlicestarSlide(Uint16 tileX, Uint16 tileY, Sint16 dir);
\r
276 void SpawnSlicestarBounce(Uint16 tileX, Uint16 tileY);
\r
277 void C_Slicestar(objtype *ob, objtype *hit);
\r
278 void R_Slicestar(objtype *ob);
\r
280 extern statetype s_shellywalk1;
\r
281 extern statetype s_shellywalk2;
\r
282 extern statetype s_shellywalk3;
\r
283 extern statetype s_shellywalk4;
\r
284 extern statetype s_shellylook;
\r
285 extern statetype s_shellylook2;
\r
286 extern statetype s_shellyjump1;
\r
287 extern statetype s_shellyjump2;
\r
288 extern statetype s_shellydie;
\r
289 extern statetype s_shellydieup;
\r
290 extern statetype s_shellyboom1;
\r
291 extern statetype s_shellyboom2;
\r
292 extern statetype s_shellyboom3;
\r
293 extern statetype s_shellyboom4;
\r
294 extern statetype s_shellypiece1;
\r
295 extern statetype s_shellypiece2;
\r
297 void SpawnShelly(Uint16 tileX, Uint16 tileY);
\r
298 void T_ShellyLook(objtype *ob);
\r
299 void T_Turn(objtype *ob);
\r
300 void T_ShellyFrag(objtype *ob);
\r
301 void C_Shelly(objtype *ob, objtype *hit);
\r
302 void R_Shelly(objtype *ob);
\r
303 void R_Shell(objtype *ob);
\r
306 =============================================================================
\r
308 K5_ACT3 DEFINITIONS
\r
310 =============================================================================
\r
313 extern statetype s_mine;
\r
314 extern statetype s_minecenter;
\r
315 extern statetype s_mineshift;
\r
316 extern statetype s_mineboom1;
\r
317 extern statetype s_mineboom2;
\r
318 extern statetype s_mineboom3;
\r
319 extern statetype s_mineboom4;
\r
320 extern statetype s_mineboom5;
\r
321 extern statetype s_mineboom6;
\r
322 extern statetype s_minepiece;
\r
324 void SpawnMine(Uint16 tileX, Uint16 tileY);
\r
325 boolean MinePosCheck(Uint16 tileX, Uint16 tileY);
\r
326 boolean Walk(objtype *ob, Sint16 dir);
\r
327 void ChaseThink(objtype *ob);
\r
328 void T_Mine(objtype *ob);
\r
329 void C_Solid(objtype *ob, objtype *hit);
\r
330 void C_MineFrag(objtype *ob, objtype *hit);
\r
331 void T_MineCenter(objtype *ob);
\r
332 void T_MineShift(objtype *ob);
\r
333 void T_MineFrag(objtype *ob);
\r
334 void R_Mine(objtype *ob);
\r
336 extern statetype s_robored;
\r
337 extern statetype s_roboredfire0;
\r
338 extern statetype s_roboredfire1;
\r
339 extern statetype s_roboredfire2;
\r
340 extern statetype s_rshot1;
\r
341 extern statetype s_rshot2;
\r
342 extern statetype s_rshothit1;
\r
343 extern statetype s_rshothit2;
\r
345 void SpawnRoboRed(Uint16 tileX, Uint16 tileY);
\r
346 void T_RoboRed(objtype *ob);
\r
347 void C_RoboRed(objtype *ob, objtype *hit);
\r
348 void T_RoboShoot(objtype *ob);
\r
349 void C_RShot(objtype *ob, objtype *hit);
\r
350 void R_RShot(objtype *ob);
\r
352 extern statetype s_gripsitd;
\r
353 extern statetype s_gripjumpd;
\r
354 extern statetype s_gripsitl;
\r
355 extern statetype s_gripjumpl;
\r
356 extern statetype s_gripsitr;
\r
357 extern statetype s_gripjumpr;
\r
358 extern statetype s_gripsitu;
\r
359 extern statetype s_gripjumpu;
\r
360 extern statetype s_gripspin1;
\r
361 extern statetype s_gripspin2;
\r
362 extern statetype s_gripspin3;
\r
363 extern statetype s_gripspin4;
\r
364 extern statetype s_gripspin5;
\r
365 extern statetype s_gripspin6;
\r
366 extern statetype s_gripspin7;
\r
367 extern statetype s_gripspin8;
\r
368 extern statetype s_gripflyd;
\r
369 extern statetype s_gripflyl;
\r
370 extern statetype s_gripflyr;
\r
371 extern statetype s_gripflyu;
\r
373 void SpawnSpirogrip(Uint16 tileX, Uint16 tileY);
\r
374 void T_SpiroLaunch(objtype *ob);
\r
375 void R_SpiroFly(objtype *ob);
\r
377 extern statetype s_spindred1;
\r
378 extern statetype s_spindred2;
\r
379 extern statetype s_spindred3;
\r
380 extern statetype s_spindred4;
\r
382 void SpawnSpindread(Uint16 tileX, Uint16 tileY);
\r
383 void T_Spindread(objtype *ob);
\r
384 void C_Spindread(objtype *ob, objtype *hit);
\r
385 void R_Spindread(objtype *ob);
\r
387 extern statetype s_master1;
\r
388 extern statetype s_master2;
\r
389 extern statetype s_master3;
\r
390 extern statetype s_master4;
\r
391 extern statetype s_mastershoot1;
\r
392 extern statetype s_mastershoot2;
\r
393 extern statetype s_mastertport1;
\r
394 extern statetype s_mastertport2;
\r
395 extern statetype s_mastertport3;
\r
396 extern statetype s_mastertport4;
\r
397 extern statetype s_mshot1;
\r
398 extern statetype s_mshot2;
\r
399 extern statetype s_mshot3;
\r
400 extern statetype s_mshot4;
\r
401 extern statetype s_mspray1;
\r
402 extern statetype s_mspray2;
\r
403 extern statetype s_mspray3;
\r
404 extern statetype s_mspray4;
\r
406 void SpawnMaster(Uint16 tileX, Uint16 tileY);
\r
407 void T_Master(objtype *ob);
\r
408 void T_MasterShoot(objtype *ob);
\r
409 void C_Master(objtype *ob, objtype *hit);
\r
410 void T_MasterTPort(objtype *ob);
\r
411 void C_MShot(objtype *ob, objtype *hit);
\r
412 void R_MShot(objtype *ob);
\r
413 void R_MSpray(objtype *ob);
\r
415 extern statetype s_shikadi1;
\r
416 extern statetype s_shikadi2;
\r
417 extern statetype s_shikadi3;
\r
418 extern statetype s_shikadi4;
\r
419 extern statetype s_shikadiwalk1;
\r
420 extern statetype s_shikadiwalk2;
\r
421 extern statetype s_shikadiwalk3;
\r
422 extern statetype s_shikadiwalk4;
\r
423 extern statetype s_shikadigrab;
\r
424 extern statetype s_shikadigrab2;
\r
425 extern statetype s_shikadistun;
\r
426 extern statetype s_polespark1;
\r
427 extern statetype s_polespark2;
\r
429 void SpawnShikadi(Uint16 tileX, Uint16 tileY);
\r
430 void T_Shikadi(objtype *ob);
\r
431 void C_Shikadi(objtype *ob, objtype *hit);
\r
432 void T_PoleShock(objtype *ob);
\r
433 void T_PoleSpark(objtype *ob);
\r
434 void R_Shikadi(objtype *ob);
\r
436 extern statetype s_petsit1;
\r
437 extern statetype s_petsit2;
\r
438 extern statetype s_petbark1;
\r
439 extern statetype s_petbark2;
\r
440 extern statetype s_pet1;
\r
441 extern statetype s_pet2;
\r
442 extern statetype s_pet3;
\r
443 extern statetype s_pet4;
\r
444 extern statetype s_petjump;
\r
445 extern statetype s_pshot1;
\r
446 extern statetype s_pshot2;
\r
447 extern statetype s_pshothot1;
\r
448 extern statetype s_pshothot2;
\r
449 extern statetype s_petstun;
\r
451 void SpawnPet(Uint16 tileX, Uint16 tileY);
\r
452 void T_Pet(objtype *ob);
\r
453 void T_PetSit(objtype *ob);
\r
454 void T_PetBark(objtype *ob);
\r
455 void C_Pet(objtype *ob, objtype *hit);
\r
456 void R_Pet(objtype *ob);
\r
457 void R_PetJump(objtype *ob);
\r
458 void C_PShot(objtype *ob, objtype *hit);
\r
459 void R_PShot(objtype *ob);
\r
461 extern statetype s_sphereful1;
\r
462 extern statetype s_sphereful2;
\r
463 extern statetype s_sphereful3;
\r
464 extern statetype s_sphereful4;
\r
466 void SpawnSphereful(Uint16 tileX, Uint16 tileY);
\r
467 void T_Sphereful(objtype *ob);
\r
468 void R_Sphereful(objtype *ob);
\r
470 extern statetype s_scottie1;
\r
471 extern statetype s_scottie2;
\r
472 extern statetype s_scottie3;
\r
473 extern statetype s_scottie4;
\r
474 extern statetype s_scottieface;
\r
475 extern statetype s_scottiestun;
\r
477 void SpawnScottie(Uint16 tileX, Uint16 tileY);
\r
478 void T_Scottie(objtype *ob);
\r
479 void C_Scottie(objtype *ob, objtype *hit);
\r
481 extern statetype s_qed;
\r
483 void SpawnQed(Uint16 tileX, Uint16 tileY);
\r