From 62cfae036a996928fe92570afbe0c7711fb24679 Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Fri, 22 Oct 2021 18:48:02 +0700 Subject: [PATCH] introduce cosmetic menu groups, add ghost monsters setting (#320) --- Source/g_game.c | 4 +-- Source/m_menu.c | 79 ++++++++++++++++++++++++++++++------------------ Source/m_misc.c | 8 +++++ Source/p_enemy.c | 4 ++- 4 files changed, 62 insertions(+), 33 deletions(-) diff --git a/Source/g_game.c b/Source/g_game.c index b3146982..983a4d68 100644 --- a/Source/g_game.c +++ b/Source/g_game.c @@ -2530,8 +2530,6 @@ void G_ReloadDefaults(void) if (!mbf21) G_MBFComp(); - M_ResetSetupMenu(); - // killough 3/31/98, 4/5/98: demo sync insurance demo_insurance = (default_demo_insurance == 1); @@ -2570,6 +2568,8 @@ void G_ReloadDefaults(void) classic_bfg = 0; beta_emulation = 0; } + + M_ResetSetupMenu(); } void G_DoNewGame (void) diff --git a/Source/m_menu.c b/Source/m_menu.c index 22484fd3..540f703a 100644 --- a/Source/m_menu.c +++ b/Source/m_menu.c @@ -2890,7 +2890,6 @@ enum { // killough 10/98: enum for y-offset info weap_recoil, weap_bobbing, weap_bfg, - weap_center, // [FG] centered weapon sprite weap_stub1, weap_pref1, weap_pref2, @@ -2904,6 +2903,9 @@ enum { // killough 10/98: enum for y-offset info weap_stub2, weap_toggle, weap_toggle2, + weap_stub3, + weap_consmetic, + weap_center, // [FG] centered weapon sprite }; setup_menu_t weap_settings1[]; @@ -2927,9 +2929,6 @@ setup_menu_t weap_settings1[] = // Weapons Settings screen {"CLASSIC BFG" ,S_YESNO,m_null,WP_X, // killough 8/8/98 WP_Y+ weap_bfg*8, {"classic_bfg"}}, - // [FG] centered or bobbing weapon sprite - {"Weapon Attack Alignment",S_CHOICE,m_null,WP_X, WP_Y+weap_center*8, {"center_weapon"}, 0, NULL, weapon_attack_alignment_strings}, - {"1ST CHOICE WEAPON",S_WEAP,m_null,WP_X,WP_Y+weap_pref1*8, {"weapon_choice_1"}}, {"2nd CHOICE WEAPON",S_WEAP,m_null,WP_X,WP_Y+weap_pref2*8, {"weapon_choice_2"}}, {"3rd CHOICE WEAPON",S_WEAP,m_null,WP_X,WP_Y+weap_pref3*8, {"weapon_choice_3"}}, @@ -2943,6 +2942,11 @@ setup_menu_t weap_settings1[] = // Weapons Settings screen {"Enable Fist/Chainsaw\n& SG/SSG toggle", S_YESNO, m_null, WP_X, WP_Y+ weap_toggle*8, {"doom_weapon_toggles"}}, + {"Cosmetic",S_SKIP|S_TITLE,m_null,WP_X,WP_Y+weap_consmetic*8}, + + // [FG] centered or bobbing weapon sprite + {"Weapon Attack Alignment",S_CHOICE,m_null,WP_X, WP_Y+weap_center*8, {"center_weapon"}, 0, NULL, weapon_attack_alignment_strings}, + // Button for resetting to defaults {0,S_RESET,m_null,X_BUTTON,Y_BUTTON}, @@ -3028,8 +3032,8 @@ setup_menu_t stat_settings1[] = // Status Bar and HUD Settings screen {"ARMOR GOOD/EXTRA" ,S_NUM ,m_null,ST_X,ST_Y+13*8, {"armor_green"}}, {"AMMO LOW/OK" ,S_NUM ,m_null,ST_X,ST_Y+14*8, {"ammo_red"}}, {"AMMO OK/GOOD" ,S_NUM ,m_null,ST_X,ST_Y+15*8, {"ammo_yellow"}}, - {"\"A SECRET IS REVEALED!\" MESSAGE",S_YESNO,m_null,ST_X,ST_Y+16*8, {"hud_secret_message"}}, - {"SHOW TIME/STS ABOVE STATUS BAR",S_YESNO,m_null,ST_X,ST_Y+17*8, {"hud_timests"}}, + {"\"A SECRET IS REVEALED!\" MESSAGE",S_YESNO,m_null,ST_X,ST_Y+17*8, {"hud_secret_message"}}, + {"SHOW TIME/STS ABOVE STATUS BAR",S_YESNO,m_null,ST_X,ST_Y+18*8, {"hud_timests"}}, // Button for resetting to defaults {0,S_RESET,m_null,X_BUTTON,Y_BUTTON}, @@ -3287,9 +3291,11 @@ enum { enem_dog_jumping, + enem_stub1, + enem_cosmetic, enem_colored_blood, - enem_flipcorpses, + enem_ghost, enem_end }; @@ -3322,12 +3328,17 @@ setup_menu_t enem_settings1[] = // Enemy Settings screen {"Allow dogs to jump down",S_YESNO,m_null,E_X,E_Y+ enem_dog_jumping*8, {"dog_jumping"}}, + {"Cosmetic",S_SKIP|S_TITLE,m_null,E_X,E_Y+ enem_cosmetic*8}, + // [FG] colored blood and gibs {"Colored Blood",S_YESNO,m_null,E_X,E_Y+ enem_colored_blood*8, {"colored_blood"}}, // [crispy] randomly flip corpse, blood and death animation sprites {"Randomly Mirrored Corpses",S_YESNO,m_null,E_X,E_Y+ enem_flipcorpses*8, {"flipcorpses"}}, + // [crispy] resurrected pools of gore ("ghost monsters") are translucent + {"Translucent Ghost Monsters",S_YESNO,m_null,E_X,E_Y+ enem_ghost*8, {"ghost_monsters"}}, + // Button for resetting to defaults {0,S_RESET,m_null,X_BUTTON,Y_BUTTON}, @@ -3643,16 +3654,17 @@ enum compat_vile, compat_pain, compat_skull, - compat_blazing, - compat_doorlight = 0, compat_god, - compat_infcheat, + compat_infcheat = 0, compat_zombie, - compat_skymap, compat_stairs, compat_floors, compat_model, compat_zerotags, + compat_cosmetic, + compat_blazing, + compat_doorlight, + compat_skymap, compat_menu, }; @@ -3685,8 +3697,8 @@ setup_menu_t comp_settings1[] = // Compatibility Settings screen #1 {"Lost souls get stuck behind walls", S_YESNO, m_null, C_X, C_Y + compat_skull * COMP_SPC, {"comp_skull"}}, - {"Blazing doors make double closing sounds", S_YESNO|S_COSMETIC, m_null, C_X, - C_Y + compat_blazing * COMP_SPC, {"comp_blazing"}}, + {"God mode isn't absolute", S_YESNO, m_null, C_X, + C_Y + compat_god * COMP_SPC, {"comp_god"}}, // Button for resetting to defaults {0,S_RESET,m_null,X_BUTTON,Y_BUTTON}, @@ -3699,21 +3711,12 @@ setup_menu_t comp_settings1[] = // Compatibility Settings screen #1 setup_menu_t comp_settings2[] = // Compatibility Settings screen #2 { - {"Tagged doors don't trigger special lighting", S_YESNO|S_COSMETIC, m_null, C_X, - C_Y + compat_doorlight * COMP_SPC, {"comp_doorlight"}}, - - {"God mode isn't absolute", S_YESNO, m_null, C_X, - C_Y + compat_god * COMP_SPC, {"comp_god"}}, - {"Powerup cheats are not infinite duration", S_YESNO, m_null, C_X, C_Y + compat_infcheat * COMP_SPC, {"comp_infcheat"}}, {"Zombie players can exit levels", S_YESNO, m_null, C_X, C_Y + compat_zombie * COMP_SPC, {"comp_zombie"}}, - {"Sky is unaffected by invulnerability", S_YESNO|S_COSMETIC, m_null, C_X, - C_Y + compat_skymap * COMP_SPC, {"comp_skymap"}}, - {"Use exactly Doom's stairbuilding method", S_YESNO, m_null, C_X, C_Y + compat_stairs * COMP_SPC, {"comp_stairs"}}, @@ -3726,6 +3729,18 @@ setup_menu_t comp_settings2[] = // Compatibility Settings screen #2 {"Linedef effects work with sector tag = 0", S_YESNO, m_null, C_X, C_Y + compat_zerotags * COMP_SPC, {"comp_zerotags"}}, + {"Cosmetic", S_SKIP|S_TITLE, m_null, C_X, + C_Y + compat_cosmetic * COMP_SPC}, + + {"Blazing doors make double closing sounds", S_YESNO|S_COSMETIC, m_null, C_X, + C_Y + compat_blazing * COMP_SPC, {"comp_blazing"}}, + + {"Tagged doors don't trigger special lighting", S_YESNO|S_COSMETIC, m_null, C_X, + C_Y + compat_doorlight * COMP_SPC, {"comp_doorlight"}}, + + {"Sky is unaffected by invulnerability", S_YESNO|S_COSMETIC, m_null, C_X, + C_Y + compat_skymap * COMP_SPC, {"comp_skymap"}}, + {"Use Doom's main menu ordering", S_YESNO, m_null, C_X, C_Y + compat_menu * COMP_SPC, {"traditional_menu"}, 0, M_ResetMenu}, @@ -6169,28 +6184,32 @@ void M_ResetSetupMenu(void) { int i; - for (i = compat_telefrag; i < compat_blazing; ++i) + for (i = compat_telefrag; i <= compat_god; ++i) { FLAG_SET_BOOM(comp_settings1[i].m_flags, S_DISABLE); } - for (i = compat_god; i < compat_skymap; ++i) - { - FLAG_SET_BOOM(comp_settings2[i].m_flags, S_DISABLE); - } - for (i = compat_stairs; i < compat_menu; ++i) + for (i = compat_infcheat; i < compat_cosmetic; ++i) { FLAG_SET_BOOM(comp_settings2[i].m_flags, S_DISABLE); } + FLAG_SET_BOOM(enem_settings1[enem_infighting].m_flags, S_DISABLE); - for (i = enem_backing; i < enem_colored_blood; ++i) + for (i = enem_backing; i < enem_stub1; ++i) { FLAG_SET_BOOM(enem_settings1[i].m_flags, S_DISABLE); } + // enem_ghost + if (comp[comp_vile]) + enem_settings1[13].m_flags &= ~S_DISABLE; + else + enem_settings1[13].m_flags |= S_DISABLE; + FLAG_SET_VANILLA(enem_settings1[enem_remember].m_flags, S_DISABLE); FLAG_SET_VANILLA(weap_settings1[weap_recoil].m_flags, S_DISABLE); FLAG_SET_VANILLA(weap_settings1[weap_bobbing].m_flags, S_DISABLE); - for (i = weap_stub1; i < weap_stub2; ++i) + // weap_pref1 to weap_toggle + for (i = 3; i < 13; ++i) { FLAG_SET_VANILLA(weap_settings1[i].m_flags, S_DISABLE); } diff --git a/Source/m_misc.c b/Source/m_misc.c index 8a648d17..799f2499 100644 --- a/Source/m_misc.c +++ b/Source/m_misc.c @@ -84,6 +84,7 @@ extern int cfg_scalefactor; // haleyjd 05/11/09 extern int cfg_aspectratio; // haleyjd 05/11/09 extern int fullscreen; // [FG] save fullscren mode extern boolean flipcorpses; // [crispy] randomly flip corpse, blood and death animation sprites +extern boolean ghost_monsters; // [crispy] resurrected pools of gore ("ghost monsters") are translucent extern int cfg_mouse_acceleration; extern int mouse_threshold; @@ -327,6 +328,13 @@ default_t defaults[] = { "1 to enable randomly mirrored death animations" }, + { + "ghost_monsters", + (config_t *) &ghost_monsters, NULL, + {1}, {0,1}, number, ss_enem, wad_no, + "1 to enable \"ghost monsters\" (resurrected pools of gore are translucent)" + }, + { // no color changes on status bar "sts_always_red", (config_t *) &sts_always_red, NULL, diff --git a/Source/p_enemy.c b/Source/p_enemy.c index 746c3b46..ec603ed5 100644 --- a/Source/p_enemy.c +++ b/Source/p_enemy.c @@ -1615,6 +1615,8 @@ boolean PIT_VileCheck(mobj_t *thing) // Check for ressurecting a body // +boolean ghost_monsters; + static boolean P_HealCorpse(mobj_t* actor, int radius, statenum_t healstate, sfxenum_t healsound) { int xl, xh; @@ -1673,7 +1675,7 @@ static boolean P_HealCorpse(mobj_t* actor, int radius, statenum_t healstate, sfx (info->flags & ~MF_FRIEND) | (actor->flags & MF_FRIEND); // [crispy] resurrected pools of gore ("ghost monsters") are translucent - if (corpsehit->height == 0 && corpsehit->radius == 0) + if (ghost_monsters && corpsehit->height == 0 && corpsehit->radius == 0) { corpsehit->flags |= MF_TRANSLUCENT; fprintf(stderr, "A_VileChase: Resurrected ghost monster (%d) at (%d/%d)!\n",