From 99ad8cc1a5d30c26f411fd066df154946e162c02 Mon Sep 17 00:00:00 2001 From: Jerry Wester Date: Sun, 11 Dec 2022 15:19:03 -0700 Subject: [PATCH] pai panel, force deactivation, and rad protection --- code/modules/mob/living/silicon/pai/pai.dm | 7 ++++ code/modules/mod/mod_activation.dm | 14 +++++++ code/modules/mod/mod_theme.dm | 42 +++++++++---------- .../mod/modules/modules_engineering.dm | 4 +- 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index d18014f4d6..1a7747ce89 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -200,6 +200,13 @@ /mob/living/silicon/pai/restrained(ignore_grab) . = FALSE +/mob/living/silicon/pai/can_interact_with(atom/target) + if(istype(target, /obj/item/mod/control)) // A poor workaround for enabling MODsuit control + var/obj/item/mod/control/C = target + if(C.ai == src) + return TRUE + return ..() + // See software.dm for Topic() /mob/living/silicon/pai/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index ef897d77ab..886ba0fec4 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -125,6 +125,19 @@ if(ai) to_chat(ai, span_notice("MODsuit [active ? "shutting down" : "starting up"].")) + if(force_deactivate) + seal_part(boots, seal = FALSE) + seal_part(gauntlets, seal = FALSE) + seal_part(chestplate,seal = FALSE) + seal_part(helmet, seal = FALSE) + finish_activation(on = FALSE) + activating = FALSE + to_chat(wearer, span_notice("Systems shut down. Parts unsealed. Goodbye, [wearer].")) + if(ai) + to_chat(ai, span_notice("SYSTEMS DEACTIVATED. GOODBYE: \"[ai]\"")) + playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) + return TRUE + if(do_after(wearer, MOD_ACTIVATION_STEP_TIME, target = wearer, required_mobility_flags = NONE)) to_chat(wearer, span_notice("[boots] [active ? "relax their grip on your legs" : "seal around your feet"].")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) @@ -170,6 +183,7 @@ seal_part(chestplate,seal = active) seal_part(helmet, seal = active) to_chat(wearer, span_warning("[active ? "Shut down" : "Start up"] cancelled.")) + finish_activation(on = active) activating = FALSE return FALSE diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index ed183557b9..679032de3c 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -14,7 +14,7 @@ /// Default skin of the MOD. var/default_skin = "standard" /// Armor shared across the MOD pieces. - var/armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 25, ACID = 25, WOUND = 10) + var/armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 25, ACID = 25, WOUND = 10, RAD = 5) /// Resistance flags shared across the MOD pieces. var/resistance_flags = NONE /// Max heat protection shared across the MOD pieces. @@ -92,7 +92,7 @@ name = "engineering" desc = "An engineer-fit suit with heat and shock resistance. Nakamura Engineering's classic." default_skin = "engineering" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 100, ACID = 25, WOUND = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 100, ACID = 25, WOUND = 10, RAD = 20) resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -128,7 +128,7 @@ name = "atmospheric" desc = "An atmospheric-resistant suit by Nakamura Engineering, offering extreme heat resistance compared to the engineer suit." default_skin = "atmospheric" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 100, ACID = 75, WOUND = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 100, ACID = 75, WOUND = 10, RAD = 15) resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT slowdown_inactive = 1.5 @@ -164,7 +164,7 @@ name = "advanced" desc = "An advanced version of Nakamura Engineering's classic suit, shining with a white, acid and fire resistant polish." default_skin = "advanced" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 90, WOUND = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 90, WOUND = 10, RAD = 35) resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -201,7 +201,7 @@ name = "mining" desc = "A high-power Nanotrasen mining suit, supporting more complexity at a bigger drain." default_skin = "mining" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 75, WOUND = 15) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 75, WOUND = 15, RAD = 15) resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT cell_drain = DEFAULT_CHARGE_DRAIN * 2 @@ -236,7 +236,7 @@ name = "medical" desc = "A lightweight suit by DeForest Medical Corporation, allows for easier movement." default_skin = "medical" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 60, ACID = 75, WOUND = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 60, ACID = 75, WOUND = 10, RAD = 15) cell_drain = DEFAULT_CHARGE_DRAIN * 1.5 slowdown_inactive = 1 slowdown_active = 0.5 @@ -293,7 +293,7 @@ name = "rescue" desc = "An advanced version of DeForest Medical Corporation's medical suit, designed for quick rescue of bodies from the most dangerous environments." default_skin = "rescue" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 100, ACID = 100, WOUND = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 100, ACID = 100, WOUND = 10, RAD = 10) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT cell_drain = DEFAULT_CHARGE_DRAIN * 1.5 @@ -330,7 +330,7 @@ name = "research" desc = "A private military EOD suit by Aussec Armory, intended for explosive research. Bulky, but expansive." default_skin = "research" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 15) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 15, RAD = 10) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT complexity_max = DEFAULT_MAX_COMPLEXITY + 5 @@ -366,7 +366,7 @@ name = "security" desc = "An Apadyne Technologies security suit, offering shock protection and quicker speed, at the cost of carrying capacity." default_skin = "security" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 75, ACID = 75, WOUND = 20) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 75, ACID = 75, WOUND = 20, RAD = 10) siemens_coefficient = 0 complexity_max = DEFAULT_MAX_COMPLEXITY - 5 slowdown_inactive = 1 @@ -402,7 +402,7 @@ name = "safeguard" desc = "An Apadyne Technologies advanced security suit, offering greater speed and fire protection than the standard security model." default_skin = "safeguard" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, FIRE = 100, ACID = 95, WOUND = 25) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, FIRE = 100, ACID = 95, WOUND = 25, RAD = 10) resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -438,7 +438,7 @@ name = "magnate" desc = "A fancy, very protective suit for Nanotrasen's captains. Shock, fire and acid-proof while also having a large capacity and high speed." default_skin = "magnate" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100, WOUND = 20) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100, WOUND = 20, RAD = 25) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -475,7 +475,7 @@ name = "cosmohonk" desc = "A suit by Honk Ltd. Protects against low humor environments. Most of the tech went to lower the power cost." default_skin = "cosmohonk" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 60, ACID = 30, WOUND = 5) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, FIRE = 60, ACID = 30, WOUND = 5, RAD = 0) cell_drain = DEFAULT_CHARGE_DRAIN * 0.25 slowdown_inactive = 1.75 slowdown_active = 1.25 @@ -509,7 +509,7 @@ name = "syndicate" desc = "A suit designed by Gorlex Marauders, offering armor ruled illegal in most of Spinward Stellar." default_skin = "syndicate" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 35, BIO = 100, FIRE = 50, ACID = 90, WOUND = 25) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 35, BIO = 100, FIRE = 50, ACID = 90, WOUND = 25, RAD = 25) max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT siemens_coefficient = 0 slowdown_inactive = 1 @@ -546,7 +546,7 @@ name = "elite" desc = "An elite suit upgraded by Cybersun Industries, offering upgraded armor values." default_skin = "elite" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 55, BIO = 100, FIRE = 100, ACID = 100, WOUND = 25) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 55, BIO = 100, FIRE = 100, ACID = 100, WOUND = 25, RAD = 30) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -584,7 +584,7 @@ name = "enchanted" desc = "The Wizard Federation's relatively low-tech MODsuit. Is very protective, though." default_skin = "enchanted" - armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 100, FIRE = 100, ACID = 100, WOUND = 30) + armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 100, FIRE = 100, ACID = 100, WOUND = 30, RAD = 5) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -622,7 +622,7 @@ name = "prototype" desc = "A prototype modular suit powered by locomotives. While it is comfortable and has a big capacity, it remains very bulky and power-inefficient." default_skin = "prototype" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 75, WOUND = 5) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 100, ACID = 75, WOUND = 5, RAD = 20) resistance_flags = FIRE_PROOF complexity_max = DEFAULT_MAX_COMPLEXITY + 10 slowdown_inactive = 2.5 @@ -658,7 +658,7 @@ name = "responsory" desc = "A high-speed rescue suit by Nanotrasen, intended for its' emergency response teams." default_skin = "responsory" - armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 100, FIRE = 100, ACID = 90, WOUND = 15) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 100, FIRE = 100, ACID = 90, WOUND = 15, RAD = 25) resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -716,7 +716,7 @@ name = "apocryphal" desc = "A high-tech, only technically legal, armored suit created by a collaboration effort between Nanotrasen and Apadyne Technologies." default_skin = "apocryphal" - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 25) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 25, RAD = 25) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -751,7 +751,7 @@ name = "corporate" desc = "A fancy, high-tech suit for Nanotrasen's high ranking officers." default_skin = "corporate" - armor = list(MELEE = 35, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100, WOUND = 15) + armor = list(MELEE = 35, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100, WOUND = 15, RAD = 20) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 @@ -787,7 +787,7 @@ name = "debug" desc = "Strangely nostalgic." default_skin = "debug" - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 0) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 0, RAD = 25) resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT complexity_max = 50 @@ -824,7 +824,7 @@ name = "administrative" desc = "A suit made of adminium. Who comes up with these stupid mineral names?" default_skin = "debug" - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 100) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 100, RAD = 35) resistance_flags = INDESTRUCTIBLE|LAVA_PROOF|FIRE_PROOF|UNACIDABLE|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT complexity_max = 1000 diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index 9bd391bd22..49e8decdad 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -92,12 +92,12 @@ /obj/item/mod/module/rad_protection/on_suit_activation() for(var/obj/item/part in mod.mod_parts) - armor[RAD] = 65 + armor[RAD] += 65 rad_flags = RAD_PROTECT_CONTENTS|RAD_NO_CONTAMINATE /obj/item/mod/module/rad_protection/on_suit_deactivation(deleting = FALSE) for(var/obj/item/part in mod.mod_parts) - armor[RAD] = 0 + armor[RAD] -= 65 rad_flags = NONE ///Constructor - Lets you build quicker and create RCD holograms.