diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/doom/doomstat.h | 3 | ||||
-rw-r--r-- | src/doom/m_menu.c | 31 |
2 files changed, 28 insertions, 6 deletions
diff --git a/src/doom/doomstat.h b/src/doom/doomstat.h index 9e09bb42..bb203e0d 100644 --- a/src/doom/doomstat.h +++ b/src/doom/doomstat.h @@ -66,6 +66,9 @@ extern GameMission_t gamemission; extern GameVersion_t gameversion; extern char *gamedescription; +// If true, we're using one of the mangled BFG edition IWADs. +extern boolean bfgedition; + // Convenience macro. // 'gamemission' can be equal to pack_chex or pack_hacx, but these are // just modified versions of doom and doom2, and should be interpreted diff --git a/src/doom/m_menu.c b/src/doom/m_menu.c index 4951d9a6..97c080c8 100644 --- a/src/doom/m_menu.c +++ b/src/doom/m_menu.c @@ -985,18 +985,37 @@ void M_Episode(int choice) // // M_Options // -char detailNames[2][9] = {"M_GDHIGH","M_GDLOW"}; -char msgNames[2][9] = {"M_MSGOFF","M_MSGON"}; - +static char *detailNames[2] = {"M_GDHIGH","M_GDLOW"}; +static char *msgNames[2] = {"M_MSGOFF","M_MSGON"}; void M_DrawOptions(void) { + char *detail_patch; + V_DrawPatchDirect(108, 15, W_CacheLumpName(DEH_String("M_OPTTTL"), PU_CACHE)); - + + // Workaround for BFG edition IWAD weirdness. + // The BFG edition doesn't have the "low detail" menu option (fair + // enough). But bizarrely, it reuses the M_GDHIGH patch as a label + // for the options menu (says "Fullscreen:"). Why the perpetrators + // couldn't just add a new graphic lump and had to reuse this one, + // I don't know. + // + // The end result is that M_GDHIGH is too wide and causes the game + // to crash. As a workaround to get a minimum level of support for + // the BFG edition IWADs, use the "ON"/"OFF" graphics instead. + if (bfgedition) + { + detail_patch = msgNames[detailLevel]; + } + else + { + detail_patch = detailNames[detailLevel]; + } + V_DrawPatchDirect(OptionsDef.x + 175, OptionsDef.y + LINEHEIGHT * detail, - W_CacheLumpName(DEH_String(detailNames[detailLevel]), - PU_CACHE)); + W_CacheLumpName(DEH_String(detail_patch), PU_CACHE)); V_DrawPatchDirect(OptionsDef.x + 120, OptionsDef.y + LINEHEIGHT * messages, W_CacheLumpName(DEH_String(msgNames[showMessages]), |