8 =============================================================================
\r
12 =============================================================================
\r
15 #define VIEWTILEX (viewwidth/16)
\r
16 #define VIEWTILEY (viewheight/16)
\r
19 =============================================================================
\r
23 =============================================================================
\r
27 int DebugKeys (void);
\r
30 =============================================================================
\r
34 =============================================================================
\r
40 enum {mapview,tilemapview,actoratview,visview} viewtype;
\r
42 void ViewMap (void);
\r
44 //===========================================================================
\r
54 void DebugMemory (void)
\r
57 char scratch[80],str[10];
\r
59 spritetype _seg *block;
\r
61 CenterWindow (16,7);
\r
63 US_CPrint ("Memory Usage");
\r
64 US_CPrint ("------------");
\r
65 US_Print ("Total :");
\r
66 US_PrintUnsigned (mminfo.mainmem/1024);
\r
67 US_Print ("k\nFree :");
\r
68 US_PrintUnsigned (MM_UnusedMemory()/1024);
\r
69 US_Print ("k\nWith purge:");
\r
70 US_PrintUnsigned (MM_TotalFree()/1024);
\r
76 //===========================================================================
\r
86 void CountObjects (void)
\r
88 int i,total,count,active,inactive,doors;
\r
91 CenterWindow (16,7);
\r
92 active = inactive = count = doors = 0;
\r
94 US_Print ("Total statics :");
\r
95 total = laststatobj-&statobjlist[0];
\r
96 US_PrintUnsigned (total);
\r
98 US_Print ("\nIn use statics:");
\r
99 for (i=0;i<total;i++)
\r
100 if (statobjlist[i].shapenum != -1)
\r
104 US_PrintUnsigned (count);
\r
106 US_Print ("\nDoors :");
\r
107 US_PrintUnsigned (doornum);
\r
109 for (obj=player->next;obj;obj=obj->next)
\r
117 US_Print ("\nTotal actors :");
\r
118 US_PrintUnsigned (active+inactive);
\r
120 US_Print ("\nActive actors :");
\r
121 US_PrintUnsigned (active);
\r
127 //===========================================================================
\r
137 void PicturePause (void)
\r
142 byte far *dest,far *src;
\r
145 VW_ColorBorder (15);
\r
146 FinishPaletteShifts ();
\r
151 if (LastScan != sc_Enter)
\r
153 VW_ColorBorder (0);
\r
157 VW_ColorBorder (1);
\r
158 VW_SetScreen (0,0);
\r
165 MM_GetPtr (&buffer,64000);
\r
168 src = MK_FP(0xa000,displayofs);
\r
169 dest = (byte far *)buffer+p;
\r
171 for (x=0;x<16000;x++,dest+=4)
\r
179 src = MK_FP(0xa000,0);
\r
180 dest = (byte far *)buffer+51200+p;
\r
182 for (x=0;x<3200;x++,dest+=4)
\r
190 dest = MK_FP(0xa000,0);
\r
191 _fmemcpy (dest,buffer,64000);
\r
193 VL_SetPalette (&gamepal);
\r
205 //===========================================================================
\r
217 void ShapeTest (void)
\r
219 extern word NumDigi;
\r
220 extern word _seg *DigiList;
\r
221 static char buf[10];
\r
228 PageListStruct far *page;
\r
230 CenterWindow(20,16);
\r
232 for (i = 0,done = false;!done;)
\r
237 page = &PMPages[i];
\r
238 US_Print(" Page #");
\r
239 US_PrintUnsigned(i);
\r
240 if (i < PMSpriteStart)
\r
241 US_Print(" (Wall)");
\r
242 else if (i < PMSoundStart)
\r
243 US_Print(" (Sprite)");
\r
244 else if (i == ChunksInFile - 1)
\r
245 US_Print(" (Sound Info)");
\r
247 US_Print(" (Sound)");
\r
249 US_Print("\n XMS: ");
\r
250 if (page->xmsPage != -1)
\r
251 US_PrintUnsigned(page->xmsPage);
\r
255 US_Print("\n Main: ");
\r
256 if (page->mainPage != -1)
\r
257 US_PrintUnsigned(page->mainPage);
\r
258 else if (page->emsPage != -1)
\r
261 US_PrintUnsigned(page->emsPage);
\r
266 US_Print("\n Last hit: ");
\r
267 US_PrintUnsigned(page->lastHit);
\r
269 US_Print("\n Address: ");
\r
270 addr = PM_GetPageAddress(i);
\r
271 sprintf(buf,"0x%04x",(word)addr);
\r
276 if (i < PMSpriteStart)
\r
281 bufferofs += 32*SCREENWIDTH;
\r
284 postsource = ((long)((unsigned)addr))<<16;
\r
285 for (x=0;x<64;x++,postx++,postsource+=64)
\r
287 wallheight[postx] = 256;
\r
290 bufferofs -= 32*SCREENWIDTH;
\r
292 else if (i < PMSoundStart)
\r
297 bufferofs += 32*SCREENWIDTH;
\r
298 SimpleScaleShape (160, i-PMSpriteStart, 64);
\r
299 bufferofs -= 32*SCREENWIDTH;
\r
301 else if (i == ChunksInFile - 1)
\r
303 US_Print("\n\n Number of sounds: ");
\r
304 US_PrintUnsigned(NumDigi);
\r
305 for (l = j = k = 0;j < NumDigi;j++)
\r
307 l += DigiList[(j * 2) + 1];
\r
308 k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
\r
310 US_Print("\n Total bytes: ");
\r
311 US_PrintUnsigned(l);
\r
312 US_Print("\n Total pages: ");
\r
313 US_PrintUnsigned(k);
\r
317 byte far *dp = (byte far *)MK_FP(addr,0);
\r
318 for (j = 0;j < NumDigi;j++)
\r
320 k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
\r
323 (i >= PMSoundStart + DigiList[j * 2])
\r
324 && (i < PMSoundStart + DigiList[j * 2] + k)
\r
331 US_Print("\n Sound #");
\r
332 US_PrintUnsigned(j);
\r
333 US_Print("\n Segment #");
\r
334 US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);
\r
336 for (j = 0;j < page->length;j += 32)
\r
339 int v2 = (unsigned)v;
\r
343 VWB_Vlin(WindowY + WindowH - 32 + v2,
\r
344 WindowY + WindowH - 32,
\r
345 WindowX + 8 + (j / 32),BLACK);
\r
347 VWB_Vlin(WindowY + WindowH - 32,
\r
348 WindowY + WindowH - 32 + v2,
\r
349 WindowX + 8 + (j / 32),BLACK);
\r
356 while (!(scan = LastScan))
\r
366 case sc_RightArrow:
\r
367 if (++i >= ChunksInFile)
\r
370 case sc_W: // Walls
\r
373 case sc_S: // Sprites
\r
376 case sc_D: // Digitized
\r
379 case sc_I: // Digitized info
\r
380 i = ChunksInFile - 1;
\r
382 case sc_L: // Load all pages
\r
383 for (j = 0;j < ChunksInFile;j++)
\r
387 // if (sound != -1)
\r
388 // SD_PlayDigitized(sound);
\r
398 SD_StopDigitized();
\r
404 //===========================================================================
\r
415 int DebugKeys (void)
\r
420 if (Keyboard[sc_B]) // B = border color
\r
422 CenterWindow(24,3);
\r
424 US_Print(" Border color (0-15):");
\r
426 esc = !US_LineInput (px,py,str,NULL,true,2,0);
\r
429 level = atoi (str);
\r
430 if (level>=0 && level<=15)
\r
431 VW_ColorBorder (level);
\r
436 if (Keyboard[sc_C]) // C = count objects
\r
442 if (Keyboard[sc_E]) // E = quit level
\r
446 playstate = ex_completed;
\r
447 // gamestate.mapon++;
\r
450 if (Keyboard[sc_F]) // F = facing spot
\r
452 CenterWindow (14,4);
\r
454 US_PrintUnsigned (player->x);
\r
456 US_PrintUnsigned (player->y);
\r
458 US_PrintUnsigned (player->angle);
\r
464 if (Keyboard[sc_G]) // G = god mode
\r
466 CenterWindow (12,2);
\r
468 US_PrintCentered ("God mode OFF");
\r
470 US_PrintCentered ("God mode ON");
\r
476 if (Keyboard[sc_H]) // H = hurt self
\r
478 IN_ClearKeysDown ();
\r
479 TakeDamage (16,NULL);
\r
481 else if (Keyboard[sc_I]) // I = item cheat
\r
483 CenterWindow (12,3);
\r
484 US_PrintCentered ("Free items!");
\r
486 GivePoints (100000);
\r
488 if (gamestate.bestweapon<wp_chaingun)
\r
489 GiveWeapon (gamestate.bestweapon+1);
\r
490 gamestate.ammo += 50;
\r
491 if (gamestate.ammo > 99)
\r
492 gamestate.ammo = 99;
\r
497 else if (Keyboard[sc_M]) // M = memory info
\r
503 else if (Keyboard[sc_N]) // N = no clip
\r
506 CenterWindow (18,3);
\r
508 US_PrintCentered ("No clipping ON");
\r
510 US_PrintCentered ("No clipping OFF");
\r
517 else if (Keyboard[sc_O]) // O = overhead
\r
523 else if (Keyboard[sc_P]) // P = pause with no screen disruptioon
\r
528 else if (Keyboard[sc_Q]) // Q = fast quit
\r
530 else if (Keyboard[sc_S]) // S = slow motion
\r
533 CenterWindow (18,3);
\r
535 US_PrintCentered ("Slow motion ON");
\r
537 US_PrintCentered ("Slow motion OFF");
\r
542 else if (Keyboard[sc_T]) // T = shape test
\r
547 else if (Keyboard[sc_V]) // V = extra VBLs
\r
549 CenterWindow(30,3);
\r
551 US_Print(" Add how many extra VBLs(0-8):");
\r
553 esc = !US_LineInput (px,py,str,NULL,true,2,0);
\r
556 level = atoi (str);
\r
557 if (level>=0 && level<=8)
\r
562 else if (Keyboard[sc_W]) // W = warp to level
\r
564 CenterWindow(26,3);
\r
567 US_Print(" Warp to which level(1-10):");
\r
569 US_Print(" Warp to which level(1-21):");
\r
572 esc = !US_LineInput (px,py,str,NULL,true,2,0);
\r
575 level = atoi (str);
\r
577 if (level>0 && level<11)
\r
579 if (level>0 && level<22)
\r
582 gamestate.mapon = level-1;
\r
583 playstate = ex_warped;
\r
588 else if (Keyboard[sc_X]) // X = item cheat
\r
590 CenterWindow (12,3);
\r
591 US_PrintCentered ("Extra stuff!");
\r
593 // DEBUG: put stuff here
\r
604 ===================
\r
608 ===================
\r
611 void OverheadRefresh (void)
\r
613 unsigned x,y,endx,endy,sx,sy;
\r
617 endx = maporgx+VIEWTILEX;
\r
618 endy = maporgy+VIEWTILEY;
\r
620 for (y=maporgy;y<endy;y++)
\r
621 for (x=maporgx;x<endx;x++)
\r
623 sx = (x-maporgx)*16;
\r
624 sy = (y-maporgy)*16;
\r
630 tile = *(mapsegs[0]+farmapylookup[y]+x);
\r
634 tile = tilemap[x][y];
\r
638 tile = spotvis[x][y];
\r
642 tile = (unsigned)actorat[x][y];
\r
646 if (tile<MAXWALLTILES)
\r
647 LatchDrawTile(sx,sy,tile);
\r
650 LatchDrawChar(sx,sy,NUMBERCHARS+((tile&0xf000)>>12));
\r
651 LatchDrawChar(sx+8,sy,NUMBERCHARS+((tile&0x0f00)>>8));
\r
652 LatchDrawChar(sx,sy+8,NUMBERCHARS+((tile&0x00f0)>>4));
\r
653 LatchDrawChar(sx+8,sy+8,NUMBERCHARS+(tile&0x000f));
\r
662 ===================
\r
666 ===================
\r
669 void ViewMap (void)
\r
671 boolean button0held;
\r
673 viewtype = actoratview;
\r
674 // button0held = false;
\r
677 maporgx = player->tilex - VIEWTILEX/2;
\r
680 if (maporgx>MAPSIZE-VIEWTILEX)
\r
681 maporgx=MAPSIZE-VIEWTILEX;
\r
682 maporgy = player->tiley - VIEWTILEY/2;
\r
685 if (maporgy>MAPSIZE-VIEWTILEY)
\r
686 maporgy=MAPSIZE-VIEWTILEY;
\r
691 // let user pan around
\r
694 if (controlx < 0 && maporgx>0)
\r
696 if (controlx > 0 && maporgx<mapwidth-VIEWTILEX)
\r
698 if (controly < 0 && maporgy>0)
\r
700 if (controly > 0 && maporgy<mapheight-VIEWTILEY)
\r
704 if (c.button0 && !button0held)
\r
706 button0held = true;
\r
708 if (viewtype>visview)
\r
709 viewtype = mapview;
\r
712 button0held = false;
\r
715 OverheadRefresh ();
\r
717 } while (!Keyboard[sc_Escape]);
\r
719 IN_ClearKeysDown ();
\r