diff --git a/source/common/console/c_buttons.h b/source/common/console/c_buttons.h index 5df7af5b8..2efac99af 100644 --- a/source/common/console/c_buttons.h +++ b/source/common/console/c_buttons.h @@ -91,8 +91,7 @@ enum GameFunction_t gamefunc_Zoom_In, // Map controls should not pollute the global button namespace. gamefunc_Zoom_Out, - gamefunc_Escape, // this shouldn't be a button. - + NUMGAMEFUNCTIONS }; diff --git a/source/common/inputstate.h b/source/common/inputstate.h index 834790ff7..d16cf78a5 100644 --- a/source/common/inputstate.h +++ b/source/common/inputstate.h @@ -239,7 +239,7 @@ public: void ClearKeysDown(void) { - KB_LastScan = 0; + ClearLastScanCode(); ClearAllKeyStatus(); } diff --git a/source/common/textures/buildtiles.cpp b/source/common/textures/buildtiles.cpp index af0bb7f3e..f3940a725 100644 --- a/source/common/textures/buildtiles.cpp +++ b/source/common/textures/buildtiles.cpp @@ -374,9 +374,10 @@ FTexture* BuildTiles::ValidateCustomTile(int tilenum, int type) else if (type == FTexture::Restorable) { // 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. // 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... 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. diff --git a/source/common/textures/textures.h b/source/common/textures/textures.h index b574bca56..a96d2b8c0 100644 --- a/source/common/textures/textures.h +++ b/source/common/textures/textures.h @@ -583,7 +583,7 @@ inline uint8_t* tileData(int num) 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 { const vec2_16_t &operator[](size_t index) diff --git a/source/duke3d/src/screens.cpp b/source/duke3d/src/screens.cpp index 3b2dfe562..19c4578a7 100644 --- a/source/duke3d/src/screens.cpp +++ b/source/duke3d/src/screens.cpp @@ -1182,7 +1182,6 @@ void G_DisplayRest(int32_t smoothratio) GameStats GameInterface::getStats() { - GameStats stats; 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 }; } diff --git a/source/exhumed/src/config.cpp b/source/exhumed/src/config.cpp index c063aa3f5..e65fa0ba9 100644 --- a/source/exhumed/src/config.cpp +++ b/source/exhumed/src/config.cpp @@ -45,10 +45,7 @@ unsigned int dword_1B82E0 = 0; int32_t FXVolume; int32_t MusicVolume; -int32_t MixRate; int32_t MidiPort; -int32_t NumVoices; -int32_t NumChannels; int32_t NumBits; int32_t ReverseStereo; int32_t MusicDevice; @@ -59,8 +56,6 @@ int32_t scripthandle; int32_t setupread; // TODO: implement precaching toggle int32_t useprecache; -int32_t MouseDeadZone, MouseBias; -int32_t SmoothInput; void CONFIG_SetDefaults() { @@ -87,26 +82,13 @@ void CONFIG_SetDefaults() // currently settings.cfg is only read after the startup window launches the game, // and rereading binds might be fickle so just enable this - gSetup.usejoystick = 1; - gSetup.forcesetup = 1; gSetup.noautoload = 1; gSetup.fullscreen = 1; - gSetup.usemouse = 1; - MixRate = 44100; FXVolume = 255; MusicVolume = 255; - NumChannels = 2; NumBits = 16; - NumVoices = 32; - - mouseaiming = 0; - aimmode = 1; - mouseflip = 1; - runkey_mode = 0; - auto_run = 1; - } int CONFIG_ReadSetup(void) diff --git a/source/exhumed/src/config.h b/source/exhumed/src/config.h index 227fa69c6..f9b2ef0fa 100644 --- a/source/exhumed/src/config.h +++ b/source/exhumed/src/config.h @@ -27,8 +27,6 @@ BEGIN_PS_NS typedef struct { - int32_t usejoystick; - int32_t usemouse; int32_t fullscreen; int32_t xdim; int32_t ydim; diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index e058f2a93..b34d6b138 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -460,10 +460,6 @@ int32_t g_groupFileHandle; static struct strllist *CommandPaths, *CommandGrps; -void G_ExtPreInit(int32_t argc,char const * const * argv) -{ -} - void G_ExtInit(void) { } @@ -651,7 +647,6 @@ int8_t vely[97 * 106]; short nMouthTile; short nPupData = 0; -int headfd = -1; short word_964E8 = 0; short word_964EA = 0; @@ -679,7 +674,6 @@ short nBackgroundPic; short nShadowPic; short nCreaturesLeft = 0; -short bNoSound = kFalse; short nFreeze; short bFullScreen; @@ -799,9 +793,6 @@ char debugBuffer[256]; short wConsoleNode; // TODO - move me into network file -int mouseaiming, aimmode, mouseflip; -int runkey_mode, auto_run; - ClockTicks tclocks, tclocks2; void DebugOut(const char *fmt, ...) @@ -1567,10 +1558,10 @@ void DrawClock() { int ebp = 49; - tileLoad(kTile3603); + auto pixels = TileFiles.tileMakeWritable(kTile3603); // nRedTicks = 0; - memset((void*)waloff[kTile3603], -1, 4096); + memset(pixels, -1, 4096); 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); } -int r_showfps; - #define COLOR_RED redcol #define COLOR_WHITE whitecol @@ -1773,111 +1762,25 @@ static int32_t check_filename_casing(void) } #endif -int32_t r_maxfps = 60; int32_t r_maxfpsoffset = 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; -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 + // Check for any command line arguments + for (int i = 1; i < argc; i++) + { + const char* pChar = argv[i]; -#ifndef USE_PHYSFS -#ifdef DEBUGGINGAIDS - extern int32_t (*check_filename_casing_fn)(void); - check_filename_casing_fn = check_filename_casing; -#endif -#endif -#endif + if (*pChar == '/') + { + pChar++; + //strlwr(pChar); - 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 - for (i = 1; i < argc; i++) - { - const char *pChar = argv[i]; - - if (*pChar == '/') - { - pChar++; - //strlwr(pChar); - - if (Bstrcasecmp(pChar, "nocreatures") == 0) { - bNoCreatures = kTrue; - } - else if (Bstrcasecmp(pChar, "nosound") == 0) { - bNoSound = kTrue; + if (Bstrcasecmp(pChar, "nocreatures") == 0) { + bNoCreatures = kTrue; } else if (Bstrcasecmp(pChar, "record") == 0) { @@ -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) { forcelevel = 1; @@ -2028,15 +1955,6 @@ int app_main(int argc, char const* const* argv) if (forcegl) initprintf("GL driver blacklist disabled.\n"); #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 int const readSetup = @@ -2051,68 +1969,7 @@ int app_main(int argc, char const* const* argv) 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: nItemTextIndex = FindGString("ITEMS"); @@ -2129,33 +1986,13 @@ int app_main(int argc, char const* const* argv) // GetCurPal(NULL); - CONFIG_WriteSetup(1); - CONFIG_ReadSetup(); - initprintf("Initializing OSD...\n"); 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(); 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(); if (nNetPlayerCount == -1) @@ -2290,8 +2127,8 @@ MENU: bInDemo = kTrue; bPlayback = kTrue; - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); + inputState.keyFlushChars(); + inputState.ClearAllKeyStatus(); break; } STARTGAME1: @@ -2400,8 +2237,8 @@ LOOP3: { EraseScreen(overscanindex); Query(2, 0, "Insert CD into drive", "(ESC to abort)"); - KB_ClearKeysDown(); - if (KB_GetCh() == asc_Escape) { + inputState.ClearAllKeyStatus(); + if (inputState.keyGetChar() == asc_Escape) { I_Error("Aborted\n"); } } @@ -2509,10 +2346,10 @@ LOOP3: if (bPlayback) { // YELLOW - if ((bInDemo && KB_KeyWaiting() || !ReadPlaybackInputs()) && KB_GetCh()) + if ((bInDemo && inputState.keyBufferWaiting() || !ReadPlaybackInputs()) && inputState.keyGetChar()) { - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); + inputState.keyFlushChars(); + inputState.ClearAllKeyStatus(); bPlayback = kFalse; bInDemo = kFalse; @@ -2657,9 +2494,9 @@ LOOP3: } if (!bInDemo) { - if (buttonMap.ButtonDown(gamefunc_Escape)) + if (inputState.GetKeyStatus(sc_Escape)) { - buttonMap.ClearButton(gamefunc_Escape); + inputState.ClearKeyStatus(sc_Escape); // MENU2: CONTROL_BindsEnabled = 0; bInMove = kTrue; @@ -2693,11 +2530,6 @@ LOOP3: CONTROL_BindsEnabled = 1; 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) { buttonMap.ClearButton(gamefunc_Map); @@ -3001,7 +2833,8 @@ void CopyTileToBitmap(short nSrcTile, short nDestTile, int xPos, int yPos) { 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; tileLoad(nSrcTile); @@ -3009,7 +2842,7 @@ void CopyTileToBitmap(short nSrcTile, short nDestTile, int xPos, int yPos) int destYSize = tilesiz[nDestTile].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++) { @@ -3164,13 +2997,13 @@ int Query(short nLines, short nKeys, ...) if (nKeys) { - KB_FlushKeyboardQueue(); + inputState.keyFlushChars(); while (1) { HandleAsync(); - char key = toupper(KB_GetCh()); + char key = toupper(inputState.keyGetChar()); for (i = 0; i < nKeys; i++) { @@ -3196,7 +3029,6 @@ void InitSpiritHead() nPixels = 0; - tileLoad(kTileRamsesNormal); // Ramses Normal Head 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 y = 0; y < 106; y++) { if (*pTile != 255) { - pixelval[nPixels] = *(uint8_t*)(waloff[kTileRamsesGold] + x * 106 + y); + pixelval[nPixels] = *(pGold + x * 106 + y); origx[nPixels] = x - 48; origy[nPixels] = y - 53; curx[nPixels] = 0; @@ -3241,7 +3073,6 @@ void InitSpiritHead() } } - waloff[kTileRamsesWorkTile] = (intptr_t)worktile; sprite[nSpiritSprite].yrepeat = 140; sprite[nSpiritSprite].xrepeat = 140; @@ -3250,8 +3081,7 @@ void InitSpiritHead() nHeadStage = 0; // work tile is twice as big as the normal head size - tilesiz[kTileRamsesWorkTile].x = 97 * 2; // 194; - tilesiz[kTileRamsesWorkTile].y = 106 * 2; // 212; + TileFiles.tileSetExternal(kTileRamsesWorkTile, 97 * 2, 106 * 2, worktile); sprite[nSpiritSprite].cstat &= 0x7FFF; @@ -3285,11 +3115,16 @@ void InitSpiritHead() lNextStateChange = (int)totalclock; lHeadStartClock = (int)totalclock; - headfd = kopen4load(filename, 512); // 512?? - nPupData = kread(headfd, cPupData, sizeof(cPupData)); - pPupData = cPupData; - kclose(headfd); - headfd = -1; + auto headfd = kopenFileReader(filename, 512); // 512?? + if (!headfd.isOpen()) + { + memset(cPupData, 0, sizeof(cPupData)); + } + else + { + nPupData = headfd.Read(cPupData, sizeof(cPupData)); + pPupData = cPupData; + } nMouthTile = 0; nTalkTime = 1; } @@ -3317,9 +3152,7 @@ void DimSector(short nSector) void CopyHeadToWorkTile(short nTile) { - tileLoad(nTile); - - uint8_t *pSrc = (uint8_t*)waloff[nTile]; + const uint8_t* pSrc = tilePtr(nTile); uint8_t *pDest = (uint8_t*)&worktile[212 * 49 + 53]; for (int i = 0; i < 97; i++) @@ -3670,11 +3503,9 @@ int DoSpiritHead() ebx += word_964EA; - tileLoad(ebx); - // TODO - fixme. How big is worktile? 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++) { @@ -3697,8 +3528,6 @@ int DoSpiritHead() if (nMouthTile) { - tileLoad(nMouthTile + 598); - short nTileSizeX = tilesiz[nMouthTile + 598].x; short nTileSizeY = tilesiz[nMouthTile + 598].y; @@ -3707,7 +3536,7 @@ int DoSpiritHead() // pDest += (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) { diff --git a/source/exhumed/src/exhumed.h b/source/exhumed/src/exhumed.h index 1aa236985..bf4e97590 100644 --- a/source/exhumed/src/exhumed.h +++ b/source/exhumed/src/exhumed.h @@ -188,8 +188,6 @@ extern short bSlipMode; extern short nItemTextIndex; extern const char *gString[]; -extern short bNoSound; - extern int bVanilla; extern int32_t g_gameType; @@ -197,8 +195,6 @@ extern int32_t g_gameType; #define POWERSLAVE (g_gameType & GAMEFLAG_POWERSLAVE) #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_maxfpsoffset; extern double g_frameDelay; @@ -221,7 +217,6 @@ enum { }; extern char g_modDir[BMAX_PATH]; -extern int r_showfps; extern struct grpfile_t const* g_selectedGrp; diff --git a/source/exhumed/src/init.cpp b/source/exhumed/src/init.cpp index 7427315d5..7d36a24ab 100644 --- a/source/exhumed/src/init.cpp +++ b/source/exhumed/src/init.cpp @@ -213,173 +213,6 @@ uint8_t LoadLevel(int nMap) 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; int status = engineLoadBoard(fileName_1, 0, &startPos, &inita, &initsect); if (status == -2) @@ -439,27 +272,9 @@ void ResetEngine() void InstallEngine() { // 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 //nScreenWidth *= 2; //nScreenHeight *= 2; @@ -522,7 +337,6 @@ void InstallEngine() void RemoveEngine() { engineUnInit(); - uninitgroupfile(); } void SetBelow(short nCurSector, short nBelowSector) diff --git a/source/exhumed/src/input.cpp b/source/exhumed/src/input.cpp index 265ece5ce..b23014ef3 100644 --- a/source/exhumed/src/input.cpp +++ b/source/exhumed/src/input.cpp @@ -168,8 +168,8 @@ ClearSpaceBar_ void ClearAllKeys() { - KB_ClearKeysDown(); - KB_FlushKeyboardQueue(); + inputState.ClearAllKeyStatus(); + inputState.keyFlushChars(); } void WaitNoKey(int nSecs, void (*pFunc) (void)) diff --git a/source/exhumed/src/light.cpp b/source/exhumed/src/light.cpp index f94e7c8d3..599281715 100644 --- a/source/exhumed/src/light.cpp +++ b/source/exhumed/src/light.cpp @@ -84,20 +84,19 @@ int LoadPaletteLookups() for (int i = 0; i < kMaxGrads; i++) { - int hFile = kopen4load(GradList[i], 1); - if (hFile == -1) + auto hFile = kopenFileReader(GradList[i], 1); + if (!hFile.isOpen()) { initprintf("Error reading palette lookup '%s'\n", GradList[i]); return 0; } - kread(hFile, buffer, 256*64); + hFile.Read(buffer, 256*64); // TODO: dumb hack if (palookup[i]) ALIGNED_FREE_AND_NULL(palookup[i]); paletteSetLookupTable(i, buffer); - kclose(hFile); - + // origpalookup[i] = palookup[i]; bGreenPal = 0; diff --git a/source/exhumed/src/map.cpp b/source/exhumed/src/map.cpp index 5d8e27ef9..475505da1 100644 --- a/source/exhumed/src/map.cpp +++ b/source/exhumed/src/map.cpp @@ -559,7 +559,7 @@ static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16 } } - renderEnableFog(); + //renderEnableFog(); videoSetCorrectedAspect(); diff --git a/source/exhumed/src/menu.cpp b/source/exhumed/src/menu.cpp index 85c0d8690..4ffd126bf 100644 --- a/source/exhumed/src/menu.cpp +++ b/source/exhumed/src/menu.cpp @@ -38,6 +38,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "light.h" #include "cd.h" #include "cdaudio.h" +#include "input.h" #include #include @@ -779,9 +780,9 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest) if (curYPos == destYPos) { - if (KB_KeyDown[sc_UpArrow]) + if (I_MenuUp()) { - KB_KeyDown[sc_UpArrow] = 0; + I_MenuUpClear(); if (nLevelNew <= nLevelBest) { @@ -801,9 +802,9 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest) } } - if (KB_KeyDown[sc_DownArrow]) - { - KB_KeyDown[sc_DownArrow] = 0; + if (I_MenuDown()) + { + I_MenuDownClear(); 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; - KB_KeyDown[sc_Return] = 0; - KB_KeyDown[sc_Space] = 0; + I_AdvanceTriggerClear(); return nLevelNew + 1; } } @@ -841,15 +840,13 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest) //curYPos += var_2C * (((int)totalclock - moveTimer) / 2); - if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Space] || KB_KeyDown[sc_Return]) - { - if (var_2C < 8) { + if (I_AdvanceTrigger()) + { + I_AdvanceTriggerClear(); + if (var_2C < 8) { var_2C *= 2; } - KB_KeyDown[sc_Escape] = 0; - KB_KeyDown[sc_Return] = 0; - KB_KeyDown[sc_Space] = 0; } if (curYPos > destYPos&& var_2C > 0) { @@ -908,35 +905,31 @@ void menu_AdjustVolume() videoNextPage(); - if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Return] || KB_KeyDown[sc_Space]) - { - PlayLocalSound(StaticSound[kSound33], 0); - KB_KeyDown[sc_Escape] = 0; - KB_KeyDown[sc_Space] = 0; - KB_KeyDown[sc_Return] = 0; + if (I_AdvanceTrigger()) + { + I_AdvanceTriggerClear(); + PlayLocalSound(StaticSound[kSound33], 0); return; } - if (KB_KeyDown[sc_UpArrow]) + if (I_MenuUp()) { + I_MenuUpClear(); if (nOption > 0) { nOption--; PlayLocalSound(StaticSound[kSound35], 0); } - - KB_KeyDown[sc_UpArrow] = 0; } - if (KB_KeyDown[sc_DownArrow]) - { - if (nOption < 1) + if (I_MenuDown()) + { + I_MenuDownClear(); + if (nOption < 1) { nOption++; PlayLocalSound(StaticSound[kSound35], 0); } - - KB_KeyDown[sc_DownArrow] = 0; } if ((int)totalclock <= var_8) { @@ -945,9 +938,10 @@ void menu_AdjustVolume() var_8 = (int)totalclock + 5; - if (KB_KeyDown[sc_LeftArrow]) - { - switch (nOption) + if (I_MenuLeft()) + { + I_MenuLeftClear(); + switch (nOption) { case 0: { @@ -977,9 +971,10 @@ void menu_AdjustVolume() } } - if (KB_KeyDown[sc_RightArrow]) - { - switch (nOption) + if (I_MenuRight()) + { + I_MenuRightClear(); + switch (nOption) { case 0: { @@ -1103,16 +1098,17 @@ int menu_NewGameMenu() // continue; //} - if (KB_KeyDown[sc_Escape]) + if (I_EscapeTrigger()) { PlayLocalSound(StaticSound[kSound33], 0); - KB_KeyDown[sc_Escape] = 0; + I_EscapeTriggerClear(); return -1; } - if (KB_KeyDown[sc_UpArrow]) - { - PlayLocalSound(StaticSound[kSound35], 0); + if (I_MenuUp()) + { + I_MenuUpClear(); + PlayLocalSound(StaticSound[kSound35], 0); if (nSlot <= 0) { nSlot = 4; } @@ -1120,14 +1116,14 @@ int menu_NewGameMenu() nSlot--; } - KB_KeyDown[sc_UpArrow] = 0; ClearAllKeys(); continue; } - if (KB_KeyDown[sc_DownArrow]) - { - PlayLocalSound(StaticSound[kSound35], 0); + if (I_MenuDown()) + { + I_MenuDownClear(); + PlayLocalSound(StaticSound[kSound35], 0); if (nSlot >= 4) { nSlot = 0; } @@ -1135,12 +1131,11 @@ int menu_NewGameMenu() nSlot++; } - KB_KeyDown[sc_DownArrow] = 0; - ClearAllKeys(); + inputState.ClearAllKeyStatus(); continue; } - if (KB_KeyDown[sc_Return] || KB_KeyWaiting()) + if (I_AdvanceTrigger() || inputState.keyBufferWaiting()) { break; } @@ -1148,8 +1143,8 @@ int menu_NewGameMenu() } PlayLocalSound(StaticSound[kSound33], 0); - if (KB_KeyDown[sc_Return]) { - ClearAllKeys(); + if (!inputState.keyBufferWaiting()) { + inputState.ClearAllKeyStatus(); } char *pName = nameList[nSlot]; @@ -1186,14 +1181,14 @@ int menu_NewGameMenu() char ch = 0; check_keys: - if (KB_KeyWaiting()) + if (inputState.keyBufferWaiting()) { HandleAsync(); - ch = KB_GetCh(); + ch = inputState.keyGetChar(); if (!ch) { - KB_GetCh(); + inputState.keyGetChar(); //??? goto check_keys; } @@ -1204,7 +1199,7 @@ check_keys: nameList[nSlot][nNameOffset] = 0; PlayLocalSound(StaticSound[kSound33], 0); - KB_KeyDown[sc_Return] = 0; + inputState.ClearKeyStatus(sc_Return); if (nameList[nSlot][0] == 0) { return -1; @@ -1252,9 +1247,8 @@ check_keys: else if (ch == asc_Escape) { PlayLocalSound(StaticSound[kSound33], 0); - KB_ClearKeysDown(); - KB_FlushKeyboardQueue(); - KB_KeyDown[sc_Escape] = 0; + inputState.ClearAllKeyStatus(); + inputState.keyFlushChars(); return -1; } else @@ -1353,15 +1347,16 @@ int menu_LoadGameMenu() overwritesprite(233, y, kMenuCursorTile, 0, 10, kPalNormal); videoNextPage(); - if (KB_KeyDown[sc_Escape]) + if (I_EscapeTrigger()) { + I_EscapeTriggerClear(); PlayLocalSound(StaticSound[kSound33], 0); - KB_KeyDown[sc_Escape] = 0; return -1; } - if (KB_KeyDown[sc_UpArrow]) + if (I_MenuUp()) { + I_MenuUpClear(); PlayLocalSound(StaticSound[kSound35], 0); if (nSlot > 0) { nSlot--; @@ -1369,31 +1364,28 @@ int menu_LoadGameMenu() else { nSlot = kMaxSaveSlots - 1; } - - KB_KeyDown[sc_UpArrow] = 0; } - if (KB_KeyDown[sc_DownArrow]) // checkme - is 0x5b in disassembly - { - PlayLocalSound(StaticSound[kSound35], 0); + if (I_MenuDown()) + { + I_MenuDownClear(); + PlayLocalSound(StaticSound[kSound35], 0); if (nSlot < kMaxSaveSlots - 1) { nSlot++; } else { nSlot = 0; } - - KB_KeyDown[sc_DownArrow] = 0; } - if (!KB_KeyDown[sc_Return]) { + if (!I_AdvanceTrigger()) { continue; } PlayLocalSound(StaticSound[kSound33], 0); - KB_KeyDown[sc_Return] = 0; - KB_ClearKeysDown(); - KB_FlushKeyboardQueue(); + I_AdvanceTriggerClear(); + inputState.ClearAllKeyStatus(); + inputState.keyFlushChars(); if (nameList[nSlot][0] != '\0') { @@ -1499,15 +1491,13 @@ int menu_Menu(int nVal) videoSetViewableArea(0, 0, xdim - 1, ydim - 1); - KB_KeyDown[sc_Escape] = 0; - StopAllSounds(); StopLocalSound(); menu_ResetKeyTimer(); - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); + inputState.keyFlushChars(); + inputState.ClearAllKeyStatus(); menu_ResetZoom(); @@ -1598,19 +1588,19 @@ int menu_Menu(int nVal) break; } - if (KB_KeyDown[nKey]) + if (inputState.GetKeyStatus(nKey)) { goto LABEL_21; // TEMP } } // loc_3A0A7 - while (KB_KeyDown[sc_Escape]) + while (I_EscapeTrigger()) { HandleAsync(); PlayLocalSound(StaticSound[kSound33], 0); - KB_KeyDown[sc_Escape] = 0; + I_EscapeTriggerClear(); if (nVal) { @@ -1628,13 +1618,14 @@ LABEL_21: if (l != nMenu) { PlayLocalSound(StaticSound[kSound35], 0); - KB_KeyDown[nMenuKeys[l]] = 0; + inputState.ClearKeyStatus(nMenuKeys[l]); nMenu = l; } } - if (KB_KeyDown[sc_Space] || KB_KeyDown[sc_Return]) + if (I_AdvanceTrigger()) { + I_AdvanceTriggerClear(); var_1C = 1; } else if (var_1C) @@ -1731,8 +1722,9 @@ LABEL_21: } } - if (KB_KeyDown[sc_UpArrow]) + if (I_MenuUp()) { + I_MenuUpClear(); PlayLocalSound(StaticSound[kSound35], 0); if (nMenu <= 0) { nMenu = 4; @@ -1741,13 +1733,13 @@ LABEL_21: nMenu--; } - KB_KeyDown[sc_UpArrow] = 0; menu_ResetKeyTimer(); } - if (KB_KeyDown[sc_DownArrow]) // FIXME - is this down arrow? value is '5B' in disassembly - { - PlayLocalSound(StaticSound[kSound35], 0); + if (I_MenuDown()) + { + I_MenuDownClear(); + PlayLocalSound(StaticSound[kSound35], 0); if (nMenu >= 4) { nMenu = 0; } @@ -1755,11 +1747,12 @@ LABEL_21: nMenu++; } - KB_KeyDown[sc_DownArrow] = 0; menu_ResetKeyTimer(); } + // TODO - change to #defines + /* why are these cleares although they are never used anywhere? if (KB_KeyDown[0x5c]) { KB_KeyDown[0x5c] = 0; } @@ -1767,6 +1760,7 @@ LABEL_21: if (KB_KeyDown[0x5d]) { KB_KeyDown[0x5d] = 0; } + */ } return 0;// todo @@ -1810,18 +1804,16 @@ int LoadCinemaPalette(int nPal) // original code strcpy'd into a buffer first... - int hFile = kopen4load(cinpalfname[nPal], 1); - if (hFile < 0) { + auto hFile = kopenFileReader(cinpalfname[nPal], 1); + if (!hFile.isOpen()) { return -2; } - kread(hFile, cinemapal, sizeof(cinemapal)); + hFile.Read(cinemapal, sizeof(cinemapal)); for (auto &c : cinemapal) c <<= 2; - kclose(hFile); - return nPal; } @@ -1958,7 +1950,9 @@ uint8_t AdvanceCinemaText() { HandleAsync(); - if (KB_KeyDown[sc_Escape] || KB_KeyDown[sc_Return] || KB_KeyDown[sc_Space]) { + if (I_AdvanceTrigger()) + { + I_AdvanceTriggerClear(); break; } @@ -2229,7 +2223,7 @@ int FindGString(const char *str) uint8_t CheckForEscape() { - if (!KB_KeyWaiting() || (KB_GetCh() != 27)) { + if (!inputState.keyBufferWaiting() || (inputState.keyGetChar() != 27)) { return kFalse; } @@ -2240,7 +2234,7 @@ void DoStatic(int a, int b) { RandomLong(); // nothing done with the result of this? - tileLoad(kTileLoboLaptop); + auto pixels = TileFiles.tileMakeWritable(kTileLoboLaptop); int v2 = 160 - a / 2; int v4 = 81 - b / 2; @@ -2248,7 +2242,7 @@ void DoStatic(int a, int b) int var_18 = v2 + a; int v5 = v4 + b; - uint8_t *pTile = (uint8_t*)(waloff[kTileLoboLaptop] + (200 * v2)) + v4; + auto pTile = (pixels + (200 * v2)) + v4; while (v2 < var_18) { @@ -2267,6 +2261,7 @@ void DoStatic(int a, int b) v2++; } + tileInvalidate(kTileLoboLaptop, 0, 0); overwritesprite(0, 0, kTileLoboLaptop, 0, 2, kPalNormal); videoNextPage(); } @@ -2285,17 +2280,17 @@ void DoLastLevelCinema() PlayLocalSound(StaticSound[kSound75], 0); - tileLoad(kTileLoboLaptop); - - memcpy((void*)waloff[kTileLoboLaptop], (void*)waloff[kTileLoboLaptop], tilesiz[kTileLoboLaptop].x * tilesiz[kTileLoboLaptop].y); + auto pixels = TileFiles.tileMakeWritable(kTileLoboLaptop); + // uh, what? + //memcpy((void*)waloff[kTileLoboLaptop], (void*)waloff[kTileLoboLaptop], tilesiz[kTileLoboLaptop].x * tilesiz[kTileLoboLaptop].y); int var_24 = 16; int var_28 = 12; int nEndTime = (int)totalclock + 240; - while (KB_KeyWaiting()) { - KB_GetCh(); + while (inputState.keyBufferWaiting()) { + inputState.keyGetChar(); } while (nEndTime > (int)totalclock) @@ -2315,10 +2310,6 @@ void DoLastLevelCinema() DoStatic(var_28, var_24); } -// loadtilelockmode = 1; - tileLoad(kTileLoboLaptop); -// loadtilelockmode = 0; - // loc_3AD75 do @@ -2330,8 +2321,6 @@ LABEL_11: int esi = nString; - tileLoad(kTileLoboLaptop); - while (strlen(gString[esi]) != 0) esi++; @@ -2356,6 +2345,7 @@ LABEL_11: nString++; + TileFiles.tileMakeWritable(kTileLoboLaptop); while (*nChar) { HandleAsync(); @@ -2380,8 +2370,8 @@ LABEL_11: nString++; - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); + inputState.keyFlushChars(); + inputState.ClearAllKeyStatus(); int v11 = kTimerTicks * (var_1C + 2) + (int)totalclock; @@ -2391,9 +2381,9 @@ LABEL_11: if (v11 <= (int)totalclock) goto LABEL_11; - } while (!KB_KeyWaiting()); + } while (!inputState.keyBufferWaiting()); } - while (KB_GetCh() != 27); + while (inputState.keyGetChar() != 27); LABEL_28: PlayLocalSound(StaticSound[kSound75], 0); diff --git a/source/exhumed/src/movie.cpp b/source/exhumed/src/movie.cpp index 41065c3c2..4bc2b9db3 100644 --- a/source/exhumed/src/movie.cpp +++ b/source/exhumed/src/movie.cpp @@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "baselayer.h" #include "typedefs.h" #include "keyboard.h" +#include "cache1d.h" BEGIN_PS_NS @@ -55,7 +56,7 @@ int serve_sample() palette_t moviepal[256]; -int ReadFrame(FILE *fp) +int ReadFrame(FileReader &fp) { static int nFrame = 0; Printf("Reading frame %d...\n", nFrame); @@ -71,11 +72,11 @@ int ReadFrame(FILE *fp) while (1) { - if (fread(&nType, 1, sizeof(nType), fp) == 0) { + if (fp.Read(&nType, sizeof(nType)) == 0) { return 0; } - fread(&nSize, sizeof(nSize), 1, fp); + fp.Read(&nSize, sizeof(nSize)); nType--; if (nType > 3) { @@ -86,8 +87,8 @@ int ReadFrame(FILE *fp) { case kFramePalette: { - fread(palette, sizeof(palette[0]), sizeof(palette) / sizeof(palette[0]), fp); - fread(&var_1C, sizeof(var_1C), 1, fp); + fp.Read(palette, sizeof(palette)); + fp.Read(&var_1C, sizeof(var_1C)); for (auto &c : palette) c <<= 2; @@ -102,7 +103,7 @@ int ReadFrame(FILE *fp) { Printf("Reading sound block size %d...\n", nSize); // TODO - just skip for now - fseek(fp, nSize, SEEK_CUR); + fp.Seek(nSize, FileReader::SeekCur); continue; } case kFrameImage: @@ -114,22 +115,22 @@ int ReadFrame(FILE *fp) uint8_t *pFrame = CurFrame; - int nRead = fread(&yOffset, 1, sizeof(yOffset), fp); + int nRead = fp.Read(&yOffset, sizeof(yOffset)); nSize -= nRead; pFrame += yOffset * 200; // row position while (nSize > 0) { - fread(&xOffset, sizeof(xOffset), 1, fp); - fread(&nPixels, sizeof(nPixels), 1, fp); + fp.Read(&xOffset, sizeof(xOffset)); + fp.Read(&nPixels, sizeof(nPixels)); nSize -= 2; pFrame += xOffset; if (nPixels) { - int nRead = fread(pFrame, 1, nPixels, fp); + int nRead = fp.Read(pFrame, nPixels); pFrame += nRead; nSize -= nRead; } @@ -150,11 +151,12 @@ int ReadFrame(FILE *fp) void PlayMovie(const char *fileName) { - char buffer[256]; - int bDoFade = 1; - if (bNoCDCheck) +#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) { sprintf(buffer, "C:\\PS\\%s", fileName); } @@ -167,10 +169,7 @@ void PlayMovie(const char *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) { Printf("Can't open movie file '%s' on CD-ROM\n", buffer); @@ -181,16 +180,28 @@ void PlayMovie(const char *fileName) 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(byte_1C6DF5, 0, sizeof(byte_1C6DF5)); // sound stuff // clear keys - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); + inputState.keyFlushChars(); + inputState.ClearAllKeyStatus(); if (bDoFade) { StartFadeIn(); @@ -203,7 +214,7 @@ void PlayMovie(const char *fileName) if (ReadFrame(fp)) { - while (!KB_KeyWaiting()) + while (!inputState.keyBufferWaiting()) { handleevents(); @@ -231,10 +242,8 @@ void PlayMovie(const char *fileName) } } - if (KB_KeyWaiting()) { - KB_GetCh(); + if (inputState.keyBufferWaiting()) { + inputState.keyGetChar(); } - - fclose(fp); } END_PS_NS diff --git a/source/exhumed/src/osdcmds.cpp b/source/exhumed/src/osdcmds.cpp index 892652c62..4e8955405 100644 --- a/source/exhumed/src/osdcmds.cpp +++ b/source/exhumed/src/osdcmds.cpp @@ -29,20 +29,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "config.h" #include "osdcmds.h" -#include "vfs.h" - 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)) { UNREFERENCED_CONST_PARAMETER(parm); @@ -103,219 +92,14 @@ static int osdcmd_vidmode(osdcmdptr_t parm) 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) { uint8_t palid = BASEPAL; 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) { - 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) // OSD_RegisterFunction("changelevel","changelevel : warps to the given level", osdcmd_changelevel); //else @@ -325,33 +109,14 @@ int32_t registerosdcommands(void) // OSD_RegisterFunction("demo","demo : starts the given demo", osdcmd_demo); //} - OSD_RegisterFunction("addpath","addpath : adds path to game filesystem", osdcmd_addpath); - OSD_RegisterFunction("bind",R"(bind : 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("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 : gives requested item", osdcmd_give); //OSD_RegisterFunction("god","god: toggles god mode", osdcmd_god); //OSD_RegisterFunction("activatecheat","activatecheat : activates a cheat code", osdcmd_activatecheat); - OSD_RegisterFunction("initgroupfile","initgroupfile : adds a grp file into the game filesystem", osdcmd_initgroupfile); - //OSD_RegisterFunction("restartmap", "restartmap: restarts the current map", osdcmd_restartmap); //OSD_RegisterFunction("restartsound","restartsound: reinitializes the sound system",osdcmd_restartsound); OSD_RegisterFunction("restartvid","restartvid: reinitializes the video mode",osdcmd_restartvid); diff --git a/source/exhumed/src/player.cpp b/source/exhumed/src/player.cpp index d0ffef9d6..d0adc6214 100644 --- a/source/exhumed/src/player.cpp +++ b/source/exhumed/src/player.cpp @@ -49,6 +49,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "cdaudio.h" #include "map.h" #include "sound.h" +#include "textures.h" #include #include #include @@ -160,29 +161,29 @@ fixed droll; void PlayerInterruptKeys() { 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); + D_ProcessEvents(); - if (MouseDeadZone) + if (in_mousedeadzone) { if (info.mousey > 0) - info.mousey = max(info.mousey - MouseDeadZone, 0); + info.mousey = max(info.mousey - in_mousedeadzone, 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) - info.mousex = max(info.mousex - MouseDeadZone, 0); + info.mousex = max(info.mousex - in_mousedeadzone, 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)) - info.mousey = tabledivide32_noinline(info.mousey, MouseBias); + info.mousey = tabledivide32_noinline(info.mousey, in_mousebias); else - info.mousex = tabledivide32_noinline(info.mousex, MouseBias); + info.mousex = tabledivide32_noinline(info.mousex, in_mousebias); } if (PlayerList[nLocalPlayer].nHealth == 0) @@ -194,7 +195,7 @@ void PlayerInterruptKeys() } // 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 keyMove = playerRunning ? 12 : 6; constexpr int const analogTurnAmount = 12; @@ -217,12 +218,12 @@ void PlayerInterruptKeys() q16avel += fix16_from_int(info.dyaw) / analogExtent * (analogTurnAmount << 1); } - if (aimmode) + if (g_MyAimMode) q16horz = fix16_div(fix16_from_int(info.mousey), F16(64)); else fvel = -(info.mousey >> 6); - if (mouseflip) q16horz = -q16horz; + if (!in_mouseflip) q16horz = -q16horz; q16horz -= fix16_from_int(info.dpitch) / analogExtent * analogTurnAmount; svel -= info.dx * keyMove / analogExtent; @@ -607,9 +608,9 @@ void InitPlayerInventory(short nPlayer) 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 @@ -2850,7 +2851,7 @@ do_default_b: FinishLevel(); } else { - keySetState(32, 1); + inputState.keySetState(32, 1); } DestroyItemAnim(nValB); @@ -3137,13 +3138,13 @@ do_default_b: bPlayerPan = kFalse; } - if (aimmode) + if (g_MyAimMode) bLockPan = kTrue; // loc_1C05E fix16_t ecx = nDestVertPan[nPlayer] - nVertPan[nPlayer]; - if (aimmode) + if (g_MyAimMode) { ecx = 0; } diff --git a/source/exhumed/src/sequence.cpp b/source/exhumed/src/sequence.cpp index 9769958a5..f0f697d16 100644 --- a/source/exhumed/src/sequence.cpp +++ b/source/exhumed/src/sequence.cpp @@ -166,35 +166,32 @@ int seq_ReadSequence(const char *seqName) strcat(buffer, seqName); strcat(buffer, ".seq"); - int hFile = kopen4load(buffer, 1); - if (hFile == -1) + auto hFile = kopenFileReader(buffer, 1); + if (!hFile.isOpen()) { initprintf("Unable to open '%s'!\n", buffer); - kclose(hFile); return 0; } short tag; - kread(hFile, &tag, sizeof(tag)); + hFile.Read(&tag, sizeof(tag)); if (tag < 'HI' || tag > 'HI' && tag != 'SD') { initprintf("Unsupported sequence version!\n"); - kclose(hFile); return 0; } short centerx, centery; // TODO - are global vars? short nSeqs; - kread(hFile, ¢erx, sizeof(centerx)); - kread(hFile, ¢ery, sizeof(centery)); - kread(hFile, &nSeqs, sizeof(nSeqs)); + hFile.Read(¢erx, sizeof(centerx)); + hFile.Read(¢ery, sizeof(centery)); + hFile.Read(&nSeqs, sizeof(nSeqs)); if (nSeqs <= 0 || sequences + nSeqs >= kMaxSequences) { if (nSeqs < 0) { initprintf("Invalid sequence count!\n"); - kclose(hFile); return 0; } else { @@ -202,9 +199,9 @@ int seq_ReadSequence(const char *seqName) } } - kread(hFile, &SeqBase[sequences], nSeqs * sizeof(SeqBase[0])); - kread(hFile, &SeqSize[sequences], nSeqs * sizeof(SeqSize[0])); - kread(hFile, &SeqFlag[sequences], nSeqs * sizeof(SeqFlag[0])); + hFile.Read(&SeqBase[sequences], nSeqs * sizeof(SeqBase[0])); + hFile.Read(&SeqSize[sequences], nSeqs * sizeof(SeqSize[0])); + hFile.Read(&SeqFlag[sequences], nSeqs * sizeof(SeqFlag[0])); for (i = 0; i < nSeqs; i++) { @@ -214,14 +211,13 @@ int seq_ReadSequence(const char *seqName) short vdi = frames; int16_t nFrames; - kread(hFile, &nFrames, sizeof(nFrames)); + hFile.Read(&nFrames, sizeof(nFrames)); if (nFrames <= 0 || frames + nFrames >= kMaxSEQFrames) { if (nFrames < 0 ) { initprintf("Invalid frame count!\n"); - kclose(hFile); return 0; } else { @@ -229,9 +225,9 @@ int seq_ReadSequence(const char *seqName) } } - kread(hFile, &FrameBase[frames], nFrames * sizeof(FrameBase[0])); - kread(hFile, &FrameSize[frames], nFrames * sizeof(FrameSize[0])); - kread(hFile, &FrameFlag[frames], nFrames * sizeof(FrameFlag[0])); + hFile.Read(&FrameBase[frames], nFrames * sizeof(FrameBase[0])); + hFile.Read(&FrameSize[frames], nFrames * sizeof(FrameSize[0])); + hFile.Read(&FrameFlag[frames], nFrames * sizeof(FrameFlag[0])); memset(&FrameSound[frames], -1, nFrames * sizeof(FrameSound[0])); for (i = 0; i < nFrames; i++) @@ -240,14 +236,13 @@ int seq_ReadSequence(const char *seqName) } int16_t nChunks; - kread(hFile, &nChunks, sizeof(nChunks)); + hFile.Read(&nChunks, sizeof(nChunks)); if (nChunks < 0 || chunks + nChunks >= kMaxSEQChunks) { if (nChunks < 0 ) { initprintf("Invalid chunk count!\n"); - kclose(hFile); return 0; } else { @@ -255,10 +250,10 @@ int seq_ReadSequence(const char *seqName) } } - kread(hFile, &ChunkXpos[chunks], nChunks * sizeof(ChunkXpos[0])); - kread(hFile, &ChunkYpos[chunks], nChunks * sizeof(ChunkYpos[0])); - kread(hFile, &ChunkPict[chunks], nChunks * sizeof(ChunkPict[0])); - kread(hFile, &ChunkFlag[chunks], nChunks * sizeof(ChunkFlag[0])); + hFile.Read(&ChunkXpos[chunks], nChunks * sizeof(ChunkXpos[0])); + hFile.Read(&ChunkYpos[chunks], nChunks * sizeof(ChunkYpos[0])); + hFile.Read(&ChunkPict[chunks], nChunks * sizeof(ChunkPict[0])); + hFile.Read(&ChunkFlag[chunks], nChunks * sizeof(ChunkFlag[0])); for (i = 0; i < nChunks; i++) { @@ -275,21 +270,21 @@ int seq_ReadSequence(const char *seqName) if (tag == 'SD') { short var_20; - kread(hFile, &var_20, sizeof(var_20)); + hFile.Read(&var_20, sizeof(var_20)); for (i = 0; i < var_20; i++) { - kread(hFile, &buffer[i * 10], 8); + hFile.Read(&buffer[i * 10], 8); } short var_24; - kread(hFile, &var_24, sizeof(var_24)); + hFile.Read(&var_24, sizeof(var_24)); for (i = 0; i < var_24; i++) { short var_28, var_2C; - kread(hFile, &var_28, sizeof(var_28)); - kread(hFile, &var_2C, sizeof(var_2C)); + hFile.Read(&var_28, sizeof(var_28)); + hFile.Read(&var_2C, sizeof(var_2C)); int hSound = LoadSound(&buffer[(var_2C&0x1FF)*10]); @@ -297,7 +292,6 @@ int seq_ReadSequence(const char *seqName) } } - kclose(hFile); return nSeqs; } diff --git a/source/exhumed/src/sound.cpp b/source/exhumed/src/sound.cpp index 30112bc85..963e0924d 100644 --- a/source/exhumed/src/sound.cpp +++ b/source/exhumed/src/sound.cpp @@ -293,7 +293,7 @@ void CalcASSPan(int nPan, int nVolume, int *pLeft, int *pRight) *pRight = mulscale6(nPanTable[127-nPan], nVolume); } -void ASSCallback(uint32_t num) +void ASSCallback(intptr_t num) { // TODO: add mutex? if ((int32_t)num == -1) @@ -345,10 +345,10 @@ void InitFX(void) dig = 0; - if (bNoSound) + if (!SoundEnabled()) 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"); initprintf("Error initializing sound card!\n"); @@ -395,70 +395,6 @@ void UnInitFX() 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() { } @@ -476,7 +412,6 @@ int LoadSong(const char *song) UNREFERENCED_PARAMETER(song); return 0; } -#endif int LoadSound(const char *sound) { @@ -506,29 +441,28 @@ int LoadSound(const char *sound) 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); - SoundLock[i] = 255; // TODO: implement cache lock properly + int nSize = hVoc.GetLength(); + //SoundLock[i] = 255; // crap we don't need. SoundLen[i] = nSize; - g_cache.allocateBlock((intptr_t*)&SoundBuf[i], nSize, &SoundLock[i]); + cacheAllocateBlock((intptr_t*)&SoundBuf[i], nSize, nullptr); if (!SoundBuf[i]) I_Error("Error allocating buf '%s' to %lld (size=%ld)!\n", buffer, (intptr_t)&SoundBuf[i], nSize); - if (kread(hVoc, SoundBuf[i], nSize) != nSize) - I_Error("Error reading '%s'!\n", buffer); + if (hVoc.Read(SoundBuf[i], nSize) != nSize) + Printf("Error reading '%s'!\n", buffer); } else { - I_Error("Unable to open sound '%s'!\n", buffer); + Printf("Unable to open sound '%s'!\n", buffer); SoundBuf[i] = NULL; SoundLen[i] = 0; //return hVoc; return -1; } - kclose(hVoc); nSoundCount++; return i; } diff --git a/source/exhumed/src/view.cpp b/source/exhumed/src/view.cpp index ff5745b7a..5346c919a 100644 --- a/source/exhumed/src/view.cpp +++ b/source/exhumed/src/view.cpp @@ -41,6 +41,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "engine.h" #include "trigdat.h" #include "runlist.h" +#include "input.h" #include BEGIN_PS_NS @@ -586,8 +587,9 @@ void DrawView(int smoothRatio) } 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; if (CDplaying()) diff --git a/source/sw/src/config.cpp b/source/sw/src/config.cpp index c354c3994..9acd0cc0d 100644 --- a/source/sw/src/config.cpp +++ b/source/sw/src/config.cpp @@ -56,22 +56,6 @@ BEGIN_SW_NS int32_t NumberPlayers,CommPort,PortSpeed,IrqNumber,UartAddress; -// -// Sound variables -// - - -int32_t UseMouse = 1, UseJoystick = 0; - - -// -// Screen variables -// - - - - - /* =================== = diff --git a/source/sw/src/config.h b/source/sw/src/config.h index d36c187c3..0a1726dac 100644 --- a/source/sw/src/config.h +++ b/source/sw/src/config.h @@ -68,7 +68,6 @@ extern char UserPath[MAXUSERLEVELPATHLENGTH]; #endif // controller externs -extern int32_t UseMouse, UseJoystick; extern int32_t EnableRudder;