summaryrefslogtreecommitdiffstats
path: root/apps/plugins/sdl/progs/wolf3d/wl_debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/sdl/progs/wolf3d/wl_debug.c')
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_debug.c863
1 files changed, 863 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_debug.c b/apps/plugins/sdl/progs/wolf3d/wl_debug.c
new file mode 100644
index 0000000000..bfa651e87c
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_debug.c
@@ -0,0 +1,863 @@
+// WL_DEBUG.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+#ifdef USE_CLOUDSKY
+#include "wl_cloudsky.h"
+#endif
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+#define VIEWTILEX (viewwidth/16)
+#define VIEWTILEY (viewheight/16)
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+#ifdef DEBUGKEYS
+
+int DebugKeys (void);
+
+
+// from WL_DRAW.C
+
+void ScalePost();
+void SimpleScaleShape (int xcenter, int shapenum, unsigned height);
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+int maporgx;
+int maporgy;
+enum {mapview,tilemapview,actoratview,visview} viewtype;
+
+void ViewMap (void);
+
+//===========================================================================
+
+/*
+==================
+=
+= CountObjects
+=
+==================
+*/
+
+void CountObjects (void)
+{
+ int i,total,count,active,inactive,doors;
+ objtype *obj;
+
+ CenterWindow (17,7);
+ active = inactive = count = doors = 0;
+
+ US_Print ("Total statics :");
+ total = (int)(laststatobj-&statobjlist[0]);
+ US_PrintUnsigned (total);
+
+ char str[60];
+ sprintf(str,"\nlaststatobj=%.8X",(int32_t)(uintptr_t)laststatobj);
+ US_Print(str);
+
+ US_Print ("\nIn use statics:");
+ for (i=0;i<total;i++)
+ {
+ if (statobjlist[i].shapenum != -1)
+ count++;
+ else
+ doors++; //debug
+ }
+ US_PrintUnsigned (count);
+
+ US_Print ("\nDoors :");
+ US_PrintUnsigned (doornum);
+
+ for (obj=player->next;obj;obj=obj->next)
+ {
+ if (obj->active)
+ active++;
+ else
+ inactive++;
+ }
+
+ US_Print ("\nTotal actors :");
+ US_PrintUnsigned (active+inactive);
+
+ US_Print ("\nActive actors :");
+ US_PrintUnsigned (active);
+
+ VW_UpdateScreen();
+ IN_Ack ();
+}
+
+
+//===========================================================================
+
+/*
+===================
+=
+= PictureGrabber
+=
+===================
+*/
+void PictureGrabber (void)
+{
+ static char fname[] = "WSHOT000.BMP";
+
+ for(int i = 0; i < 1000; i++)
+ {
+ fname[7] = i % 10 + '0';
+ fname[6] = (i / 10) % 10 + '0';
+ fname[5] = i / 100 + '0';
+ int file = open(fname, O_RDONLY | O_BINARY);
+ if(file == -1) break; // file does not exist, so use that filename
+ close(file);
+ }
+
+ // overwrites WSHOT999.BMP if all wshot files exist
+
+ SDL_SaveBMP(curSurface, fname);
+
+ CenterWindow (18,2);
+ US_PrintCentered ("Screenshot taken");
+ VW_UpdateScreen();
+ IN_Ack();
+}
+
+
+//===========================================================================
+
+/*
+===================
+=
+= BasicOverhead
+=
+===================
+*/
+
+void BasicOverhead (void)
+{
+ int x, y, z, offx, offy;
+
+ z = 128/MAPSIZE; // zoom scale
+ offx = 320/2;
+ offy = (160-MAPSIZE*z)/2;
+
+#ifdef MAPBORDER
+ int temp = viewsize;
+ NewViewSize(16);
+ DrawPlayBorder();
+#endif
+
+ // right side (raw)
+
+ for(x=0;x<MAPSIZE;x++)
+ for(y=0;y<MAPSIZE;y++)
+ VWB_Bar(x*z+offx, y*z+offy,z,z,(unsigned)(uintptr_t)actorat[x][y]);
+
+ // left side (filtered)
+
+ uintptr_t tile;
+ int color;
+ offx -= 128;
+
+ for(x=0;x<MAPSIZE;x++)
+ {
+ for(y=0;y<MAPSIZE;y++)
+ {
+ tile = (uintptr_t)actorat[x][y];
+ if (ISPOINTER(tile) && ((objtype *)tile)->flags&FL_SHOOTABLE) color = 72; // enemy
+ else if (!tile || ISPOINTER(tile))
+ {
+ if (spotvis[x][y]) color = 111; // visable
+ else color = 0; // nothing
+ }
+ else if (MAPSPOT(x,y,1) == PUSHABLETILE) color = 171; // pushwall
+ else if (tile == 64) color = 158; // solid obj
+ else if (tile < 128) color = 154; // walls
+ else if (tile < 256) color = 146; // doors
+
+ VWB_Bar(x*z+offx, y*z+offy,z,z,color);
+ }
+ }
+
+ VWB_Bar(player->tilex*z+offx,player->tiley*z+offy,z,z,15); // player
+
+ // resize the border to match
+
+ VW_UpdateScreen();
+ IN_Ack();
+
+#ifdef MAPBORDER
+ NewViewSize(temp);
+ DrawPlayBorder();
+#endif
+}
+
+
+//===========================================================================
+
+/*
+================
+=
+= ShapeTest
+=
+================
+*/
+
+void ShapeTest (void)
+{
+ //TODO
+#if NOTYET
+ extern word NumDigi;
+ extern word *DigiList;
+ extern int postx;
+ extern int postwidth;
+ extern byte *postsource;
+ static char buf[10];
+
+ boolean done;
+ ScanCode scan;
+ int i,j,k,x;
+ longword l;
+ byte *addr;
+ soundnames sound;
+ // PageListStruct far *page;
+
+ CenterWindow(20,16);
+ VW_UpdateScreen();
+ for (i = 0,done = false; !done;)
+ {
+ US_ClearWindow();
+ sound = (soundnames) -1;
+
+ // page = &PMPages[i];
+ US_Print(" Page #");
+ US_PrintUnsigned(i);
+ if (i < PMSpriteStart)
+ US_Print(" (Wall)");
+ else if (i < PMSoundStart)
+ US_Print(" (Sprite)");
+ else if (i == ChunksInFile - 1)
+ US_Print(" (Sound Info)");
+ else
+ US_Print(" (Sound)");
+
+ /* US_Print("\n XMS: ");
+ if (page->xmsPage != -1)
+ US_PrintUnsigned(page->xmsPage);
+ else
+ US_Print("No");
+
+ US_Print("\n Main: ");
+ if (page->mainPage != -1)
+ US_PrintUnsigned(page->mainPage);
+ else if (page->emsPage != -1)
+ {
+ US_Print("EMS ");
+ US_PrintUnsigned(page->emsPage);
+ }
+ else
+ US_Print("No");
+
+ US_Print("\n Last hit: ");
+ US_PrintUnsigned(page->lastHit);*/
+
+ US_Print("\n Address: ");
+ addr = (byte *) PM_GetPage(i);
+ sprintf(buf,"0x%08X",(int32_t) addr);
+ US_Print(buf);
+
+ if (addr)
+ {
+ if (i < PMSpriteStart)
+ {
+ //
+ // draw the wall
+ //
+ vbuf += 32*SCREENWIDTH;
+ postx = 128;
+ postwidth = 1;
+ postsource = addr;
+ for (x=0;x<64;x++,postx++,postsource+=64)
+ {
+ wallheight[postx] = 256;
+ ScalePost ();
+ }
+ vbuf -= 32*SCREENWIDTH;
+ }
+ else if (i < PMSoundStart)
+ {
+ //
+ // draw the sprite
+ //
+ vbuf += 32*SCREENWIDTH;
+ SimpleScaleShape (160, i-PMSpriteStart, 64);
+ vbuf -= 32*SCREENWIDTH;
+ }
+ else if (i == ChunksInFile - 1)
+ {
+ US_Print("\n\n Number of sounds: ");
+ US_PrintUnsigned(NumDigi);
+ for (l = j = k = 0;j < NumDigi;j++)
+ {
+ l += DigiList[(j * 2) + 1];
+ k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
+ }
+ US_Print("\n Total bytes: ");
+ US_PrintUnsigned(l);
+ US_Print("\n Total pages: ");
+ US_PrintUnsigned(k);
+ }
+ else
+ {
+ byte *dp = addr;
+ for (j = 0;j < NumDigi;j++)
+ {
+ k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
+ if ((i >= PMSoundStart + DigiList[j * 2])
+ && (i < PMSoundStart + DigiList[j * 2] + k))
+ break;
+ }
+ if (j < NumDigi)
+ {
+ sound = (soundnames) j;
+ US_Print("\n Sound #");
+ US_PrintUnsigned(j);
+ US_Print("\n Segment #");
+ US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);
+ }
+ for (j = 0;j < PageLengths[i];j += 32)
+ {
+ byte v = dp[j];
+ int v2 = (unsigned)v;
+ v2 -= 128;
+ v2 /= 4;
+ if (v2 < 0)
+ VWB_Vlin(WindowY + WindowH - 32 + v2,
+ WindowY + WindowH - 32,
+ WindowX + 8 + (j / 32),BLACK);
+ else
+ VWB_Vlin(WindowY + WindowH - 32,
+ WindowY + WindowH - 32 + v2,
+ WindowX + 8 + (j / 32),BLACK);
+ }
+ }
+ }
+
+ VW_UpdateScreen();
+
+ IN_Ack();
+ scan = LastScan;
+
+ IN_ClearKey(scan);
+ switch (scan)
+ {
+ case sc_LeftArrow:
+ if (i)
+ i--;
+ break;
+ case sc_RightArrow:
+ if (++i >= ChunksInFile)
+ i--;
+ break;
+ case sc_W: // Walls
+ i = 0;
+ break;
+ case sc_S: // Sprites
+ i = PMSpriteStart;
+ break;
+ case sc_D: // Digitized
+ i = PMSoundStart;
+ break;
+ case sc_I: // Digitized info
+ i = ChunksInFile - 1;
+ break;
+/* case sc_L: // Load all pages
+ for (j = 0;j < ChunksInFile;j++)
+ PM_GetPage(j);
+ break;*/
+ case sc_P:
+ if (sound != -1)
+ SD_PlayDigitized(sound,8,8);
+ break;
+ case sc_Escape:
+ done = true;
+ break;
+/* case sc_Enter:
+ PM_GetPage(i);
+ break;*/
+ }
+ }
+ SD_StopDigitized();
+#endif
+}
+
+
+//===========================================================================
+
+
+/*
+================
+=
+= DebugKeys
+=
+================
+*/
+
+int DebugKeys (void)
+{
+ boolean esc;
+ int level;
+
+ if (Keyboard[sc_B]) // B = border color
+ {
+ CenterWindow(20,3);
+ PrintY+=6;
+ US_Print(" Border color (0-56): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>=0 && level<=99)
+ {
+ if (level<30) level += 31;
+ else
+ {
+ if (level > 56) level=31;
+ else level -= 26;
+ }
+
+ bordercol=level*4+3;
+
+ if (bordercol == VIEWCOLOR)
+ DrawStatusBorder(bordercol);
+
+ DrawPlayBorder();
+
+ return 0;
+ }
+ }
+ return 1;
+ }
+ if (Keyboard[sc_C]) // C = count objects
+ {
+ CountObjects();
+ return 1;
+ }
+ if (Keyboard[sc_D]) // D = Darkone's FPS counter
+ {
+ CenterWindow (22,2);
+ if (fpscounter)
+ US_PrintCentered ("Darkone's FPS Counter OFF");
+ else
+ US_PrintCentered ("Darkone's FPS Counter ON");
+ VW_UpdateScreen();
+ IN_Ack();
+ fpscounter ^= 1;
+ return 1;
+ }
+ if (Keyboard[sc_E]) // E = quit level
+ playstate = ex_completed;
+
+ if (Keyboard[sc_F]) // F = facing spot
+ {
+ char str[60];
+ CenterWindow (14,6);
+ US_Print ("x:"); US_PrintUnsigned (player->x);
+ US_Print (" ("); US_PrintUnsigned (player->x%65536);
+ US_Print (")\ny:"); US_PrintUnsigned (player->y);
+ US_Print (" ("); US_PrintUnsigned (player->y%65536);
+ US_Print (")\nA:"); US_PrintUnsigned (player->angle);
+ US_Print (" X:"); US_PrintUnsigned (player->tilex);
+ US_Print (" Y:"); US_PrintUnsigned (player->tiley);
+ US_Print ("\n1:"); US_PrintUnsigned (tilemap[player->tilex][player->tiley]);
+ sprintf(str," 2:%.8X",(unsigned)(uintptr_t)actorat[player->tilex][player->tiley]); US_Print(str);
+ US_Print ("\nf 1:"); US_PrintUnsigned (player->areanumber);
+ US_Print (" 2:"); US_PrintUnsigned (MAPSPOT(player->tilex,player->tiley,1));
+ US_Print (" 3:");
+ if ((unsigned)(uintptr_t)actorat[player->tilex][player->tiley] < 256)
+ US_PrintUnsigned (spotvis[player->tilex][player->tiley]);
+ else
+ US_PrintUnsigned (actorat[player->tilex][player->tiley]->flags);
+ VW_UpdateScreen();
+ IN_Ack();
+ return 1;
+ }
+
+ if (Keyboard[sc_G]) // G = god mode
+ {
+ CenterWindow (12,2);
+ if (godmode == 0)
+ US_PrintCentered ("God mode ON");
+ else if (godmode == 1)
+ US_PrintCentered ("God (no flash)");
+ else if (godmode == 2)
+ US_PrintCentered ("God mode OFF");
+
+ VW_UpdateScreen();
+ IN_Ack();
+ if (godmode != 2)
+ godmode++;
+ else
+ godmode = 0;
+ return 1;
+ }
+ if (Keyboard[sc_H]) // H = hurt self
+ {
+ IN_ClearKeysDown ();
+ TakeDamage (16,NULL);
+ }
+ else if (Keyboard[sc_I]) // I = item cheat
+ {
+ CenterWindow (12,3);
+ US_PrintCentered ("Free items!");
+ VW_UpdateScreen();
+ GivePoints (100000);
+ HealSelf (99);
+ if (gamestate.bestweapon<wp_chaingun)
+ GiveWeapon (gamestate.bestweapon+1);
+ gamestate.ammo += 50;
+ if (gamestate.ammo > 99)
+ gamestate.ammo = 99;
+ DrawAmmo ();
+ IN_Ack ();
+ return 1;
+ }
+ else if (Keyboard[sc_K]) // K = give keys
+ {
+ CenterWindow(16,3);
+ PrintY+=6;
+ US_Print(" Give Key (1-4): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,1,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>0 && level<5)
+ GiveKey(level-1);
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_L]) // L = level ratios
+ {
+ byte x,start,end=LRpack;
+
+ if (end == 8) // wolf3d
+ {
+ CenterWindow(17,10);
+ start = 0;
+ }
+ else // sod
+ {
+ CenterWindow(17,12);
+ start = 0; end = 10;
+ }
+again:
+ for(x=start;x<end;x++)
+ {
+ US_PrintUnsigned(x+1);
+ US_Print(" ");
+ US_PrintUnsigned(LevelRatios[x].time/60);
+ US_Print(":");
+ if (LevelRatios[x].time%60 < 10)
+ US_Print("0");
+ US_PrintUnsigned(LevelRatios[x].time%60);
+ US_Print(" ");
+ US_PrintUnsigned(LevelRatios[x].kill);
+ US_Print("% ");
+ US_PrintUnsigned(LevelRatios[x].secret);
+ US_Print("% ");
+ US_PrintUnsigned(LevelRatios[x].treasure);
+ US_Print("%\n");
+ }
+ VW_UpdateScreen();
+ IN_Ack();
+ if (end == 10 && gamestate.mapon > 9)
+ {
+ start = 10; end = 20;
+ CenterWindow(17,12);
+ goto again;
+ }
+
+ return 1;
+ }
+ else if (Keyboard[sc_N]) // N = no clip
+ {
+ noclip^=1;
+ CenterWindow (18,3);
+ if (noclip)
+ US_PrintCentered ("No clipping ON");
+ else
+ US_PrintCentered ("No clipping OFF");
+ VW_UpdateScreen();
+ IN_Ack ();
+ return 1;
+ }
+ else if (Keyboard[sc_O]) // O = basic overhead
+ {
+ BasicOverhead();
+ return 1;
+ }
+ else if(Keyboard[sc_P]) // P = Ripper's picture grabber
+ {
+ PictureGrabber();
+ return 1;
+ }
+ else if (Keyboard[sc_Q]) // Q = fast quit
+ Quit (NULL);
+ else if (Keyboard[sc_S]) // S = slow motion
+ {
+ CenterWindow(30,3);
+ PrintY+=6;
+ US_Print(" Slow Motion steps (default 14): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>=0 && level<=50)
+ singlestep = level;
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_T]) // T = shape test
+ {
+ ShapeTest ();
+ return 1;
+ }
+ else if (Keyboard[sc_V]) // V = extra VBLs
+ {
+ CenterWindow(30,3);
+ PrintY+=6;
+ US_Print(" Add how many extra VBLs(0-8): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,1,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>=0 && level<=8)
+ extravbls = level;
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_W]) // W = warp to level
+ {
+ CenterWindow(26,3);
+ PrintY+=6;
+#ifndef SPEAR
+ US_Print(" Warp to which level(1-10): ");
+#else
+ US_Print(" Warp to which level(1-21): ");
+#endif
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (!esc)
+ {
+ level = atoi (str);
+#ifndef SPEAR
+ if (level>0 && level<11)
+#else
+ if (level>0 && level<22)
+#endif
+ {
+ gamestate.mapon = level-1;
+ playstate = ex_warped;
+ }
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_X]) // X = item cheat
+ {
+ CenterWindow (12,3);
+ US_PrintCentered ("Extra stuff!");
+ VW_UpdateScreen();
+ // DEBUG: put stuff here
+ IN_Ack ();
+ return 1;
+ }
+#ifdef USE_CLOUDSKY
+ else if(Keyboard[sc_Z])
+ {
+ char defstr[15];
+
+ CenterWindow(34,4);
+ PrintY+=6;
+ US_Print(" Recalculate sky with seek: ");
+ int seekpx = px, seekpy = py;
+ US_PrintUnsigned(curSky->seed);
+ US_Print("\n Use color map (0-");
+ US_PrintUnsigned(numColorMaps - 1);
+ US_Print("): ");
+ int mappx = px, mappy = py;
+ US_PrintUnsigned(curSky->colorMapIndex);
+ VW_UpdateScreen();
+
+ sprintf(defstr, "%u", curSky->seed);
+ esc = !US_LineInput(seekpx, seekpy, str, defstr, true, 10, 0);
+ if(esc) return 0;
+ curSky->seed = (uint32_t) atoi(str);
+
+ sprintf(defstr, "%u", curSky->colorMapIndex);
+ esc = !US_LineInput(mappx, mappy, str, defstr, true, 10, 0);
+ if(esc) return 0;
+ uint32_t newInd = (uint32_t) atoi(str);
+ if(newInd < (uint32_t) numColorMaps)
+ {
+ curSky->colorMapIndex = newInd;
+ InitSky();
+ }
+ else
+ {
+ CenterWindow (18,3);
+ US_PrintCentered ("Illegal color map!");
+ VW_UpdateScreen();
+ IN_Ack ();
+ }
+ }
+#endif
+
+ return 0;
+}
+
+
+#if 0
+/*
+===================
+=
+= OverheadRefresh
+=
+===================
+*/
+
+void OverheadRefresh (void)
+{
+ unsigned x,y,endx,endy,sx,sy;
+ unsigned tile;
+
+
+ endx = maporgx+VIEWTILEX;
+ endy = maporgy+VIEWTILEY;
+
+ for (y=maporgy;y<endy;y++)
+ {
+ for (x=maporgx;x<endx;x++)
+ {
+ sx = (x-maporgx)*16;
+ sy = (y-maporgy)*16;
+
+ switch (viewtype)
+ {
+#if 0
+ case mapview:
+ tile = *(mapsegs[0]+farmapylookup[y]+x);
+ break;
+
+ case tilemapview:
+ tile = tilemap[x][y];
+ break;
+
+ case visview:
+ tile = spotvis[x][y];
+ break;
+#endif
+ case actoratview:
+ tile = (unsigned)actorat[x][y];
+ break;
+ }
+
+ if (tile<MAXWALLTILES)
+ LatchDrawTile(sx,sy,tile);
+ else
+ {
+ LatchDrawChar(sx,sy,NUMBERCHARS+((tile&0xf000)>>12));
+ LatchDrawChar(sx+8,sy,NUMBERCHARS+((tile&0x0f00)>>8));
+ LatchDrawChar(sx,sy+8,NUMBERCHARS+((tile&0x00f0)>>4));
+ LatchDrawChar(sx+8,sy+8,NUMBERCHARS+(tile&0x000f));
+ }
+ }
+ }
+}
+#endif
+
+#if 0
+/*
+===================
+=
+= ViewMap
+=
+===================
+*/
+
+void ViewMap (void)
+{
+ boolean button0held;
+
+ viewtype = actoratview;
+ // button0held = false;
+
+
+ maporgx = player->tilex - VIEWTILEX/2;
+ if (maporgx<0)
+ maporgx = 0;
+ if (maporgx>MAPSIZE-VIEWTILEX)
+ maporgx=MAPSIZE-VIEWTILEX;
+ maporgy = player->tiley - VIEWTILEY/2;
+ if (maporgy<0)
+ maporgy = 0;
+ if (maporgy>MAPSIZE-VIEWTILEY)
+ maporgy=MAPSIZE-VIEWTILEY;
+
+ do
+ {
+ //
+ // let user pan around
+ //
+ PollControls ();
+ if (controlx < 0 && maporgx>0)
+ maporgx--;
+ if (controlx > 0 && maporgx<mapwidth-VIEWTILEX)
+ maporgx++;
+ if (controly < 0 && maporgy>0)
+ maporgy--;
+ if (controly > 0 && maporgy<mapheight-VIEWTILEY)
+ maporgy++;
+
+#if 0
+ if (c.button0 && !button0held)
+ {
+ button0held = true;
+ viewtype++;
+ if (viewtype>visview)
+ viewtype = mapview;
+ }
+ if (!c.button0)
+ button0held = false;
+#endif
+
+ OverheadRefresh ();
+
+ } while (!Keyboard[sc_Escape]);
+
+ IN_ClearKeysDown ();
+}
+#endif
+#endif