Fix help screen issues

Closes #179
This commit is contained in:
Alexander Batalov 2023-01-02 11:13:32 +03:00
parent a8d3cdd148
commit 6224af6178
1 changed files with 17 additions and 1 deletions

View File

@ -1161,6 +1161,10 @@ static void showHelp()
bool colorCycleWasEnabled = colorCycleEnabled(); bool colorCycleWasEnabled = colorCycleEnabled();
colorCycleDisable(); colorCycleDisable();
// CE: Help screen uses separate color palette which is incompatible with
// colors in other windows. Setup overlay to hide everything.
int overlay = windowCreate(0, 0, screenGetWidth(), screenGetHeight(), 0, WINDOW_HIDDEN | WINDOW_MOVE_ON_TOP);
int helpWindowX = (screenGetWidth() - HELP_SCREEN_WIDTH) / 2; int helpWindowX = (screenGetWidth() - HELP_SCREEN_WIDTH) / 2;
int helpWindowY = (screenGetHeight() - HELP_SCREEN_HEIGHT) / 2; int helpWindowY = (screenGetHeight() - HELP_SCREEN_HEIGHT) / 2;
int win = windowCreate(helpWindowX, helpWindowY, HELP_SCREEN_WIDTH, HELP_SCREEN_HEIGHT, 0, WINDOW_HIDDEN | WINDOW_MOVE_ON_TOP); int win = windowCreate(helpWindowX, helpWindowY, HELP_SCREEN_WIDTH, HELP_SCREEN_HEIGHT, 0, WINDOW_HIDDEN | WINDOW_MOVE_ON_TOP);
@ -1172,10 +1176,21 @@ static void showHelp()
if (backgroundFrmImage.lock(backgroundFid)) { if (backgroundFrmImage.lock(backgroundFid)) {
paletteSetEntries(gPaletteBlack); paletteSetEntries(gPaletteBlack);
blitBufferToBuffer(backgroundFrmImage.getData(), HELP_SCREEN_WIDTH, HELP_SCREEN_HEIGHT, HELP_SCREEN_WIDTH, windowBuffer, HELP_SCREEN_WIDTH); blitBufferToBuffer(backgroundFrmImage.getData(), HELP_SCREEN_WIDTH, HELP_SCREEN_HEIGHT, HELP_SCREEN_WIDTH, windowBuffer, HELP_SCREEN_WIDTH);
windowShow(win);
colorPaletteLoad("art\\intrface\\helpscrn.pal"); colorPaletteLoad("art\\intrface\\helpscrn.pal");
paletteSetEntries(_cmap); paletteSetEntries(_cmap);
// CE: Fill overlay with darkest color in the palette. It might
// not be completely black, but at least it's uniform.
bufferFill(windowGetBuffer(overlay),
screenGetWidth(),
screenGetHeight(),
screenGetWidth(),
intensityColorTable[_colorTable[0]][0]);
windowShow(overlay);
windowShow(win);
while (inputGetInput() == -1 && _game_user_wants_to_quit == 0) { while (inputGetInput() == -1 && _game_user_wants_to_quit == 0) {
sharedFpsLimiter.mark(); sharedFpsLimiter.mark();
renderPresent(); renderPresent();
@ -1195,6 +1210,7 @@ static void showHelp()
} }
} }
windowDestroy(overlay);
windowDestroy(win); windowDestroy(win);
colorPaletteLoad("color.pal"); colorPaletteLoad("color.pal");
paletteSetEntries(_cmap); paletteSetEntries(_cmap);