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 280000l
\r
37 #define MINMEMORY 310000l
\r
40 #define STARPALETTE {0, 1, 2, 3, 4, 16, 6, 7, 31, 31, 31, 31, 31, 31, 31, 31, 0}
\r
41 #define INTROPALETTE {0, 24, 24, 7, 1, 1, 1, 1, 17, 17, 17, 17, 19, 19, 19, 19, 0}
\r
42 #define SHRINKPALETTE {0, 24, 24, 7, 1, 1, 1, 1, 17, 17, 17, 17, 19, 19, 19, 24, 0}
\r
44 #define HIGHSCORE_LEFT 24
\r
45 #define HIGHSCORE_TOP 51
\r
46 #define HIGHSCORE_RIGHT 296
\r
47 #define HIGHSCORE_MAP 19
\r
49 #define STATUS_PRESSKEY_X 160
\r
51 #define WORLDMAPNAME "Shadowlands"
\r
52 #define DROPSNAME "DROPS"
\r
54 #define STARWARSMUSIC 12
\r
55 #define ENDINGMUSIC 7
\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 4
\r
64 =============================================================================
\r
68 =============================================================================
\r
71 extern char far swtext[];
\r
72 extern char far *levelnames[GAMELEVELS];
\r
73 extern char far *levelenter[GAMELEVELS];
\r
75 void ScanInfoPlane(void);
\r
76 void PrincessLindsey(void);
\r
77 void RescueJanitor(void);
\r
78 void CantSwim(void);
\r
79 void GotScuba(void);
\r
80 void RescuedMember(void);
\r
82 extern statetype s_keenswimslow1;
\r
83 extern statetype s_keenswimslow2;
\r
84 extern statetype s_keenswim1;
\r
85 extern statetype s_keenswim2;
\r
86 extern statetype s_kbubble1;
\r
87 extern statetype s_kbubble2;
\r
88 extern statetype s_kbubble3;
\r
89 extern statetype s_kbubble4;
\r
90 void SpawnSwimKeen(Sint16 x, Sint16 y);
\r
91 void SpawnKbubble(objtype *ob);
\r
92 void T_KeenSwimSlow(objtype *ob);
\r
93 void T_KeenSwim(objtype *ob);
\r
94 void C_KeenSwim(objtype *ob, objtype *hit);
\r
95 void R_KeenSwim(objtype *ob);
\r
98 =============================================================================
\r
100 K4_ACT1 DEFINITIONS
\r
102 =============================================================================
\r
105 extern statetype s_miragia0;
\r
106 extern statetype s_miragia1;
\r
107 extern statetype s_miragia2;
\r
108 extern statetype s_miragia3;
\r
109 extern statetype s_miragia4;
\r
110 extern statetype s_miragia5;
\r
111 extern statetype s_miragia6;
\r
112 extern statetype s_miragia7;
\r
113 void SpawnMiragia(Sint16 x, Sint16 y);
\r
114 void T_Miragia0(objtype *ob);
\r
115 void T_Miragia1(objtype *ob);
\r
116 void T_Miragia2(objtype *ob);
\r
117 void T_Miragia3(objtype *ob);
\r
118 void T_Miragia4(objtype *ob);
\r
119 void T_Miragia5(objtype *ob);
\r
120 void T_Miragia6(objtype *ob);
\r
121 void T_Miragia7(objtype *ob);
\r
123 extern statetype s_bonus1;
\r
124 extern statetype s_bonus2;
\r
125 extern statetype s_bonusrise;
\r
126 extern statetype s_splash1;
\r
127 extern statetype s_splash2;
\r
128 extern statetype s_splash3;
\r
129 extern Uint16 bonusshape[];
\r
130 void SpawnBonus(Sint16 x, Sint16 y, Sint16 type);
\r
131 void SpawnSplash(Sint16 x, Sint16 y);
\r
132 void T_Bonus(objtype *ob);
\r
134 extern statetype s_councilwalk1;
\r
135 extern statetype s_councilwalk2;
\r
136 extern statetype s_councilstand;
\r
137 void SpawnCouncil(Sint16 x, Sint16 y);
\r
138 void T_Council(objtype *ob);
\r
140 extern statetype s_slugwalk1;
\r
141 extern statetype s_slugwalk2;
\r
142 extern statetype s_slugpiss1;
\r
143 extern statetype s_slugstun;
\r
144 extern statetype s_slugstunalt;
\r
145 extern statetype s_slugslime;
\r
146 extern statetype s_slugslime2;
\r
147 void SpawnSlug(Sint16 x, Sint16 y);
\r
148 void T_Slug(objtype *ob);
\r
149 void T_SlugPiss(objtype *ob);
\r
150 void C_Slug(objtype *ob, objtype *hit);
\r
152 extern statetype s_mushroom1;
\r
153 extern statetype s_mushroom2;
\r
154 void SpawnMadMushroom(Sint16 x, Sint16 y);
\r
155 void T_Mushroom(objtype *ob);
\r
156 void C_Mushroom(objtype *ob, objtype *hit);
\r
157 void R_Mushroom(objtype *ob);
\r
159 extern statetype s_egg;
\r
160 extern statetype s_eggbroke;
\r
161 extern statetype s_eggchip1;
\r
162 extern statetype s_eggchip2;
\r
163 extern statetype s_eggchip3;
\r
164 extern statetype s_eggbirdpause;
\r
165 extern statetype s_eggbirdwalk1;
\r
166 extern statetype s_eggbirdwalk2;
\r
167 extern statetype s_eggbirdwalk3;
\r
168 extern statetype s_eggbirdwalk4;
\r
169 extern statetype s_eggbirdfly1;
\r
170 extern statetype s_eggbirdfly2;
\r
171 extern statetype s_eggbirdfly3;
\r
172 extern statetype s_eggbirdfly4;
\r
173 extern statetype s_eggbirddrop;
\r
174 extern statetype s_eggbirdstun;
\r
175 extern statetype s_eggbirdstun2;
\r
176 extern statetype s_eggbirdstun3;
\r
177 extern statetype s_eggbirdstun4;
\r
178 extern statetype s_eggbirdstun5;
\r
179 void SpawnEggbird(Sint16 x, Sint16 y);
\r
180 void T_EggUnstun(objtype *ob);
\r
181 void SpawnEggbirdOut(Sint16 x, Sint16 y);
\r
182 void C_Egg(objtype *ob, objtype *hit);
\r
183 void T_Eggbird(objtype *ob);
\r
184 void T_EggbirdFly(objtype *ob);
\r
185 void C_Eggbird(objtype *ob, objtype *hit);
\r
186 void C_EggbirdStun(objtype *ob, objtype *hit);
\r
187 void R_Eggbird(objtype *ob);
\r
188 void R_EggbirdDrop(objtype *ob);
\r
189 void R_Chip(objtype *ob);
\r
190 void R_Eggbirdfly(objtype *ob);
\r
192 extern statetype s_arach1;
\r
193 extern statetype s_arach2;
\r
194 extern statetype s_arach3;
\r
195 extern statetype s_arach4;
\r
196 extern statetype s_arachstun;
\r
197 extern statetype s_arachstun2;
\r
198 extern statetype s_arachstun3;
\r
199 extern statetype s_arachstun4;
\r
200 extern statetype s_arachstun5;
\r
201 void SpawnArachnut(Sint16 x, Sint16 y);
\r
202 void T_Arach(objtype *ob);
\r
203 void C_Arach(objtype *ob, objtype *hit);
\r
204 void C_ArachStun(objtype *ob, objtype *hit);
\r
206 extern statetype s_pestfly1;
\r
207 extern statetype s_pestfly2;
\r
208 extern statetype s_squashedpest;
\r
209 extern statetype s_pestrest1;
\r
210 extern statetype s_pestrest2;
\r
211 extern statetype s_pestrest3;
\r
212 extern statetype s_pestrest4;
\r
213 extern statetype s_pestrest5;
\r
214 extern statetype s_pestrest6;
\r
215 extern statetype s_pestrest7;
\r
216 extern statetype s_pestrest8;
\r
217 extern statetype s_pestrest9;
\r
218 extern statetype s_pestrest10;
\r
219 extern statetype s_pestrest11;
\r
220 extern statetype s_pestrest12;
\r
221 extern statetype s_pestrest13;
\r
222 extern statetype s_pestrest14;
\r
223 extern statetype s_pestrest15;
\r
224 extern statetype s_pestrest16;
\r
225 extern statetype s_pestrest17;
\r
226 void SpawnSkypest(Sint16 x, Sint16 y);
\r
227 void T_PestFly(objtype *ob);
\r
228 void C_PestFly(objtype *ob, objtype *hit);
\r
229 void C_Squashable(objtype *ob, objtype *hit);
\r
230 void T_PestRest(objtype *ob);
\r
231 void R_Pest(objtype *ob);
\r
234 =============================================================================
\r
236 K4_ACT2 DEFINITIONS
\r
238 =============================================================================
\r
241 extern statetype s_worm;
\r
242 extern statetype s_wormpeek1;
\r
243 extern statetype s_wormpeek2;
\r
244 extern statetype s_wormpeek3;
\r
245 extern statetype s_wormpeek4;
\r
246 extern statetype s_wormpeek5;
\r
247 extern statetype s_wormpeek6;
\r
248 extern statetype s_wormpeek7;
\r
249 extern statetype s_wormpeek8;
\r
250 extern statetype s_wormbite1;
\r
251 extern statetype s_wormbite2;
\r
252 extern statetype s_wormbite3;
\r
253 extern statetype s_wormbite4;
\r
254 extern statetype s_wormbite5;
\r
255 extern statetype s_wormstun;
\r
256 void SpawnWormMouth(Sint16 x, Sint16 y);
\r
257 void T_WormLookRight(objtype *ob);
\r
258 void T_WormLook(objtype *ob);
\r
259 void T_WormLookLeft(objtype *ob);
\r
260 void T_Worm(objtype *ob);
\r
261 void C_Worm(objtype *ob, objtype *hit);
\r
262 void C_WormKill(objtype *ob, objtype *hit);
\r
264 extern statetype s_cloudsleep;
\r
265 extern statetype s_cloudwake;
\r
266 extern statetype s_cloud;
\r
267 extern statetype s_cloudalign;
\r
268 extern statetype s_cloudcharge;
\r
269 extern statetype s_cloudattack1;
\r
270 extern statetype s_cloudattack2;
\r
271 extern statetype s_cloudattack3;
\r
272 extern statetype s_cloudattack4;
\r
273 extern statetype s_cloudattack5;
\r
274 extern statetype s_cloudattack6;
\r
275 extern statetype s_cloudattack7;
\r
276 extern statetype s_cloudattack8;
\r
277 extern statetype s_cloudattack9;
\r
278 extern statetype s_bolt1;
\r
279 extern statetype s_bolt2;
\r
280 extern statetype s_bolt3;
\r
281 extern statetype s_bolt4;
\r
282 extern statetype s_bolt5;
\r
283 extern statetype s_bolt6;
\r
284 void SpawnCloudster(Sint16 x, Sint16 y);
\r
285 void T_Cloud(objtype *ob);
\r
286 void T_CloudAlign(objtype *ob);
\r
287 void R_Cloud(objtype *ob);
\r
288 void T_CloudShoot(objtype *ob);
\r
289 void C_CloudSleep(objtype *ob, objtype *hit);
\r
291 extern statetype s_berkefloat1;
\r
292 extern statetype s_berkefloat2;
\r
293 extern statetype s_berkefloat3;
\r
294 extern statetype s_berkefloat4;
\r
295 extern statetype s_berkethrow1;
\r
296 extern statetype s_berkethrow2;
\r
297 extern statetype s_berkethrow3;
\r
298 extern statetype s_berkethrow4;
\r
299 extern statetype s_berkethrow5;
\r
300 extern statetype s_berkethrow6;
\r
301 extern statetype s_berkethrow7;
\r
302 extern statetype s_berkethrow8;
\r
303 extern statetype s_berkethrow9;
\r
304 extern statetype s_berkethrow10;
\r
305 extern statetype s_berkethrow11;
\r
306 extern statetype s_berkethrow12;
\r
307 extern statetype s_fire1;
\r
308 extern statetype s_fire2;
\r
309 extern statetype s_fireland1;
\r
310 extern statetype s_fireland2;
\r
311 extern statetype s_fireland3;
\r
312 extern statetype s_fireland4;
\r
313 extern statetype s_fireland5;
\r
314 extern statetype s_fireland6;
\r
315 extern statetype s_fireland7;
\r
316 extern statetype s_fireland8;
\r
317 extern statetype s_fireland9;
\r
318 void SpawnBerkeloid(Sint16 x, Sint16 y);
\r
319 void BerkeThink(objtype *ob);
\r
320 void BerkeThrowThink(objtype *ob);
\r
321 void BerkeThrowDone(objtype *ob);
\r
322 void C_Berke(objtype *ob, objtype *hit);
\r
323 void FireReact(objtype *ob);
\r
324 void BerkeDrawReact(objtype *ob);
\r
325 void BerkeWalkReact(objtype *ob);
\r
327 extern statetype s_footsmoke1;
\r
328 extern statetype s_footsmoke2;
\r
329 extern statetype s_footsmoke3;
\r
330 extern statetype s_footsmoke4;
\r
331 extern statetype s_inch1;
\r
332 extern statetype s_inch2;
\r
333 extern statetype s_footchange; //never used!
\r
334 extern statetype s_footwait;
\r
335 void SpawnInchworm(Sint16 x, Sint16 y);
\r
336 void SpawnFoot(Sint16 x, Sint16 y);
\r
337 void InchThink(objtype *ob);
\r
338 void InchContact(objtype *ob, objtype *hit);
\r
339 void FootContact(objtype *ob, objtype *hit);
\r
341 extern statetype s_bounderup1;
\r
342 extern statetype s_bounderup2;
\r
343 extern statetype s_bounderside1;
\r
344 extern statetype s_bounderside2;
\r
345 extern statetype s_bounderstun;
\r
346 extern statetype s_bounderstun2;
\r
347 void SpawnBounder(Sint16 x, Sint16 y);
\r
348 void C_Bounder(objtype *ob, objtype *hit);
\r
349 void R_Bounder(objtype *ob);
\r
351 extern statetype s_lick1;
\r
352 extern statetype s_lick2;
\r
353 extern statetype s_lick3;
\r
354 extern statetype s_lick4;
\r
355 extern statetype s_licklick1;
\r
356 extern statetype s_licklick2;
\r
357 extern statetype s_licklick3;
\r
358 extern statetype s_licklick4;
\r
359 extern statetype s_licklick5;
\r
360 extern statetype s_licklick6;
\r
361 extern statetype s_licklick7;
\r
362 extern statetype s_licklick8;
\r
363 extern statetype s_lickstun;
\r
364 extern statetype s_lickstun2;
\r
365 void SpawnLick(Sint16 x, Sint16 y);
\r
366 void LickJumpThink(objtype *ob);
\r
367 void LickContact(objtype *ob, objtype *hit);
\r
368 void LickKillContact(objtype *ob, objtype *hit);
\r
369 void LickAirReact(objtype *ob);
\r
371 extern statetype s_platform;
\r
372 void SpawnPlatform(Sint16 x, Sint16 y, Sint16 dir);
\r
373 void T_Platform(objtype *ob);
\r
374 void R_Platform(objtype *ob);
\r
376 extern statetype s_dropplatsit;
\r
377 extern statetype s_dropplatfall;
\r
378 extern statetype s_dropplatrise;
\r
379 void SpawnDropPlat(Sint16 x, Sint16 y);
\r
380 void T_DropPlatSit(objtype *ob);
\r
381 void T_DropPlatFall(objtype *ob);
\r
382 void T_DropPlatRise(objtype *ob);
\r
385 =============================================================================
\r
387 K4_ACT3 DEFINITIONS
\r
389 =============================================================================
\r
392 extern statetype s_eaterstand1;
\r
393 extern statetype s_eaterstand2;
\r
394 extern statetype s_eatertport1;
\r
395 extern statetype s_eatertport2;
\r
396 extern statetype s_eatertport3;
\r
397 extern statetype s_eatertport4;
\r
398 extern statetype s_eatertport5;
\r
399 extern statetype s_eatertport6;
\r
400 extern statetype s_eatertport7;
\r
401 extern statetype s_eatertport8;
\r
402 extern statetype s_eaterjump1;
\r
403 extern statetype s_eaterjump2;
\r
404 extern statetype s_eaterjump3;
\r
405 extern statetype s_eaterjump4;
\r
406 extern statetype s_eaterstun;
\r
407 extern statetype s_eaterstun2;
\r
408 extern statetype s_eatenbonus1;
\r
409 extern statetype s_eatenbonus2;
\r
410 extern statetype s_eatenbonus3;
\r
411 extern statetype s_eatenbonus4;
\r
412 void SpawnEater(Sint16 x, Sint16 y);
\r
413 void T_EaterJump(objtype *ob);
\r
414 void T_EaterTeleport(objtype *ob);
\r
415 void C_Eater(objtype *ob, objtype *hit);
\r
416 void EaterInTile(objtype *ob);
\r
417 void R_EaterAir(objtype *ob);
\r
419 extern statetype s_mimrock;
\r
420 extern statetype s_mimsneak1;
\r
421 extern statetype s_mimsneak2;
\r
422 extern statetype s_mimsneak3;
\r
423 extern statetype s_mimsneak4;
\r
424 extern statetype s_mimsneak5;
\r
425 extern statetype s_mimsneak6;
\r
426 extern statetype s_mimbonk1;
\r
427 extern statetype s_mimbonk2;
\r
428 extern statetype s_mimbonk3;
\r
429 extern statetype s_mimbounce;
\r
430 extern statetype s_mimstun;
\r
431 extern statetype s_mimstun2;
\r
432 void SpawnMimrock(Sint16 x, Sint16 y);
\r
433 void T_MimrockWait(objtype *ob);
\r
434 void T_MimrockSneak(objtype *ob);
\r
435 void C_Mimrock(objtype *ob, objtype *hit);
\r
436 void C_MimLethal(objtype *ob, objtype *hit);
\r
437 void R_MimAir(objtype *ob);
\r
438 void R_MimBounce(objtype *ob);
\r
440 extern statetype s_dopefish1;
\r
441 extern statetype s_dopefish2;
\r
442 extern statetype s_dopeattack;
\r
443 extern statetype s_dopeeat;
\r
444 extern statetype s_dopeburp1;
\r
445 extern statetype s_dopeburp2;
\r
446 extern statetype s_dopereturn;
\r
447 extern statetype s_dopefood;
\r
448 extern statetype s_keendopefood;
\r
449 extern statetype s_keendieslow;
\r
450 extern statetype s_bubble1;
\r
451 extern statetype s_bubble2;
\r
452 extern statetype s_bubble3;
\r
453 extern statetype s_bubble4;
\r
454 void SpawnDopefish(Sint16 x, Sint16 y);
\r
455 void T_EatenKeen(objtype *ob);
\r
456 void T_Dope(objtype *ob);
\r
457 void T_DopeHunt(objtype *ob);
\r
458 void T_DopeReturn(objtype *ob);
\r
459 void T_Burp(objtype *ob);
\r
460 void T_Bubble(objtype *ob);
\r
461 void C_Dope(objtype *ob, objtype *hit);
\r
462 void R_Fish(objtype *ob);
\r
464 extern statetype s_schoolfish1;
\r
465 extern statetype s_schoolfish2;
\r
466 void SpawnSchoolfish(Sint16 x, Sint16 y);
\r
467 void T_SchoolFish(objtype *ob);
\r
469 extern statetype s_pixie;
\r
470 extern statetype s_pixielook;
\r
471 extern statetype s_pixieshoot;
\r
472 extern statetype s_pixieshoot2;
\r
473 extern statetype s_pixiefire1;
\r
474 extern statetype s_pixiefire2;
\r
475 extern statetype s_pixiefire3;
\r
476 extern statetype s_pixiefire4;
\r
477 void SpawnPixie(Sint16 x, Sint16 y);
\r
478 void T_Pixie(objtype *ob);
\r
479 void T_PixieCheck(objtype *ob);
\r
480 void T_PixieShoot(objtype *ob);
\r
481 void R_Mshot(objtype *ob);
\r
483 extern statetype s_mine;
\r
484 extern statetype s_mineboom1;
\r
485 extern statetype s_mineboom2;
\r
486 void SpawnMine(Sint16 x, Sint16 y, Sint16 dir);
\r
487 void C_Mine(objtype *ob, objtype *hit);
\r
489 extern statetype s_lindsey1;
\r
490 extern statetype s_lindsey2;
\r
491 extern statetype s_lindsey3;
\r
492 extern statetype s_lindsey4;
\r
493 void SpawnLindsey(Sint16 x, Sint16 y);
\r
494 void T_Lindsey(objtype *ob);
\r
496 extern statetype s_dartthrower;
\r
497 extern statetype s_dart1;
\r
498 extern statetype s_dart2;
\r
499 extern statetype s_dartup1;
\r
500 extern statetype s_dartup2;
\r
501 extern statetype s_dartdown1;
\r
502 extern statetype s_dartdown2;
\r
503 void SpawnDartShooter(Sint16 x, Sint16 y, Sint16 dir);
\r
504 void T_DartShoot(objtype *ob);
\r
505 void R_DartThrower(objtype *ob);
\r
507 extern statetype s_scuba;
\r
508 void SpawnScuba(Sint16 x, Sint16 y);
\r
509 void C_Scuba(objtype *ob, objtype *hit);
\r