3f59fc8b77
This is a port of Wolf4SDL, which is derived from the original id software source release. The port runs on top of the SDL plugin runtime and is loaded as an overlay. Licensing of the game code is not an issue, as discussed below (essentially, the Debian project treats Wolf4SDL as GPLv2, with an email from John Carmack backing it up): http://forums.rockbox.org/index.php?topic=52872 Included is a copy of MAME's Yamaha OPL sound chip emulator (fmopl_gpl.c). This file was not part of the original Wolf4SDL source (which includes a non-GPL'd version), but was rather rebased from from a later MAME source which had been relicensed to GPLv2. Change-Id: I64c2ba035e0be7e2f49252f40640641416613439
863 lines
21 KiB
C
863 lines
21 KiB
C
// 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
|