make "3-key doors work with only 2 keys" bug optional (#45)

* make "3-key doors work with only 2 keys" bug optional, fixes #38

 * Introduce a compatibility flag for MBF's most famous bug and add it
   to the second menu page in the Doom Compatibility section.

* reverse comp[] logic

* add (config_t *) pointer casts

* improve menu item description

* rename 3keydoors to 3keydoor, matching the menu item

* comments
This commit is contained in:
Fabian Greffrath 2020-01-20 11:32:27 +01:00 committed by GitHub
parent 10195043fd
commit 457ca505f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 1 deletions

View File

@ -111,6 +111,9 @@ enum {
comp_stairs,
comp_infcheat,
comp_zerotags,
// [FG] 3-key door works with only 2 keys
// http://prboom.sourceforge.net/mbf-bugs.html
comp_3keydoor,
COMP_TOTAL=32 // Some extra room for additional variables
};

View File

@ -3185,6 +3185,9 @@ enum
compat_model,
compat_zerotags,
compat_menu,
// [FG] 3-key door works with only 2 keys
// http://prboom.sourceforge.net/mbf-bugs.html
compat_3keydoor,
};
setup_menu_t comp_settings1[] = // Compatibility Settings screen #1
@ -3260,6 +3263,11 @@ setup_menu_t comp_settings2[] = // Compatibility Settings screen #2
{"Use Doom's main menu ordering", S_YESNO, m_null, C_X,
C_Y + compat_menu * COMP_SPC, {"traditional_menu"}, 0, 0, M_ResetMenu},
// [FG] 3-key door works with only 2 keys
// http://prboom.sourceforge.net/mbf-bugs.html
{"Fix 3-key door works with only 2 keys", S_YESNO, m_null, C_X,
C_Y + compat_3keydoor * COMP_SPC, {"comp_3keydoor"}},
{"<- PREV", S_SKIP|S_PREV, m_null, KB_PREV, C_Y+C_NEXTPREV,{comp_settings1}},
// Final entry

View File

@ -570,6 +570,15 @@ default_t defaults[] = {
"Linedef effects work with sector tag = 0"
},
// [FG] 3-key door works with only 2 keys
// http://prboom.sourceforge.net/mbf-bugs.html
{
"comp_3keydoor",
(config_t *) &default_comp[comp_3keydoor], (config_t *) &comp[comp_3keydoor],
{0}, {0,1}, number, ss_comp, wad_yes,
"Fix 3-key door works with only 2 keys"
},
// For key bindings, the values stored in the key_* variables // phares
// are the internal Doom Codes. The values stored in the default.cfg
// file are the keyboard codes. I_ScanCode2DoomCode converts from

View File

@ -803,7 +803,9 @@ boolean P_CanUnlockGenDoor(line_t *line, player_t *player)
if (skulliscard &&
(!(player->cards[it_redcard] | player->cards[it_redskull]) ||
!(player->cards[it_bluecard] | player->cards[it_blueskull]) ||
!(player->cards[it_yellowcard] | !player->cards[it_yellowskull])))
// [FG] 3-key door works with only 2 keys
// http://prboom.sourceforge.net/mbf-bugs.html
!(player->cards[it_yellowcard] | (!comp[comp_3keydoor] ? !player->cards[it_yellowskull] : player->cards[it_yellowskull]))))
{
player->message = s_PD_ALL3; // Ty 03/27/98 - externalized
S_StartSound(player->mo,sfx_oof); // killough 3/20/98