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