From 47206594b9fbfdc954b074c4306bde68bd7d599b Mon Sep 17 00:00:00 2001 From: tralezab <40974010+tralezab@users.noreply.github.com> Date: Mon, 20 Feb 2023 11:30:51 -0800 Subject: [PATCH] Fixes Ninjas not being able to use adrenaline while unconscious + code improvement (#73538) ## About The Pull Request ### Bugfix Fixes #73521 Ninja's adrenaline is supposed to cure unconscious, but you can't activate it while unconscious. This pr fixes that ### Code improvement Combined all the allow variables into a bitflag ## Why It's Good For The Game bugfix ## Changelog :cl: fix: You can use ninja adrenaline to cure unconsciousness as intended code: Cleaned up some modsuit code /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/__DEFINES/mod.dm | 7 +++++++ code/modules/mod/mod_actions.dm | 3 +++ code/modules/mod/mod_activation.dm | 2 +- code/modules/mod/modules/_module.dm | 14 ++++++-------- code/modules/mod/modules/modules_antag.dm | 2 +- code/modules/mod/modules/modules_ninja.dm | 1 + code/modules/mod/modules/modules_security.dm | 2 +- code/modules/mod/modules/modules_supply.dm | 4 ++-- code/modules/mod/modules/modules_timeline.dm | 2 +- 9 files changed, 23 insertions(+), 14 deletions(-) diff --git a/code/__DEFINES/mod.dm b/code/__DEFINES/mod.dm index 0e380f9e959..e98230a8f3b 100644 --- a/code/__DEFINES/mod.dm +++ b/code/__DEFINES/mod.dm @@ -16,6 +16,13 @@ /// Actively usable module, you may only have one selected at a time. #define MODULE_ACTIVE 3 +/// This module can be used during phaseout +#define MODULE_ALLOW_PHASEOUT (1<<0) +/// This module can be used while incapacitated +#define MODULE_ALLOW_INCAPACITATED (1<<1) +/// This module can be used while the suit is off +#define MODULE_ALLOW_INACTIVE (1<<2) + //Defines used by the theme for clothing flags and similar #define CONTROL_LAYER "control_layer" #define HELMET_FLAGS "helmet_flags" diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm index 1c9ea72303c..0c92171f707 100644 --- a/code/modules/mod/mod_actions.dm +++ b/code/modules/mod/mod_actions.dm @@ -133,6 +133,9 @@ button_icon_state = linked_module.icon_state ..() module = linked_module + if(linked_module.allow_flags & MODULE_ALLOW_INCAPACITATED) + // clears check hands and check conscious + check_flags = NONE name = "Activate [capitalize(linked_module.name)]" desc = "Quickly activate [linked_module]." RegisterSignals(linked_module, list(COMSIG_MODULE_ACTIVATED, COMSIG_MODULE_DEACTIVATED, COMSIG_MODULE_USED), PROC_REF(module_interacted_with)) diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 8b1b95ca609..36563bbd96c 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -152,7 +152,7 @@ playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE for(var/obj/item/mod/module/module as anything in modules) - if(!module.active || module.allowed_inactive) + if(!module.active || (module.allow_flags & MODULE_ALLOW_INACTIVE)) continue module.on_deactivation(display_message = FALSE) activating = TRUE diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index 09ba4c7bfce..43021898bbd 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -41,10 +41,8 @@ var/used_signal /// List of REF()s mobs we are pinned to, linked with their action buttons var/list/pinned_to = list() - /// If we're allowed to use this module while phased out. - var/allowed_in_phaseout = FALSE - /// If we're allowed to use this module while the suit is disabled. - var/allowed_inactive = FALSE + /// flags that let the module ability be used in odd circumstances + var/allow_flags = NONE /// Timer for the cooldown COOLDOWN_DECLARE(cooldown_timer) @@ -73,7 +71,7 @@ /// Called when the module is selected from the TGUI, radial or the action button /obj/item/mod/module/proc/on_select() - if(((!mod.active || mod.activating) && !allowed_inactive) || module_type == MODULE_PASSIVE) + if(((!mod.active || mod.activating) && !(allow_flags & MODULE_ALLOW_INACTIVE)) || module_type == MODULE_PASSIVE) if(mod.wearer) balloon_alert(mod.wearer, "not active!") return @@ -94,7 +92,7 @@ if(!mod.active || mod.activating || !mod.get_charge()) balloon_alert(mod.wearer, "unpowered!") return FALSE - if(!allowed_in_phaseout && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) + if(!(allow_flags & MODULE_ALLOW_PHASEOUT) && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) //specifically a to_chat because the user is phased out. to_chat(mod.wearer, span_warning("You cannot activate this right now.")) return FALSE @@ -149,7 +147,7 @@ if(!check_power(use_power_cost)) balloon_alert(mod.wearer, "not enough charge!") return FALSE - if(!allowed_in_phaseout && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) + if(!(allow_flags & MODULE_ALLOW_PHASEOUT) && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) //specifically a to_chat because the user is phased out. to_chat(mod.wearer, span_warning("You cannot activate this right now.")) return FALSE @@ -163,7 +161,7 @@ /// Called when an activated module without a device is used /obj/item/mod/module/proc/on_select_use(atom/target) - if(mod.wearer.incapacitated(IGNORE_GRAB)) + if(!(allow_flags & MODULE_ALLOW_INCAPACITATED) && mod.wearer.incapacitated(IGNORE_GRAB)) return FALSE mod.wearer.face_atom(target) if(!on_use()) diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 37ee1dd2403..20e598d220d 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -362,7 +362,7 @@ complexity = 2 incompatible_modules = list(/obj/item/mod/module/chameleon) cooldown_time = 0.5 SECONDS - allowed_inactive = TRUE + allow_flags = MODULE_ALLOW_INACTIVE /// A list of all the items the suit can disguise as. var/list/possible_disguises = list() /// The path of the item we're disguised as. diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 02656d141b9..d94c396dde9 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -379,6 +379,7 @@ icon_state = "adrenaline_boost" removable = FALSE module_type = MODULE_USABLE + allow_flags = MODULE_ALLOW_INCAPACITATED incompatible_modules = list(/obj/item/mod/module/adrenaline_boost) cooldown_time = 12 SECONDS /// What reagent we need to refill? diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 50ec3556ea8..649d8a4c099 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -106,7 +106,7 @@ complexity = 2 incompatible_modules = list(/obj/item/mod/module/holster) cooldown_time = 0.5 SECONDS - allowed_inactive = TRUE + allow_flags = MODULE_ALLOW_INACTIVE /// Gun we have holstered. var/obj/item/gun/holstered diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index ecba3297bb7..7ee39d4c02e 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -12,7 +12,7 @@ use_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 incompatible_modules = list(/obj/item/mod/module/gps) cooldown_time = 0.5 SECONDS - allowed_inactive = TRUE + allow_flags = MODULE_ALLOW_INACTIVE /obj/item/mod/module/gps/Initialize(mapload) . = ..() @@ -173,7 +173,7 @@ use_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 incompatible_modules = list(/obj/item/mod/module/orebag) cooldown_time = 0.5 SECONDS - allowed_inactive = TRUE + allow_flags = MODULE_ALLOW_INACTIVE /// The ores stored in the bag. var/list/ores = list() diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm index ddebdb59ee0..ad1451035fd 100644 --- a/code/modules/mod/modules/modules_timeline.dm +++ b/code/modules/mod/modules/modules_timeline.dm @@ -156,7 +156,7 @@ use_power_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/timeline_jumper) cooldown_time = 5 SECONDS - allowed_in_phaseout = TRUE + allow_flags = MODULE_ALLOW_PHASEOUT ///The dummy for phasing from this module, the wearer is phased out while this exists. var/obj/effect/dummy/phased_mob/chrono/phased_mob