puzzles: load cached fonts unconditionally

This works around an odd issue in Mines involving the zoom feature. The
chain of events leading to it is rather convoluted:

1. No save game is found, so no fonts are loaded from disk.
2. A new game is started.
3. The user selects the "Zoom" option.
4. The allocation of the zoom framebuffer causes the malloc code to grab
   the audiobuffer. This causes all further font_load() calls to FAIL, due
   to buflib allocations no longer working.
5. The user goes back to the normal view and uncovers a square.
6. Font loading fails, causing the drawing code to fall back to the system
   font.
7. An unrelated bug (not yet tracked down) causes font_get(FONT_UI) to
   return a different font.
8. font_getstringsize() returns the right size of the "wrong" font, leading
   to centering issues upon rb_draw_text().

The real solution to this would be to fix font_get(), but this fix should
prevent the issue from happening if Mines has been run and saved at least
once before.

Change-Id: Ib9ad51376eeb3ca1113a1f3786124b612db88cd7
This commit is contained in:
Franklin Wei 2020-07-07 17:23:05 -04:00
parent c0276c8352
commit 4dcd1a9ed8

View file

@ -3362,10 +3362,6 @@ static bool load_game(void)
rb->close(fd);
rb->remove(fname);
#ifdef FONT_CACHING
load_fonts();
#endif
/* success */
return true;
}
@ -3451,6 +3447,11 @@ static void puzzles_main(void)
init_for_game(&thegame, -1);
}
#ifdef FONT_CACHING
LOGF("loading fonts");
load_fonts();
#endif
/* must be done before any menu needs to be displayed */
rb->snprintf(menu_desc, sizeof(menu_desc), "%s Menu", midend_which_game(me)->name);