+++ /dev/null
-/* Catacomb Apocalypse Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
- */\r
-\r
-// C3_DEBUG.C\r
-\r
-#include "DEF.H"\r
-#include "gelib.h"\r
-#pragma hdrstop\r
-\r
-/*\r
-=============================================================================\r
-\r
- LOCAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-#define DEBUG_OVERHEAD 0\r
-\r
-\r
-#define VIEWTILEX 20\r
-#define VIEWTILEY (VIEWHEIGHT/16)\r
-\r
-/*\r
-=============================================================================\r
-\r
- GLOBAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- LOCAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-short colordelay=0;\r
-//boolean autofire=false;\r
-int maporgx;\r
-int maporgy;\r
-enum {mapview,tilemapview,actoratview,visview,mapseg2,lastview} viewtype;\r
-\r
-void ViewMap (void);\r
-\r
-//===========================================================================\r
-\r
-#if 0\r
-/*\r
-================\r
-=\r
-= PicturePause\r
-=\r
-================\r
-*/\r
-\r
-void PicturePause (void)\r
-{\r
- int y;\r
- unsigned source;\r
-\r
- source = displayofs+panadjust;\r
-\r
-// VW_ColorBorder (15);\r
- VW_SetLineWidth (40);\r
- VW_SetScreen (0,0);\r
-\r
- if (source<0x10000l-200*64)\r
- {\r
- //\r
- // copy top line first\r
- //\r
- for (y=0;y<200;y++)\r
- VW_ScreenToScreen (source+y*64,y*40,40,1);\r
- }\r
- else\r
- {\r
- //\r
- // copy bottom line first\r
- //\r
- for (y=199;y>=0;y--)\r
- VW_ScreenToScreen (source+y*64,y*40,40,1);\r
- }\r
-\r
- IN_Shutdown ();\r
-\r
- VW_WaitVBL(70);\r
- bioskey(0);\r
- VW_WaitVBL(70);\r
- Quit (NULL);\r
-}\r
-#endif\r
-\r
-\r
-//===========================================================================\r
-\r
-//===========================================================================\r
-\r
-#define sc_1 0x02\r
-#define sc_2 0x03\r
-#define sc_3 0x04\r
-#define sc_4 0x05\r
-#define sc_5 0x06\r
-#define sc_6 0x07\r
-#define sc_7 0x08\r
-#define sc_8 0x09\r
-#define sc_9 0x0a\r
-#define sc_0 0x0b\r
-\r
-\r
-\r
-/*\r
-================\r
-=\r
-= DebugKeys\r
-=\r
-================\r
-*/\r
-\r
-int DebugKeys (void)\r
-{\r
- boolean esc;\r
- int level,i;\r
-\r
-#if DEBUG_KEYS_AVAILABLE\r
- if (Keyboard[sc_R])\r
- {\r
- CenterWindow (12,2);\r
- if (autofire)\r
- US_PrintCentered ("Rapid-Fire OFF");\r
- else\r
- US_PrintCentered ("Rapid-Fire ON");\r
- VW_UpdateScreen();\r
- IN_Ack();\r
- autofire ^= 1;\r
- return 1;\r
- }\r
-#endif\r
-\r
-#if DEBUG_KEYS_AVAILABLE\r
- if (Keyboard[sc_A])\r
- {\r
- char levelstr[50];\r
- unsigned org_tile,org_mapon,msgnum;\r
- boolean newmsg=true,newlevel=false;\r
-\r
- VW_FixRefreshBuffer ();\r
- CenterWindow (16,3);\r
- US_Print("\n");\r
- US_CPrint("Message Test");\r
- VW_UpdateScreen();\r
-\r
- org_mapon = mapon;\r
- msgnum = (org_tile = *(mapsegs[0]+farmapylookup[player->tiley]+player->tilex))-NAMESTART;\r
- while (1)\r
- {\r
- // Get outta' here\r
- //\r
- if (Keyboard[sc_Escape])\r
- {\r
- while (Keyboard[sc_Escape]);\r
- break;\r
- }\r
-\r
- // Move to previous message\r
- //\r
- if (Keyboard[sc_UpArrow])\r
- {\r
- if (msgnum)\r
- {\r
- msgnum--;\r
- newmsg = true;\r
- }\r
- }\r
-\r
- // Move to next message\r
- //\r
- if (Keyboard[sc_DownArrow])\r
- {\r
- if (msgnum < 24)\r
- {\r
- msgnum++;\r
- newmsg = true;\r
- }\r
- }\r
-\r
- // Move to previous level\r
- //\r
- if (Keyboard[sc_LeftArrow])\r
- {\r
- if (mapon)\r
- {\r
- MM_SetPurge(&grsegs[LEVEL1TEXT+mapon],3);\r
- mapon--;\r
- newlevel = true;\r
- }\r
- }\r
-\r
- // Move to next level\r
- //\r
- if (Keyboard[sc_RightArrow])\r
- {\r
- if (mapon < LASTMAP-1)\r
- {\r
- MM_SetPurge(&grsegs[LEVEL1TEXT+mapon],3);\r
- mapon++;\r
- newlevel = true;\r
- }\r
- }\r
-\r
- // Load new level text\r
- //\r
- if (newlevel)\r
- {\r
- CA_CacheGrChunk(LEVEL1TEXT+mapon);\r
- ScanText();\r
- newmsg = true;\r
- newlevel=false;\r
- }\r
-\r
- // Display new message text\r
- //\r
- if (newmsg)\r
- {\r
- *(mapsegs[0]+farmapylookup[player->tiley]+player->tilex) = msgnum+NAMESTART;\r
- DrawText(true);\r
- strcpy(levelstr,"Level: ");\r
- itoa(mapon,levelstr+strlen(levelstr),10);\r
- strcat(levelstr," Msg: ");\r
- itoa(msgnum,levelstr+strlen(levelstr),10);\r
- DisplaySMsg(levelstr,NULL);\r
- newmsg = false;\r
-\r
- if (Keyboard[sc_UpArrow] || Keyboard[sc_DownArrow] || Keyboard[sc_LeftArrow] || Keyboard[sc_RightArrow])\r
- VW_WaitVBL(6);\r
- }\r
-\r
- }\r
-// Restore game\r
-//\r
- MM_SetPurge(&grsegs[LEVEL1TEXT+mapon],3);\r
- mapon = org_mapon;\r
- CA_CacheGrChunk(LEVEL1TEXT+mapon);\r
- ScanText();\r
- *(mapsegs[0]+farmapylookup[player->tiley]+player->tilex) = org_tile;\r
- DrawText(true);\r
- status_flag = 0;\r
- }\r
-\r
-\r
- if (Keyboard[sc_V])\r
- {\r
- displayofs = bufferofs = screenloc[screenpage];\r
- CenterWindow (16,4);\r
- US_CPrint("\n"GAMENAME);\r
- US_CPrint(VERSION);\r
- US_CPrint(REVISION);\r
- VW_UpdateScreen();\r
- IN_Ack ();\r
- }\r
-\r
-#endif\r
- if (Keyboard[sc_Q]) // Q = Insta-Quit!\r
- Quit("Insta-Quit!");\r
-#if 0\r
- if (Keyboard[sc_Z]) // Z = freeze Time\r
- {\r
- if (FreezeTime)\r
- FreezeTime = 1; // Allow refresh to dec to zero..\r
- else\r
- StopTime();\r
-\r
- IN_Ack();\r
- return 1;\r
- }\r
-#endif\r
-\r
-\r
-// if (Keyboard[sc_E])\r
-// FaceDoor((player->x>>16l)+1,(player->y>>16l));\r
-// FaceAngle(90);\r
-\r
-#if 0\r
- if (Keyboard[sc_B]) // B = border color\r
- {\r
- CenterWindow(24,3);\r
- PrintY+=6;\r
- US_Print(" Border color (0-15):");\r
- VW_UpdateScreen();\r
- esc = !US_LineInput (px,py,str,NULL,true,2,0);\r
- if (!esc)\r
- {\r
- level = atoi (str);\r
- if (level>=0 && level<=15)\r
- VW_ColorBorder (level);\r
- }\r
- return 1;\r
- }\r
-#endif\r
-\r
-\r
-#if 1//DEBUG_KEYS_AVAILABLE\r
- if (Keyboard[sc_O])\r
- {\r
- extern unsigned objectcount,latchmemavail;\r
- unsigned unused,total;\r
-\r
- CenterWindow (30,13);\r
- US_Print ("Objects: ");\r
- US_PrintUnsigned (objectcount);\r
-\r
- US_Print("\n\nTics: ");\r
- US_PrintUnsigned (tics);\r
- US_Print(" Real Tics: ");\r
- US_PrintUnsigned(realtics);\r
-\r
- US_Print ("\n\n Total Available: ");\r
- US_PrintUnsigned (mminfo.mainmem/1024);\r
- US_Print ("k\n Mem In Use: ");\r
- unused=MM_UnusedMemory()/1024;\r
- US_PrintUnsigned (unused);\r
- US_Print ("k\n Mem After Purge: ");\r
- total=MM_TotalFree()/1024;\r
- US_PrintUnsigned (total);\r
- US_Print ("k (");\r
- US_PrintUnsigned (total-unused);\r
-\r
- US_Print (")\n\nLatch Mem Free: ");\r
- US_PrintUnsigned (latchmemavail);\r
- US_Print ("\n");\r
- VW_UpdateScreen();\r
- IN_Ack();\r
- }\r
-\r
- if (colordelay<1)\r
- {\r
- if (Keyboard[26])\r
- {\r
- extern unsigned *groundcolor,debug_gnd;\r
-\r
- groundcolor = &debug_gnd;\r
- debug_gnd += 0x0101;\r
- if (debug_gnd == 0x1010)\r
- debug_gnd = 0;\r
- colordelay = 10;\r
- }\r
-\r
- if (Keyboard[27])\r
- {\r
- extern unsigned *skycolor,debug_sky;\r
-\r
- skycolor = &debug_sky;\r
- debug_sky += 0x0101;\r
- if (debug_sky == 0x1010)\r
- debug_sky = 0;\r
- colordelay = 10;\r
- }\r
- }\r
- else\r
- colordelay -= realtics;\r
-#endif\r
-\r
-\r
-#if 0\r
- if (Keyboard[sc_C]) // C = count objects\r
- {\r
- CountObjects();\r
- return 1;\r
- }\r
-\r
-\r
- if (Keyboard[sc_D]) // D = start / end demo record\r
- {\r
- if (DemoMode == demo_Off)\r
- StartDemoRecord ();\r
- else if (DemoMode == demo_Record)\r
- {\r
- EndDemoRecord ();\r
- playstate = ex_completed;\r
- }\r
- return 1;\r
- }\r
-#endif\r
-\r
-#if 0\r
- if (Keyboard[sc_E]) // E = quit level\r
- {\r
- if (tedlevel)\r
- TEDDeath();\r
- playstate = ex_warped;\r
- gamestate.mapon++;\r
- }\r
-#endif\r
-\r
-#if 0\r
- if (Keyboard[sc_F]) // F = facing spot\r
- {\r
- CenterWindow (12,4);\r
- US_Print ("X:");\r
- US_PrintUnsigned (player->x);\r
- US_Print ("Y:");\r
- US_PrintUnsigned (player->y);\r
- US_Print ("A:");\r
- US_PrintUnsigned (player->angle);\r
- VW_UpdateScreen();\r
- IN_Ack();\r
- return 1;\r
- }\r
-#endif\r
-\r
- if (Keyboard[sc_G]) // G = god mode\r
- {\r
- CenterWindow (12,2);\r
- if (godmode)\r
- US_PrintCentered ("God mode OFF");\r
- else\r
- US_PrintCentered ("God mode ON");\r
- VW_UpdateScreen();\r
- IN_Ack();\r
- godmode ^= 1;\r
- return 1;\r
- }\r
-\r
-#if 0\r
- if (Keyboard[sc_H]) // H = hurt self\r
- {\r
- TakeDamage (5);\r
- }\r
-#endif\r
-\r
- if (Keyboard[sc_I]) // I = item cheat\r
- {\r
- extern boolean redraw_gems;\r
-\r
- CenterWindow (12,3);\r
- US_PrintCentered ("Free items!");\r
- VW_UpdateScreen();\r
- for (i=0;i<4;i++)\r
- {\r
- GiveBolt ();\r
- GiveNuke ();\r
- GivePotion ();\r
-// if (!gamestate.keys[i])\r
- GiveKey (i);\r
- gamestate.gems[i] = GEM_DELAY_TIME;\r
- }\r
- gamestate.gems[4] = GEM_DELAY_TIME;\r
- redraw_gems = true;\r
-///////// for (i=0;i<8;i++)\r
-///////// GiveScroll (i,false);\r
-\r
- IN_Ack ();\r
- return 1;\r
- }\r
-\r
-#if DEBUG_OVERHEAD\r
- if (Keyboard[sc_Z]) // O is used elsewhere...\r
- {\r
- ViewMap();\r
- return 1;\r
- }\r
-#endif\r
-\r
-#if 0\r
- if (Keyboard[sc_P]) // P = pause with no screen disruptioon\r
- {\r
- PicturePause ();\r
- return 1;\r
- }\r
-#endif\r
-\r
-#if 0\r
- if (Keyboard[sc_S]) // S = slow motion\r
- {\r
- singlestep^=1;\r
- CenterWindow (18,3);\r
- if (singlestep)\r
- US_PrintCentered ("Slow motion ON");\r
- else\r
- US_PrintCentered ("Slow motion OFF");\r
- VW_UpdateScreen();\r
- IN_Ack ();\r
- return 1;\r
- }\r
-#endif\r
-\r
-#if 0\r
- if (Keyboard[sc_V]) // V = extra VBLs\r
- {\r
- CenterWindow(30,3);\r
- PrintY+=6;\r
- US_Print(" Add how many extra VBLs(0-8):");\r
- VW_UpdateScreen();\r
- esc = !US_LineInput (px,py,str,NULL,true,2,0);\r
- if (!esc)\r
- {\r
- level = atoi (str);\r
- if (level>=0 && level<=8)\r
- extravbls = level;\r
- }\r
- return 1;\r
- }\r
-#endif\r
-\r
- if (Keyboard[sc_W]) // W = warp to level\r
- {\r
- CenterWindow(26,3);\r
- PrintY+=6;\r
- US_Print(" Warp to which level(0-17):");\r
- VW_UpdateScreen();\r
- esc = !US_LineInput (px,py,str,NULL,true,2,0);\r
- if (!esc)\r
- {\r
- level = atoi (str);\r
- if (level>=0 && level<=LASTMAP-1)\r
- {\r
- gamestate.mapon = level;\r
- playstate = ex_warped;\r
- lasttext = -1;\r
- }\r
- }\r
- return 1;\r
- }\r
-\r
-#if 0\r
- if (Keyboard[sc_X]) // X = item cheat\r
- {\r
- CenterWindow (12,3);\r
- US_PrintCentered ("Extra stuff!");\r
- VW_UpdateScreen();\r
- for (i=0;i<4;i++)\r
- {\r
- GiveBolt ();\r
- GiveNuke ();\r
- GivePotion ();\r
- }\r
- IN_Ack ();\r
- return 1;\r
- }\r
-#endif\r
-\r
-//////// if (LastScan >= sc_1 && LastScan <= sc_8) // free scrolls\r
-//////// {\r
-//////// GiveScroll (LastScan-sc_1,false);\r
-//////// IN_ClearKeysDown ();\r
-//////// }\r
-\r
- return 0;\r
-}\r
-\r
-\r
-#if DEBUG_OVERHEAD\r
-\r
-/*\r
-=====================\r
-=\r
-= LatchDrawChar\r
-=\r
-=====================\r
-*/\r
-\r
-void LatchDrawChar (unsigned x, unsigned y, unsigned picnum)\r
-{\r
- unsigned source, dest;\r
-\r
- dest = bufferofs + ylookup[y]+x;\r
- source = latchpics[0]+picnum*8;\r
-\r
- EGAWRITEMODE(1);\r
- EGAMAPMASK(15);\r
-\r
-asm mov bx,[linewidth]\r
-asm dec bx\r
-\r
-asm mov ax,[screenseg]\r
-asm mov es,ax\r
-asm mov ds,ax\r
-\r
-asm mov si,[source]\r
-asm mov di,[dest]\r
-\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-asm add di,bx\r
-asm movsb\r
-\r
-asm mov ax,ss\r
-asm mov ds,ax // restore turbo's data segment\r
-\r
- EGAWRITEMODE(0);\r
-}\r
-\r
-#endif\r
-\r
-\r
-#if DEBUG_OVERHEAD\r
-/*\r
-=====================\r
-=\r
-= LatchDrawTile\r
-=\r
-=====================\r
-*/\r
-\r
-void LatchDrawTile (unsigned x, unsigned y, unsigned picnum)\r
-{\r
- unsigned source, dest;\r
-\r
- dest = bufferofs + ylookup[y]+x;\r
- source = tileoffsets[picnum];\r
-\r
- EGAWRITEMODE(1);\r
- EGAMAPMASK(15);\r
-\r
-asm mov bx,[linewidth]\r
-asm sub bx,2\r
-\r
-asm mov ax,[screenseg]\r
-asm mov es,ax\r
-asm mov ds,ax\r
-\r
-asm mov si,[source]\r
-asm mov di,[dest]\r
-asm mov dx,16\r
-\r
-lineloop:\r
-asm movsb\r
-asm movsb\r
-asm add di,bx\r
-\r
-asm dec dx\r
-asm jnz lineloop\r
-\r
-asm mov ax,ss\r
-asm mov ds,ax // restore turbo's data segment\r
-\r
- EGAWRITEMODE(0);\r
-}\r
-#endif\r
-\r
-\r
-#if DEBUG_OVERHEAD\r
-/*\r
-===================\r
-=\r
-= OverheadRefresh\r
-=\r
-===================\r
-*/\r
-\r
-void OverheadRefresh (void)\r
-{\r
- unsigned x,y,endx,endy,sx,sy;\r
- unsigned tile;\r
-\r
-\r
- if (++screenpage == 3)\r
- screenpage = 0;\r
-\r
- bufferofs = screenloc[screenpage];\r
-\r
- endx = maporgx+VIEWTILEX;\r
- endy = maporgy+VIEWTILEY;\r
-\r
- for (y=maporgy;y<endy;y++)\r
- for (x=maporgx;x<endx;x++)\r
- {\r
- sx = (x-maporgx)*2;\r
- sy = (y-maporgy)*16;\r
-\r
- switch (viewtype)\r
- {\r
- case mapview:\r
- tile = *(mapsegs[0]+farmapylookup[y]+x);\r
- break;\r
-\r
- case tilemapview:\r
- tile = tilemap[x][y];\r
- break;\r
-\r
- case actoratview:\r
- tile = (unsigned)actorat[x][y];\r
- break;\r
-\r
- case visview:\r
- tile = spotvis[x][y];\r
- break;\r
-\r
- case mapseg2:\r
- tile = *(mapsegs[2]+farmapylookup[y]+x);\r
- if (tile < 256)\r
- tile = *(mapsegs[0]+farmapylookup[y]+x);\r
- break;\r
-\r
- }\r
-\r
- if (tile<NUMTILE16)\r
- LatchDrawTile(sx,sy,tile);\r
- else\r
- {\r
- LatchDrawChar(sx,sy,NUMBERCHARS+((tile&0xf000)>>12));\r
- LatchDrawChar(sx+1,sy,NUMBERCHARS+((tile&0x0f00)>>8));\r
- LatchDrawChar(sx,sy+8,NUMBERCHARS+((tile&0x00f0)>>4));\r
- LatchDrawChar(sx+1,sy+8,NUMBERCHARS+(tile&0x000f));\r
- }\r
- }\r
-\r
- VW_SetScreen (bufferofs,0);\r
- displayofs = bufferofs;\r
-}\r
-\r
-\r
-/*\r
-===================\r
-=\r
-= ViewMap\r
-=\r
-===================\r
-*/\r
-\r
-void ViewMap (void)\r
-{\r
- boolean button0held;\r
-\r
- viewtype = actoratview;\r
- button0held = false;\r
-\r
-\r
- maporgx = player->tilex - VIEWTILEX/2;\r
- if (maporgx<0)\r
- maporgx = 0;\r
- maporgy = player->tiley - VIEWTILEY/2;\r
- if (maporgy<0)\r
- maporgy = 0;\r
-\r
- do\r
- {\r
-//\r
-// let user pan around\r
-//\r
- IN_ReadControl(0,&control);\r
- if (control.xaxis == -1 && maporgx>0)\r
- maporgx--;\r
- if (control.xaxis == 1 && maporgx<mapwidth-VIEWTILEX)\r
- maporgx++;\r
- if (control.yaxis == -1 && maporgy>0)\r
- maporgy--;\r
- if (control.yaxis == 1 && maporgy<mapheight-VIEWTILEY)\r
- maporgy++;\r
-\r
- if (control.button0 && !button0held)\r
- {\r
- button0held = true;\r
- viewtype++;\r
- if (viewtype==lastview)\r
- viewtype = mapview;\r
- }\r
- if (!control.button0)\r
- button0held = false;\r
-\r
-\r
- OverheadRefresh ();\r
-\r
- } while (!Keyboard[sc_Escape]);\r
-\r
- IN_ClearKeysDown ();\r
- DrawPlayScreen ();\r
-}\r
-#endif\r
-\r