1 /* Keen Dreams Source Code
\r
2 * Copyright (C) 2014 Javier M. Chavez
\r
4 * This program is free software; you can redistribute it and/or modify
\r
5 * it under the terms of the GNU General Public License as published by
\r
6 * the Free Software Foundation; either version 2 of the License, or
\r
7 * (at your option) any later version.
\r
9 * This program is distributed in the hope that it will be useful,
\r
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
12 * GNU General Public License for more details.
\r
14 * You should have received a copy of the GNU General Public License along
\r
15 * with this program; if not, write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
21 =============================================================================
\r
25 An Id Software production
\r
27 =============================================================================
\r
37 =============================================================================
\r
41 =============================================================================
\r
45 =============================================================================
\r
49 =============================================================================
\r
52 char str[80],str2[20];
\r
53 boolean singlestep,jumpcheat,godmode,tedlevel;
\r
54 unsigned tedlevelnum;
\r
57 =============================================================================
\r
61 =============================================================================
\r
64 void DebugMemory (void);
\r
65 void TestSprites(void);
\r
66 int DebugKeys (void);
\r
67 void ShutdownId (void);
\r
68 void Quit (char *error);
\r
69 void InitGame (void);
\r
72 //===========================================================================
\r
84 void DebugMemory (void)
\r
86 VW_FixRefreshBuffer ();
\r
87 US_CenterWindow (16,7);
\r
89 US_CPrint ("Memory Usage");
\r
90 US_CPrint ("------------");
\r
91 US_Print ("Total :");
\r
92 US_PrintUnsigned (mminfo.mainmem/1024);
\r
93 US_Print ("k\nFree :");
\r
94 US_PrintUnsigned (MM_UnusedMemory()/1024);
\r
95 US_Print ("k\nWith purge:");
\r
96 US_PrintUnsigned (MM_TotalFree()/1024);
\r
100 #if GRMODE == EGAGR
\r
106 ===================
\r
110 ===================
\r
113 #define DISPWIDTH 110
\r
114 #define TEXTWIDTH 40
\r
115 void TestSprites(void)
\r
117 int hx,hy,sprite,oldsprite,bottomy,topx,shift;
\r
118 spritetabletype far *spr;
\r
119 spritetype _seg *block;
\r
123 VW_FixRefreshBuffer ();
\r
124 US_CenterWindow (30,17);
\r
126 US_CPrint ("Sprite Test");
\r
127 US_CPrint ("-----------");
\r
130 hx=(PrintX+56)&(~7);
\r
131 topx = hx+TEXTWIDTH;
\r
133 US_Print ("Chunk:\nWidth:\nHeight:\nOrgx:\nOrgy:\nXl:\nYl:\nXh:\nYh:\n"
\r
134 "Shifts:\nMem:\n");
\r
138 sprite = STARTSPRITES;
\r
143 if (sprite>=STARTTILE8)
\r
144 sprite = STARTTILE8-1;
\r
145 else if (sprite<STARTSPRITES)
\r
146 sprite = STARTSPRITES;
\r
148 spr = &spritetable[sprite-STARTSPRITES];
\r
149 block = (spritetype _seg *)grsegs[sprite];
\r
151 VWB_Bar (hx,hy,TEXTWIDTH,bottomy-hy,WHITE);
\r
155 US_PrintUnsigned (sprite);US_Print ("\n");PrintX=hx;
\r
156 US_PrintUnsigned (spr->width);US_Print ("\n");PrintX=hx;
\r
157 US_PrintUnsigned (spr->height);US_Print ("\n");PrintX=hx;
\r
158 US_PrintSigned (spr->orgx);US_Print ("\n");PrintX=hx;
\r
159 US_PrintSigned (spr->orgy);US_Print ("\n");PrintX=hx;
\r
160 US_PrintSigned (spr->xl);US_Print ("\n");PrintX=hx;
\r
161 US_PrintSigned (spr->yl);US_Print ("\n");PrintX=hx;
\r
162 US_PrintSigned (spr->xh);US_Print ("\n");PrintX=hx;
\r
163 US_PrintSigned (spr->yh);US_Print ("\n");PrintX=hx;
\r
164 US_PrintSigned (spr->shifts);US_Print ("\n");PrintX=hx;
\r
167 US_Print ("-----");
\r
171 mem = block->sourceoffset[3]+5*block->planesize[3];
\r
172 mem = (mem+15)&(~15); // round to paragraphs
\r
173 US_PrintUnsigned (mem);
\r
176 oldsprite = sprite;
\r
180 // draw the current shift, then wait for key
\r
182 VWB_Bar(topx,hy,DISPWIDTH,bottomy-hy,WHITE);
\r
187 US_Print ("Shift:");
\r
188 US_PrintUnsigned (shift);
\r
190 VWB_DrawSprite (topx+16+shift*2,PrintY,sprite);
\r
195 scan = IN_WaitForKey ();
\r
209 case sc_RightArrow:
\r
217 } while (sprite == oldsprite);
\r
234 int DebugKeys (void)
\r
240 if (Keyboard[0x12] && ingame) // DEBUG: end + 'E' to quit level
\r
244 playstate = levelcomplete;
\r
248 if (Keyboard[0x22] && ingame) // G = god mode
\r
250 VW_FixRefreshBuffer ();
\r
251 US_CenterWindow (12,2);
\r
253 US_PrintCentered ("God mode OFF");
\r
255 US_PrintCentered ("God mode ON");
\r
261 else if (Keyboard[0x17]) // I = item cheat
\r
263 VW_FixRefreshBuffer ();
\r
264 US_CenterWindow (12,3);
\r
265 US_PrintCentered ("Free items!");
\r
266 gamestate.boobusbombs=99;
\r
267 gamestate.flowerpowers=99;
\r
273 else if (Keyboard[0x24]) // J = jump cheat
\r
276 VW_FixRefreshBuffer ();
\r
277 US_CenterWindow (18,3);
\r
279 US_PrintCentered ("Jump cheat ON");
\r
281 US_PrintCentered ("Jump cheat OFF");
\r
287 else if (Keyboard[0x32]) // M = memory info
\r
293 else if (Keyboard[0x19]) // P = pause with no screen disruptioon
\r
297 else if (Keyboard[0x1f] && ingame) // S = slow motion
\r
300 VW_FixRefreshBuffer ();
\r
301 US_CenterWindow (18,3);
\r
303 US_PrintCentered ("Slow motion ON");
\r
305 US_PrintCentered ("Slow motion OFF");
\r
311 else if (Keyboard[0x14]) // T = sprite test
\r
317 else if (Keyboard[0x11] && ingame) // W = warp to level
\r
319 VW_FixRefreshBuffer ();
\r
320 US_CenterWindow(26,3);
\r
322 US_Print(" Warp to which level(0-16):");
\r
324 esc = !US_LineInput (px,py,str,NULL,true,2,0);
\r
327 level = atoi (str);
\r
328 if (level>=0 && level<=16)
\r
330 gamestate.mapon = level;
\r
331 playstate = warptolevel;
\r
339 //===========================================================================
\r
342 ==========================
\r
346 = Shuts down all ID_?? managers
\r
348 ==========================
\r
351 void ShutdownId (void)
\r
362 //===========================================================================
\r
365 ==========================
\r
369 ==========================
\r
372 void Quit (char *error)
\r
375 if (error && *error)
\r
385 //===========================================================================
\r
388 ==========================
\r
392 = Load a few things right away
\r
394 ==========================
\r
398 #include "piracy.h"
\r
401 void InitGame (void)
\r
409 // Handle piracy screen...
\r
411 movedata(FP_SEG(PIRACY),(unsigned)PIRACY,0xb800,displayofs,4000);
\r
412 while ((bioskey(0)>>8) != sc_Return);
\r
416 #if GRMODE == EGAGR
\r
417 if (mminfo.mainmem < 335l*1024)
\r
421 clrscr(); // we can't include CONIO because of a name conflict
\r
424 puts ("There is not enough memory available to play the game reliably. You can");
\r
425 puts ("play anyway, but an out of memory condition will eventually pop up. The");
\r
426 puts ("correct solution is to unload some TSRs or rename your CONFIG.SYS and");
\r
427 puts ("AUTOEXEC.BAT to free up more memory.\n");
\r
428 puts ("Do you want to (Q)uit, or (C)ontinue?");
\r
430 if ( (i>>8) != sc_C)
\r
443 // US_UpdateTextScreen();
\r
449 // load in and lock down some basic chunks
\r
454 CA_MarkGrChunk(STARTFONT);
\r
455 CA_MarkGrChunk(STARTFONTM);
\r
456 CA_MarkGrChunk(STARTTILE8);
\r
457 CA_MarkGrChunk(STARTTILE8M);
\r
458 for (i=KEEN_LUMP_START;i<=KEEN_LUMP_END;i++)
\r
461 CA_CacheMarks (NULL, 0);
\r
463 MM_SetLock (&grsegs[STARTFONT],true);
\r
464 MM_SetLock (&grsegs[STARTFONTM],true);
\r
465 MM_SetLock (&grsegs[STARTTILE8],true);
\r
466 MM_SetLock (&grsegs[STARTTILE8M],true);
\r
467 for (i=KEEN_LUMP_START;i<=KEEN_LUMP_END;i++)
\r
468 MM_SetLock (&grsegs[i],true);
\r
470 CA_LoadAllSounds ();
\r
474 US_FinishTextScreen();
\r
476 VW_SetScreenMode (GRMODE);
\r
477 VW_ClearVideo (BLACK);
\r
482 //===========================================================================
\r
485 ==========================
\r
489 ==========================
\r
496 if (stricmp(_argv[1], "/VER") == 0)
\r
498 printf("\nKeen Dreams version 1.93 (Rev 1)\n");
\r
499 printf("developed for use with 100%% IBM compatibles\n");
\r
500 printf("that have 640K memory, DOS version 3.3 or later,\n");
\r
501 printf("and an EGA or VGA display adapter.\n");
\r
502 printf("Copyright 1991-1993 Softdisk Publishing.\n");
\r
503 printf("Commander Keen is a trademark of Id Software.\n");
\r
507 if (stricmp(_argv[1], "/?") == 0)
\r
509 printf("\nKeen Dreams version 1.93\n");
\r
510 printf("Copyright 1991-1993 Softdisk Publishing.\n\n");
\r
511 printf("Commander Keen is a trademark of Id Software.\n");
\r
512 printf("Type KDREAMS from the DOS prompt to run.\n\n");
\r
513 printf("KDREAMS /COMP for SVGA compatibility mode\n");
\r
514 printf("KDREAMS /NODR stops program hang with the drive still on\n");
\r
515 printf("KDREAMS /NOAL disables AdLib and Sound Blaster detection\n");
\r
516 printf("KDREAMS /NOSB disables Sound Blaster detection\n");
\r
517 printf("KDREAMS /NOJOYS ignores joystick\n");
\r
518 printf("KDREAMS /NOMOUSE ignores mouse\n");
\r
519 printf("KDREAMS /HIDDENCARD overrides video card detection\n");
\r
520 printf("KDREAMS /VER for version and compatibility information\n");
\r
521 printf("KDREAMS /? for this help information\n");
\r
530 DemoLoop(); // DemoLoop calls Quit when everything is done
\r
531 Quit("Demo loop exited???");
\r