From 11b8017752adee1a62b0c8e96297089e9665c9d7 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 24 Nov 2019 16:34:23 +0100 Subject: [PATCH] - Exhumed compiles without errors. --- source/exhumed/src/exhumed.cpp | 36 +++++++----------- source/exhumed/src/input.cpp | 16 +------- source/exhumed/src/map.cpp | 6 ++- source/exhumed/src/menu.cpp | 69 +++++++++++----------------------- source/exhumed/src/status.cpp | 6 +-- 5 files changed, 45 insertions(+), 88 deletions(-) diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index b34d6b138..e3326bbe9 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -624,12 +624,13 @@ int loaddefinitions_game(const char *fileName, int32_t firstPass) //////// -#define kSpiritX = 106; -#define kSpiritY = 97; +const uint32_t kSpiritX = 106; +const uint32_t kSpiritY = 97; short cPupData[300]; //int worktile[97 * 106] = { 0 }; -uint8_t worktile[(97*2) * (106*2)] = { 0 }; +uint8_t *Worktile; +const uint32_t WorktileSize = kSpiritX * 2 * kSpiritY * 2; int lHeadStartClock; short *pPupData; int lNextStateChange; @@ -1991,7 +1992,7 @@ int app_main(int argc, char const* const* argv) Bsprintf(tempbuf, "Exhumed %s", s_buildRev); registerosdcommands(); - SetupInput(); + //SetupInput(); system_getcvars(); @@ -2057,7 +2058,7 @@ int app_main(int argc, char const* const* argv) // loc_11745: FadeOut(0); // InstallEngine(); - KB_Startup(); + //KB_Startup(); InitView(); myloadconfig(); InitFX(); @@ -3081,13 +3082,13 @@ void InitSpiritHead() nHeadStage = 0; // work tile is twice as big as the normal head size - TileFiles.tileSetExternal(kTileRamsesWorkTile, 97 * 2, 106 * 2, worktile); + Worktile = TileFiles.tileCreate(kTileRamsesWorkTile, 97 * 2, 106 * 2); sprite[nSpiritSprite].cstat &= 0x7FFF; nHeadTimeStart = (int)totalclock; - memset(worktile, -1, sizeof(worktile)); + memset(Worktile, -1, WorktileSize); tileInvalidate(kTileRamsesWorkTile, -1, -1); nPixelsToShow = 0; @@ -3153,7 +3154,7 @@ void DimSector(short nSector) void CopyHeadToWorkTile(short nTile) { const uint8_t* pSrc = tilePtr(nTile); - uint8_t *pDest = (uint8_t*)&worktile[212 * 49 + 53]; + uint8_t *pDest = &Worktile[212 * 49 + 53]; for (int i = 0; i < 97; i++) { @@ -3175,7 +3176,7 @@ int DoSpiritHead() if (nHeadStage < 2) { - memset(worktile, -1, sizeof(worktile)); + memset(Worktile, -1, WorktileSize); } if (nHeadStage < 2 || nHeadStage != 5) @@ -3296,11 +3297,7 @@ int DoSpiritHead() esi += (ebx + 97) * 212; -// uint8_t *pVal = (uint8_t*)worktile; - - worktile[106 + esi] = pixelval[i]; - //pVal += (106 + esi); - //*pVal = pixelval[i]; + Worktile[106 + esi] = pixelval[i]; } return 1; @@ -3405,12 +3402,7 @@ int DoSpiritHead() // edx++; -// uint8_t *pVal = (uint8_t*)worktile; - - worktile[106 + ecx] = pixelval[i]; - - //pVal += (106 + ecx); - //*pVal = pixelval[i]; + Worktile[106 + ecx] = pixelval[i]; } if (((int)totalclock - lHeadStartClock) > 600) { @@ -3504,7 +3496,7 @@ int DoSpiritHead() ebx += word_964EA; // TODO - fixme. How big is worktile? - uint8_t *pDest = (uint8_t*)&worktile[10441]; + uint8_t *pDest = &Worktile[10441]; const uint8_t* pSrc = tilePtr(ebx); for (int i = 0; i < 97; i++) @@ -3535,7 +3527,7 @@ int DoSpiritHead() // uint8_t *pDest = (uint8_t*)worktile; // pDest += (212 * (97 - nTileSizeX / 2)) + (159 - nTileSizeY); - uint8_t *pDest = (uint8_t*)&worktile[212 * (97 - nTileSizeX / 2)] + (159 - nTileSizeY); + uint8_t *pDest = &Worktile[212 * (97 - nTileSizeX / 2)] + (159 - nTileSizeY); const uint8_t *pSrc = tilePtr(nMouthTile + 598); while (nTileSizeX > 0) diff --git a/source/exhumed/src/input.cpp b/source/exhumed/src/input.cpp index b23014ef3..1ea120b72 100644 --- a/source/exhumed/src/input.cpp +++ b/source/exhumed/src/input.cpp @@ -25,6 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "keyboard.h" #include "control.h" #include "config.h" +#include "input.h" #include BEGIN_PS_NS @@ -195,20 +196,7 @@ int WaitAnyKey(int nSecs) if (nTotalTime <= (int)totalclock || nSecs == -1) { return -1; } - - int i = 0; - - do - { - if (KB_KeyDown[i]) - { - KB_KeyDown[i] = 0; - return i; - } - - i++; - - } while (i < 106); + if (I_AdvanceTrigger()) return 1; } } diff --git a/source/exhumed/src/map.cpp b/source/exhumed/src/map.cpp index 475505da1..6f5b38d2f 100644 --- a/source/exhumed/src/map.cpp +++ b/source/exhumed/src/map.cpp @@ -285,6 +285,10 @@ void drawoverheadmap(int cposx, int cposy, int czoom, short cang) #endif } +#ifdef _MSC_VER +#pragma warning(disable:4101) // this function produces a little bit too much noise +#endif + static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16_t cang) { int32_t i, j, k, l, x1, y1, x2=0, y2=0, x3, y3, x4, y4, ox, oy, xoff, yoff; @@ -305,7 +309,7 @@ static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16 xvect2 = mulscale16(xvect, yxaspect); yvect2 = mulscale16(yvect, yxaspect); - renderDisableFog(); + //renderDisableFog(); // draw player position arrow renderDrawLine(xdim << 11, (ydim << 11) - 20480, xdim << 11, (ydim << 11) + 20480, 24); diff --git a/source/exhumed/src/menu.cpp b/source/exhumed/src/menu.cpp index 4ffd126bf..26654c0d2 100644 --- a/source/exhumed/src/menu.cpp +++ b/source/exhumed/src/menu.cpp @@ -59,7 +59,7 @@ GameStat GameStats; short nCinemaSeen[30]; // this might be static within the DoPlasma function? -uint8_t plasmaBuffer[25600]; +uint8_t * PlasmaBuffer; uint8_t energytile[66 * 66] = {0}; @@ -145,13 +145,12 @@ void InitEnergyTile() void DoEnergyTile() { - tileLoad(kEnergy1); - tileLoad(kEnergy2); - nButtonColor += nButtonColor < 0 ? 8 : 0; - uint8_t *ptr1 = (uint8_t*)(waloff[kEnergy1] + 1984); - uint8_t *ptr2 = (uint8_t*)(waloff[kEnergy1] + 2048); + auto energy1 = TileFiles.tileMakeWritable(kEnergy1); + auto energy2 = TileFiles.tileMakeWritable(kEnergy2); + uint8_t *ptr1 = energy1 + 1984; + uint8_t *ptr2 = energy2 + 2048; short nColor = nButtonColor + 161; @@ -177,7 +176,7 @@ void DoEnergyTile() if (nSmokeSparks) { uint8_t *c = &energytile[67]; // skip a line - uint8_t *ptrW = (uint8_t*)waloff[kEnergy2]; + uint8_t *ptrW = energy2; for (i = 0; i < 64; i++) { @@ -266,7 +265,7 @@ void DoEnergyTile() } c = &energytile[67]; - ptrW = (uint8_t*)waloff[kEnergy2]; + ptrW = energy2; for (i = 0; i < 64; i++) { @@ -275,7 +274,7 @@ void DoEnergyTile() ptrW += 64; } - ptrW = (uint8_t*)waloff[kEnergy2]; + ptrW = energy2; for (i = 0; i < 4096; i++) { @@ -314,21 +313,18 @@ void menu_DoPlasma() { if (!nLogoTile) nLogoTile = EXHUMED ? kExhumedLogo : kPowerslaveLogo; - if (waloff[kTile4092] == 0) + + if (!PlasmaBuffer) { - tileCreate(kTile4092, kPlasmaWidth, kPlasmaHeight); + auto pixels = TileFiles.tileCreate(kTile4092, kPlasmaWidth, kPlasmaHeight); + memset(pixels, 96, kPlasmaWidth*kPlasmaHeight); - memset((void*)waloff[kTile4092], 96, kPlasmaWidth*kPlasmaHeight); - - waloff[kTile4093] = (intptr_t)plasmaBuffer; - memset(plasmaBuffer, 96, sizeof(plasmaBuffer)); + PlasmaBuffer = TileFiles.tileCreate(kTile4093, kPlasmaWidth, kPlasmaHeight); + memset(PlasmaBuffer, 96, kPlasmaWidth * kPlasmaHeight); nSmokeLeft = 160 - tilesiz[nLogoTile].x / 2; nSmokeRight = nSmokeLeft + tilesiz[nLogoTile].x; - tilesiz[kTile4093].x = kPlasmaWidth; - tilesiz[kTile4093].y = kPlasmaHeight; - nSmokeTop = 40 - tilesiz[nLogoTile].y / 2; nSmokeBottom = nSmokeTop + tilesiz[nLogoTile].y - 1; @@ -339,33 +335,8 @@ void menu_DoPlasma() for (int i = 0; i < 5; i++) { int logoWidth = tilesiz[nLogoTile].x; -#if 1 plasma_C[i] = (nSmokeLeft + rand() % logoWidth) << 16; plasma_B[i] = (menu_RandomLong2() % 327680) + 0x10000; -#else - int r = rand(); - int rand2 = menu_RandomLong2(); - - __asm { - mov ebx, i - mov ecx, logoWidth - mov eax, r - mov edx, eax - sar edx, 31 - idiv ecx - - add edx, nSmokeLeft - shl edx, 16 - mov ecx, 327680 - mov plasma_C[ebx * 4], edx - xor edx, edx - mov eax, rand2 -// call menu_RandomLong2 - div ecx - add edx, 10000h - mov plasma_B[ebx * 4], edx - }; -#endif if (menu_RandomBit2()) { plasma_B[i] = -plasma_B[i]; @@ -377,8 +348,10 @@ void menu_DoPlasma() videoClearScreen(overscanindex); - uint8_t *r_ebx = (uint8_t*)waloff[nPlasmaTile] + 81; - uint8_t *r_edx = (uint8_t*)waloff[nPlasmaTile ^ 1] + 81; // flip between value of 4092 and 4093 with xor + + uint8_t* plasmapix = const_cast(tilePtr(nPlasmaTile)); + uint8_t *r_ebx = plasmapix + 81; + const uint8_t *r_edx = tilePtr(nPlasmaTile ^ 1) + 81; // flip between value of 4092 and 4093 with xor for (int x = 0; x < kPlasmaWidth - 2; x++) // for (int x = 1; x < 318; x++) @@ -468,7 +441,7 @@ void menu_DoPlasma() r_ebx += 2; } - tileLoad(nLogoTile); + auto logopix = tilePtr(nLogoTile); for (int j = 0; j < 5; j++) { @@ -476,7 +449,7 @@ void menu_DoPlasma() int pC = plasma_C[j]; int badOffset = (pC>>16) < nSmokeLeft || (pC>>16) >= nSmokeRight; - uint8_t *ptr3 = (uint8_t*)(waloff[nLogoTile] + ((pC >> 16) - nSmokeLeft) * tilesiz[nLogoTile].y); + const uint8_t *ptr3 = (logopix + ((pC >> 16) - nSmokeLeft) * tilesiz[nLogoTile].y); plasma_C[j] += plasma_B[j]; @@ -525,7 +498,7 @@ void menu_DoPlasma() } } - uint8_t *v28 = (uint8_t*)(80 * (plasma_C[j] >> 16) + waloff[nPlasmaTile]); + uint8_t *v28 = plasmapix + (80 * (plasma_C[j] >> 16)); v28[nSmokeOffset] = 175; } diff --git a/source/exhumed/src/status.cpp b/source/exhumed/src/status.cpp index ce96bba01..d5fa6e53b 100644 --- a/source/exhumed/src/status.cpp +++ b/source/exhumed/src/status.cpp @@ -826,16 +826,16 @@ void DrawStatus() int x = (nViewLeft + nViewRight) / 2; - sprintf(coordBuf, "X %d", (int)sprite[nSprite].x); + snprintf(coordBuf, 50, "X %d", (int)sprite[nSprite].x.cast()); printext(x, nViewTop + 1, coordBuf, kTile159, 255); - sprintf(coordBuf, "Y %d", sprite[nSprite].y); + snprintf(coordBuf, 50, "Y %d", sprite[nSprite].y.cast()); printext(x, nViewTop + 10, coordBuf, kTile159, 255); } if (bHolly) { - sprintf(message_text, "HOLLY: %s", sHollyStr); + snprintf(message_text, 80, "HOLLY: %s", sHollyStr); printext(0, 0, message_text, kTile159, 255); } else if (nSnakeCam < 0)