mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
(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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user