diff --git a/source/exhumed/src/menu.cpp b/source/exhumed/src/menu.cpp index ad8b2ee59..56929e5d1 100644 --- a/source/exhumed/src/menu.cpp +++ b/source/exhumed/src/menu.cpp @@ -669,12 +669,23 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest) int runtimer = (int)totalclock; + // Trim smoke in widescreen + vec2_t mapwinxy1 = windowxy1, mapwinxy2 = windowxy2; + int32_t width = mapwinxy2.x - mapwinxy1.x + 1, height = mapwinxy2.y - mapwinxy1.y + 1; + if (3 * width > 4 * height) + { + mapwinxy1.x += (width - 4 * height / 3) / 2; + mapwinxy2.x -= (width - 4 * height / 3) / 2; + } + // User has 12 seconds to do something on the map screen before loading the current level while (nIdleSeconds < 12) { HandleAsync(); twod->ClearScreen(); + videoClearScreen(overscanindex); // fix hall of mirrors when console renders offscreen in widescreen resolutions. + if (((int)totalclock - startTime) / kTimerTicks) { nIdleSeconds++; @@ -711,7 +722,10 @@ int menu_DrawTheMap(int nLevel, int nLevelNew, int nLevelBest) int smokeX = MapLevelFires[i].fires[j].xPos + FireTiles[nFireType][nFireFrame].xOffs; int smokeY = MapLevelFires[i].fires[j].yPos + FireTiles[nFireType][nFireFrame].yOffs + curYPos + screenY; - overwritesprite(smokeX, smokeY, nTile, 0, 2, kPalNormal); + // Use rotatesprite to trim smoke in widescreen + rotatesprite(smokeX << 16, smokeY << 16, 65536L, 0, + nTile, 0, kPalNormal, 16 + 2, mapwinxy1.x, mapwinxy1.y, mapwinxy2.x, mapwinxy2.y); +// overwritesprite(smokeX, smokeY, nTile, 0, 2, kPalNormal); } }