From 974d30688009ffcde2b6f806907efe6177440d2f Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Mon, 24 Apr 2023 13:59:37 +0700 Subject: [PATCH] introduce hide weapon option (#1007) * Add second page to weapon menu, restore first/chainsaw toggle menu option. * Clean screenshots without weapon. Add new "clean screenshot" key, like in Crispy. --- src/doomstat.c | 2 ++ src/doomstat.h | 4 +++ src/g_game.c | 12 ++++++--- src/m_input.h | 1 + src/m_menu.c | 70 +++++++++++++++++++++++++++++++++++--------------- src/m_misc.c | 23 +++++++++++------ src/r_things.c | 3 +++ 7 files changed, 84 insertions(+), 31 deletions(-) diff --git a/src/doomstat.c b/src/doomstat.c index ce8aaf37..e09fd3e5 100644 --- a/src/doomstat.c +++ b/src/doomstat.c @@ -114,6 +114,8 @@ int doom_weapon_toggles; // killough 10/98 int monkeys, default_monkeys; +boolean hide_weapon; + // [FG] centered weapon sprite int center_weapon; diff --git a/src/doomstat.h b/src/doomstat.h index 77c7e8e6..40db75f2 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -251,6 +251,8 @@ extern boolean noblit; extern boolean nosfxparm; extern boolean nomusicparm; +extern boolean clean_screenshot; + // This one is related to the 3-screen display mode. // ANG90 = left side, ANG270 = right extern int viewangleoffset; @@ -433,6 +435,8 @@ extern int flashing_hom; // killough 10/98 extern int doom_weapon_toggles; // killough 10/98 +extern boolean hide_weapon; + // [FG] centered weapon sprite extern int center_weapon; diff --git a/src/g_game.c b/src/g_game.c index 65e69320..f876dd62 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2217,18 +2217,21 @@ static void G_DoLoadGame(void) } } -boolean clean_screenshots; +boolean clean_screenshot; void G_CleanScreenshot(void) { int old_screenblocks; + boolean old_hide_weapon; old_screenblocks = screenblocks; - + old_hide_weapon = hide_weapon; + hide_weapon = true; R_SetViewSize(11); R_ExecuteSetViewSize(); R_RenderPlayerView(&players[displayplayer]); R_SetViewSize(old_screenblocks); + hide_weapon = old_hide_weapon; } // @@ -2276,8 +2279,11 @@ void G_Ticker(void) G_DoWorldDone(); break; case ga_screenshot: - if (clean_screenshots) + if (clean_screenshot) + { G_CleanScreenshot(); + clean_screenshot = false; + } M_ScreenShot(); gameaction = ga_nothing; break; diff --git a/src/m_input.h b/src/m_input.h index 9fcaf1fd..678a88f7 100644 --- a/src/m_input.h +++ b/src/m_input.h @@ -81,6 +81,7 @@ enum input_zoomin, input_zoomout, input_screenshot, + input_clean_screenshot, input_setup, input_pause, input_spy, diff --git a/src/m_menu.c b/src/m_menu.c index cdd95b41..97e0faee 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2973,6 +2973,7 @@ setup_menu_t keys_settings5[] = // Key Binding screen strings {"LARGER VIEW" ,S_INPUT ,m_scrn,KB_X,M_Y+13*M_SPC,{0},input_zoomin}, {"SMALLER VIEW",S_INPUT ,m_scrn,KB_X,M_Y+14*M_SPC,{0},input_zoomout}, {"SCREENSHOT" ,S_INPUT ,m_scrn,KB_X,M_Y+15*M_SPC,{0},input_screenshot}, + {"CLEAN SCREENSHOT",S_INPUT ,m_scrn,KB_X,M_Y+16*M_SPC,{0},input_clean_screenshot}, {"<- PREV", S_SKIP|S_PREV,m_null,M_X_PREV,M_Y_PREVNEXT, {keys_settings4}}, {"NEXT ->", S_SKIP|S_NEXT,m_null,M_X_NEXT,M_Y_PREVNEXT, {keys_settings6}}, @@ -3147,19 +3148,27 @@ enum { // killough 10/98: enum for y-offset info weap1_pref8, weap1_pref9, weap1_stub1, - weap1_bfg, + weap1_toggle, + weap1_toggle_line, weap1_stub2, - weap1_title1, - weap1_bobbing, - weap1_recoilpitch, - weap1_center // [FG] centered weapon sprite + weap1_bfg, +}; + +enum { + weap2_title1, + weap2_hide_weapon, + weap2_center, // [FG] centered weapon sprite + weap2_bobbing, + weap2_recoilpitch, }; setup_menu_t weap_settings1[]; +setup_menu_t weap_settings2[]; setup_menu_t* weap_settings[] = { weap_settings1, + weap_settings2, NULL }; @@ -3174,7 +3183,7 @@ static const char *default_bobfactor_strings[] = { static void M_UpdateCenteredWeaponItem(void) { - DISABLE_ITEM(!cosmetic_bobbing, weap_settings1[weap1_center]); + DISABLE_ITEM(!cosmetic_bobbing, weap_settings1[weap2_center]); } setup_menu_t weap_settings1[] = // Weapons Settings screen @@ -3191,28 +3200,47 @@ setup_menu_t weap_settings1[] = // Weapons Settings screen {"", S_SKIP, m_null, M_X, M_Y + weap1_stub1*M_SPC}, - {"Pre-Beta BFG" ,S_YESNO,m_null,M_X, // killough 8/8/98 - M_Y+ weap1_bfg*M_SPC, {"classic_bfg"}}, + {"Enable Fist/Chainsaw\n& SG/SSG toggle", S_YESNO|S_BOOM, m_null, M_X, + M_Y+ weap1_toggle*M_SPC, {"doom_weapon_toggles"}}, {"", S_SKIP, m_null, M_X, M_Y + weap1_stub2*M_SPC}, - {"Cosmetic",S_SKIP|S_TITLE,m_null,M_X,M_Y+weap1_title1*M_SPC}, - - {"Player View/Weapon Bobbing",S_CHOICE,m_null,M_X, M_Y+weap1_bobbing*M_SPC, {"cosmetic_bobbing"}, 0, M_UpdateCenteredWeaponItem, default_bobfactor_strings}, - - {"Enable Recoil Pitch", S_YESNO,m_null,M_X, M_Y+ weap1_recoilpitch*M_SPC, {"weapon_recoilpitch"}}, - - // [FG] centered or bobbing weapon sprite - {"Weapon Attack Alignment",S_CHOICE|S_STRICT,m_null,M_X, M_Y+weap1_center*M_SPC, {"center_weapon"}, 0, NULL, weapon_attack_alignment_strings}, + {"Pre-Beta BFG" ,S_YESNO,m_null,M_X, // killough 8/8/98 + M_Y+ weap1_bfg*M_SPC, {"classic_bfg"}}, // Button for resetting to defaults {0,S_RESET,m_null,X_BUTTON,Y_BUTTON}, + {"NEXT ->",S_SKIP|S_NEXT,m_null,M_X_NEXT,M_Y_PREVNEXT, {weap_settings2}}, + // Final entry {0,S_SKIP|S_END,m_null} }; +setup_menu_t weap_settings2[] = +{ + {"Cosmetic",S_SKIP|S_TITLE,m_null,M_X,M_Y+weap2_title1*M_SPC}, + + {"Hide Weapon", S_YESNO|S_STRICT, m_null, M_X, + M_Y + weap2_hide_weapon*M_SPC, {"hide_weapon"}}, + + // [FG] centered or bobbing weapon sprite + {"Weapon Attack Alignment", S_CHOICE|S_STRICT, m_null, M_X, + M_Y + weap2_center * M_SPC, {"center_weapon"}, 0, NULL, weapon_attack_alignment_strings}, + + {"Player View/Weapon Bobbing", S_CHOICE, m_null, M_X, + M_Y + weap2_bobbing * M_SPC, {"cosmetic_bobbing"}, 0, M_UpdateCenteredWeaponItem, default_bobfactor_strings}, + + {"Enable Recoil Pitch", S_YESNO, m_null, M_X, + M_Y + weap2_recoilpitch*M_SPC, {"weapon_recoilpitch"}}, + + {"<- PREV" ,S_SKIP|S_PREV,m_null,M_X_PREV,M_Y_PREVNEXT, {weap_settings1}}, + + // Final entry + {0,S_SKIP|S_END,m_null} +}; + // Setting up for the Weapons screen. Turn on flags, set pointers, // locate the first item on the screen where the cursor is allowed to // land. @@ -4000,7 +4028,6 @@ enum { gen3_strictmode, gen3_screen_melt, gen3_death_action, - gen3_clean_screenshots, gen3_demobar, gen3_palette_changes, gen3_level_brightness, @@ -4156,9 +4183,6 @@ setup_menu_t gen_settings3[] = { // General Settings screen3 {"On death action", S_CHOICE, m_null, M_X, M_Y + gen3_death_action*M_SPC, {"death_use_action"}, 0, NULL, death_use_action_strings}, - {"Clean Screenshots", S_YESNO, m_null, M_X, - M_Y + gen3_clean_screenshots*M_SPC, {"clean_screenshots"}}, - {"Show demo progress bar", S_YESNO, m_null, M_X, M_Y + gen3_demobar*M_SPC, {"demobar"}}, @@ -5423,6 +5447,12 @@ boolean M_Responder (event_t* ev) // return true; // [FG] don't let toggles eat keys } + if (M_InputActivated(input_clean_screenshot)) + { + clean_screenshot = true; + G_ScreenShot(); + } + // If there is no active menu displayed... if (!menuactive && !chat_on) // phares diff --git a/src/m_misc.c b/src/m_misc.c index 1593f639..5db8f924 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -105,7 +105,6 @@ extern boolean r_swirl; extern int death_use_action; extern boolean palette_changes; extern boolean screen_melt; -extern boolean clean_screenshots; extern boolean hangsolid; extern boolean blockmapfix; extern int extra_level_brightness; @@ -596,13 +595,6 @@ default_t defaults[] = { "0 to disable screen melt" }, - { - "clean_screenshots", - (config_t *) &clean_screenshots, NULL, - {0}, {0,1}, number, ss_gen, wad_yes, - "1 to enable clean screenshots without any HUD elements" - }, - { "net_player_name", (config_t *) &net_player_name, NULL, @@ -681,6 +673,13 @@ default_t defaults[] = { "Player View/Weapon Bobbing (0 = off, 1 = full, 2 = 75%)" }, + { + "hide_weapon", + (config_t *) &hide_weapon, NULL, + {0}, {0,1}, number, ss_weap, wad_no, + "1 to hide weapon" + }, + // [FG] centered or bobbing weapon sprite { "center_weapon", @@ -1861,6 +1860,14 @@ default_t defaults[] = { input_screenshot, { {input_type_key, KEY_PRTSCR} } }, + { + "input_clean_screenshot", + NULL, NULL, + {0}, {UL,UL}, input, ss_keys, wad_no, + "key to take a clean screenshot", + input_screenshot, { {0, 0} } + }, + { // HOME key // killough 10/98: shortcut to setup menu "input_setup", NULL, NULL, diff --git a/src/r_things.c b/src/r_things.c index 92b35e33..2d5185ae 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -824,6 +824,9 @@ void R_DrawPSprite (pspdef_t *psp) // [crispy] free look vis->texturemid += (centery - viewheight/2) * pspriteiscale; + if (STRICTMODE(hide_weapon)) + return; + R_DrawVisSprite(vis, vis->x1, vis->x2); }