- more work on making Exhumed compile.

Almost done, down to 20 compile errors.
This commit is contained in:
Christoph Oelckers 2019-11-24 13:59:36 +01:00
parent 40772d9f0c
commit 8d11990494
22 changed files with 271 additions and 977 deletions

View file

@ -91,7 +91,6 @@ enum GameFunction_t
gamefunc_Zoom_In, // Map controls should not pollute the global button namespace. gamefunc_Zoom_In, // Map controls should not pollute the global button namespace.
gamefunc_Zoom_Out, gamefunc_Zoom_Out,
gamefunc_Escape, // this shouldn't be a button.
NUMGAMEFUNCTIONS NUMGAMEFUNCTIONS
}; };

View file

@ -239,7 +239,7 @@ public:
void ClearKeysDown(void) void ClearKeysDown(void)
{ {
KB_LastScan = 0; ClearLastScanCode();
ClearAllKeyStatus(); ClearAllKeyStatus();
} }

View file

@ -374,9 +374,10 @@ FTexture* BuildTiles::ValidateCustomTile(int tilenum, int type)
else if (type == FTexture::Restorable) else if (type == FTexture::Restorable)
{ {
// This is for modifying an existing tile. // This is for modifying an existing tile.
// It only gets used for the crosshair and two specific effects: // It only gets used for the crosshair and a few specific effects:
// A) the fire in Blood. // A) the fire in Blood.
// B) the pin display in Redneck Rampage's bowling lanes. // B) the pin display in Redneck Rampage's bowling lanes.
// C) Exhumed's menu plus one special effect tile.
// All of these effects should probably be redone without actual texture hacking... // All of these effects should probably be redone without actual texture hacking...
if (tile->GetWidth() == 0 || tile->GetHeight() == 0) return nullptr; // The base must have a size for this to work. if (tile->GetWidth() == 0 || tile->GetHeight() == 0) return nullptr; // The base must have a size for this to work.
// todo: invalidate hardware textures for tile. // todo: invalidate hardware textures for tile.

View file

@ -583,7 +583,7 @@ inline uint8_t* tileData(int num)
return tex->GetWritableBuffer(); return tex->GetWritableBuffer();
} }
// Some hacks to allow accessing the no lpnger existing arrays as if they still were arrays to avoid changing hundreds of lines of code. // Some hacks to allow accessing the no longer existing arrays as if they still were arrays to avoid changing hundreds of lines of code.
struct TileSiz struct TileSiz
{ {
const vec2_16_t &operator[](size_t index) const vec2_16_t &operator[](size_t index)

View file

@ -1182,7 +1182,6 @@ void G_DisplayRest(int32_t smoothratio)
GameStats GameInterface::getStats() GameStats GameInterface::getStats()
{ {
GameStats stats;
DukePlayer_t* p = g_player[myconnectindex].ps; DukePlayer_t* p = g_player[myconnectindex].ps;
return { p->actors_killed, p->max_actors_killed, p->secret_rooms, p->max_secret_rooms, p->player_par / REALGAMETICSPERSEC }; return { p->actors_killed, p->max_actors_killed, p->secret_rooms, p->max_secret_rooms, p->player_par / REALGAMETICSPERSEC };
} }

View file

@ -45,10 +45,7 @@ unsigned int dword_1B82E0 = 0;
int32_t FXVolume; int32_t FXVolume;
int32_t MusicVolume; int32_t MusicVolume;
int32_t MixRate;
int32_t MidiPort; int32_t MidiPort;
int32_t NumVoices;
int32_t NumChannels;
int32_t NumBits; int32_t NumBits;
int32_t ReverseStereo; int32_t ReverseStereo;
int32_t MusicDevice; int32_t MusicDevice;
@ -59,8 +56,6 @@ int32_t scripthandle;
int32_t setupread; int32_t setupread;
// TODO: implement precaching toggle // TODO: implement precaching toggle
int32_t useprecache; int32_t useprecache;
int32_t MouseDeadZone, MouseBias;
int32_t SmoothInput;
void CONFIG_SetDefaults() void CONFIG_SetDefaults()
{ {
@ -87,26 +82,13 @@ void CONFIG_SetDefaults()
// currently settings.cfg is only read after the startup window launches the game, // currently settings.cfg is only read after the startup window launches the game,
// and rereading binds might be fickle so just enable this // and rereading binds might be fickle so just enable this
gSetup.usejoystick = 1;
gSetup.forcesetup = 1; gSetup.forcesetup = 1;
gSetup.noautoload = 1; gSetup.noautoload = 1;
gSetup.fullscreen = 1; gSetup.fullscreen = 1;
gSetup.usemouse = 1;
MixRate = 44100;
FXVolume = 255; FXVolume = 255;
MusicVolume = 255; MusicVolume = 255;
NumChannels = 2;
NumBits = 16; NumBits = 16;
NumVoices = 32;
mouseaiming = 0;
aimmode = 1;
mouseflip = 1;
runkey_mode = 0;
auto_run = 1;
} }
int CONFIG_ReadSetup(void) int CONFIG_ReadSetup(void)

View file

@ -27,8 +27,6 @@ BEGIN_PS_NS
typedef struct { typedef struct {
int32_t usejoystick;
int32_t usemouse;
int32_t fullscreen; int32_t fullscreen;
int32_t xdim; int32_t xdim;
int32_t ydim; int32_t ydim;

View file

@ -460,10 +460,6 @@ int32_t g_groupFileHandle;
static struct strllist *CommandPaths, *CommandGrps; static struct strllist *CommandPaths, *CommandGrps;
void G_ExtPreInit(int32_t argc,char const * const * argv)
{
}
void G_ExtInit(void) void G_ExtInit(void)
{ {
} }
@ -651,7 +647,6 @@ int8_t vely[97 * 106];
short nMouthTile; short nMouthTile;
short nPupData = 0; short nPupData = 0;
int headfd = -1;
short word_964E8 = 0; short word_964E8 = 0;
short word_964EA = 0; short word_964EA = 0;
@ -679,7 +674,6 @@ short nBackgroundPic;
short nShadowPic; short nShadowPic;
short nCreaturesLeft = 0; short nCreaturesLeft = 0;
short bNoSound = kFalse;
short nFreeze; short nFreeze;
short bFullScreen; short bFullScreen;
@ -799,9 +793,6 @@ char debugBuffer[256];
short wConsoleNode; // TODO - move me into network file short wConsoleNode; // TODO - move me into network file
int mouseaiming, aimmode, mouseflip;
int runkey_mode, auto_run;
ClockTicks tclocks, tclocks2; ClockTicks tclocks, tclocks2;
void DebugOut(const char *fmt, ...) void DebugOut(const char *fmt, ...)
@ -1567,10 +1558,10 @@ void DrawClock()
{ {
int ebp = 49; int ebp = 49;
tileLoad(kTile3603); auto pixels = TileFiles.tileMakeWritable(kTile3603);
// nRedTicks = 0; // nRedTicks = 0;
memset((void*)waloff[kTile3603], -1, 4096); memset(pixels, -1, 4096);
if (lCountDown / 30 != nClockVal) if (lCountDown / 30 != nClockVal)
{ {
@ -1623,8 +1614,6 @@ static inline int32_t calc_smoothratio(ClockTicks totalclk, ClockTicks ototalclk
return clamp(tabledivide64(65536*elapsedFrames*30, rfreq), 0, 65536); return clamp(tabledivide64(65536*elapsedFrames*30, rfreq), 0, 65536);
} }
int r_showfps;
#define COLOR_RED redcol #define COLOR_RED redcol
#define COLOR_WHITE whitecol #define COLOR_WHITE whitecol
@ -1773,100 +1762,17 @@ static int32_t check_filename_casing(void)
} }
#endif #endif
int32_t r_maxfps = 60;
int32_t r_maxfpsoffset = 0; int32_t r_maxfpsoffset = 0;
double g_frameDelay = 0.0; double g_frameDelay = 0.0;
int G_FPSLimit(void)
{
if (!r_maxfps)
return 1;
static double nextPageDelay;
static uint64_t lastFrameTicks;
uint64_t const frameTicks = timerGetTicksU64();
uint64_t const elapsedTime = frameTicks - lastFrameTicks;
double const dElapsedTime = elapsedTime;
if (dElapsedTime >= floor(nextPageDelay))
{
if (dElapsedTime <= nextPageDelay+g_frameDelay)
nextPageDelay += g_frameDelay-dElapsedTime;
lastFrameTicks = frameTicks;
return 1;
}
return 0;
}
static int32_t nonsharedtimer; static int32_t nonsharedtimer;
int app_main(int argc, char const* const* argv) void CheckCommandLine(int argc, char const* const* argv, int &doTitle)
{ {
char tempbuf[256];
#ifdef _WIN32
#ifndef DEBUGGINGAIDS
if (!G_CheckCmdSwitch(argc, argv, "-noinstancechecking") && !windowsCheckAlreadyRunning())
{
#ifdef EDUKE32_STANDALONE
if (!wm_ynbox(APPNAME, "It looks like " APPNAME " is already running.\n\n"
#else
if (!wm_ynbox(APPNAME, "It looks like the game is already running.\n\n"
#endif
"Are you sure you want to start another copy?"))
return 3;
}
#endif
#ifndef USE_PHYSFS
#ifdef DEBUGGINGAIDS
extern int32_t (*check_filename_casing_fn)(void);
check_filename_casing_fn = check_filename_casing;
#endif
#endif
#endif
G_ExtPreInit(argc, argv);
OSD_SetLogFile(APPBASENAME ".log");
OSD_SetFunctions(NULL,
NULL,
NULL,
NULL,
NULL,
GAME_clearbackground,
BGetTime,
GAME_onshowosd);
wm_setapptitle(APPNAME);
initprintf("Exhumed %s\n", s_buildRev);
PrintBuildInfo();
int i;
//int esi = 1;
//int edi = esi;
int doTitle = kTrue; // REVERT kTrue;
int stopTitle = kFalse;
levelnew = 1;
// REVERT - change back to kTrue
// short bDoTitle = kFalse;
wConsoleNode = 0;
int nMenu = 0; // TEMP
// Check for any command line arguments // Check for any command line arguments
for (i = 1; i < argc; i++) for (int i = 1; i < argc; i++)
{ {
const char *pChar = argv[i]; const char* pChar = argv[i];
if (*pChar == '/') if (*pChar == '/')
{ {
@ -1876,9 +1782,6 @@ int app_main(int argc, char const* const* argv)
if (Bstrcasecmp(pChar, "nocreatures") == 0) { if (Bstrcasecmp(pChar, "nocreatures") == 0) {
bNoCreatures = kTrue; bNoCreatures = kTrue;
} }
else if (Bstrcasecmp(pChar, "nosound") == 0) {
bNoSound = kTrue;
}
else if (Bstrcasecmp(pChar, "record") == 0) else if (Bstrcasecmp(pChar, "record") == 0)
{ {
if (!bPlayback) if (!bPlayback)
@ -2014,6 +1917,30 @@ int app_main(int argc, char const* const* argv)
} }
} }
} }
}
int app_main(int argc, char const* const* argv)
{
char tempbuf[256];
initprintf("Exhumed %s\n", s_buildRev);
int i;
//int esi = 1;
//int edi = esi;
int doTitle = kTrue; // REVERT kTrue;
int stopTitle = kFalse;
levelnew = 1;
// REVERT - change back to kTrue
// short bDoTitle = kFalse;
wConsoleNode = 0;
int nMenu = 0; // TEMP
if (nNetPlayerCount && forcelevel == -1) { if (nNetPlayerCount && forcelevel == -1) {
forcelevel = 1; forcelevel = 1;
@ -2028,15 +1955,6 @@ int app_main(int argc, char const* const* argv)
if (forcegl) initprintf("GL driver blacklist disabled.\n"); if (forcegl) initprintf("GL driver blacklist disabled.\n");
#endif #endif
// used with binds for fast function lookup
hash_init(&h_gamefuncs);
for (bssize_t i=kMaxGameFunctions-1; i>=0; i--)
{
if (gamefunctions[i][0] == '\0')
continue;
hash_add(&h_gamefuncs,gamefunctions[i],i,0);
}
#ifdef STARTUP_SETUP_WINDOW #ifdef STARTUP_SETUP_WINDOW
int const readSetup = int const readSetup =
@ -2051,68 +1969,7 @@ int app_main(int argc, char const* const* argv)
Bexit(2); Bexit(2);
} }
if (Bstrcmp(setupfilename, kSetupFilename))
initprintf("Using config file \"%s\".\n",setupfilename);
G_ScanGroups();
#ifdef STARTUP_SETUP_WINDOW
if (readSetup < 0 || (!g_noSetup && gSetup.forcesetup) || g_commandSetup)
{
if (quitevent || !startwin_run())
{
engineUnInit();
Bexit(0);
}
}
#endif
G_LoadGroups(!g_noAutoLoad && !gSetup.noautoload);
// Decrypt strings code would normally be here
#if 0
for (int i = 0; ; i++)
{
int j = i - 1;
while (j >= 0)
{
if (gString_Enc[i] == gString_Enc[j]) {
break;
}
j--;
}
if (j < 0)
{
int k = 0;
while (1)
{
uint8_t v27 = gString_Enc[i + k];
if (v27)
{
gString_Enc[i + k] = v27 ^ 0xFF;
k++;
}
else {
break;
}
}
// strupr(gString[j]);
int blah = 123;
// if (!strcmp(*(char **)((char *)gString + v29), "EOF", v27, v30))
// break;
}
}
#endif
// loc_115F5: // loc_115F5:
nItemTextIndex = FindGString("ITEMS"); nItemTextIndex = FindGString("ITEMS");
@ -2129,33 +1986,13 @@ int app_main(int argc, char const* const* argv)
// GetCurPal(NULL); // GetCurPal(NULL);
CONFIG_WriteSetup(1);
CONFIG_ReadSetup();
initprintf("Initializing OSD...\n"); initprintf("Initializing OSD...\n");
Bsprintf(tempbuf, "Exhumed %s", s_buildRev); Bsprintf(tempbuf, "Exhumed %s", s_buildRev);
OSD_SetVersion(tempbuf, 10,0);
OSD_SetParameters(0, 0, 0, 0, 0, 0, OSD_ERROR, OSDTEXT_RED, gamefunctions[gamefunc_Show_Console][0] == '\0' ? OSD_PROTECTED : 0);
registerosdcommands(); registerosdcommands();
SetupInput(); SetupInput();
char *const setupFileName = Xstrdup(setupfilename);
char *const p = strtok(setupFileName, ".");
if (!p || !Bstrcmp(setupfilename, kSetupFilename))
Bsprintf(tempbuf, "settings.cfg");
else
Bsprintf(tempbuf, "%s_settings.cfg", p);
Xfree(setupFileName);
OSD_Exec(tempbuf);
OSD_Exec("autoexec.cfg");
CONFIG_SetDefaultKeys(keydefaults, true);
system_getcvars(); system_getcvars();
if (nNetPlayerCount == -1) if (nNetPlayerCount == -1)
@ -2290,8 +2127,8 @@ MENU:
bInDemo = kTrue; bInDemo = kTrue;
bPlayback = kTrue; bPlayback = kTrue;
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
break; break;
} }
STARTGAME1: STARTGAME1:
@ -2400,8 +2237,8 @@ LOOP3:
{ {
EraseScreen(overscanindex); EraseScreen(overscanindex);
Query(2, 0, "Insert CD into drive", "(ESC to abort)"); Query(2, 0, "Insert CD into drive", "(ESC to abort)");
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
if (KB_GetCh() == asc_Escape) { if (inputState.keyGetChar() == asc_Escape) {
I_Error("Aborted\n"); I_Error("Aborted\n");
} }
} }
@ -2509,10 +2346,10 @@ LOOP3:
if (bPlayback) if (bPlayback)
{ {
// YELLOW // YELLOW
if ((bInDemo && KB_KeyWaiting() || !ReadPlaybackInputs()) && KB_GetCh()) if ((bInDemo && inputState.keyBufferWaiting() || !ReadPlaybackInputs()) && inputState.keyGetChar())
{ {
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
bPlayback = kFalse; bPlayback = kFalse;
bInDemo = kFalse; bInDemo = kFalse;
@ -2657,9 +2494,9 @@ LOOP3:
} }
if (!bInDemo) if (!bInDemo)
{ {
if (buttonMap.ButtonDown(gamefunc_Escape)) if (inputState.GetKeyStatus(sc_Escape))
{ {
buttonMap.ClearButton(gamefunc_Escape); inputState.ClearKeyStatus(sc_Escape);
// MENU2: // MENU2:
CONTROL_BindsEnabled = 0; CONTROL_BindsEnabled = 0;
bInMove = kTrue; bInMove = kTrue;
@ -2693,11 +2530,6 @@ LOOP3:
CONTROL_BindsEnabled = 1; CONTROL_BindsEnabled = 1;
RefreshStatus(); RefreshStatus();
} }
else if (KB_UnBoundKeyPressed(sc_F12))
{
KB_ClearKeyDown(sc_F12);
videoCaptureScreen("captxxxx.png", 0);
}
else if (buttonMap.ButtonDown(gamefunc_Map)) // e.g. TAB (to show 2D map) else if (buttonMap.ButtonDown(gamefunc_Map)) // e.g. TAB (to show 2D map)
{ {
buttonMap.ClearButton(gamefunc_Map); buttonMap.ClearButton(gamefunc_Map);
@ -3001,7 +2833,8 @@ void CopyTileToBitmap(short nSrcTile, short nDestTile, int xPos, int yPos)
{ {
int nOffs = tilesiz[nDestTile].y * xPos; int nOffs = tilesiz[nDestTile].y * xPos;
uint8_t *pDest = (uint8_t*)waloff[nDestTile] + nOffs + yPos; auto pixels = TileFiles.tileMakeWritable(nDestTile);
uint8_t *pDest = pixels + nOffs + yPos;
uint8_t *pDestB = pDest; uint8_t *pDestB = pDest;
tileLoad(nSrcTile); tileLoad(nSrcTile);
@ -3009,7 +2842,7 @@ void CopyTileToBitmap(short nSrcTile, short nDestTile, int xPos, int yPos)
int destYSize = tilesiz[nDestTile].y; int destYSize = tilesiz[nDestTile].y;
int srcYSize = tilesiz[nSrcTile].y; int srcYSize = tilesiz[nSrcTile].y;
uint8_t *pSrc = (uint8_t*)waloff[nSrcTile]; const uint8_t *pSrc = tilePtr(nSrcTile);
for (int x = 0; x < tilesiz[nSrcTile].x; x++) for (int x = 0; x < tilesiz[nSrcTile].x; x++)
{ {
@ -3164,13 +2997,13 @@ int Query(short nLines, short nKeys, ...)
if (nKeys) if (nKeys)
{ {
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
while (1) while (1)
{ {
HandleAsync(); HandleAsync();
char key = toupper(KB_GetCh()); char key = toupper(inputState.keyGetChar());
for (i = 0; i < nKeys; i++) for (i = 0; i < nKeys; i++)
{ {
@ -3196,7 +3029,6 @@ void InitSpiritHead()
nPixels = 0; nPixels = 0;
tileLoad(kTileRamsesNormal); // Ramses Normal Head
for (int i = 0; i < kMaxSprites; i++) for (int i = 0; i < kMaxSprites; i++)
{ {
@ -3206,15 +3038,15 @@ void InitSpiritHead()
} }
} }
uint8_t *pTile = (uint8_t*)waloff[kTileRamsesNormal]; auto pTile = tilePtr(kTileRamsesNormal); // Ramses Normal Head
auto pGold = tilePtr(kTileRamsesGold);
for (int x = 0; x < 97; x++) for (int x = 0; x < 97; x++)
{ {
for (int y = 0; y < 106; y++) for (int y = 0; y < 106; y++)
{ {
if (*pTile != 255) if (*pTile != 255)
{ {
pixelval[nPixels] = *(uint8_t*)(waloff[kTileRamsesGold] + x * 106 + y); pixelval[nPixels] = *(pGold + x * 106 + y);
origx[nPixels] = x - 48; origx[nPixels] = x - 48;
origy[nPixels] = y - 53; origy[nPixels] = y - 53;
curx[nPixels] = 0; curx[nPixels] = 0;
@ -3241,7 +3073,6 @@ void InitSpiritHead()
} }
} }
waloff[kTileRamsesWorkTile] = (intptr_t)worktile;
sprite[nSpiritSprite].yrepeat = 140; sprite[nSpiritSprite].yrepeat = 140;
sprite[nSpiritSprite].xrepeat = 140; sprite[nSpiritSprite].xrepeat = 140;
@ -3250,8 +3081,7 @@ void InitSpiritHead()
nHeadStage = 0; nHeadStage = 0;
// work tile is twice as big as the normal head size // work tile is twice as big as the normal head size
tilesiz[kTileRamsesWorkTile].x = 97 * 2; // 194; TileFiles.tileSetExternal(kTileRamsesWorkTile, 97 * 2, 106 * 2, worktile);
tilesiz[kTileRamsesWorkTile].y = 106 * 2; // 212;
sprite[nSpiritSprite].cstat &= 0x7FFF; sprite[nSpiritSprite].cstat &= 0x7FFF;
@ -3285,11 +3115,16 @@ void InitSpiritHead()
lNextStateChange = (int)totalclock; lNextStateChange = (int)totalclock;
lHeadStartClock = (int)totalclock; lHeadStartClock = (int)totalclock;
headfd = kopen4load(filename, 512); // 512?? auto headfd = kopenFileReader(filename, 512); // 512??
nPupData = kread(headfd, cPupData, sizeof(cPupData)); if (!headfd.isOpen())
{
memset(cPupData, 0, sizeof(cPupData));
}
else
{
nPupData = headfd.Read(cPupData, sizeof(cPupData));
pPupData = cPupData; pPupData = cPupData;
kclose(headfd); }
headfd = -1;
nMouthTile = 0; nMouthTile = 0;
nTalkTime = 1; nTalkTime = 1;
} }
@ -3317,9 +3152,7 @@ void DimSector(short nSector)
void CopyHeadToWorkTile(short nTile) void CopyHeadToWorkTile(short nTile)
{ {
tileLoad(nTile); const uint8_t* pSrc = tilePtr(nTile);
uint8_t *pSrc = (uint8_t*)waloff[nTile];
uint8_t *pDest = (uint8_t*)&worktile[212 * 49 + 53]; uint8_t *pDest = (uint8_t*)&worktile[212 * 49 + 53];
for (int i = 0; i < 97; i++) for (int i = 0; i < 97; i++)
@ -3670,11 +3503,9 @@ int DoSpiritHead()
ebx += word_964EA; ebx += word_964EA;
tileLoad(ebx);
// TODO - fixme. How big is worktile? // TODO - fixme. How big is worktile?
uint8_t *pDest = (uint8_t*)&worktile[10441]; uint8_t *pDest = (uint8_t*)&worktile[10441];
uint8_t *pSrc = (uint8_t*)waloff[ebx]; const uint8_t* pSrc = tilePtr(ebx);
for (int i = 0; i < 97; i++) for (int i = 0; i < 97; i++)
{ {
@ -3697,8 +3528,6 @@ int DoSpiritHead()
if (nMouthTile) if (nMouthTile)
{ {
tileLoad(nMouthTile + 598);
short nTileSizeX = tilesiz[nMouthTile + 598].x; short nTileSizeX = tilesiz[nMouthTile + 598].x;
short nTileSizeY = tilesiz[nMouthTile + 598].y; short nTileSizeY = tilesiz[nMouthTile + 598].y;
@ -3707,7 +3536,7 @@ int DoSpiritHead()
// pDest += (212 * (97 - nTileSizeX / 2)) + (159 - nTileSizeY); // pDest += (212 * (97 - nTileSizeX / 2)) + (159 - nTileSizeY);
uint8_t *pDest = (uint8_t*)&worktile[212 * (97 - nTileSizeX / 2)] + (159 - nTileSizeY); uint8_t *pDest = (uint8_t*)&worktile[212 * (97 - nTileSizeX / 2)] + (159 - nTileSizeY);
uint8_t *pSrc = (uint8_t*)waloff[nMouthTile + 598]; const uint8_t *pSrc = tilePtr(nMouthTile + 598);
while (nTileSizeX > 0) while (nTileSizeX > 0)
{ {

View file

@ -188,8 +188,6 @@ extern short bSlipMode;
extern short nItemTextIndex; extern short nItemTextIndex;
extern const char *gString[]; extern const char *gString[];
extern short bNoSound;
extern int bVanilla; extern int bVanilla;
extern int32_t g_gameType; extern int32_t g_gameType;
@ -197,8 +195,6 @@ extern int32_t g_gameType;
#define POWERSLAVE (g_gameType & GAMEFLAG_POWERSLAVE) #define POWERSLAVE (g_gameType & GAMEFLAG_POWERSLAVE)
#define EXHUMED (g_gameType & GAMEFLAG_EXHUMED) #define EXHUMED (g_gameType & GAMEFLAG_EXHUMED)
extern int mouseaiming, aimmode, mouseflip;
extern int runkey_mode, auto_run;
extern int32_t r_maxfps; extern int32_t r_maxfps;
extern int32_t r_maxfpsoffset; extern int32_t r_maxfpsoffset;
extern double g_frameDelay; extern double g_frameDelay;
@ -221,7 +217,6 @@ enum {
}; };
extern char g_modDir[BMAX_PATH]; extern char g_modDir[BMAX_PATH];
extern int r_showfps;
extern struct grpfile_t const* g_selectedGrp; extern struct grpfile_t const* g_selectedGrp;

View file

@ -213,173 +213,6 @@ uint8_t LoadLevel(int nMap)
return kFalse; return kFalse;
} }
#if 0
{
// going to load the map without loadboard() - to take care of version 6 to 7 map conversion
//int hFile = kopen4load(fileName_1, 1);
int hFile = kopen4load(fileName_1, 0);
// int hFile = open(fileName_1, O_BINARY | O_RDONLY);
if (hFile == -1) {
return kFalse;
}
int version;
kread(hFile, &version, sizeof(version));
if (version != 6) {
bIsVersion6 = kFalse;
}
initspritelists();
memset(show2dsector, 0, sizeof(show2dsector));
memset(show2dsprite, 0, sizeof(show2dsprite));
memset(show2dwall, 0, sizeof(show2dwall));
// replacement for build's loadboard()
kread(hFile, &initx, 4);
kread(hFile, &inity, 4);
kread(hFile, &initz, 4);
kread(hFile, &inita, 2);
kread(hFile, &initsect, 2);
// sectors
short nSectors;
kread(hFile, &nSectors, sizeof(nSectors));
if (bIsVersion6) {
kread(hFile, sector_6, sizeof(Sector_6) * nSectors);
}
else {
kread(hFile, sector, sizeof(SECTOR) * nSectors);
}
// walls
short nWalls;
kread(hFile, &nWalls, sizeof(nWalls));
if (bIsVersion6) {
kread(hFile, wall_6, sizeof(Wall_6) * nWalls);
}
else {
kread(hFile, wall, sizeof(WALL) * nWalls);
}
// sprites
short nSprites;
kread(hFile, &nSprites, sizeof(nSprites));
if (bIsVersion6) {
kread(hFile, sprite_6, sizeof(Sprite_6) * nSprites);
}
else {
kread(hFile, sprite, sizeof(SPRITE) * nSprites);
}
// set engine variables
numsectors = nSectors;
numwalls = nWalls;
// load in our version 6 structs to the engines v7 structs if required
if (bIsVersion6)
{
for (int nSector = 0; nSector < nSectors; nSector++)
{
sector[nSector].ceilingz = sector_6[nSector].ceilingz;
sector[nSector].floorz = sector_6[nSector].floorz;
sector[nSector].wallptr = sector_6[nSector].wallptr;
sector[nSector].wallnum = sector_6[nSector].wallnum;
sector[nSector].ceilingpicnum = sector_6[nSector].ceilingpicnum;
sector[nSector].ceilingheinum = Max(Min(((int)sector_6[nSector].ceilingheinum) << 5, 32767), -32768);
if ((sector_6[nSector].ceilingstat & 2) == 0) {
sector[nSector].ceilingheinum = 0;
}
sector[nSector].ceilingshade = sector_6[nSector].ceilingshade;
sector[nSector].ceilingpal = sector_6[nSector].ceilingpal;
sector[nSector].ceilingxpanning = sector_6[nSector].ceilingxpanning;
sector[nSector].ceilingypanning = sector_6[nSector].ceilingypanning;
sector[nSector].floorpicnum = sector_6[nSector].floorpicnum;
sector[nSector].floorheinum = Max(Min(((int)sector_6[nSector].floorheinum) << 5, 32767), -32768);
if ((sector_6[nSector].floorstat & 2) == 0) {
sector[nSector].floorheinum = 0;
}
sector[nSector].floorshade = sector_6[nSector].floorshade;
sector[nSector].floorpal = sector_6[nSector].floorpal;
sector[nSector].floorxpanning = sector_6[nSector].floorxpanning;
sector[nSector].floorypanning = sector_6[nSector].floorypanning;
sector[nSector].ceilingstat = sector_6[nSector].ceilingstat;
sector[nSector].floorstat = sector_6[nSector].floorstat;
sector[nSector].visibility = sector_6[nSector].visibility;
sector[nSector].filler = 0;
sector[nSector].lotag = sector_6[nSector].lotag;
sector[nSector].hitag = sector_6[nSector].hitag;
sector[nSector].extra = sector_6[nSector].extra;
}
for (int nWall = 0; nWall < nWalls; nWall++)
{
wall[nWall].x = wall_6[nWall].x;
wall[nWall].y = wall_6[nWall].y;
wall[nWall].point2 = wall_6[nWall].point2;
wall[nWall].nextwall = wall_6[nWall].nextwall;
wall[nWall].nextsector = wall_6[nWall].nextsector;
wall[nWall].cstat = wall_6[nWall].cstat;
wall[nWall].picnum = wall_6[nWall].picnum;
wall[nWall].overpicnum = wall_6[nWall].overpicnum;
wall[nWall].shade = wall_6[nWall].shade;
wall[nWall].pal = wall_6[nWall].pal;
wall[nWall].xrepeat = wall_6[nWall].xrepeat;
wall[nWall].yrepeat = wall_6[nWall].yrepeat;
wall[nWall].xpanning = wall_6[nWall].xpanning;
wall[nWall].ypanning = wall_6[nWall].ypanning;
wall[nWall].lotag = wall_6[nWall].lotag;
wall[nWall].hitag = wall_6[nWall].hitag;
wall[nWall].extra = wall_6[nWall].extra;
}
for (int nSprite = 0; nSprite < nSprites; nSprite++)
{
sprite[nSprite].x = sprite_6[nSprite].x;
sprite[nSprite].y = sprite_6[nSprite].y;
sprite[nSprite].z = sprite_6[nSprite].z;
sprite[nSprite].cstat = sprite_6[nSprite].cstat;
sprite[nSprite].picnum = sprite_6[nSprite].picnum;
sprite[nSprite].shade = sprite_6[nSprite].shade;
sprite[nSprite].pal = sprite_6[nSprite].pal;
sprite[nSprite].clipdist = sprite_6[nSprite].clipdist;
sprite[nSprite].filler = 0;
sprite[nSprite].xrepeat = sprite_6[nSprite].xrepeat;
sprite[nSprite].yrepeat = sprite_6[nSprite].yrepeat;
sprite[nSprite].xoffset = sprite_6[nSprite].xoffset;
sprite[nSprite].yoffset = sprite_6[nSprite].yoffset;
sprite[nSprite].sectnum = sprite_6[nSprite].sectnum;
sprite[nSprite].statnum = sprite_6[nSprite].statnum;
sprite[nSprite].ang = sprite_6[nSprite].ang;
sprite[nSprite].owner = sprite_6[nSprite].owner;
sprite[nSprite].xvel = sprite_6[nSprite].xvel;
sprite[nSprite].yvel = sprite_6[nSprite].yvel;
sprite[nSprite].zvel = sprite_6[nSprite].zvel;
sprite[nSprite].lotag = sprite_6[nSprite].lotag;
sprite[nSprite].hitag = sprite_6[nSprite].hitag;
sprite[nSprite].extra = sprite_6[nSprite].extra;
}
}
for (int nSprite = 0; nSprite < nSprites; nSprite++) {
insertsprite(sprite[nSprite].sectnum, sprite[nSprite].statnum);
}
updatesector(initx, inity, &initsect);
kclose(hFile);
hFile = -1;
}
// loadboard has finished
#endif
vec3_t startPos; vec3_t startPos;
int status = engineLoadBoard(fileName_1, 0, &startPos, &inita, &initsect); int status = engineLoadBoard(fileName_1, 0, &startPos, &inita, &initsect);
if (status == -2) if (status == -2)
@ -439,25 +272,7 @@ void ResetEngine()
void InstallEngine() void InstallEngine()
{ {
// initgroupfile("stuff.dat"); // initgroupfile("stuff.dat");
TileFiles.LoadArtSet("tiles%03d.art");
char *cwd;
if (g_modDir[0] != '/' && (cwd = buildvfs_getcwd(NULL, 0)))
{
buildvfs_chdir(g_modDir);
if (artLoadFiles("tiles000.art", MAXCACHE1DSIZE) < 0)
{
buildvfs_chdir(cwd);
if (artLoadFiles("tiles000.art", MAXCACHE1DSIZE) < 0)
I_Error("Failed loading art.");
}
buildvfs_chdir(cwd);
#ifndef __ANDROID__ //This crashes on *some* Android devices. Small onetime memory leak. TODO fix above function
Xfree(cwd);
#endif
}
else if (artLoadFiles("tiles000.art",MAXCACHE1DSIZE) < 0)
I_Error("Failed loading art.");
// TEMP // TEMP
@ -522,7 +337,6 @@ void InstallEngine()
void RemoveEngine() void RemoveEngine()
{ {
engineUnInit(); engineUnInit();
uninitgroupfile();
} }
void SetBelow(short nCurSector, short nBelowSector) void SetBelow(short nCurSector, short nBelowSector)

View file

@ -168,8 +168,8 @@ ClearSpaceBar_
void ClearAllKeys() void ClearAllKeys()
{ {
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
} }
void WaitNoKey(int nSecs, void (*pFunc) (void)) void WaitNoKey(int nSecs, void (*pFunc) (void))

View file

@ -84,19 +84,18 @@ int LoadPaletteLookups()
for (int i = 0; i < kMaxGrads; i++) for (int i = 0; i < kMaxGrads; i++)
{ {
int hFile = kopen4load(GradList[i], 1); auto hFile = kopenFileReader(GradList[i], 1);
if (hFile == -1) if (!hFile.isOpen())
{ {
initprintf("Error reading palette lookup '%s'\n", GradList[i]); initprintf("Error reading palette lookup '%s'\n", GradList[i]);
return 0; return 0;
} }
kread(hFile, buffer, 256*64); hFile.Read(buffer, 256*64);
// TODO: dumb hack // TODO: dumb hack
if (palookup[i]) if (palookup[i])
ALIGNED_FREE_AND_NULL(palookup[i]); ALIGNED_FREE_AND_NULL(palookup[i]);
paletteSetLookupTable(i, buffer); paletteSetLookupTable(i, buffer);
kclose(hFile);
// origpalookup[i] = palookup[i]; // origpalookup[i] = palookup[i];
bGreenPal = 0; bGreenPal = 0;

View file

@ -559,7 +559,7 @@ static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16
} }
} }
renderEnableFog(); //renderEnableFog();
videoSetCorrectedAspect(); videoSetCorrectedAspect();

View file

@ -38,6 +38,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "light.h" #include "light.h"
#include "cd.h" #include "cd.h"
#include "cdaudio.h" #include "cdaudio.h"
#include "input.h"
#include <string> #include <string>
#include <assert.h> #include <assert.h>
@ -779,9 +780,9 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest)
if (curYPos == destYPos) if (curYPos == destYPos)
{ {
if (KB_KeyDown[sc_UpArrow]) if (I_MenuUp())
{ {
KB_KeyDown[sc_UpArrow] = 0; I_MenuUpClear();
if (nLevelNew <= nLevelBest) if (nLevelNew <= nLevelBest)
{ {
@ -801,9 +802,9 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest)
} }
} }
if (KB_KeyDown[sc_DownArrow]) if (I_MenuDown())
{ {
KB_KeyDown[sc_DownArrow] = 0; I_MenuDownClear();
if (nLevelNew > 0) if (nLevelNew > 0)
{ {
@ -823,11 +824,9 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest)
} }
} }
if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Space] || KB_KeyDown[sc_Return]) if (I_AdvanceTrigger())
{ {
KB_KeyDown[sc_Escape] = 0; I_AdvanceTriggerClear();
KB_KeyDown[sc_Return] = 0;
KB_KeyDown[sc_Space] = 0;
return nLevelNew + 1; return nLevelNew + 1;
} }
} }
@ -841,15 +840,13 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest)
//curYPos += var_2C * (((int)totalclock - moveTimer) / 2); //curYPos += var_2C * (((int)totalclock - moveTimer) / 2);
if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Space] || KB_KeyDown[sc_Return]) if (I_AdvanceTrigger())
{ {
I_AdvanceTriggerClear();
if (var_2C < 8) { if (var_2C < 8) {
var_2C *= 2; var_2C *= 2;
} }
KB_KeyDown[sc_Escape] = 0;
KB_KeyDown[sc_Return] = 0;
KB_KeyDown[sc_Space] = 0;
} }
if (curYPos > destYPos&& var_2C > 0) { if (curYPos > destYPos&& var_2C > 0) {
@ -908,35 +905,31 @@ void menu_AdjustVolume()
videoNextPage(); videoNextPage();
if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Return] || KB_KeyDown[sc_Space]) if (I_AdvanceTrigger())
{ {
I_AdvanceTriggerClear();
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_KeyDown[sc_Escape] = 0;
KB_KeyDown[sc_Space] = 0;
KB_KeyDown[sc_Return] = 0;
return; return;
} }
if (KB_KeyDown[sc_UpArrow]) if (I_MenuUp())
{ {
I_MenuUpClear();
if (nOption > 0) if (nOption > 0)
{ {
nOption--; nOption--;
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
} }
KB_KeyDown[sc_UpArrow] = 0;
} }
if (KB_KeyDown[sc_DownArrow]) if (I_MenuDown())
{ {
I_MenuDownClear();
if (nOption < 1) if (nOption < 1)
{ {
nOption++; nOption++;
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
} }
KB_KeyDown[sc_DownArrow] = 0;
} }
if ((int)totalclock <= var_8) { if ((int)totalclock <= var_8) {
@ -945,8 +938,9 @@ void menu_AdjustVolume()
var_8 = (int)totalclock + 5; var_8 = (int)totalclock + 5;
if (KB_KeyDown[sc_LeftArrow]) if (I_MenuLeft())
{ {
I_MenuLeftClear();
switch (nOption) switch (nOption)
{ {
case 0: case 0:
@ -977,8 +971,9 @@ void menu_AdjustVolume()
} }
} }
if (KB_KeyDown[sc_RightArrow]) if (I_MenuRight())
{ {
I_MenuRightClear();
switch (nOption) switch (nOption)
{ {
case 0: case 0:
@ -1103,15 +1098,16 @@ int menu_NewGameMenu()
// continue; // continue;
//} //}
if (KB_KeyDown[sc_Escape]) if (I_EscapeTrigger())
{ {
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_KeyDown[sc_Escape] = 0; I_EscapeTriggerClear();
return -1; return -1;
} }
if (KB_KeyDown[sc_UpArrow]) if (I_MenuUp())
{ {
I_MenuUpClear();
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
if (nSlot <= 0) { if (nSlot <= 0) {
nSlot = 4; nSlot = 4;
@ -1120,13 +1116,13 @@ int menu_NewGameMenu()
nSlot--; nSlot--;
} }
KB_KeyDown[sc_UpArrow] = 0;
ClearAllKeys(); ClearAllKeys();
continue; continue;
} }
if (KB_KeyDown[sc_DownArrow]) if (I_MenuDown())
{ {
I_MenuDownClear();
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
if (nSlot >= 4) { if (nSlot >= 4) {
nSlot = 0; nSlot = 0;
@ -1135,12 +1131,11 @@ int menu_NewGameMenu()
nSlot++; nSlot++;
} }
KB_KeyDown[sc_DownArrow] = 0; inputState.ClearAllKeyStatus();
ClearAllKeys();
continue; continue;
} }
if (KB_KeyDown[sc_Return] || KB_KeyWaiting()) if (I_AdvanceTrigger() || inputState.keyBufferWaiting())
{ {
break; break;
} }
@ -1148,8 +1143,8 @@ int menu_NewGameMenu()
} }
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
if (KB_KeyDown[sc_Return]) { if (!inputState.keyBufferWaiting()) {
ClearAllKeys(); inputState.ClearAllKeyStatus();
} }
char *pName = nameList[nSlot]; char *pName = nameList[nSlot];
@ -1186,14 +1181,14 @@ int menu_NewGameMenu()
char ch = 0; char ch = 0;
check_keys: check_keys:
if (KB_KeyWaiting()) if (inputState.keyBufferWaiting())
{ {
HandleAsync(); HandleAsync();
ch = KB_GetCh(); ch = inputState.keyGetChar();
if (!ch) if (!ch)
{ {
KB_GetCh(); inputState.keyGetChar(); //???
goto check_keys; goto check_keys;
} }
@ -1204,7 +1199,7 @@ check_keys:
nameList[nSlot][nNameOffset] = 0; nameList[nSlot][nNameOffset] = 0;
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_KeyDown[sc_Return] = 0; inputState.ClearKeyStatus(sc_Return);
if (nameList[nSlot][0] == 0) { if (nameList[nSlot][0] == 0) {
return -1; return -1;
@ -1252,9 +1247,8 @@ check_keys:
else if (ch == asc_Escape) else if (ch == asc_Escape)
{ {
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
KB_KeyDown[sc_Escape] = 0;
return -1; return -1;
} }
else else
@ -1353,15 +1347,16 @@ int menu_LoadGameMenu()
overwritesprite(233, y, kMenuCursorTile, 0, 10, kPalNormal); overwritesprite(233, y, kMenuCursorTile, 0, 10, kPalNormal);
videoNextPage(); videoNextPage();
if (KB_KeyDown[sc_Escape]) if (I_EscapeTrigger())
{ {
I_EscapeTriggerClear();
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_KeyDown[sc_Escape] = 0;
return -1; return -1;
} }
if (KB_KeyDown[sc_UpArrow]) if (I_MenuUp())
{ {
I_MenuUpClear();
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
if (nSlot > 0) { if (nSlot > 0) {
nSlot--; nSlot--;
@ -1369,12 +1364,11 @@ int menu_LoadGameMenu()
else { else {
nSlot = kMaxSaveSlots - 1; nSlot = kMaxSaveSlots - 1;
} }
KB_KeyDown[sc_UpArrow] = 0;
} }
if (KB_KeyDown[sc_DownArrow]) // checkme - is 0x5b in disassembly if (I_MenuDown())
{ {
I_MenuDownClear();
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
if (nSlot < kMaxSaveSlots - 1) { if (nSlot < kMaxSaveSlots - 1) {
nSlot++; nSlot++;
@ -1382,18 +1376,16 @@ int menu_LoadGameMenu()
else { else {
nSlot = 0; nSlot = 0;
} }
KB_KeyDown[sc_DownArrow] = 0;
} }
if (!KB_KeyDown[sc_Return]) { if (!I_AdvanceTrigger()) {
continue; continue;
} }
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_KeyDown[sc_Return] = 0; I_AdvanceTriggerClear();
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
if (nameList[nSlot][0] != '\0') if (nameList[nSlot][0] != '\0')
{ {
@ -1499,15 +1491,13 @@ int menu_Menu(int nVal)
videoSetViewableArea(0, 0, xdim - 1, ydim - 1); videoSetViewableArea(0, 0, xdim - 1, ydim - 1);
KB_KeyDown[sc_Escape] = 0;
StopAllSounds(); StopAllSounds();
StopLocalSound(); StopLocalSound();
menu_ResetKeyTimer(); menu_ResetKeyTimer();
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
menu_ResetZoom(); menu_ResetZoom();
@ -1598,19 +1588,19 @@ int menu_Menu(int nVal)
break; break;
} }
if (KB_KeyDown[nKey]) if (inputState.GetKeyStatus(nKey))
{ {
goto LABEL_21; // TEMP goto LABEL_21; // TEMP
} }
} }
// loc_3A0A7 // loc_3A0A7
while (KB_KeyDown[sc_Escape]) while (I_EscapeTrigger())
{ {
HandleAsync(); HandleAsync();
PlayLocalSound(StaticSound[kSound33], 0); PlayLocalSound(StaticSound[kSound33], 0);
KB_KeyDown[sc_Escape] = 0; I_EscapeTriggerClear();
if (nVal) if (nVal)
{ {
@ -1628,13 +1618,14 @@ LABEL_21:
if (l != nMenu) if (l != nMenu)
{ {
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
KB_KeyDown[nMenuKeys[l]] = 0; inputState.ClearKeyStatus(nMenuKeys[l]);
nMenu = l; nMenu = l;
} }
} }
if (KB_KeyDown[sc_Space] || KB_KeyDown[sc_Return]) if (I_AdvanceTrigger())
{ {
I_AdvanceTriggerClear();
var_1C = 1; var_1C = 1;
} }
else if (var_1C) else if (var_1C)
@ -1731,8 +1722,9 @@ LABEL_21:
} }
} }
if (KB_KeyDown[sc_UpArrow]) if (I_MenuUp())
{ {
I_MenuUpClear();
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
if (nMenu <= 0) { if (nMenu <= 0) {
nMenu = 4; nMenu = 4;
@ -1741,12 +1733,12 @@ LABEL_21:
nMenu--; nMenu--;
} }
KB_KeyDown[sc_UpArrow] = 0;
menu_ResetKeyTimer(); menu_ResetKeyTimer();
} }
if (KB_KeyDown[sc_DownArrow]) // FIXME - is this down arrow? value is '5B' in disassembly if (I_MenuDown())
{ {
I_MenuDownClear();
PlayLocalSound(StaticSound[kSound35], 0); PlayLocalSound(StaticSound[kSound35], 0);
if (nMenu >= 4) { if (nMenu >= 4) {
nMenu = 0; nMenu = 0;
@ -1755,11 +1747,12 @@ LABEL_21:
nMenu++; nMenu++;
} }
KB_KeyDown[sc_DownArrow] = 0;
menu_ResetKeyTimer(); menu_ResetKeyTimer();
} }
// TODO - change to #defines // TODO - change to #defines
/* why are these cleares although they are never used anywhere?
if (KB_KeyDown[0x5c]) { if (KB_KeyDown[0x5c]) {
KB_KeyDown[0x5c] = 0; KB_KeyDown[0x5c] = 0;
} }
@ -1767,6 +1760,7 @@ LABEL_21:
if (KB_KeyDown[0x5d]) { if (KB_KeyDown[0x5d]) {
KB_KeyDown[0x5d] = 0; KB_KeyDown[0x5d] = 0;
} }
*/
} }
return 0;// todo return 0;// todo
@ -1810,18 +1804,16 @@ int LoadCinemaPalette(int nPal)
// original code strcpy'd into a buffer first... // original code strcpy'd into a buffer first...
int hFile = kopen4load(cinpalfname[nPal], 1); auto hFile = kopenFileReader(cinpalfname[nPal], 1);
if (hFile < 0) { if (!hFile.isOpen()) {
return -2; return -2;
} }
kread(hFile, cinemapal, sizeof(cinemapal)); hFile.Read(cinemapal, sizeof(cinemapal));
for (auto &c : cinemapal) for (auto &c : cinemapal)
c <<= 2; c <<= 2;
kclose(hFile);
return nPal; return nPal;
} }
@ -1958,7 +1950,9 @@ uint8_t AdvanceCinemaText()
{ {
HandleAsync(); HandleAsync();
if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Return] || KB_KeyDown[sc_Space]) { if (I_AdvanceTrigger())
{
I_AdvanceTriggerClear();
break; break;
} }
@ -2229,7 +2223,7 @@ int FindGString(const char *str)
uint8_t CheckForEscape() uint8_t CheckForEscape()
{ {
if (!KB_KeyWaiting() || (KB_GetCh() != 27)) { if (!inputState.keyBufferWaiting() || (inputState.keyGetChar() != 27)) {
return kFalse; return kFalse;
} }
@ -2240,7 +2234,7 @@ void DoStatic(int a, int b)
{ {
RandomLong(); // nothing done with the result of this? RandomLong(); // nothing done with the result of this?
tileLoad(kTileLoboLaptop); auto pixels = TileFiles.tileMakeWritable(kTileLoboLaptop);
int v2 = 160 - a / 2; int v2 = 160 - a / 2;
int v4 = 81 - b / 2; int v4 = 81 - b / 2;
@ -2248,7 +2242,7 @@ void DoStatic(int a, int b)
int var_18 = v2 + a; int var_18 = v2 + a;
int v5 = v4 + b; int v5 = v4 + b;
uint8_t *pTile = (uint8_t*)(waloff[kTileLoboLaptop] + (200 * v2)) + v4; auto pTile = (pixels + (200 * v2)) + v4;
while (v2 < var_18) while (v2 < var_18)
{ {
@ -2267,6 +2261,7 @@ void DoStatic(int a, int b)
v2++; v2++;
} }
tileInvalidate(kTileLoboLaptop, 0, 0);
overwritesprite(0, 0, kTileLoboLaptop, 0, 2, kPalNormal); overwritesprite(0, 0, kTileLoboLaptop, 0, 2, kPalNormal);
videoNextPage(); videoNextPage();
} }
@ -2285,17 +2280,17 @@ void DoLastLevelCinema()
PlayLocalSound(StaticSound[kSound75], 0); PlayLocalSound(StaticSound[kSound75], 0);
tileLoad(kTileLoboLaptop); auto pixels = TileFiles.tileMakeWritable(kTileLoboLaptop);
// uh, what?
memcpy((void*)waloff[kTileLoboLaptop], (void*)waloff[kTileLoboLaptop], tilesiz[kTileLoboLaptop].x * tilesiz[kTileLoboLaptop].y); //memcpy((void*)waloff[kTileLoboLaptop], (void*)waloff[kTileLoboLaptop], tilesiz[kTileLoboLaptop].x * tilesiz[kTileLoboLaptop].y);
int var_24 = 16; int var_24 = 16;
int var_28 = 12; int var_28 = 12;
int nEndTime = (int)totalclock + 240; int nEndTime = (int)totalclock + 240;
while (KB_KeyWaiting()) { while (inputState.keyBufferWaiting()) {
KB_GetCh(); inputState.keyGetChar();
} }
while (nEndTime > (int)totalclock) while (nEndTime > (int)totalclock)
@ -2315,10 +2310,6 @@ void DoLastLevelCinema()
DoStatic(var_28, var_24); DoStatic(var_28, var_24);
} }
// loadtilelockmode = 1;
tileLoad(kTileLoboLaptop);
// loadtilelockmode = 0;
// loc_3AD75 // loc_3AD75
do do
@ -2330,8 +2321,6 @@ LABEL_11:
int esi = nString; int esi = nString;
tileLoad(kTileLoboLaptop);
while (strlen(gString[esi]) != 0) while (strlen(gString[esi]) != 0)
esi++; esi++;
@ -2356,6 +2345,7 @@ LABEL_11:
nString++; nString++;
TileFiles.tileMakeWritable(kTileLoboLaptop);
while (*nChar) while (*nChar)
{ {
HandleAsync(); HandleAsync();
@ -2380,8 +2370,8 @@ LABEL_11:
nString++; nString++;
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
int v11 = kTimerTicks * (var_1C + 2) + (int)totalclock; int v11 = kTimerTicks * (var_1C + 2) + (int)totalclock;
@ -2391,9 +2381,9 @@ LABEL_11:
if (v11 <= (int)totalclock) if (v11 <= (int)totalclock)
goto LABEL_11; goto LABEL_11;
} while (!KB_KeyWaiting()); } while (!inputState.keyBufferWaiting());
} }
while (KB_GetCh() != 27); while (inputState.keyGetChar() != 27);
LABEL_28: LABEL_28:
PlayLocalSound(StaticSound[kSound75], 0); PlayLocalSound(StaticSound[kSound75], 0);

View file

@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "baselayer.h" #include "baselayer.h"
#include "typedefs.h" #include "typedefs.h"
#include "keyboard.h" #include "keyboard.h"
#include "cache1d.h"
BEGIN_PS_NS BEGIN_PS_NS
@ -55,7 +56,7 @@ int serve_sample()
palette_t moviepal[256]; palette_t moviepal[256];
int ReadFrame(FILE *fp) int ReadFrame(FileReader &fp)
{ {
static int nFrame = 0; static int nFrame = 0;
Printf("Reading frame %d...\n", nFrame); Printf("Reading frame %d...\n", nFrame);
@ -71,11 +72,11 @@ int ReadFrame(FILE *fp)
while (1) while (1)
{ {
if (fread(&nType, 1, sizeof(nType), fp) == 0) { if (fp.Read(&nType, sizeof(nType)) == 0) {
return 0; return 0;
} }
fread(&nSize, sizeof(nSize), 1, fp); fp.Read(&nSize, sizeof(nSize));
nType--; nType--;
if (nType > 3) { if (nType > 3) {
@ -86,8 +87,8 @@ int ReadFrame(FILE *fp)
{ {
case kFramePalette: case kFramePalette:
{ {
fread(palette, sizeof(palette[0]), sizeof(palette) / sizeof(palette[0]), fp); fp.Read(palette, sizeof(palette));
fread(&var_1C, sizeof(var_1C), 1, fp); fp.Read(&var_1C, sizeof(var_1C));
for (auto &c : palette) for (auto &c : palette)
c <<= 2; c <<= 2;
@ -102,7 +103,7 @@ int ReadFrame(FILE *fp)
{ {
Printf("Reading sound block size %d...\n", nSize); Printf("Reading sound block size %d...\n", nSize);
// TODO - just skip for now // TODO - just skip for now
fseek(fp, nSize, SEEK_CUR); fp.Seek(nSize, FileReader::SeekCur);
continue; continue;
} }
case kFrameImage: case kFrameImage:
@ -114,22 +115,22 @@ int ReadFrame(FILE *fp)
uint8_t *pFrame = CurFrame; uint8_t *pFrame = CurFrame;
int nRead = fread(&yOffset, 1, sizeof(yOffset), fp); int nRead = fp.Read(&yOffset, sizeof(yOffset));
nSize -= nRead; nSize -= nRead;
pFrame += yOffset * 200; // row position pFrame += yOffset * 200; // row position
while (nSize > 0) while (nSize > 0)
{ {
fread(&xOffset, sizeof(xOffset), 1, fp); fp.Read(&xOffset, sizeof(xOffset));
fread(&nPixels, sizeof(nPixels), 1, fp); fp.Read(&nPixels, sizeof(nPixels));
nSize -= 2; nSize -= 2;
pFrame += xOffset; pFrame += xOffset;
if (nPixels) if (nPixels)
{ {
int nRead = fread(pFrame, 1, nPixels, fp); int nRead = fp.Read(pFrame, nPixels);
pFrame += nRead; pFrame += nRead;
nSize -= nRead; nSize -= nRead;
} }
@ -150,10 +151,11 @@ int ReadFrame(FILE *fp)
void PlayMovie(const char *fileName) void PlayMovie(const char *fileName)
{ {
char buffer[256];
int bDoFade = 1; int bDoFade = 1;
#if 0 // What's the point of preserving this? Let's just read the movie from the game directory and ignore the other locations!
char buffer[256];
if (bNoCDCheck) if (bNoCDCheck)
{ {
sprintf(buffer, "C:\\PS\\%s", fileName); sprintf(buffer, "C:\\PS\\%s", fileName);
@ -167,9 +169,6 @@ void PlayMovie(const char *fileName)
sprintf(buffer, "%c:%s", driveLetter, fileName); sprintf(buffer, "%c:%s", driveLetter, fileName);
} }
tileLoad(kMovieTile);
CurFrame = (uint8_t*)waloff[kMovieTile];
FILE *fp = fopen(buffer, "rb"); FILE *fp = fopen(buffer, "rb");
if (fp == NULL) if (fp == NULL)
{ {
@ -181,16 +180,28 @@ void PlayMovie(const char *fileName)
return; return;
} }
} }
#else
auto fp = kopenFileReader(fileName, 0);
if (!fp.isOpen())
{
Printf("Unable to open %s\n", fileName);
return;
}
#endif
fread(lh, sizeof(lh), 1, fp); tileLoad(kMovieTile);
CurFrame = TileFiles.tileMakeWritable(kMovieTile);
fp.Read(lh, sizeof(lh));
memset(streambuf, 0, sizeof(streambuf)); memset(streambuf, 0, sizeof(streambuf));
memset(byte_1C6DF5, 0, sizeof(byte_1C6DF5)); memset(byte_1C6DF5, 0, sizeof(byte_1C6DF5));
// sound stuff // sound stuff
// clear keys // clear keys
KB_FlushKeyboardQueue(); inputState.keyFlushChars();
KB_ClearKeysDown(); inputState.ClearAllKeyStatus();
if (bDoFade) { if (bDoFade) {
StartFadeIn(); StartFadeIn();
@ -203,7 +214,7 @@ void PlayMovie(const char *fileName)
if (ReadFrame(fp)) if (ReadFrame(fp))
{ {
while (!KB_KeyWaiting()) while (!inputState.keyBufferWaiting())
{ {
handleevents(); handleevents();
@ -231,10 +242,8 @@ void PlayMovie(const char *fileName)
} }
} }
if (KB_KeyWaiting()) { if (inputState.keyBufferWaiting()) {
KB_GetCh(); inputState.keyGetChar();
} }
fclose(fp);
} }
END_PS_NS END_PS_NS

View file

@ -29,20 +29,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "config.h" #include "config.h"
#include "osdcmds.h" #include "osdcmds.h"
#include "vfs.h"
BEGIN_PS_NS BEGIN_PS_NS
static inline int osdcmd_quit(osdcmdptr_t UNUSED(parm))
{
UNREFERENCED_CONST_PARAMETER(parm);
OSD_ShowDisplay(0);
ShutDown();
return OSDCMD_OK;
}
int osdcmd_restartvid(osdcmdptr_t UNUSED(parm)) int osdcmd_restartvid(osdcmdptr_t UNUSED(parm))
{ {
UNREFERENCED_CONST_PARAMETER(parm); UNREFERENCED_CONST_PARAMETER(parm);
@ -103,219 +92,14 @@ static int osdcmd_vidmode(osdcmdptr_t parm)
return OSDCMD_OK; return OSDCMD_OK;
} }
static int osdcmd_addpath(osdcmdptr_t parm)
{
if (parm->numparms != 1)
return OSDCMD_SHOWHELP;
addsearchpath(parm->parms[0]);
return OSDCMD_OK;
}
static int osdcmd_initgroupfile(osdcmdptr_t parm)
{
if (parm->numparms != 1)
return OSDCMD_SHOWHELP;
initgroupfile(parm->parms[0]);
return OSDCMD_OK;
}
void onvideomodechange(int32_t newmode) void onvideomodechange(int32_t newmode)
{ {
uint8_t palid = BASEPAL; uint8_t palid = BASEPAL;
videoSetPalette(0, palid, 0); videoSetPalette(0, palid, 0);
} }
static int osdcmd_button(osdcmdptr_t parm)
{
static char const s_gamefunc_[] = "gamefunc_";
int constexpr strlen_gamefunc_ = ARRAY_SIZE(s_gamefunc_) - 1;
char const *p = parm->name + strlen_gamefunc_;
// if (g_player[myconnectindex].ps->gm == MODE_GAME) // only trigger these if in game
CONTROL_ButtonFlags[CONFIG_FunctionNameToNum(p)] = 1; // FIXME
return OSDCMD_OK;
}
static int osdcmd_cvar_set_game(osdcmdptr_t parm)
{
int const r = osdcmd_cvar_set(parm);
if (r != OSDCMD_OK) return r;
if (!Bstrcasecmp(parm->name, "r_maxfps") || !Bstrcasecmp(parm->name, "r_maxfpsoffset"))
{
if (r_maxfps != 0) r_maxfps = clamp(r_maxfps, 30, 1000);
g_frameDelay = calcFrameDelay(r_maxfps + r_maxfpsoffset);
}
if (!Bstrcasecmp(parm->name, "in_mouse"))
{
CONTROL_MouseEnabled = (gSetup.usemouse && CONTROL_MousePresent);
}
else if (!Bstrcasecmp(parm->name, "in_joystick"))
{
CONTROL_JoystickEnabled = (gSetup.usejoystick && CONTROL_JoyPresent);
}
return r;
}
int32_t registerosdcommands(void) int32_t registerosdcommands(void)
{ {
char tempbuf[256];
static osdcvardata_t cvars_game[] =
{
// TODO:
//{ "benchmarkmode", "Set the benchmark mode (0: off, 1: performance test, 2: generate reference screenshots for correctness testing)", (void *) &g_BenchmarkMode, CVAR_INT|CVAR_NOSAVE, 0, 2 },
//{ "crosshair", "enable/disable crosshair", (void *)&ud.crosshair, CVAR_BOOL, 0, 1 },
//{ "cl_autoaim", "enable/disable weapon autoaim", (void *)&ud.config.AutoAim, CVAR_INT|CVAR_MULTI, 0, 3 },
//{ "cl_automsg", "enable/disable automatically sending messages to all players", (void *)&ud.automsg, CVAR_BOOL, 0, 1 },
{ "cl_autorun", "enable/disable autorun", (void *)&auto_run, CVAR_BOOL, 0, 1 },
//{ "cl_autosave", "enable/disable autosaves", (void *) &ud.autosave, CVAR_BOOL, 0, 1 },
//{ "cl_autosavedeletion", "enable/disable automatic deletion of autosaves", (void *) &ud.autosavedeletion, CVAR_BOOL, 0, 1 },
//{ "cl_maxautosaves", "number of autosaves to keep before deleting the oldest", (void *) &ud.maxautosaves, CVAR_INT, 1, 100 },
//{ "cl_autovote", "enable/disable automatic voting", (void *)&ud.autovote, CVAR_INT, 0, 2 },
//{ "cl_cheatmask", "configure what cheats show in the cheats menu", (void *)&cl_cheatmask, CVAR_UINT, 0, ~0 },
//{ "cl_obituaries", "enable/disable multiplayer death messages", (void *)&ud.obituaries, CVAR_BOOL, 0, 1 },
//{ "cl_democams", "enable/disable demo playback cameras", (void *)&ud.democams, CVAR_BOOL, 0, 1 },
//{ "cl_idplayers", "enable/disable name display when aiming at opponents", (void *)&ud.idplayers, CVAR_BOOL, 0, 1 },
{ "cl_runmode", "enable/disable modernized run key operation", (void *)&runkey_mode, CVAR_BOOL, 0, 1 },
// { "cl_showcoords", "show your position in the game world", (void *)&ud.coords, CVAR_INT, 0,
//#ifdef USE_OPENGL
// 2
//#else
// 1
//#endif
// },
//{ "cl_viewbob", "enable/disable player head bobbing", (void *)&ud.viewbob, CVAR_BOOL, 0, 1 },
//{ "cl_weaponsway", "enable/disable player weapon swaying", (void *)&ud.weaponsway, CVAR_BOOL, 0, 1 },
//{ "cl_weaponswitch", "enable/disable auto weapon switching", (void *)&ud.weaponswitch, CVAR_INT|CVAR_MULTI, 0, 7 },
//{ "color", "changes player palette", (void *)&ud.color, CVAR_INT|CVAR_MULTI, 0, MAXPALOOKUPS-1 },
//{ "crosshairscale","changes the size of the crosshair", (void *)&ud.crosshairscale, CVAR_INT, 10, 100 },
//{ "demorec_diffs","enable/disable diff recording in demos",(void *)&demorec_diffs_cvar, CVAR_BOOL, 0, 1 },
//{ "demorec_force","enable/disable forced demo recording",(void *)&demorec_force_cvar, CVAR_BOOL|CVAR_NOSAVE, 0, 1 },
//{
// "demorec_difftics","sets game tic interval after which a diff is recorded",
// (void *)&demorec_difftics_cvar, CVAR_INT, 2, 60*REALGAMETICSPERSEC
//},
//{ "demorec_diffcompress","Compression method for diffs. (0: none, 1: KSLZW)",(void *)&demorec_diffcompress_cvar, CVAR_BOOL, 0, 1 },
//{ "demorec_synccompress","Compression method for input. (0: none, 1: KSLZW)",(void *)&demorec_synccompress_cvar, CVAR_BOOL, 0, 1 },
//{ "demorec_seeds","enable/disable recording of random seed for later sync checking",(void *)&demorec_seeds_cvar, CVAR_BOOL, 0, 1 },
//{ "demoplay_diffs","enable/disable application of diffs in demo playback",(void *)&demoplay_diffs, CVAR_BOOL, 0, 1 },
//{ "demoplay_showsync","enable/disable display of sync status",(void *)&demoplay_showsync, CVAR_BOOL, 0, 1 },
//{ "fov", "change the field of view", (void *)&ud.fov, CVAR_INT|CVAR_FUNCPTR, 60, 120 },
//{ "hud_althud", "enable/disable alternate mini-hud", (void *)&ud.althud, CVAR_BOOL, 0, 1 },
//{ "hud_custom", "change the custom hud", (void *)&ud.statusbarcustom, CVAR_INT, 0, ud.statusbarrange },
//{ "hud_position", "aligns the status bar to the bottom/top", (void *)&ud.hudontop, CVAR_BOOL, 0, 1 },
//{ "hud_bgstretch", "enable/disable background image stretching in wide resolutions", (void *)&ud.bgstretch, CVAR_BOOL, 0, 1 },
//{ "hud_messagetime", "length of time to display multiplayer chat messages", (void *)&ud.msgdisptime, CVAR_INT, 0, 3600 },
//{ "hud_numbertile", "first tile in alt hud number set", (void *)&althud_numbertile, CVAR_INT, 0, MAXUSERTILES-10 },
//{ "hud_numberpal", "pal for alt hud numbers", (void *)&althud_numberpal, CVAR_INT, 0, MAXPALOOKUPS-1 },
//{ "hud_shadows", "enable/disable althud shadows", (void *)&althud_shadows, CVAR_BOOL, 0, 1 },
//{ "hud_flashing", "enable/disable althud flashing", (void *)&althud_flashing, CVAR_BOOL, 0, 1 },
//{ "hud_glowingquotes", "enable/disable \"glowing\" quote text", (void *)&hud_glowingquotes, CVAR_BOOL, 0, 1 },
//{ "hud_scale","changes the hud scale", (void *)&ud.statusbarscale, CVAR_INT|CVAR_FUNCPTR, 36, 100 },
//{ "hud_showmapname", "enable/disable map name display on load", (void *)&hud_showmapname, CVAR_BOOL, 0, 1 },
//{ "hud_stats", "enable/disable level statistics display", (void *)&ud.levelstats, CVAR_BOOL, 0, 1 },
//{ "hud_textscale", "sets multiplayer chat message size", (void *)&ud.textscale, CVAR_INT, 100, 400 },
//{ "hud_weaponscale","changes the weapon scale", (void *)&ud.weaponscale, CVAR_INT, 10, 100 },
//{ "hud_statusbarmode", "change overlay mode of status bar", (void *)&ud.statusbarmode, CVAR_BOOL|CVAR_FUNCPTR, 0, 1 },
//#ifdef EDUKE32_TOUCH_DEVICES
// { "hud_hidestick", "hide the touch input stick", (void *)&droidinput.hideStick, CVAR_BOOL, 0, 1 },
//#endif
{ "in_joystick","enables input from the joystick if it is present",(void *)&gSetup.usejoystick, CVAR_BOOL|CVAR_FUNCPTR, 0, 1 },
{ "in_mouse","enables input from the mouse if it is present",(void *)&gSetup.usemouse, CVAR_BOOL|CVAR_FUNCPTR, 0, 1 },
{ "in_aimmode", "0:toggle, 1:hold to aim", (void *)&mouseaiming, CVAR_BOOL, 0, 1 },
{
"in_mousebias", "emulates the original mouse code's weighting of input towards whichever axis is moving the most at any given time",
(void *)&MouseBias, CVAR_INT, 0, 32
},
{ "in_mousedeadzone", "amount of mouse movement to filter out", (void *)&MouseDeadZone, CVAR_INT, 0, 512 },
{ "in_mouseflip", "invert vertical mouse movement", (void *)&mouseflip, CVAR_BOOL, 0, 1 },
{ "in_mousemode", "toggles vertical mouse view", (void *)&aimmode, CVAR_BOOL, 0, 1 },
{ "in_mousesmoothing", "enable/disable mouse input smoothing", (void *)&SmoothInput, CVAR_BOOL, 0, 1 },
//{ "mus_enabled", "enables/disables music", (void *)&ud.config.MusicToggle, CVAR_BOOL, 0, 1 },
//{ "mus_volume", "controls music volume", (void *)&ud.config.MusicVolume, CVAR_INT, 0, 255 },
//{ "osdhightile", "enable/disable hires art replacements for console text", (void *)&osdhightile, CVAR_BOOL, 0, 1 },
//{ "osdscale", "adjust console text size", (void *)&osdscale, CVAR_FLOAT|CVAR_FUNCPTR, 1, 4 },
//{ "r_camrefreshdelay", "minimum delay between security camera sprite updates, 120 = 1 second", (void *)&ud.camera_time, CVAR_INT, 1, 240 },
//{ "r_drawweapon", "enable/disable weapon drawing", (void *)&ud.drawweapon, CVAR_INT, 0, 2 },
{ "r_showfps", "show the frame rate counter", (void *)&r_showfps, CVAR_INT, 0, 3 },
//{ "r_showfpsperiod", "time in seconds before averaging min and max stats for r_showfps 2+", (void *)&ud.frameperiod, CVAR_INT, 0, 5 },
//{ "r_shadows", "enable/disable sprite and model shadows", (void *)&ud.shadows, CVAR_BOOL, 0, 1 },
//{ "r_size", "change size of viewable area", (void *)&ud.screen_size, CVAR_INT|CVAR_FUNCPTR, 0, 64 },
//{ "r_rotatespritenowidescreen", "pass bit 1024 to all CON rotatesprite calls", (void *)&g_rotatespriteNoWidescreen, CVAR_BOOL|CVAR_FUNCPTR, 0, 1 },
//{ "r_upscalefactor", "increase performance by rendering at upscalefactor less than the screen resolution and upscale to the full resolution in the software renderer", (void *)&ud.detail, CVAR_INT|CVAR_FUNCPTR, 1, 16 },
{ "r_precache", "enable/disable the pre-level caching routine", (void *)&useprecache, CVAR_BOOL, 0, 1 },
// { "r_ambientlight", "sets the global map light level",(void *)&r_ambientlight, CVAR_FLOAT|CVAR_FUNCPTR, 0, 10 },
{ "r_maxfps", "limit the frame rate",(void *)&r_maxfps, CVAR_INT|CVAR_FUNCPTR, 0, 1000 },
{ "r_maxfpsoffset", "menu-controlled offset for r_maxfps",(void *)&r_maxfpsoffset, CVAR_INT|CVAR_FUNCPTR, -10, 10 },
{ "sensitivity","changes the mouse sensitivity", (void *)&CONTROL_MouseSensitivity, CVAR_FLOAT|CVAR_FUNCPTR, 0, 25 },
//{ "skill","changes the game skill setting", (void *)&ud.m_player_skill, CVAR_INT|CVAR_FUNCPTR|CVAR_NOSAVE/*|CVAR_NOMULTI*/, 0, 5 },
//{ "snd_ambience", "enables/disables ambient sounds", (void *)&ud.config.AmbienceToggle, CVAR_BOOL, 0, 1 },
//{ "snd_enabled", "enables/disables sound effects", (void *)&ud.config.SoundToggle, CVAR_BOOL, 0, 1 },
//{ "snd_fxvolume", "controls volume for sound effects", (void *)&ud.config.FXVolume, CVAR_INT, 0, 255 },
//{ "snd_mixrate", "sound mixing rate", (void *)&ud.config.MixRate, CVAR_INT, 0, 48000 },
//{ "snd_numchannels", "the number of sound channels", (void *)&ud.config.NumChannels, CVAR_INT, 0, 2 },
//{ "snd_numvoices", "the number of concurrent sounds", (void *)&ud.config.NumVoices, CVAR_INT, 1, 128 },
//{ "snd_reversestereo", "reverses the stereo channels", (void *)&ud.config.ReverseStereo, CVAR_BOOL, 0, 1 },
//{ "snd_speech", "enables/disables player speech", (void *)&ud.config.VoiceToggle, CVAR_INT, 0, 5 },
//{ "team","change team in multiplayer", (void *)&ud.team, CVAR_INT|CVAR_MULTI, 0, 3 },
{ "vid_gamma","adjusts gamma component of gamma ramp",(void *)&g_videoGamma, CVAR_FLOAT|CVAR_FUNCPTR, 0, 10 },
{ "vid_contrast","adjusts contrast component of gamma ramp",(void *)&g_videoContrast, CVAR_FLOAT|CVAR_FUNCPTR, 0, 10 },
{ "vid_brightness","adjusts brightness component of gamma ramp",(void *)&g_videoBrightness, CVAR_FLOAT|CVAR_FUNCPTR, 0, 10 },
//{ "wchoice","sets weapon autoselection order", (void *)ud.wchoice, CVAR_STRING|CVAR_FUNCPTR, 0, MAX_WEAPONS },
};
//osdcmd_cheatsinfo_stat.cheatnum = -1;
for (auto & cv : cvars_game)
{
switch (cv.flags & (CVAR_FUNCPTR|CVAR_MULTI))
{
case CVAR_FUNCPTR:
OSD_RegisterCvar(&cv, osdcmd_cvar_set_game); break;
//case CVAR_MULTI:
//case CVAR_FUNCPTR|CVAR_MULTI:
// OSD_RegisterCvar(&cv, osdcmd_cvar_set_multi); break;
default:
OSD_RegisterCvar(&cv, osdcmd_cvar_set); break;
}
}
//if (VOLUMEONE) //if (VOLUMEONE)
// OSD_RegisterFunction("changelevel","changelevel <level>: warps to the given level", osdcmd_changelevel); // OSD_RegisterFunction("changelevel","changelevel <level>: warps to the given level", osdcmd_changelevel);
//else //else
@ -325,33 +109,14 @@ int32_t registerosdcommands(void)
// OSD_RegisterFunction("demo","demo <demofile or demonum>: starts the given demo", osdcmd_demo); // OSD_RegisterFunction("demo","demo <demofile or demonum>: starts the given demo", osdcmd_demo);
//} //}
OSD_RegisterFunction("addpath","addpath <path>: adds path to game filesystem", osdcmd_addpath);
OSD_RegisterFunction("bind",R"(bind <key> <string>: associates a keypress with a string of console input. Type "bind showkeys" for a list of keys and "listsymbols" for a list of valid console commands.)", osdcmd_bind);
//OSD_RegisterFunction("cmenu","cmenu <#>: jumps to menu", osdcmd_cmenu); //OSD_RegisterFunction("cmenu","cmenu <#>: jumps to menu", osdcmd_cmenu);
//OSD_RegisterFunction("crosshaircolor","crosshaircolor: changes the crosshair color", osdcmd_crosshaircolor); //OSD_RegisterFunction("crosshaircolor","crosshaircolor: changes the crosshair color", osdcmd_crosshaircolor);
for (auto & func : gamefunctions)
{
if (func[0] == '\0')
continue;
// if (!Bstrcmp(gamefunctions[i],"Show_Console")) continue;
Bsprintf(tempbuf, "gamefunc_%s", func);
char *const t = Bstrtolower(Xstrdup(tempbuf));
Bstrcat(tempbuf, ": game button");
OSD_RegisterFunction(t, Xstrdup(tempbuf), osdcmd_button);
}
//OSD_RegisterFunction("give","give <all|health|weapons|ammo|armor|keys|inventory>: gives requested item", osdcmd_give); //OSD_RegisterFunction("give","give <all|health|weapons|ammo|armor|keys|inventory>: gives requested item", osdcmd_give);
//OSD_RegisterFunction("god","god: toggles god mode", osdcmd_god); //OSD_RegisterFunction("god","god: toggles god mode", osdcmd_god);
//OSD_RegisterFunction("activatecheat","activatecheat <id>: activates a cheat code", osdcmd_activatecheat); //OSD_RegisterFunction("activatecheat","activatecheat <id>: activates a cheat code", osdcmd_activatecheat);
OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile);
//OSD_RegisterFunction("restartmap", "restartmap: restarts the current map", osdcmd_restartmap); //OSD_RegisterFunction("restartmap", "restartmap: restarts the current map", osdcmd_restartmap);
//OSD_RegisterFunction("restartsound","restartsound: reinitializes the sound system",osdcmd_restartsound); //OSD_RegisterFunction("restartsound","restartsound: reinitializes the sound system",osdcmd_restartsound);
OSD_RegisterFunction("restartvid","restartvid: reinitializes the video mode",osdcmd_restartvid); OSD_RegisterFunction("restartvid","restartvid: reinitializes the video mode",osdcmd_restartvid);

View file

@ -49,6 +49,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "cdaudio.h" #include "cdaudio.h"
#include "map.h" #include "map.h"
#include "sound.h" #include "sound.h"
#include "textures.h"
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -160,29 +161,29 @@ fixed droll;
void PlayerInterruptKeys() void PlayerInterruptKeys()
{ {
ControlInfo info; ControlInfo info;
CONTROL_ProcessBinds();
memset(&info, 0, sizeof(ControlInfo)); // this is done within CONTROL_GetInput() anyway memset(&info, 0, sizeof(ControlInfo)); // this is done within CONTROL_GetInput() anyway
CONTROL_GetInput(&info); CONTROL_GetInput(&info);
D_ProcessEvents();
if (MouseDeadZone) if (in_mousedeadzone)
{ {
if (info.mousey > 0) if (info.mousey > 0)
info.mousey = max(info.mousey - MouseDeadZone, 0); info.mousey = max(info.mousey - in_mousedeadzone, 0);
else if (info.mousey < 0) else if (info.mousey < 0)
info.mousey = min(info.mousey + MouseDeadZone, 0); info.mousey = min(info.mousey + in_mousedeadzone, 0);
if (info.mousex > 0) if (info.mousex > 0)
info.mousex = max(info.mousex - MouseDeadZone, 0); info.mousex = max(info.mousex - in_mousedeadzone, 0);
else if (info.mousex < 0) else if (info.mousex < 0)
info.mousex = min(info.mousex + MouseDeadZone, 0); info.mousex = min(info.mousex + in_mousedeadzone, 0);
} }
if (MouseBias) if (in_mousebias)
{ {
if (klabs(info.mousex) > klabs(info.mousey)) if (klabs(info.mousex) > klabs(info.mousey))
info.mousey = tabledivide32_noinline(info.mousey, MouseBias); info.mousey = tabledivide32_noinline(info.mousey, in_mousebias);
else else
info.mousex = tabledivide32_noinline(info.mousex, MouseBias); info.mousex = tabledivide32_noinline(info.mousex, in_mousebias);
} }
if (PlayerList[nLocalPlayer].nHealth == 0) if (PlayerList[nLocalPlayer].nHealth == 0)
@ -194,7 +195,7 @@ void PlayerInterruptKeys()
} }
// JBF: Run key behaviour is selectable // JBF: Run key behaviour is selectable
int const playerRunning = (runkey_mode) ? (buttonMap.ButtonDown(gamefunc_Run) | auto_run) : (auto_run ^ buttonMap.ButtonDown(gamefunc_Run)); int const playerRunning = G_CheckAutorun(buttonMap.ButtonDown(gamefunc_Run));
int const turnAmount = playerRunning ? 12 : 8; int const turnAmount = playerRunning ? 12 : 8;
int const keyMove = playerRunning ? 12 : 6; int const keyMove = playerRunning ? 12 : 6;
constexpr int const analogTurnAmount = 12; constexpr int const analogTurnAmount = 12;
@ -217,12 +218,12 @@ void PlayerInterruptKeys()
q16avel += fix16_from_int(info.dyaw) / analogExtent * (analogTurnAmount << 1); q16avel += fix16_from_int(info.dyaw) / analogExtent * (analogTurnAmount << 1);
} }
if (aimmode) if (g_MyAimMode)
q16horz = fix16_div(fix16_from_int(info.mousey), F16(64)); q16horz = fix16_div(fix16_from_int(info.mousey), F16(64));
else else
fvel = -(info.mousey >> 6); fvel = -(info.mousey >> 6);
if (mouseflip) q16horz = -q16horz; if (!in_mouseflip) q16horz = -q16horz;
q16horz -= fix16_from_int(info.dpitch) / analogExtent * analogTurnAmount; q16horz -= fix16_from_int(info.dpitch) / analogExtent * analogTurnAmount;
svel -= info.dx * keyMove / analogExtent; svel -= info.dx * keyMove / analogExtent;
@ -607,9 +608,9 @@ void InitPlayerInventory(short nPlayer)
nPlayerScore[nPlayer] = 0; nPlayerScore[nPlayer] = 0;
tileLoad(kTile3571 + nPlayer); auto pixels = tilePtr(kTile3571 + nPlayer);
nPlayerColor[nPlayer] = *(uint8_t*)(waloff[nPlayer + kTile3571] + tilesiz[nPlayer + kTile3571].x * tilesiz[nPlayer + kTile3571].y / 2); nPlayerColor[nPlayer] = pixels[tilesiz[nPlayer + kTile3571].x * tilesiz[nPlayer + kTile3571].y / 2];
} }
// done // done
@ -2850,7 +2851,7 @@ do_default_b:
FinishLevel(); FinishLevel();
} }
else { else {
keySetState(32, 1); inputState.keySetState(32, 1);
} }
DestroyItemAnim(nValB); DestroyItemAnim(nValB);
@ -3137,13 +3138,13 @@ do_default_b:
bPlayerPan = kFalse; bPlayerPan = kFalse;
} }
if (aimmode) if (g_MyAimMode)
bLockPan = kTrue; bLockPan = kTrue;
// loc_1C05E // loc_1C05E
fix16_t ecx = nDestVertPan[nPlayer] - nVertPan[nPlayer]; fix16_t ecx = nDestVertPan[nPlayer] - nVertPan[nPlayer];
if (aimmode) if (g_MyAimMode)
{ {
ecx = 0; ecx = 0;
} }

View file

@ -166,35 +166,32 @@ int seq_ReadSequence(const char *seqName)
strcat(buffer, seqName); strcat(buffer, seqName);
strcat(buffer, ".seq"); strcat(buffer, ".seq");
int hFile = kopen4load(buffer, 1); auto hFile = kopenFileReader(buffer, 1);
if (hFile == -1) if (!hFile.isOpen())
{ {
initprintf("Unable to open '%s'!\n", buffer); initprintf("Unable to open '%s'!\n", buffer);
kclose(hFile);
return 0; return 0;
} }
short tag; short tag;
kread(hFile, &tag, sizeof(tag)); hFile.Read(&tag, sizeof(tag));
if (tag < 'HI' || tag > 'HI' && tag != 'SD') if (tag < 'HI' || tag > 'HI' && tag != 'SD')
{ {
initprintf("Unsupported sequence version!\n"); initprintf("Unsupported sequence version!\n");
kclose(hFile);
return 0; return 0;
} }
short centerx, centery; // TODO - are global vars? short centerx, centery; // TODO - are global vars?
short nSeqs; short nSeqs;
kread(hFile, &centerx, sizeof(centerx)); hFile.Read(&centerx, sizeof(centerx));
kread(hFile, &centery, sizeof(centery)); hFile.Read(&centery, sizeof(centery));
kread(hFile, &nSeqs, sizeof(nSeqs)); hFile.Read(&nSeqs, sizeof(nSeqs));
if (nSeqs <= 0 || sequences + nSeqs >= kMaxSequences) if (nSeqs <= 0 || sequences + nSeqs >= kMaxSequences)
{ {
if (nSeqs < 0) if (nSeqs < 0)
{ {
initprintf("Invalid sequence count!\n"); initprintf("Invalid sequence count!\n");
kclose(hFile);
return 0; return 0;
} }
else { else {
@ -202,9 +199,9 @@ int seq_ReadSequence(const char *seqName)
} }
} }
kread(hFile, &SeqBase[sequences], nSeqs * sizeof(SeqBase[0])); hFile.Read(&SeqBase[sequences], nSeqs * sizeof(SeqBase[0]));
kread(hFile, &SeqSize[sequences], nSeqs * sizeof(SeqSize[0])); hFile.Read(&SeqSize[sequences], nSeqs * sizeof(SeqSize[0]));
kread(hFile, &SeqFlag[sequences], nSeqs * sizeof(SeqFlag[0])); hFile.Read(&SeqFlag[sequences], nSeqs * sizeof(SeqFlag[0]));
for (i = 0; i < nSeqs; i++) for (i = 0; i < nSeqs; i++)
{ {
@ -214,14 +211,13 @@ int seq_ReadSequence(const char *seqName)
short vdi = frames; short vdi = frames;
int16_t nFrames; int16_t nFrames;
kread(hFile, &nFrames, sizeof(nFrames)); hFile.Read(&nFrames, sizeof(nFrames));
if (nFrames <= 0 || frames + nFrames >= kMaxSEQFrames) if (nFrames <= 0 || frames + nFrames >= kMaxSEQFrames)
{ {
if (nFrames < 0 ) if (nFrames < 0 )
{ {
initprintf("Invalid frame count!\n"); initprintf("Invalid frame count!\n");
kclose(hFile);
return 0; return 0;
} }
else { else {
@ -229,9 +225,9 @@ int seq_ReadSequence(const char *seqName)
} }
} }
kread(hFile, &FrameBase[frames], nFrames * sizeof(FrameBase[0])); hFile.Read(&FrameBase[frames], nFrames * sizeof(FrameBase[0]));
kread(hFile, &FrameSize[frames], nFrames * sizeof(FrameSize[0])); hFile.Read(&FrameSize[frames], nFrames * sizeof(FrameSize[0]));
kread(hFile, &FrameFlag[frames], nFrames * sizeof(FrameFlag[0])); hFile.Read(&FrameFlag[frames], nFrames * sizeof(FrameFlag[0]));
memset(&FrameSound[frames], -1, nFrames * sizeof(FrameSound[0])); memset(&FrameSound[frames], -1, nFrames * sizeof(FrameSound[0]));
for (i = 0; i < nFrames; i++) for (i = 0; i < nFrames; i++)
@ -240,14 +236,13 @@ int seq_ReadSequence(const char *seqName)
} }
int16_t nChunks; int16_t nChunks;
kread(hFile, &nChunks, sizeof(nChunks)); hFile.Read(&nChunks, sizeof(nChunks));
if (nChunks < 0 || chunks + nChunks >= kMaxSEQChunks) if (nChunks < 0 || chunks + nChunks >= kMaxSEQChunks)
{ {
if (nChunks < 0 ) if (nChunks < 0 )
{ {
initprintf("Invalid chunk count!\n"); initprintf("Invalid chunk count!\n");
kclose(hFile);
return 0; return 0;
} }
else { else {
@ -255,10 +250,10 @@ int seq_ReadSequence(const char *seqName)
} }
} }
kread(hFile, &ChunkXpos[chunks], nChunks * sizeof(ChunkXpos[0])); hFile.Read(&ChunkXpos[chunks], nChunks * sizeof(ChunkXpos[0]));
kread(hFile, &ChunkYpos[chunks], nChunks * sizeof(ChunkYpos[0])); hFile.Read(&ChunkYpos[chunks], nChunks * sizeof(ChunkYpos[0]));
kread(hFile, &ChunkPict[chunks], nChunks * sizeof(ChunkPict[0])); hFile.Read(&ChunkPict[chunks], nChunks * sizeof(ChunkPict[0]));
kread(hFile, &ChunkFlag[chunks], nChunks * sizeof(ChunkFlag[0])); hFile.Read(&ChunkFlag[chunks], nChunks * sizeof(ChunkFlag[0]));
for (i = 0; i < nChunks; i++) for (i = 0; i < nChunks; i++)
{ {
@ -275,21 +270,21 @@ int seq_ReadSequence(const char *seqName)
if (tag == 'SD') if (tag == 'SD')
{ {
short var_20; short var_20;
kread(hFile, &var_20, sizeof(var_20)); hFile.Read(&var_20, sizeof(var_20));
for (i = 0; i < var_20; i++) for (i = 0; i < var_20; i++)
{ {
kread(hFile, &buffer[i * 10], 8); hFile.Read(&buffer[i * 10], 8);
} }
short var_24; short var_24;
kread(hFile, &var_24, sizeof(var_24)); hFile.Read(&var_24, sizeof(var_24));
for (i = 0; i < var_24; i++) for (i = 0; i < var_24; i++)
{ {
short var_28, var_2C; short var_28, var_2C;
kread(hFile, &var_28, sizeof(var_28)); hFile.Read(&var_28, sizeof(var_28));
kread(hFile, &var_2C, sizeof(var_2C)); hFile.Read(&var_2C, sizeof(var_2C));
int hSound = LoadSound(&buffer[(var_2C&0x1FF)*10]); int hSound = LoadSound(&buffer[(var_2C&0x1FF)*10]);
@ -297,7 +292,6 @@ int seq_ReadSequence(const char *seqName)
} }
} }
kclose(hFile);
return nSeqs; return nSeqs;
} }

View file

@ -293,7 +293,7 @@ void CalcASSPan(int nPan, int nVolume, int *pLeft, int *pRight)
*pRight = mulscale6(nPanTable[127-nPan], nVolume); *pRight = mulscale6(nPanTable[127-nPan], nVolume);
} }
void ASSCallback(uint32_t num) void ASSCallback(intptr_t num)
{ {
// TODO: add mutex? // TODO: add mutex?
if ((int32_t)num == -1) if ((int32_t)num == -1)
@ -345,10 +345,10 @@ void InitFX(void)
dig = 0; dig = 0;
if (bNoSound) if (!SoundEnabled())
return; return;
if (FX_Init(NumVoices, NumChannels, MixRate, initdata) != FX_Ok) if (FX_Init(snd_numvoices, snd_numchannels, snd_mixrate, initdata) != FX_Ok)
{ {
Printf("Error initializing sound card!\n"); Printf("Error initializing sound card!\n");
initprintf("Error initializing sound card!\n"); initprintf("Error initializing sound card!\n");
@ -395,70 +395,6 @@ void UnInitFX()
FX_Shutdown(); FX_Shutdown();
} }
#if 0
void InitMusic()
{
if (bNoSound)
{
mdi = 0;
return;
}
mdi = AIL_install_MDI_INI();
if (!mdi)
{
initprintf("AIL_install midi failed\n");
return;
}
S = AIL_allocate_sequence_handle(mdi);
if (!S)
{
initprintf("Midi handle failed");
return;
}
}
void UnInitMusic()
{
if (mdi)
AIL_end_sequence(S);
}
void FadeSong()
{
AIL_set_sequence_volume(S, 0, 1000);
}
int LoadSong(const char *song)
{
FILE *f;
if (!mdi)
return 0;
AIL_end_sequence(S);
f = fopen(song, "rb");
if (!f)
{
sprintf(message_text, "Unable to midi open file '%s'!\n", song);
message_timer = 1000;
return 0;
}
if (fread(pMusicBuf, sizeof(pMusicBuf), 1, f) == sizeof(pMusicBuf))
{
sprintf(message_text, "Programmer error: not enough memory allocated for song file.\n");
message_timer = 1000;
fclose(f);
return 0;
}
fclose(f);
AIL_init_sequence(S, pMusicBuf, 0);
AIL_start_sequence(S);
AIL_set_sequence_loop_count(S, 0);
AIL_set_sequence_volume(S, gMusicVolume>>1, 0);
}
#else
void InitMusic() void InitMusic()
{ {
} }
@ -476,7 +412,6 @@ int LoadSong(const char *song)
UNREFERENCED_PARAMETER(song); UNREFERENCED_PARAMETER(song);
return 0; return 0;
} }
#endif
int LoadSound(const char *sound) int LoadSound(const char *sound)
{ {
@ -506,29 +441,28 @@ int LoadSound(const char *sound)
strcat(buffer, ".voc"); strcat(buffer, ".voc");
buildvfs_kfd hVoc = kopen4loadfrommod(buffer, 0); auto hVoc = kopenFileReader(buffer, 0);
if (hVoc != buildvfs_kfd_invalid) if (!hVoc.isOpen())
{ {
int nSize = kfilelength(hVoc); int nSize = hVoc.GetLength();
SoundLock[i] = 255; // TODO: implement cache lock properly //SoundLock[i] = 255; // crap we don't need.
SoundLen[i] = nSize; SoundLen[i] = nSize;
g_cache.allocateBlock((intptr_t*)&SoundBuf[i], nSize, &SoundLock[i]); cacheAllocateBlock((intptr_t*)&SoundBuf[i], nSize, nullptr);
if (!SoundBuf[i]) if (!SoundBuf[i])
I_Error("Error allocating buf '%s' to %lld (size=%ld)!\n", buffer, (intptr_t)&SoundBuf[i], nSize); I_Error("Error allocating buf '%s' to %lld (size=%ld)!\n", buffer, (intptr_t)&SoundBuf[i], nSize);
if (kread(hVoc, SoundBuf[i], nSize) != nSize) if (hVoc.Read(SoundBuf[i], nSize) != nSize)
I_Error("Error reading '%s'!\n", buffer); Printf("Error reading '%s'!\n", buffer);
} }
else else
{ {
I_Error("Unable to open sound '%s'!\n", buffer); Printf("Unable to open sound '%s'!\n", buffer);
SoundBuf[i] = NULL; SoundBuf[i] = NULL;
SoundLen[i] = 0; SoundLen[i] = 0;
//return hVoc; //return hVoc;
return -1; return -1;
} }
kclose(hVoc);
nSoundCount++; nSoundCount++;
return i; return i;
} }

View file

@ -41,6 +41,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "engine.h" #include "engine.h"
#include "trigdat.h" #include "trigdat.h"
#include "runlist.h" #include "runlist.h"
#include "input.h"
#include <string.h> #include <string.h>
BEGIN_PS_NS BEGIN_PS_NS
@ -586,8 +587,9 @@ void DrawView(int smoothRatio)
} }
else else
{ {
if ((bSubTitles && !AdvanceCinemaText()) || KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Return] || KB_KeyDown[sc_Space]) if ((bSubTitles && !AdvanceCinemaText()) || I_AdvanceTrigger())
{ {
I_AdvanceTriggerClear();
levelnew = levelnum + 1; levelnew = levelnum + 1;
if (CDplaying()) if (CDplaying())

View file

@ -56,22 +56,6 @@ BEGIN_SW_NS
int32_t NumberPlayers,CommPort,PortSpeed,IrqNumber,UartAddress; int32_t NumberPlayers,CommPort,PortSpeed,IrqNumber,UartAddress;
//
// Sound variables
//
int32_t UseMouse = 1, UseJoystick = 0;
//
// Screen variables
//
/* /*
=================== ===================
= =

View file

@ -68,7 +68,6 @@ extern char UserPath[MAXUSERLEVELPATHLENGTH];
#endif #endif
// controller externs // controller externs
extern int32_t UseMouse, UseJoystick;
extern int32_t EnableRudder; extern int32_t EnableRudder;