(bounty) you no longer need ALL parts deployed to use a modsuit (limbless welcome!) (#86825)

## About The Pull Request

you no longer need all parts deployed to activate a modsuit
in order to use a module it needs its required part deployed, eg
magnetic attachment = boots needed
passive effects from a module dont work unless the relevant parts are
deployed

video todo

## Why It's Good For The Game

fikou wants this and uhh i guess its better that the legless and the
armless are capable of using modsuits
however wearing a modsuit onearmed or onelegged properly still needs a
seperate PR

## Changelog
🆑
balance: you no longer need all parts deployed to activate a modsuit,
you can use them limbless
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
This commit is contained in:
jimmyl
2024-10-25 02:09:06 +02:00
committed by GitHub
parent 692540a7b9
commit 3d100fb48c
6 changed files with 151 additions and 29 deletions
+65 -26
View File
@@ -20,13 +20,15 @@
var/obj/item/part = locate(part_reference) in get_parts()
if(!istype(part) || user.incapacitated)
return
if(active || activating)
balloon_alert(user, "deactivate the suit first!")
if(activating)
balloon_alert(user, "currently [active ? "unsealing" : "sealing"]!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return
var/parts_to_check = parts - part
if(part.loc == src)
deploy(user, part)
if(active && !delayed_seal_part(part))
return
SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user)
for(var/obj/item/checking_part as anything in parts_to_check)
if(checking_part.loc != src)
@@ -34,6 +36,8 @@
choose_deploy(user)
break
else
if(active && !delayed_seal_part(part))
return
retract(user, part)
SEND_SIGNAL(src, COMSIG_MOD_RETRACTED, user)
for(var/obj/item/checking_part as anything in parts_to_check)
@@ -44,8 +48,8 @@
/// Quickly deploys all parts (or retracts if all are on the wearer)
/obj/item/mod/control/proc/quick_deploy(mob/user)
if(active || activating)
balloon_alert(user, "deactivate the suit first!")
if(activating)
balloon_alert(user, "currently sealing/unsealing!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
var/deploy = TRUE
@@ -57,7 +61,11 @@
for(var/obj/item/part as anything in get_parts())
if(deploy && part.loc == src)
deploy(null, part)
if(active && !delayed_seal_part(part))
return
else if(!deploy && part.loc != src)
if(active && !delayed_seal_part(part))
return
retract(null, part)
wearer.visible_message(span_notice("[wearer]'s [src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."),
span_notice("[src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."),
@@ -137,11 +145,6 @@
if(!force_deactivate && (SEND_SIGNAL(src, COMSIG_MOD_ACTIVATE, user) & MOD_CANCEL_ACTIVATE))
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
for(var/obj/item/part as anything in get_parts())
if(!force_deactivate && part.loc == src)
balloon_alert(user, "deploy all parts first!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
if(locked && !active && !allowed(user) && !force_deactivate)
balloon_alert(user, "access insufficient!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
@@ -166,29 +169,45 @@
activating = TRUE
mod_link.end_call()
to_chat(wearer, span_notice("MODsuit [active ? "shutting down" : "starting up"]."))
for(var/obj/item/part as anything in get_parts())
var/datum/mod_part/part_datum = get_part_datum(part)
if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
to_chat(wearer, span_notice("[part] [active ? part_datum.unsealed_message : part_datum.sealed_message]."))
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
seal_part(part, is_sealed = !active)
//deploy the control unit
if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer]."))
if(ai_assistant)
to_chat(ai_assistant, span_notice("<b>SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai_assistant]\"</b>"))
finish_activation(is_on = !active)
if(active)
playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
if(!malfunctioning)
wearer.playsound_local(get_turf(src), 'sound/vehicles/mecha/nominal.ogg', 50)
else
playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
playsound(src, active ? 'sound/machines/synth/synth_no.ogg' : 'sound/machines/synth/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 8000)
else
activating = FALSE
return
for(var/obj/item/part as anything in get_parts()) //seals/unseals all deployed parts
if(part.loc == src)
continue
delayed_seal_part(part, no_activation = TRUE)
//finish activation
to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer]."))
if(ai_assistant)
to_chat(ai_assistant, span_notice("<b>SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai_assistant]\"</b>"))
finish_activation(is_on = !active)
if(active)
playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
if(!malfunctioning)
wearer.playsound_local(get_turf(src), 'sound/vehicles/mecha/nominal.ogg', 50)
else
playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
activating = FALSE
SEND_SIGNAL(src, COMSIG_MOD_TOGGLED, user)
return TRUE
/obj/item/mod/control/proc/delayed_seal_part(obj/item/clothing/part, no_activation = FALSE)
. = FALSE
var/datum/mod_part/part_datum = get_part_datum(part)
if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
to_chat(wearer, span_notice("[part] [!part_datum.sealed ? part_datum.sealed_message : part_datum.unsealed_message]."))
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
seal_part(part, is_sealed = !part_datum.sealed, no_activation = no_activation)
return TRUE
///Seals or unseals the given part.
/obj/item/mod/control/proc/seal_part(obj/item/clothing/part, is_sealed)
/obj/item/mod/control/proc/seal_part(obj/item/clothing/part, is_sealed, no_activation = FALSE)
var/datum/mod_part/part_datum = get_part_datum(part)
part_datum.sealed = is_sealed
if(part_datum.sealed)
@@ -211,6 +230,22 @@
wearer.update_obscured_slots(part.visor_flags_inv)
if((part.clothing_flags & (MASKINTERNALS|HEADINTERNALS)) && wearer.invalid_internals())
wearer.cutoff_internals()
if(!active || no_activation)
return
// these only matter during sealing and unsealing while active via deployment
if(is_sealed)
for(var/obj/item/mod/module/module as anything in modules)
if(!module.has_required_parts(list("[part.slot_flags]" = part_datum), need_extended = TRUE))
continue
module.on_suit_activation()
else
for(var/obj/item/mod/module/module as anything in modules)
if(!module.has_required_parts(list("[part.slot_flags]" = part_datum), need_extended = TRUE))
continue
module.on_suit_deactivation()
if(!module.active || (module.allow_flags & MODULE_ALLOW_INACTIVE))
continue
module.deactivate(display_message = FALSE)
/// Finishes the suit's activation
/obj/item/mod/control/proc/finish_activation(is_on)
@@ -219,9 +254,13 @@
active = is_on
if(active)
for(var/obj/item/mod/module/module as anything in modules)
if(!module.has_required_parts(mod_parts, need_extended = TRUE))
continue
module.on_suit_activation()
else
for(var/obj/item/mod/module/module as anything in modules)
if(!module.has_required_parts(mod_parts, need_extended = TRUE)) //it probably will runtime if we dont do this
continue
module.on_suit_deactivation()
update_speed()
update_appearance(UPDATE_ICON_STATE)
+9 -3
View File
@@ -219,6 +219,10 @@
/obj/item/mod/control/allow_attack_hand_drop(mob/user)
if(user != wearer)
return ..()
if(active)
balloon_alert(wearer, "deactivate the suit first!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE)
return
for(var/obj/item/part as anything in get_parts())
if(part.loc != src)
balloon_alert(user, "retract parts first!")
@@ -228,6 +232,10 @@
/obj/item/mod/control/mouse_drop_dragged(atom/over_object, mob/user)
if(user != wearer || !istype(over_object, /atom/movable/screen/inventory/hand))
return
if(active)
balloon_alert(wearer, "deactivate the suit first!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE)
return
for(var/obj/item/part as anything in get_parts())
if(part.loc != src)
balloon_alert(wearer, "retract parts first!")
@@ -575,7 +583,7 @@
new_module.on_install()
if(wearer)
new_module.on_equip()
if(active)
if(active && new_module.has_required_parts(mod_parts, need_extended = TRUE))
new_module.on_suit_activation()
if(user)
balloon_alert(user, "[new_module] added")
@@ -679,8 +687,6 @@
part.forceMove(src)
return
retract(wearer, part)
if(active)
INVOKE_ASYNC(src, PROC_REF(toggle_activate), wearer, TRUE)
/obj/item/mod/control/proc/on_part_destruction(obj/item/part, damage_flag)
SIGNAL_HANDLER
+64
View File
@@ -62,6 +62,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -203,6 +205,8 @@
SEALED_COVER = HEADCOVERSEYES,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE,
@@ -266,6 +270,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -334,6 +340,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -406,6 +414,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -480,6 +490,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDEBELT,
@@ -512,6 +524,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDEBELT,
@@ -588,6 +602,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE,
SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE,
@@ -660,6 +676,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -693,6 +711,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -773,6 +793,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -845,6 +867,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -912,6 +936,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -979,6 +1005,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1052,6 +1080,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1120,6 +1150,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1195,6 +1227,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1228,6 +1262,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1301,6 +1337,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1376,6 +1414,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDEMUTWINGS,
CAN_OVERSLOT = TRUE,
@@ -1461,6 +1501,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1531,6 +1573,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL|CASTING_CLOTHES,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1600,6 +1644,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1671,6 +1717,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1739,6 +1787,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1806,6 +1856,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1837,6 +1889,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1919,6 +1973,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -1988,6 +2044,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -2052,6 +2110,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -2118,6 +2178,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
@@ -2183,6 +2245,8 @@
SEALED_MESSAGE = HELMET_SEAL_MESSAGE,
),
/obj/item/clothing/suit/mod = list(
UNSEALED_LAYER = MOD_CHESTPLATE_LAYER,
SEALED_LAYER = MOD_CHESTPLATE_LAYER,
UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT,
UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE,
+10
View File
@@ -108,6 +108,16 @@
if(mod.wearer)
balloon_alert(mod.wearer, "not active!")
return
if(!has_required_parts(mod.mod_parts, need_extended = TRUE))
if(mod.wearer)
balloon_alert(mod.wearer, "required parts inactive!")
var/list/slot_strings = list()
for(var/slot in required_slots)
var/list/slot_list = parse_slot_flags(slot)
slot_strings += (length(slot_list) == 1 ? "" : "one of ") + english_list(slot_list, and_text = " or ")
to_chat(mod.wearer, span_warning("[src] requires these slots to be deployed: [english_list(slot_strings)]"))
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return
if(module_type != MODULE_USABLE)
if(active)
deactivate()