diff --git a/code/_onclick/rig.dm b/code/_onclick/rig.dm deleted file mode 100644 index ff55f35cb57..00000000000 --- a/code/_onclick/rig.dm +++ /dev/null @@ -1,84 +0,0 @@ - -#define MIDDLE_CLICK 0 -#define ALT_CLICK 1 -#define CTRL_CLICK 2 -#define MAX_HARDSUIT_CLICK_MODE 2 - -/client - var/hardsuit_click_mode = MIDDLE_CLICK - -/client/verb/toggle_hardsuit_mode() - set name = "Toggle Hardsuit Activation Mode" - set desc = "Switch between hardsuit activation modes." - set category = "OOC" - - hardsuit_click_mode++ - if(hardsuit_click_mode > MAX_HARDSUIT_CLICK_MODE) - hardsuit_click_mode = 0 - - switch(hardsuit_click_mode) - if(MIDDLE_CLICK) - to_chat(src, "Hardsuit activation mode set to middle-click.") - if(ALT_CLICK) - to_chat(src, "Hardsuit activation mode set to alt-click.") - if(CTRL_CLICK) - to_chat(src, "Hardsuit activation mode set to control-click.") - else - // should never get here, but just in case: - log_runtime(EXCEPTION("Bad hardsuit click mode: [hardsuit_click_mode] - expected 0 to [MAX_HARDSUIT_CLICK_MODE]"), src) - to_chat(src, "Somehow you bugged the system. Setting your hardsuit mode to middle-click.") - hardsuit_click_mode = MIDDLE_CLICK - -/mob/living/MiddleClickOn(atom/A) - if(client && client.hardsuit_click_mode == MIDDLE_CLICK) - if(HardsuitClickOn(A)) - return - ..() - -/mob/living/AltClickOn(atom/A) - if(client && client.hardsuit_click_mode == ALT_CLICK) - if(HardsuitClickOn(A)) - return - ..() - -/mob/living/CtrlClickOn(atom/A) - if(client && client.hardsuit_click_mode == CTRL_CLICK) - if(HardsuitClickOn(A)) - return - ..() - -/mob/living/proc/can_use_rig() - return 0 - -/mob/living/carbon/human/can_use_rig() - return 1 - -/mob/living/carbon/brain/can_use_rig() - return istype(loc, /obj/item/mmi) - -/mob/living/silicon/ai/can_use_rig() - return istype(loc, /obj/item/aicard) - -/mob/living/silicon/pai/can_use_rig() - return loc == card - -/mob/living/proc/HardsuitClickOn(var/atom/A, var/alert_ai = 0) - if(!can_use_rig() || (next_move > world.time)) - return 0 - var/obj/item/rig/rig = get_rig() - if(istype(rig) && !rig.offline && rig.selected_module) - if(src != rig.wearer) - if(rig.ai_can_move_suit(src, check_user_module = 1)) - message_admins("[key_name_admin(src)] is trying to force \the [key_name_admin(rig.wearer)] to use a hardsuit module.") - else - return 0 - rig.selected_module.engage(A, alert_ai) - if(ismob(A)) // No instant mob attacking - though modules have their own cooldowns - changeNext_move(CLICK_CD_MELEE) - return 1 - return 0 - -#undef MIDDLE_CLICK -#undef ALT_CLICK -#undef CTRL_CLICK -#undef MAX_HARDSUIT_CLICK_MODE diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index b3695229790..42c134736d7 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -18,13 +18,6 @@ name = "syndicate personal AI device" faction = list("syndicate") -/obj/item/paicard/relaymove(var/mob/user, var/direction) - if(user.stat || user.stunned) - return - var/obj/item/rig/rig = get_rig() - if(istype(rig)) - rig.forced_move(direction, user) - /obj/item/paicard/New() ..() overlays += "pai-off" diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index bc783457e76..edf32e2f5a6 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -219,28 +219,3 @@ turn_off(cur_user) return ..() - -/obj/item/tank/jetpack/rig - name = "jetpack" - var/obj/item/rig/holder - actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) - -/obj/item/tank/jetpack/rig/examine() - . = list("It's a jetpack. If you can see this, report it on the bug tracker.") - -/obj/item/tank/jetpack/rig/allow_thrust(num, mob/living/user) - if(!on) - return 0 - - if(!istype(holder) || !holder.air_supply) - return 0 - - var/datum/gas_mixture/removed = holder.air_supply.air_contents.remove(num) - if(removed.total_moles() < 0.005) - turn_off(user) - return 0 - - var/turf/T = get_turf(user) - T.assume_air(removed) - - return 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm deleted file mode 100644 index 6b9d07a332d..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/grenade_launcher - * /obj/item/rig_module/mounted - * /obj/item/rig_module/mounted/taser - * /obj/item/rig_module/shield - * /obj/item/rig_module/fabricator - * /obj/item/rig_module/device/flash - */ - -/obj/item/rig_module/device/flash - name = "mounted flash" - desc = "You are the law." - icon_state = "flash" - interface_name = "mounted flash" - interface_desc = "Stuns your target by blinding them with a bright light." - device_type = /obj/item/flash - -/obj/item/rig_module/grenade_launcher - - name = "mounted grenade launcher" - desc = "A shoulder-mounted micro-explosive dispenser." - selectable = 1 - icon_state = "grenade" - - interface_name = "integrated grenade launcher" - interface_desc = "Discharges loaded grenades against the wearer's location." - - var/fire_force = 30 - var/fire_distance = 10 - - charges = list( - list("flashbang", "flashbang", /obj/item/grenade/flashbang, 3), - list("smoke bomb", "smoke bomb", /obj/item/grenade/smokebomb, 3), - list("EMP grenade", "EMP grenade", /obj/item/grenade/empgrenade, 3), - ) - -/obj/item/rig_module/grenade_launcher/accepts_item(var/obj/item/input_device, var/mob/living/user) - - if(!istype(input_device) || !istype(user)) - return 0 - - var/datum/rig_charge/accepted_item - for(var/charge in charges) - var/datum/rig_charge/charge_datum = charges[charge] - if(input_device.type == charge_datum.product_type) - accepted_item = charge_datum - break - - if(!accepted_item) - return 0 - - if(accepted_item.charges >= 5) - to_chat(user, "Another grenade of that type will not fit into the module.") - return 0 - - to_chat(user, "You slot \the [input_device] into the suit module.") - user.unEquip(input_device) - qdel(input_device) - accepted_item.charges++ - return 1 - -/obj/item/rig_module/grenade_launcher/engage(atom/target) - - if(!..()) - return 0 - - if(!target) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!charge_selected) - to_chat(H, "You have not selected a grenade type.") - return 0 - - var/datum/rig_charge/charge = charges[charge_selected] - - if(!charge) - return 0 - - if(charge.charges <= 0) - to_chat(H, "Insufficient grenades!") - return 0 - - charge.charges-- - var/obj/item/grenade/new_grenade = new charge.product_type(get_turf(H)) - H.visible_message("[H] launches \a [new_grenade]!") - new_grenade.throw_at(target,fire_force,fire_distance) - new_grenade.prime() - -/obj/item/rig_module/mounted - - name = "mounted laser cannon" - desc = "A shoulder-mounted battery-powered laser cannon mount." - selectable = 1 - usable = 1 - module_cooldown = 0 - icon_state = "lcannon" - - engage_string = "Configure" - - interface_name = "mounted laser cannon" - interface_desc = "A shoulder-mounted cell-powered laser cannon." - - var/gun_type = /obj/item/gun/energy/lasercannon/mounted - var/obj/item/gun/gun - -/obj/item/rig_module/mounted/New() - ..() - gun = new gun_type(src) - -/obj/item/rig_module/mounted/engage(atom/target) - - if(!..()) - return 0 - - if(!target) - gun.attack_self(holder.wearer) - return 1 - - gun.afterattack(target,holder.wearer) - return 1 - -/obj/item/rig_module/mounted/egun - - name = "mounted energy gun" - desc = "A forearm-mounted energy projector." - icon_state = "egun" - - interface_name = "mounted energy gun" - interface_desc = "A forearm-mounted suit-powered energy gun." - - gun_type = /obj/item/gun/energy/gun/mounted - -/obj/item/rig_module/mounted/taser - - name = "mounted taser" - desc = "A palm-mounted nonlethal energy projector." - icon_state = "taser" - - usable = 0 - - suit_overlay_active = "mounted-taser" - suit_overlay_inactive = "mounted-taser" - - interface_name = "mounted energy gun" - interface_desc = "A shoulder-mounted cell-powered energy gun." - - gun_type = /obj/item/gun/energy/taser/mounted - -/obj/item/rig_module/mounted/energy_blade - - name = "energy blade projector" - desc = "A powerful cutting beam projector." - icon_state = "eblade" - - activate_string = "Project Blade" - deactivate_string = "Cancel Blade" - - interface_name = "spider fang blade" - interface_desc = "A lethal energy projector that can shape a blade projected from the hand of the wearer or launch radioactive darts." - - usable = 0 - selectable = 1 - toggleable = 1 - use_power_cost = 50 - active_power_cost = 10 - passive_power_cost = 0 - - gun_type = /obj/item/gun/energy/kinetic_accelerator/crossbow/ninja - -/obj/item/rig_module/mounted/energy_blade/process() - - if(holder && holder.wearer) - if(!(locate(/obj/item/melee/energy/blade) in holder.wearer)) - deactivate() - return 0 - - return ..() - -/obj/item/rig_module/mounted/energy_blade/activate() - - ..() - - var/mob/living/M = holder.wearer - - if(M.l_hand && M.r_hand) - to_chat(M, "Your hands are full.") - deactivate() - return - - var/obj/item/melee/energy/blade/blade = new(M) - M.put_in_hands(blade) - -/obj/item/rig_module/mounted/energy_blade/deactivate() - - ..() - - var/mob/living/M = holder.wearer - - if(!M) - return - - for(var/obj/item/melee/energy/blade/blade in M.contents) - M.unEquip(blade) - qdel(blade) - -/obj/item/rig_module/fabricator - - name = "matter fabricator" - desc = "A self-contained microfactory system for hardsuit integration." - selectable = 1 - usable = 1 - use_power_cost = 15 - icon_state = "enet" - - engage_string = "Fabricate Tile" - - interface_name = "death blossom launcher" - interface_desc = "An integrated microfactory that produces floor tiles from thin air and electricity." - - var/fabrication_type = /obj/item/stack/tile/plasteel - var/fire_force = 30 - var/fire_distance = 10 - -/obj/item/rig_module/fabricator/engage(atom/target) - - if(!..()) - return 0 - - var/mob/living/H = holder.wearer - - if(target) - var/obj/item/firing = new fabrication_type() - firing.forceMove(get_turf(src)) - H.visible_message("[H] launches \a [firing]!") - firing.throw_at(target,fire_force,fire_distance) - else - if(H.l_hand && H.r_hand) - to_chat(H, "Your hands are full.") - else - var/obj/item/new_weapon = new fabrication_type() - new_weapon.forceMove(H) - to_chat(H, "You quickly fabricate \a [new_weapon].") - H.put_in_hands(new_weapon) - - return 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm deleted file mode 100644 index 749e12e8053..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ /dev/null @@ -1,496 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/ai_container - * /obj/item/rig_module/datajack - * /obj/item/rig_module/power_sink - * /obj/item/rig_module/electrowarfare_suite - */ - -/obj/item/ai_verbs - name = "AI verb holder" - -/obj/item/ai_verbs/verb/hardsuit_interface() - set category = "Hardsuit" - set name = "Open Hardsuit Interface" - set src in usr - - if(!usr.loc || !usr.loc.loc || !istype(usr.loc.loc, /obj/item/rig_module)) - to_chat(usr, "You are not loaded into a hardsuit.") - return - - var/obj/item/rig_module/module = usr.loc.loc - if(!module.holder) - to_chat(usr, "Your module is not installed in a hardsuit.") - return - - module.holder.ui_interact(usr, state = GLOB.contained_state) - -/obj/item/rig_module/ai_container - - name = "IIS module" - desc = "An integrated intelligence system module suitable for most hardsuits." - icon_state = "IIS" - toggleable = 1 - usable = 1 - disruptive = 0 - activates_on_touch = 1 - - engage_string = "Eject AI" - activate_string = "Enable Dataspike" - deactivate_string = "Disable Dataspike" - - interface_name = "integrated intelligence system" - interface_desc = "A socket that supports a range of artificial intelligence systems." - - var/mob/integrated_ai // Direct reference to the actual mob held in the suit. - var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI. - var/obj/item/ai_verbs/verb_holder - -/mob - var/get_rig_stats = 0 - -/obj/item/rig_module/ai_container/process() - if(integrated_ai) - var/obj/item/rig/rig = get_rig() - if(rig && rig.ai_override_enabled) - integrated_ai.get_rig_stats = 1 - else - integrated_ai.get_rig_stats = 0 - -/obj/item/rig_module/ai_container/proc/update_verb_holder() - if(!verb_holder) - verb_holder = new(src) - if(integrated_ai) - verb_holder.forceMove(integrated_ai) - else - verb_holder.forceMove(src) - -/obj/item/rig_module/ai_container/accepts_item(var/obj/item/input_device, var/mob/living/user) - - // Check if there's actually an AI to deal with. - var/mob/living/silicon/ai/target_ai - if(istype(input_device, /mob/living/silicon/ai)) - target_ai = input_device - else - target_ai = locate(/mob/living/silicon/ai) in input_device.contents - - var/obj/item/aicard/card = ai_card - - // Downloading from/loading to a terminal. - if(istype(input_device,/obj/machinery/computer/aifixer) || istype(input_device,/mob/living/silicon/ai) || istype(input_device,/obj/structure/AIcore/deactivated)) - - // If we're stealing an AI, make sure we have a card for it. - if(!card) - card = new /obj/item/aicard(src) - - // Terminal interaction only works with an intellicarded AI. - if(!istype(card)) - return 0 - - // Since we've explicitly checked for three types, this should be safe. - card.afterattack(input_device, user, 1) - - // If the transfer failed we can delete the card. - if(locate(/mob/living/silicon/ai) in card) - ai_card = card - integrated_ai = locate(/mob/living/silicon/ai) in card - else - eject_ai() - update_verb_holder() - return 1 - - if(istype(input_device,/obj/item/aicard)) - // We are carding the AI in our suit. - if(integrated_ai) - var/obj/item/aicard/ext_card = input_device - ext_card.afterattack(integrated_ai, user, 1) - // If the transfer was successful, we can clear out our vars. - if(integrated_ai.loc != src) - integrated_ai = null - eject_ai() - else - // You're using an empty card on an empty suit, idiot. - if(!target_ai) - return 0 - integrate_ai(input_device,user) - return 1 - - // Okay, it wasn't a terminal being touched, check for all the simple insertions. - if(input_device.type in list(/obj/item/paicard, /obj/item/mmi, /obj/item/mmi/robotic_brain)) - if(integrated_ai) - integrated_ai.attackby(input_device,user) - // If the transfer was successful, we can clear out our vars. - if(integrated_ai.loc != src) - integrated_ai = null - eject_ai() - else - integrate_ai(input_device,user) - return 1 - - return 0 - -/obj/item/rig_module/ai_container/engage(atom/target) - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!target) - if(ai_card) - if(istype(ai_card,/obj/item/aicard)) - ai_card.ui_interact(H, state = GLOB.deep_inventory_state) - else - eject_ai(H) - update_verb_holder() - return 1 - - if(accepts_item(target,H)) - return 1 - - return 0 - -/obj/item/rig_module/ai_container/removed() - eject_ai() - ..() - -/obj/item/rig_module/ai_container/proc/eject_ai(var/mob/user) - - if(ai_card) - if(istype(ai_card, /obj/item/aicard)) - if(integrated_ai && !integrated_ai.stat) - if(user) - to_chat(user, "You cannot eject your currently stored AI. Purge it manually.") - return 0 - to_chat(user, "You purge the remaining scraps of data from your previous AI, freeing it for use.") - QDEL_NULL(integrated_ai) - QDEL_NULL(ai_card) - else if(user) - user.put_in_hands(ai_card) - else - ai_card.forceMove(get_turf(src)) - ai_card = null - integrated_ai = null - update_verb_holder() - - - -/obj/item/rig_module/ai_container/proc/integrate_ai(var/obj/item/ai,var/mob/user) - if(!ai) return - - // The ONLY THING all the different AI systems have in common is that they all store the mob inside an item. - var/mob/living/ai_mob = locate(/mob/living) in ai.contents - if(ai_mob) - if(ai_mob.key && ai_mob.client) - if(istype(ai, /obj/item/aicard)) - var/mob/living/silicon/ai/ROBUTT = ai_mob - if(istype(ROBUTT)) - if(!ai_card) - ai_card = new /obj/item/aicard(src) - - var/obj/item/aicard/source_card = ai - var/obj/item/aicard/target_card = ai_card - if(istype(source_card) && istype(target_card)) - ROBUTT.forceMove(target_card) - ROBUTT.aiRestorePowerRoutine = 0//So the AI initially has power. - ROBUTT.control_disabled = 1//Can't control things remotely if you're stuck in a card! - ROBUTT.aiRadio.disabledAi = 1 //No talking on the built-in radio for you either! - source_card.update_state() - target_card.update_state() - else - return 0 - - else - user.unEquip(ai) - ai.forceMove(src) - ai_card = ai - to_chat(ai_mob, "You have been transferred to \the [holder]'s [src].") - to_chat(user, "You load [ai_mob] into \the [holder]'s [src].") - - integrated_ai = ai_mob - - if(!(locate(integrated_ai) in ai_card)) - integrated_ai = null - eject_ai() - else - to_chat(user, "There is no active AI within \the [ai].") - else - to_chat(user, "There is no active AI within \the [ai].") - update_verb_holder() - -/obj/item/rig_module/datajack - - name = "datajack module" - desc = "A simple induction datalink module." - icon_state = "datajack" - toggleable = 1 - activates_on_touch = 1 - usable = 0 - - activate_string = "Enable Datajack" - deactivate_string = "Disable Datajack" - - interface_name = "contact datajack" - interface_desc = "An induction-powered high-throughput datalink suitable for hacking encrypted networks." - var/list/stored_research - -/obj/item/rig_module/datajack/New() - ..() - stored_research = list() - -/obj/item/rig_module/datajack/engage(atom/target) - - if(!..()) - return 0 - - if(target) - var/mob/living/carbon/human/H = holder.wearer - if(!accepts_item(target,H)) - return 0 - return 1 - -/obj/item/rig_module/datajack/accepts_item(var/obj/item/input_device, var/mob/living/user) - - if(istype(input_device,/obj/item/disk/tech_disk)) - to_chat(user, "You slot the disk into [src].") - var/obj/item/disk/tech_disk/disk = input_device - if(disk.stored) - if(load_data(disk.stored)) - to_chat(user, "Download successful; disk erased.") - disk.stored = null - else - to_chat(user, "The disk is corrupt. It is useless to you.") - else - to_chat(user, "The disk is blank. It is useless to you.") - return 1 - - // I fucking hate R&D code. This typecheck spam would be totally unnecessary in a sane setup. - else if(istype(input_device,/obj/machinery)) - var/datum/research/incoming_files - if(istype(input_device,/obj/machinery/computer/rdconsole)) - var/obj/machinery/computer/rdconsole/input_machine = input_device - incoming_files = input_machine.files - else if(istype(input_device,/obj/machinery/r_n_d/server)) - var/obj/machinery/r_n_d/server/input_machine = input_device - incoming_files = input_machine.files - else if(istype(input_device,/obj/machinery/mecha_part_fabricator)) - var/obj/machinery/mecha_part_fabricator/input_machine = input_device - incoming_files = input_machine.files - - if(!incoming_files || !incoming_files.known_tech || !incoming_files.known_tech.len) - to_chat(user, "Memory failure. There is nothing accessible stored on this terminal.") - else - // Maybe consider a way to drop all your data into a target repo in the future. - if(load_data(incoming_files.known_tech)) - to_chat(user, "Download successful; local and remote repositories synchronized.") - else - to_chat(user, "Scan complete. There is nothing useful stored on this terminal.") - return 1 - return 0 - -/obj/item/rig_module/datajack/proc/load_data(var/incoming_data) - - if(islist(incoming_data)) - for(var/entry in incoming_data) - load_data(entry) - return 1 - - if(istype(incoming_data, /datum/tech)) - var/data_found - var/datum/tech/new_data = incoming_data - for(var/datum/tech/current_data in stored_research) - if(current_data.id == new_data.id) - data_found = 1 - if(current_data.level < new_data.level) - current_data.level = new_data.level - break - if(!data_found) - stored_research += incoming_data - return 1 - return 0 - -/obj/item/rig_module/electrowarfare_suite - - name = "electrowarfare module" - desc = "A bewilderingly complex bundle of fiber optics and chips." - icon_state = "ewar" - toggleable = 1 - usable = 0 - - activate_string = "Enable Countermeasures" - deactivate_string = "Disable Countermeasures" - - interface_name = "electrowarfare system" - interface_desc = "An active counter-electronic warfare suite that disrupts AI tracking." - -/obj/item/rig_module/electrowarfare_suite/activate() - - if(!..()) - return - - // This is not the best way to handle this, but I don't want it to mess with ling camo - var/mob/living/M = holder.wearer - M.digitalcamo++ - -/obj/item/rig_module/electrowarfare_suite/deactivate() - - if(!..()) - return - - var/mob/living/M = holder.wearer - M.digitalcamo = max(0,(M.digitalcamo-1)) - -/* //Not easily compatible with our current powernet, and is -/obj/item/rig_module/power_sink // quite stupid anyways, iyam - - name = "hardsuit power sink" - desc = "An heavy-duty power sink." - icon_state = "powersink" - toggleable = 1 - activates_on_touch = 1 - disruptive = 0 - - activate_string = "Enable Power Sink" - deactivate_string = "Disable Power Sink" - - interface_name = "niling d-sink" - interface_desc = "Colloquially known as a power siphon, this module drains power through the suit hands into the suit battery." - - var/atom/interfaced_with // Currently draining power from this device. - var/total_power_drained = 0 - var/drain_loc - -/obj/item/rig_module/power_sink/deactivate() - - if(interfaced_with) - if(holder && holder.wearer) - to_chat(holder.wearer, "Your power sink retracts as the module deactivates.") - drain_complete() - interfaced_with = null - total_power_drained = 0 - return ..() - -/obj/item/rig_module/power_sink/activate() - interfaced_with = null - total_power_drained = 0 - return ..() - -/obj/item/rig_module/power_sink/engage(atom/target) - - if(!..()) - return 0 - - //Target wasn't supplied or we're already draining. - if(interfaced_with) - return 0 - - if(!target) - return 1 - - // Are we close enough? - var/mob/living/carbon/human/H = holder.wearer - if(!target.Adjacent(H)) - return 0 - - // Is it a valid power source? - if(target.drain_power(1) <= 0) - return 0 - - to_chat(H, "You begin draining power from [target]!") - interfaced_with = target - drain_loc = interfaced_with.loc - - holder.spark_system.start() - playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1) - - return 1 - -/obj/item/rig_module/power_sink/accepts_item(var/obj/item/input_device, var/mob/living/user) - var/can_drain = input_device.drain_power(1) - if(can_drain > 0) - engage(input_device) - return 1 - return 0 - -/obj/item/rig_module/power_sink/process() - - if(!interfaced_with) - return ..() - - var/mob/living/carbon/human/H - if(holder && holder.wearer) - H = holder.wearer - - if(!H || !istype(H)) - return 0 - - holder.spark_system.start() - playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1) - - if(!holder.cell) - to_chat(H, "Your power sink flashes an error; there is no cell in your rig.") - drain_complete(H) - return - - if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc)) - to_chat(H, "Your power sink retracts into its casing.") - drain_complete(H) - return - - if(holder.cell.fully_charged()) - to_chat(H, "Your power sink flashes an amber light; your rig cell is full.") - drain_complete(H) - return - - // Attempts to drain up to 40kW, determines this value from remaining cell capacity to ensure we don't drain too much.. - var/to_drain = min(40000, ((holder.cell.maxcharge - holder.cell.charge) / CELLRATE)) - var/target_drained = interfaced_with.drain_power(0,0,to_drain) - if(target_drained <= 0) - to_chat(H, "Your power sink flashes a red light; there is no power left in [interfaced_with].") - drain_complete(H) - return - - holder.cell.give(target_drained * CELLRATE) - total_power_drained += target_drained - - return 1 - -/obj/item/rig_module/power_sink/proc/drain_complete(var/mob/living/M) - - if(!interfaced_with) - to_chat(if(M) M, "Total power drained: [round(total_power_drained/1000)]kJ.") - else - to_chat(if(M) M, "Total power drained from [interfaced_with]: [round(total_power_drained/1000)]kJ.") - interfaced_with.drain_power(0,1,0) // Damage the victim. - - drain_loc = null - interfaced_with = null - total_power_drained = 0*/ - -/* -//Maybe make this use power when active or something -/obj/item/rig_module/emp_shielding - name = "\improper EMP dissipation module" - desc = "A bewilderingly complex bundle of fiber optics and chips." - toggleable = 1 - usable = 0 - - activate_string = "Enable active EMP shielding" - deactivate_string = "Disable active EMP shielding" - - interface_name = "active EMP shielding system" - interface_desc = "A highly experimental system that augments the hardsuit's existing EM shielding." - var/protection_amount = 20 - -/obj/item/rig_module/emp_shielding/activate() - if(!..()) - return - - holder.emp_protection += protection_amount - -/obj/item/rig_module/emp_shielding/deactivate() - if(!..()) - return - - holder.emp_protection = max(0,(holder.emp_protection - protection_amount)) -*/ diff --git a/code/modules/clothing/spacesuits/rig/modules/handheld.dm b/code/modules/clothing/spacesuits/rig/modules/handheld.dm deleted file mode 100644 index 31f9400afc2..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/handheld.dm +++ /dev/null @@ -1,50 +0,0 @@ - -/obj/item/rig_module/handheld - name = "mounted device" - desc = "Some kind of hardsuit extension." - usable = 0 - selectable = 0 - toggleable = 1 - disruptive = 0 - activate_string = "Deploy" - deactivate_string = "Retract" - - var/device_type - var/obj/item - -/obj/item/rig_module/handheld/activate() - if(!..()) - return - - if(!holder.wearer.put_in_hands(device)) - to_chat(holder.wearer, "You need a free hand to hold \the [device].") - active = 0 - return - - to_chat(holder.wearer, "You deploy \the [device].") - - -/obj/item/rig_module/handheld/deactivate() - if(!..()) - return - if(ismob(device.loc)) //Better check for the holder, instead of assuming the rigwearer has it. - var/mob/M = device.loc //Helps in case the code fails to keep the module in one place, this should still return it. - M.unEquip(device, 1) - - device.loc = src - to_chat(holder.wearer, "You retract \the [device].") - -/obj/item/rig_module/handheld/New() - ..() - if(device_type) - device = new device_type(src) - device.flags |= NODROP //We don't want to drop it while it's active/inhand. - activate_string += " [device]" - deactivate_string += " [device]" - -/obj/item/rig_module/handheld/horn - name = "mounted bikehorn" - desc = "For tactical honking" - interface_name = "mounted bikehorn" - interface_desc = "Honks" - device_type = /obj/item/bikehorn diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm deleted file mode 100644 index 53330341bfe..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Rigsuit upgrades/abilities. - */ - -/datum/rig_charge - var/short_name = "undef" - var/display_name = "undefined" - var/product_type = "undefined" - var/charges = 0 - -/obj/item/rig_module - name = "hardsuit upgrade" - desc = "It looks pretty sciency." - icon = 'icons/obj/rig_modules.dmi' - icon_state = "module" - - toolspeed = 1 - - var/damage = 0 - var/obj/item/rig/holder - - var/module_cooldown = 10 - var/next_use = 0 - - var/toggleable // Set to 1 for the device to show up as an active effect. - var/usable // Set to 1 for the device to have an on-use effect. - var/selectable // Set to 1 to be able to assign the device as primary system. - var/redundant // Set to 1 to ignore duplicate module checking when installing. - var/permanent // If set, the module can't be removed. - var/disruptive = 1 // Can disrupt by other effects. - var/activates_on_touch // If set, unarmed attacks will call engage() on the target. - - var/active // Basic module status - var/disruptable // Will deactivate if some other powers are used. - - var/use_power_cost = 0 // Power used when single-use ability called. - var/active_power_cost = 0 // Power used when turned on. - var/passive_power_cost = 0 // Power used when turned off. - - var/list/charges // Associative list of charge types and remaining numbers. - var/charge_selected // Currently selected option used for charge dispensing. - - // Icons. - var/suit_overlay - var/suit_overlay_active // If set, drawn over icon and mob when effect is active. - var/suit_overlay_inactive // As above, inactive. - var/suit_overlay_used // As above, when engaged. - - //Display fluff - var/interface_name = "hardsuit upgrade" - var/interface_desc = "A generic hardsuit upgrade." - var/engage_string = "Engage" - var/activate_string = "Activate" - var/deactivate_string = "Deactivate" - - var/list/stat_rig_module/stat_modules = new() - -/obj/item/rig_module/examine(mob/user) - . = ..() - switch(damage) - if(0) - . += "It is undamaged." - if(1) - . += "It is badly damaged." - if(2) - . += "It is almost completely destroyed." - -/obj/item/rig_module/attackby(obj/item/W as obj, mob/user as mob) - - if(istype(W,/obj/item/stack/nanopaste)) - - if(damage == 0) - to_chat(user, "There is no damage to mend.") - return - - to_chat(user, "You start mending the damaged portions of \the [src]...") - - if(!do_after(user, 30 * W.toolspeed, target = src) || !W || !src) - return - - var/obj/item/stack/nanopaste/paste = W - damage = 0 - to_chat(user, "You mend the damage to [src] with [W].") - paste.use(1) - return - - else if(istype(W,/obj/item/stack/cable_coil)) - - switch(damage) - if(0) - to_chat(user, "There is no damage to mend.") - return - if(2) - to_chat(user, "There is no damage that you are capable of mending with such crude tools.") - return - - var/obj/item/stack/cable_coil/cable = W - if(!cable.amount >= 5) - to_chat(user, "You need five units of cable to repair \the [src].") - return - - to_chat(user, "You start mending the damaged portions of \the [src]...") - if(!do_after(user, 30 * W.toolspeed, target = src) || !W || !src) - return - - damage = 1 - to_chat(user, "You mend some of damage to [src] with [W], but you will need more advanced tools to fix it completely.") - cable.use(5) - return - ..() - -/obj/item/rig_module/New() - ..() - if(suit_overlay_inactive) - suit_overlay = suit_overlay_inactive - - if(charges && charges.len) - var/list/processed_charges = list() - for(var/list/charge in charges) - var/datum/rig_charge/charge_dat = new - - charge_dat.short_name = charge[1] - charge_dat.display_name = charge[2] - charge_dat.product_type = charge[3] - charge_dat.charges = charge[4] - - if(!charge_selected) charge_selected = charge_dat.short_name - processed_charges[charge_dat.short_name] = charge_dat - - charges = processed_charges - - stat_modules += new/stat_rig_module/activate(src) - stat_modules += new/stat_rig_module/deactivate(src) - stat_modules += new/stat_rig_module/engage(src) - stat_modules += new/stat_rig_module/select(src) - stat_modules += new/stat_rig_module/charge(src) - -// Called when the module is installed into a suit. -/obj/item/rig_module/proc/installed(var/obj/item/rig/new_holder) - holder = new_holder - return - -//Proc for one-use abilities like teleport. -/obj/item/rig_module/proc/engage() - - if(damage >= 2) - to_chat(usr, "The [interface_name] is damaged beyond use!") - return 0 - - if(world.time < next_use) - to_chat(usr, "You cannot use the [interface_name] again so soon.") - return 0 - - if(!holder || (!(holder.flags & NODROP))) - to_chat(usr, "The suit is not initialized.") - return 0 - - if(usr.lying || usr.stat || usr.stunned || usr.paralysis || usr.IsWeakened()) - to_chat(usr, "You cannot use the suit in this state.") - return 0 - - if(holder.wearer && holder.wearer.lying) - to_chat(usr, "The suit cannot function while the wearer is prone.") - return 0 - - if(holder.security_check_enabled && !holder.check_suit_access(usr)) - to_chat(usr, "Access denied.") - return 0 - - if(!holder.check_power_cost(usr, use_power_cost, 0, src, (istype(usr,/mob/living/silicon ? 1 : 0) ) ) ) - return 0 - - next_use = world.time + module_cooldown - - return 1 - -// Proc for toggling on active abilities. -/obj/item/rig_module/proc/activate() - - if(active || !engage()) - return 0 - - active = 1 - - spawn(1) - if(suit_overlay_active) - suit_overlay = suit_overlay_active - else - suit_overlay = null - holder.update_icon() - - return 1 - -// Proc for toggling off active abilities. -/obj/item/rig_module/proc/deactivate() - - if(!active) - return 0 - - active = 0 - - spawn(1) - if(suit_overlay_inactive) - suit_overlay = suit_overlay_inactive - else - suit_overlay = null - if(holder) - holder.update_icon() - - return 1 - -// Called when the module is uninstalled from a suit. -/obj/item/rig_module/proc/removed() - deactivate() - holder = null - return - -// Called by the hardsuit each rig process tick. -/obj/item/rig_module/process() - if(active) - return active_power_cost - else - return passive_power_cost - -// Called by holder rigsuit attackby() -// Checks if an item is usable with this module and handles it if it is -/obj/item/rig_module/proc/accepts_item(var/obj/item/input_device) - return 0 - -/mob/proc/SetupStat(var/obj/item/rig/R) - if(R && (R.flags & NODROP) && R.installed_modules.len && statpanel("Hardsuit Modules")) - var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR" - stat("Suit charge", cell_status) - for(var/obj/item/rig_module/module in R.installed_modules) - { - for(var/stat_rig_module/SRM in module.stat_modules) - if(SRM.CanUse()) - stat(SRM.module.interface_name,SRM) - } - -/stat_rig_module - parent_type = /atom/movable - var/module_mode = "" - var/obj/item/rig_module/module - -/stat_rig_module/New(var/obj/item/rig_module/module) - ..() - src.module = module - -/stat_rig_module/proc/AddHref(var/list/href_list) - return - -/stat_rig_module/proc/CanUse() - return 0 - -/stat_rig_module/Click() - if(CanUse()) - var/list/href_list = list( - "interact_module" = module.holder.installed_modules.Find(module), - "module_mode" = module_mode - ) - AddHref(href_list) - module.holder.Topic(usr, href_list) - -/stat_rig_module/DblClick() - return Click() - -/stat_rig_module/activate/New(var/obj/item/rig_module/module) - ..() - name = module.activate_string - if(module.active_power_cost) - name += " ([module.active_power_cost*10]A)" - module_mode = "activate" - -/stat_rig_module/activate/CanUse() - return module.toggleable && !module.active - -/stat_rig_module/deactivate/New(var/obj/item/rig_module/module) - ..() - name = module.deactivate_string - // Show cost despite being 0, if it means changing from an active cost. - if(module.active_power_cost || module.passive_power_cost) - name += " ([module.passive_power_cost*10]P)" - - module_mode = "deactivate" - -/stat_rig_module/deactivate/CanUse() - return module.toggleable && module.active - -/stat_rig_module/engage/New(var/obj/item/rig_module/module) - ..() - name = module.engage_string - if(module.use_power_cost) - name += " ([module.use_power_cost*10]E)" - module_mode = "engage" - -/stat_rig_module/engage/CanUse() - return module.usable - -/stat_rig_module/select/New() - ..() - name = "Select" - module_mode = "select" - -/stat_rig_module/select/CanUse() - if(module.selectable) - name = module.holder.selected_module == module ? "Selected" : "Select" - return 1 - return 0 - -/stat_rig_module/charge/New() - ..() - name = "Change Charge" - module_mode = "select_charge_type" - -/stat_rig_module/charge/AddHref(var/list/href_list) - var/charge_index = module.charges.Find(module.charge_selected) - if(!charge_index) - charge_index = 0 - else - charge_index = charge_index == module.charges.len ? 1 : charge_index+1 - - href_list["charge_type"] = module.charges[charge_index] - -/stat_rig_module/charge/CanUse() - if(module.charges && module.charges.len) - var/datum/rig_charge/charge = module.charges[module.charge_selected] - name = "[charge.display_name] ([charge.charges]C) - Change" - return 1 - return 0 diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm deleted file mode 100644 index 6e4b588ac24..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/stealth_field - * /obj/item/rig_module/teleporter - * /obj/item/rig_module/fabricator/energy_net - * /obj/item/rig_module/self_destruct - */ - -/obj/item/rig_module/stealth_field - - name = "active camouflage module" - desc = "A robust hardsuit-integrated stealth module." - icon_state = "cloak" - - toggleable = 1 - disruptable = 1 - disruptive = 0 - - use_power_cost = 50 - active_power_cost = 10 - passive_power_cost = 0 - module_cooldown = 30 - - activate_string = "Enable Cloak" - deactivate_string = "Disable Cloak" - - interface_name = "integrated stealth system" - interface_desc = "An integrated active camouflage system." - - suit_overlay_active = "stealth_active" - suit_overlay_inactive = "stealth_inactive" - -/obj/item/rig_module/stealth_field/activate() - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - to_chat(H, "You are now invisible to normal detection.") - H.invisibility = INVISIBILITY_LEVEL_TWO - - H.visible_message("[H.name] vanishes into thin air!",1) - -/obj/item/rig_module/stealth_field/deactivate() - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - to_chat(H, "You are now visible.") - H.invisibility = 0 - - new /obj/effect/temp_visual/dir_setting/ninja(get_turf(H), H.dir) - - for(var/mob/O in oviewers(H)) - O.show_message("[H.name] appears from thin air!",1) - playsound(get_turf(H), 'sound/effects/stealthoff.ogg', 75, 1) - - -/obj/item/rig_module/teleporter - - name = "teleportation module" - desc = "A complex, sleek-looking, hardsuit-integrated teleportation module." - icon_state = "teleporter" - use_power_cost = 40 - redundant = 1 - usable = 1 - selectable = 1 - - engage_string = "Emergency Leap" - - interface_name = "VOID-shift phase projector" - interface_desc = "An advanced teleportation system. It is capable of pinpoint precision or random leaps forward." - -/obj/item/rig_module/teleporter/proc/phase_in(var/mob/M,var/turf/T) - - if(!M || !T) - return - - holder.spark_system.start() - playsound(T, 'sound/effects/phasein.ogg', 25, 1) - playsound(T, 'sound/effects/sparks2.ogg', 50, 1) - new /obj/effect/temp_visual/dir_setting/ninja/phase(T, M.dir) - -/obj/item/rig_module/teleporter/proc/phase_out(var/mob/M,var/turf/T) - - if(!M || !T) - return - - playsound(T, "sparks", 50, 1) - new /obj/effect/temp_visual/dir_setting/ninja/phase/out(T, M.dir) - -/obj/item/rig_module/teleporter/engage(var/atom/target, var/notify_ai) - - if(!..()) return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!istype(H.loc, /turf)) - to_chat(H, "You cannot teleport out of your current location.") - return 0 - - var/turf/T - if(target) - T = get_turf(target) - else - T = get_teleport_loc(get_turf(H), H, rand(5, 9)) - - /*if(!T || T.density) - to_chat(H, "You cannot teleport into solid walls.") - return 0*///Who the fuck cares? Ninjas in walls are cool. - - if(!is_teleport_allowed(T.z)) - to_chat(H, "You cannot use your teleporter on this Z-level.") - return 0 - - phase_out(H,get_turf(H)) - H.forceMove(T) - phase_in(H,get_turf(H)) - - for(var/obj/item/grab/G in H.contents) - if(G.affecting) - phase_out(G.affecting,get_turf(G.affecting)) - G.affecting.forceMove(locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)) - phase_in(G.affecting,get_turf(G.affecting)) - - return 1 - -/* -/obj/item/rig_module/fabricator/energy_net - - name = "net projector" - desc = "Some kind of complex energy projector with a hardsuit mount." - icon_state = "enet" - - interface_name = "energy net launcher" - interface_desc = "An advanced energy-patterning projector used to capture targets." - - engage_string = "Fabricate Net" - - fabrication_type = /obj/item/energy_net - use_power_cost = 70 - -/obj/item/rig_module/fabricator/energy_net/engage(atom/target) - - if(holder && holder.wearer) - if(..(target) && target) - holder.wearer.Beam(target,"n_beam",,10) - return 1 - return 0*/ - -/obj/item/rig_module/self_destruct - - name = "self-destruct module" - desc = "Oh my God, Captain. A bomb." - icon_state = "deadman" - usable = 1 - active = 1 - permanent = 1 - - engage_string = "Detonate" - - interface_name = "dead man's switch" - interface_desc = "An integrated self-destruct module. When the wearer dies, so does the surrounding area. Do not press this button." - -/obj/item/rig_module/self_destruct/activate() - return - -/obj/item/rig_module/self_destruct/deactivate() - return - -/obj/item/rig_module/self_destruct/process() - - // Not being worn, leave it alone. - if(!holder || !holder.wearer || !holder.wearer.wear_suit == holder) - return 0 - - //OH SHIT. - if(holder.wearer.stat == 2) - engage() - -/obj/item/rig_module/self_destruct/engage() - explosion(get_turf(src), 1, 2, 4, 5) - if(holder && holder.wearer) - holder.wearer.unEquip(src) - qdel(holder) - qdel(src) - -/obj/item/rig_module/self_destruct/small/engage() - explosion(get_turf(src), 0, 0, 3, 4) - if(holder && holder.wearer) - holder.wearer.unEquip(src) - qdel(holder) - qdel(src) diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm deleted file mode 100644 index 4b19d2a7753..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ /dev/null @@ -1,476 +0,0 @@ -/* Contains: - * /obj/item/rig_module/device - * /obj/item/rig_module/device/plasmacutter - * /obj/item/rig_module/device/healthscanner - * /obj/item/rig_module/device/drill - * /obj/item/rig_module/device/orescanner - * /obj/item/rig_module/device/rcd - * /obj/item/rig_module/device/anomaly_scanner - * /obj/item/rig_module/maneuvering_jets - * /obj/item/rig_module/foam_sprayer - * /obj/item/rig_module/device/broadcaster - * /obj/item/rig_module/chem_dispenser - * /obj/item/rig_module/chem_dispenser/injector - * /obj/item/rig_module/voice - * /obj/item/rig_module/device/paperdispenser - * /obj/item/rig_module/device/pen - * /obj/item/rig_module/device/stamp - */ - -/obj/item/rig_module/device - name = "mounted device" - desc = "Some kind of hardsuit mount." - usable = 0 - selectable = 1 - toggleable = 0 - disruptive = 0 - - var/device_type - var/obj/item/device - -/obj/item/rig_module/device/plasmacutter - name = "hardsuit plasma cutter" - desc = "A lethal-looking industrial cutter." - icon_state = "plasmacutter" - interface_name = "plasma cutter" - interface_desc = "A self-sustaining plasma arc capable of cutting through walls." - suit_overlay_active = "plasmacutter" - suit_overlay_inactive = "plasmacutter" - - device_type = /obj/item/gun/energy/plasmacutter - -/obj/item/rig_module/device/healthscanner - name = "health scanner module" - desc = "A hardsuit-mounted health scanner." - icon_state = "scanner" - interface_name = "health scanner" - interface_desc = "Shows an informative health readout when used on a subject." - - device_type = /obj/item/healthanalyzer - -/obj/item/rig_module/device/drill - name = "hardsuit drill mount" - desc = "A very heavy diamond-tipped drill." - icon_state = "drill" - interface_name = "mounted drill" - interface_desc = "A diamond-tipped industrial drill." - suit_overlay_active = "mounted-drill" - suit_overlay_inactive = "mounted-drill" - device_type = /obj/item/pickaxe/drill/diamonddrill - -/obj/item/rig_module/device/orescanner - name = "ore scanner module" - desc = "A clunky old ore scanner." - icon_state = "scanner" - interface_name = "ore detector" - interface_desc = "A sonar system for detecting large masses of ore." - engage_string = "Begin Scan" - usable = 1 - selectable = 0 - device_type = /obj/item/mining_scanner -/* -/obj/item/rig_module/device/rcd - name = "RCD mount" - desc = "A cell-powered rapid construction device for a hardsuit." - icon_state = "rcd" - interface_name = "mounted RCD" - interface_desc = "A device for building or removing walls. Cell-powered." - usable = 1 - engage_string = "Configure RCD" - - device_type = /obj/item/rcd/mounted -*/ -/obj/item/rig_module/device/New() - ..() - if(device_type) - device = new device_type(src) - device.flags |= ABSTRACT //Abstract in the sense that it's not an item that stands alone, but rather is just there to let the module act like it. - -/obj/item/rig_module/device/engage(atom/target) - if(!..() || !device) - return 0 - - if(!target) - device.attack_self(holder.wearer) - return 1 - - var/turf/T = get_turf(target) - if(istype(T) && !T.Adjacent(get_turf(src))) - return 0 - - var/resolved = target.attackby(device,holder.wearer) - if(!resolved && device && target) - device.afterattack(target,holder.wearer,1) - return 1 - - - -/obj/item/rig_module/chem_dispenser - name = "mounted chemical dispenser" - desc = "A complex web of tubing and needles suitable for hardsuit use." - icon_state = "injector" - usable = 1 - selectable = 0 - toggleable = 0 - disruptive = 0 - - engage_string = "Inject" - - interface_name = "integrated chemical dispenser" - interface_desc = "Dispenses loaded chemicals directly into the wearer's bloodstream." - - charges = list( - list("saline-glucose", "salglu_solution", 0, 80), - list("salicylic acid", "sal_acid", 0, 80), - list("salbutamol", "salbutamol", 0, 80), - list("antibiotics", "spaceacillin", 0, 80), - list("charcoal", "charcoal", 0, 80), - list("nutrients", "nutriment", 0, 80), - list("potasssium iodide","potass_iodide", 0, 80), - list("radium", "radium", 0, 80) - ) - - var/max_reagent_volume = 80 //Used when refilling. - -/obj/item/rig_module/chem_dispenser/ninja - interface_desc = "Dispenses loaded chemicals directly into the wearer's bloodstream. This variant is made to be extremely light and flexible." - - //just over a syringe worth of each. Want more? Go refill. Gives the ninja another reason to have to show their face. - charges = list( - list("saline-glucose", "salglu_solution", 0, 20), - list("salicylic acid", "sal_acid", 0, 20), - list("salbutamol", "salbutamol", 0, 20), - list("antibiotics", "spaceacillin", 0, 20), - list("charcoal", "charcoal", 0, 20), - list("nutrients", "nutriment", 0, 80), - list("potasssium iodide","potass_iodide", 0, 20), - list("radium", "radium", 0, 20) - ) - - -/obj/item/rig_module/chem_dispenser/accepts_item(var/obj/item/input_item, var/mob/living/user) - - if(!input_item.is_open_container()) - return 0 - - if(!input_item.reagents || !input_item.reagents.total_volume) - to_chat(user, "\The [input_item] is empty.") - return 0 - - // Magical chemical filtration system, do not question it. - var/total_transferred = 0 - for(var/datum/reagent/R in input_item.reagents.reagent_list) - for(var/chargetype in charges) - var/datum/rig_charge/charge = charges[chargetype] - if(charge.display_name == R.id) - - var/chems_to_transfer = R.volume - - if((charge.charges + chems_to_transfer) > max_reagent_volume) - chems_to_transfer = max_reagent_volume - charge.charges - - charge.charges += chems_to_transfer - input_item.reagents.remove_reagent(R.id, chems_to_transfer) - total_transferred += chems_to_transfer - - break - - if(total_transferred) - to_chat(user, "You transfer [total_transferred] units into the suit reservoir.") - else - to_chat(user, "None of the reagents seem suitable.") - return 1 - -/obj/item/rig_module/chem_dispenser/engage(atom/target) - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!charge_selected) - to_chat(H, "You have not selected a chemical type.") - return 0 - - var/datum/rig_charge/charge = charges[charge_selected] - - if(!charge) - return 0 - - var/chems_to_use = 10 - if(charge.charges <= 0) - to_chat(H, "Insufficient chems!") - return 0 - else if(charge.charges < chems_to_use) - chems_to_use = charge.charges - - var/mob/living/carbon/target_mob - if(target) - if(istype(target,/mob/living/carbon)) - target_mob = target - else - return 0 - else - target_mob = H - - if(target_mob != H) - to_chat(H, "You inject [target_mob] with [chems_to_use] unit\s of [charge.display_name].") - to_chat(target_mob, "You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.") - target_mob.reagents.add_reagent(charge.display_name, chems_to_use) - - charge.charges -= chems_to_use - if(charge.charges < 0) charge.charges = 0 - - return 1 - -/obj/item/rig_module/chem_dispenser/combat - - name = "combat chemical injector" - desc = "A complex web of tubing and needles suitable for hardsuit use." - - charges = list( - list("synaptizine", "synaptizine", 0, 30), - list("hydrocodone", "hydrocodone", 0, 30), - list("nutrients", "nutriment", 0, 80), - ) - - interface_name = "combat chem dispenser" - interface_desc = "Dispenses loaded chemicals directly into the bloodstream." - - -/obj/item/rig_module/chem_dispenser/injector - - name = "mounted chemical injector" - desc = "A complex web of tubing and a large needle suitable for hardsuit use." - usable = 0 - selectable = 1 - disruptive = 1 - - interface_name = "mounted chem injector" - interface_desc = "Dispenses loaded chemicals via an arm-mounted injector." - -/obj/item/rig_module/voice - - name = "hardsuit voice synthesiser" - desc = "A speaker box and sound processor." - icon_state = "megaphone" - usable = 1 - selectable = 0 - toggleable = 0 - disruptive = 0 - - engage_string = "Configure Synthesiser" - - interface_name = "voice synthesiser" - interface_desc = "A flexible and powerful voice modulator system." - - var/obj/item/voice_changer/voice_holder - -/obj/item/rig_module/voice/New() - ..() - voice_holder = new(src) - voice_holder.active = FALSE - -/obj/item/rig_module/voice/installed() - ..() - holder.speech = src - -/obj/item/rig_module/voice/engage() - if(!..()) - return 0 - - var/choice= input("Would you like to toggle the synthesiser or set the name?") as null|anything in list("Enable","Disable","Set Name") - - if(!choice) - return 0 - - switch(choice) - if("Enable") - active = TRUE - voice_holder.active = TRUE - to_chat(usr, "You enable the speech synthesiser.") - if("Disable") - active = FALSE - voice_holder.active = FALSE - to_chat(usr, "You disable the speech synthesiser.") - if("Set Name") - var/raw_choice = sanitize(input(usr, "Please enter a new name.") as text|null, MAX_NAME_LEN) - if(!raw_choice) - return FALSE - voice_holder.voice = raw_choice - to_chat(usr, "You are now mimicking [voice_holder.voice].") - return 1 - -/obj/item/rig_module/maneuvering_jets - - name = "hardsuit maneuvering jets" - desc = "A compact gas thruster system for a hardsuit." - icon_state = "thrusters" - usable = 1 - toggleable = 1 - selectable = 0 - disruptive = 0 - - suit_overlay_active = "maneuvering_active" - suit_overlay_inactive = null //"maneuvering_inactive" - - engage_string = "Toggle Stabilizers" - activate_string = "Activate Thrusters" - deactivate_string = "Deactivate Thrusters" - - interface_name = "maneuvering jets" - interface_desc = "An inbuilt EVA maneuvering system that runs off the rig air supply." - - var/obj/item/tank/jetpack/rig/jets - -/obj/item/rig_module/maneuvering_jets/engage() - if(!..()) - return 0 - jets.toggle_stabilization(usr) - return 1 - -/obj/item/rig_module/maneuvering_jets/activate() - - if(active) - return 0 - - active = 1 - - spawn(1) - if(suit_overlay_active) - suit_overlay = suit_overlay_active - else - suit_overlay = null - holder.update_icon() - - jets.turn_on() - return 1 - -/obj/item/rig_module/maneuvering_jets/deactivate() - if(!..()) - return 0 - jets.turn_off() - return 1 - -/obj/item/rig_module/maneuvering_jets/New() - ..() - jets = new(src) - -/obj/item/rig_module/maneuvering_jets/installed() - ..() - jets.holder = holder - jets.ion_trail.set_up(holder) - -/obj/item/rig_module/maneuvering_jets/removed() - ..() - jets.holder = null - jets.ion_trail.set_up(jets) - -/obj/item/rig_module/foam_sprayer - -/obj/item/rig_module/device/paperdispenser - name = "hardsuit paper dispenser" - desc = "Crisp sheets." - icon_state = "paper" - interface_name = "paper dispenser" - interface_desc = "Dispenses warm, clean, and crisp sheets of paper." - engage_string = "Dispense" - usable = 1 - selectable = 0 - device_type = /obj/item/paper_bin - -/obj/item/rig_module/device/paperdispenser/engage(atom/target) - - if(!..() || !device) - return 0 - - if(!target) - device.attack_hand(holder.wearer) - return 1 - -/obj/item/rig_module/device/pen - name = "mounted pen" - desc = "For mecha John Hancocks." - icon_state = "pen" - interface_name = "mounted pen" - interface_desc = "Signatures with style(tm)." - engage_string = "Change color" - usable = 1 - device_type = /obj/item/pen/multi - -/obj/item/rig_module/device/stamp - name = "mounted internal affairs stamp" - desc = "DENIED." - icon_state = "stamp" - interface_name = "mounted stamp" - interface_desc = "Leave your mark." - engage_string = "Toggle stamp type" - usable = 1 - var/obj/iastamp //Theese were just vars, but any device would need to be an object - var/obj/deniedstamp //Stops assigning non-objects to theese vars, which probably would break quite a bit. - -/obj/item/rig_module/device/stamp/New() - ..() - iastamp = new /obj/item/stamp/law(src) - deniedstamp = new /obj/item/stamp/denied(src) - iastamp.flags |= ABSTRACT - deniedstamp.flags |= ABSTRACT - device = iastamp - -/obj/item/rig_module/device/stamp/engage(atom/target) - if(!..() || !device) - return 0 - - if(!target) - if(device == iastamp) - device = deniedstamp - to_chat(holder.wearer, "Switched to denied stamp.") - else if(device == deniedstamp) - device = iastamp - to_chat(holder.wearer, "Switched to internal affairs stamp.") - return 1 - -/obj/item/rig_module/welding_tank - name = "welding fuel tank" - desc = "A bluespace welding fuel storage tank for a rigsuit." - icon_state = "welding_tank" - interface_name = "mounted welding fuel tank" - interface_desc = "A minitaure fuel tank used for storage of welding fuel, built into a hardsuit." - engage_string = "Dispense fuel" - usable = 1 - - var/max_fuel = 300 - -/obj/item/rig_module/welding_tank/New() - ..() - - create_reagents(max_fuel) - reagents.add_reagent("fuel", max_fuel) - -/obj/item/rig_module/welding_tank/engage(atom/target) - if(!..() || !reagents) - return 0 - - if(!target) - if(get_fuel() >= 0) - var/obj/item/weldingtool/W = holder.wearer.get_active_hand() - if(istype(W)) - fill_welder(W) - else - W = holder.wearer.get_inactive_hand() - if(istype(W)) - fill_welder(W) - else - to_chat(holder.wearer, "Your welding tank is out of fuel!") - else - to_chat(holder.wearer, "You need to have a welding tool in one of your hands to dispense fuel.") - -/obj/item/rig_module/welding_tank/proc/fill_welder(obj/item/weldingtool/W) - if(!istype(W)) - return - W.refill(holder.wearer, src, W.maximum_fuel) - if(!reagents.get_reagent_amount("fuel")) - to_chat(holder.wearer, "You hear a faint dripping as your hardsuit welding tank completely empties.") - -/obj/item/rig_module/welding_tank/proc/get_fuel() - return reagents.get_reagent_amount("fuel") diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm deleted file mode 100644 index 33ae007ceee..00000000000 --- a/code/modules/clothing/spacesuits/rig/modules/vision.dm +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/vision - * /obj/item/rig_module/vision/multi - * /obj/item/rig_module/vision/meson - * /obj/item/rig_module/vision/thermal - * /obj/item/rig_module/vision/nvg - * /obj/item/rig_module/vision/medhud - * /obj/item/rig_module/vision/sechud - */ - -/datum/rig_vision - var/mode - var/obj/item/clothing/glasses/glasses - -/datum/rig_vision/nvg - mode = "night vision" -/datum/rig_vision/nvg/New() - glasses = new /obj/item/clothing/glasses/night - -/datum/rig_vision/thermal - mode = "thermal scanner" -/datum/rig_vision/thermal/New() - glasses = new /obj/item/clothing/glasses/thermal - -/datum/rig_vision/meson - mode = "meson scanner" -/datum/rig_vision/meson/New() - glasses = new /obj/item/clothing/glasses/meson - -/datum/rig_vision/sechud - mode = "security HUD" -/datum/rig_vision/sechud/New() - glasses = new /obj/item/clothing/glasses/hud/security - -/datum/rig_vision/medhud - mode = "medical HUD" -/datum/rig_vision/medhud/New() - glasses = new /obj/item/clothing/glasses/hud/health - -/obj/item/rig_module/vision - - name = "hardsuit visor" - desc = "A layered, translucent visor system for a hardsuit." - icon_state = "optics" - - interface_name = "optical scanners" - interface_desc = "An integrated multi-mode vision system." - - usable = 1 - toggleable = 1 - disruptive = 0 - - engage_string = "Cycle Visor Mode" - activate_string = "Enable Visor" - deactivate_string = "Disable Visor" - - var/datum/rig_vision/vision - var/list/vision_modes = list( - /datum/rig_vision/nvg, - /datum/rig_vision/thermal, - /datum/rig_vision/meson - ) - - var/vision_index - -/obj/item/rig_module/vision/multi - - name = "hardsuit optical package" - desc = "A complete visor system of optical scanners and vision modes." - icon_state = "fulloptics" - - - interface_name = "multi optical visor" - interface_desc = "An integrated multi-mode vision system." - - vision_modes = list(/datum/rig_vision/meson, - /datum/rig_vision/nvg, - /datum/rig_vision/thermal, - /datum/rig_vision/sechud, - /datum/rig_vision/medhud) - -/obj/item/rig_module/vision/meson - - name = "hardsuit meson scanner" - desc = "A layered, translucent visor system for a hardsuit." - icon_state = "meson" - - usable = 0 - - interface_name = "meson scanner" - interface_desc = "An integrated meson scanner." - - vision_modes = list(/datum/rig_vision/meson) - -/obj/item/rig_module/vision/thermal - - name = "hardsuit thermal scanner" - desc = "A layered, translucent visor system for a hardsuit." - icon_state = "thermal" - - usable = 0 - - interface_name = "thermal scanner" - interface_desc = "An integrated thermal scanner." - - vision_modes = list(/datum/rig_vision/thermal) - -/obj/item/rig_module/vision/nvg - - name = "hardsuit night vision interface" - desc = "A multi input night vision system for a hardsuit." - icon_state = "night" - - usable = 0 - - interface_name = "night vision interface" - interface_desc = "An integrated night vision system." - - vision_modes = list(/datum/rig_vision/nvg) - -/obj/item/rig_module/vision/sechud - - name = "hardsuit security hud" - desc = "A simple tactical information system for a hardsuit." - icon_state = "securityhud" - - usable = 0 - - interface_name = "security HUD" - interface_desc = "An integrated security heads up display." - - vision_modes = list(/datum/rig_vision/sechud) - -/obj/item/rig_module/vision/medhud - - name = "hardsuit medical hud" - desc = "A simple medical status indicator for a hardsuit." - icon_state = "healthhud" - - usable = 0 - - interface_name = "medical HUD" - interface_desc = "An integrated medical heads up display." - - vision_modes = list(/datum/rig_vision/medhud) - - -// There should only ever be one vision module installed in a suit. -/obj/item/rig_module/vision/installed() - ..() - holder.visor = src - -/obj/item/rig_module/vision/engage() - - var/starting_up = !active - - if(!..() || !vision_modes) - return 0 - - // Don't cycle if this engage() is being called by activate(). - if(starting_up) - to_chat(holder.wearer, "You activate your visual sensors.") - return 1 - - if(vision_modes.len > 1) - vision_index++ - if(vision_index > vision_modes.len) - vision_index = 1 - vision = vision_modes[vision_index] - - to_chat(holder.wearer, "You cycle your sensors to [vision.mode] mode.") - else - to_chat(holder.wearer, "Your sensors only have one mode.") - return 1 - -/obj/item/rig_module/vision/New() - ..() - - if(!vision_modes) - return - - vision_index = 1 - var/list/processed_vision = list() - - for(var/vision_mode in vision_modes) - var/datum/rig_vision/vision_datum = new vision_mode - if(!vision) vision = vision_datum - processed_vision += vision_datum - - vision_modes = processed_vision diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm deleted file mode 100644 index 0d106a874a7..00000000000 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ /dev/null @@ -1,1059 +0,0 @@ -#define ONLY_DEPLOY 1 -#define ONLY_RETRACT 2 -#define SEAL_DELAY 30 - -/* - * Defines the behavior of hardsuits/rigs/power armour. - */ - -/obj/item/rig - - name = "hardsuit control module" - icon = 'icons/obj/rig_modules.dmi' - desc = "A back-mounted hardsuit deployment and control mechanism." - slot_flags = SLOT_BACK - req_one_access = list() - req_access = list() - w_class = WEIGHT_CLASS_BULKY - - // These values are passed on to all component pieces. - armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - siemens_coefficient = 0.2 - permeability_coefficient = 0.1 - - var/interface_path = "hardsuit.tmpl" - var/ai_interface_path = "hardsuit.tmpl" - var/interface_title = "Hardsuit Controller" - var/wearer_move_delay //Used for AI moving. - var/ai_controlled_move_delay = 10 - - // Keeps track of what this rig should spawn with. - var/suit_type = "hardsuit" - var/list/initial_modules - var/chest_type = /obj/item/clothing/suit/space/new_rig - var/helm_type = /obj/item/clothing/head/helmet/space/new_rig - var/boot_type = /obj/item/clothing/shoes/magboots/rig - var/glove_type = /obj/item/clothing/gloves/rig - var/cell_type = /obj/item/stock_parts/cell/high - var/air_type = /obj/item/tank/oxygen - - //Component/device holders. - var/obj/item/tank/air_supply // Air tank, if any. - var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any. - var/obj/item/clothing/shoes/under_boots = null //Boots that are between the feet and the rig boots, if any. - var/obj/item/clothing/suit/space/new_rig/chest // Deployable chestpiece, if any. - var/obj/item/clothing/head/helmet/space/new_rig/helmet = null // Deployable helmet, if any. - var/obj/item/clothing/gloves/rig/gloves = null // Deployable gauntlets, if any. - var/obj/item/stock_parts/cell/cell // Power supply, if any. - var/obj/item/rig_module/selected_module = null // Primary system (used with middle-click) - var/obj/item/rig_module/vision/visor // Kinda shitty to have a var for a module, but saves time. - var/obj/item/rig_module/voice/speech // As above. - var/mob/living/carbon/human/wearer // The person currently wearing the rig. - var/image/mob_icon // Holder for on-mob icon. - var/list/installed_modules = list() // Power consumption/use bookkeeping. - - // Rig status vars. - var/open = 0 // Access panel status. - var/locked = 1 // Lock status. - var/subverted = 0 - var/interface_locked = 0 - var/control_overridden = 0 - var/ai_override_enabled = 0 - var/security_check_enabled = 1 - var/malfunctioning = 0 - var/malfunction_delay = 0 - var/electrified = 0 - var/locked_down = 0 - - var/seal_delay = SEAL_DELAY - var/sealing // Keeps track of seal status independantly of NODROP. - var/offline = 1 // Should we be applying suit maluses? - var/offline_slowdown = 3 // If the suit is deployed and unpowered, it sets slowdown to this. - var/active_slowdown = 3 // How much the deployed suit slows down if powered. - var/vision_restriction - var/offline_vision_restriction = 1 // 0 - none, 1 - welder vision, 2 - blind. Maybe move this to helmets. - var/airtight = 1 //If set, will adjust AIRTIGHT and STOPSPRESSUREDMAGE flags on components. Otherwise it should leave them untouched. - - var/emp_protection = 0 - var/has_emergency_release = 1 //Allows suit to be removed from outside. - - // Wiring! How exciting. - var/datum/wires/rig/wires - var/datum/effect_system/spark_spread/spark_system - -/obj/item/rig/examine(mob/user) - . = list("This is [src].") - . += "[desc]" - if(wearer) - for(var/obj/item/piece in list(helmet,gloves,chest,boots)) - if(!piece || piece.loc != wearer) - continue - . += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." - - if(loc == usr) - . += "The maintenance panel is [open ? "open" : "closed"]." - . += "Hardsuit systems are [offline ? "offline" : "online"]." - -/obj/item/rig/get_cell() - return cell - -/obj/item/rig/New() - ..() - - item_state = icon_state - wires = new(src) - - if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len)) - locked = 0 - - spark_system = new() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - START_PROCESSING(SSobj, src) - - if(initial_modules && initial_modules.len) - for(var/path in initial_modules) - var/obj/item/rig_module/module = new path(src) - installed_modules += module - module.installed(src) - - // Create and initialize our various segments. - if(cell_type) - cell = new cell_type(src) - if(air_type) - air_supply = new air_type(src) - if(glove_type) - gloves = new glove_type(src) - verbs |= /obj/item/rig/proc/toggle_gauntlets - if(helm_type) - helmet = new helm_type(src) - verbs |= /obj/item/rig/proc/toggle_helmet - helmet.item_color="[initial(icon_state)]_sealed" //For the lightswitching to know the correct string to manipulate - if(boot_type) - boots = new boot_type(src) - verbs |= /obj/item/rig/proc/toggle_boots - boots.magboot_state="[initial(icon_state)]_sealed" //For the magboot (de)activation to know the correct string to manipulate - if(chest_type) - chest = new chest_type(src) - if(allowed) - chest.allowed = allowed - chest.slowdown = offline_slowdown - chest.holder = src - verbs |= /obj/item/rig/proc/toggle_chest - - for(var/obj/item/piece in list(gloves,helmet,boots,chest)) - if(!istype(piece)) - continue - piece.name = "[suit_type] [initial(piece.name)]" - piece.desc = "It seems to be part of a [src.name]." - piece.icon_state = "[initial(icon_state)]" - piece.min_cold_protection_temperature = min_cold_protection_temperature - piece.max_heat_protection_temperature = max_heat_protection_temperature - if(piece.siemens_coefficient > siemens_coefficient) //So that insulated gloves keep their insulation. - piece.siemens_coefficient = siemens_coefficient - piece.permeability_coefficient = permeability_coefficient - if(armor) - piece.armor = armor - - update_icon(1) - -/obj/item/rig/Destroy() - for(var/obj/item/piece in list(gloves,boots,helmet,chest)) - var/mob/living/M = piece.loc - if(istype(M)) - M.unEquip(piece) - qdel(piece) - STOP_PROCESSING(SSobj, src) - QDEL_NULL(wires) - QDEL_NULL(spark_system) - return ..() - -/obj/item/rig/proc/suit_is_deployed() - if(!istype(wearer) || src.loc != wearer || wearer.back != src) - return 0 - if(helm_type && !(helmet && wearer.head == helmet)) - return 0 - if(glove_type && !(gloves && wearer.gloves == gloves)) - return 0 - if(boot_type && !(boots && wearer.shoes == boots)) - return 0 - if(chest_type && !(chest && wearer.wear_suit == chest)) - return 0 - return 1 - -/obj/item/rig/proc/reset() - offline = 2 - flags &= ~NODROP - if(helmet && helmet.on) - helmet.toggle_light(wearer) - if(boots && boots.magpulse) - boots.attack_self(wearer) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[initial(icon_state)]" - if(airtight) - piece.flags &= ~(STOPSPRESSUREDMAGE | AIRTIGHT) - update_icon(1) - -/obj/item/rig/proc/seal(mob/living/user) - if(sealing) - return 0 - - if(!wearer || !user) - return - - var/sealed = (flags & NODROP) - if(sealed) - to_chat(user, "\The [src] is already sealed!") - return 0 - - if(!check_power_cost(user, 1)) //need power to seal the suit - return 0 - - var/failed_to_seal = FALSE - - if(!suit_is_deployed()) - to_chat(user, "\The [src] cannot seal, as it is not fully deployed!") - return 0 - - flags |= NODROP - sealing = TRUE - - to_chat(user, "\The [src] begins to tighten it's seals.") - wearer.visible_message("\The [wearer]'s suit emits a quiet hum as it begins to tighten it's seals.", - "With a quiet hum, your suit begins to seal.") - - if(seal_delay && !do_after(user, seal_delay, target = wearer)) - to_chat(user, "You must remain still to seal \the [src]!") - failed_to_seal = TRUE - - if(!failed_to_seal) - deploy(user) - - var/list/pieces_data = list(list(wearer.shoes, boots, "boots", boot_type), - list(wearer.gloves, gloves, "gloves", glove_type), - list(wearer.head, helmet, "helmet", helm_type), - list(wearer.wear_suit, chest, "chest", chest_type)) - - for(var/list/piece_data in pieces_data) - var/obj/item/user_piece = piece_data[1] - var/obj/item/correct_piece = piece_data[2] - var/msg_type = piece_data[3] - var/piece_type = piece_data[4] - - if(!user_piece || !piece_type) - continue - - if(user_piece != correct_piece) - to_chat(user, "\The [user_piece] is blocking \the [src] from deploying.") - failed_to_seal = TRUE - - if(seal_delay && !do_after(user, seal_delay, needhand = 0, target = wearer)) - to_chat(user, "You must remain still to seal \the [src]!") - failed_to_seal = TRUE - - if(failed_to_seal) - break - - correct_piece.icon_state = "[initial(icon_state)]_sealed" - switch(msg_type) - if("boots") - to_chat(wearer, "\The [correct_piece] seal around your feet.") - correct_piece.icon_state = "[initial(icon_state)]_sealed0" //Solution to not need a sprite for off, on, and unused magboots. - if(user != wearer) - to_chat(user, "\The [correct_piece] has been sealed.") - wearer.update_inv_shoes() - if("gloves") - to_chat(wearer, "\The [correct_piece] tighten around your fingers and wrists.") - if(user != wearer) - to_chat(user, "\The [correct_piece] has been sealed.") - wearer.update_inv_gloves() - if("chest") - to_chat(wearer, "\The [correct_piece] cinches tight again your chest.") - if(user != wearer) - to_chat(user, "\The [correct_piece] has been sealed.") - wearer.update_inv_wear_suit() - if("helmet") - to_chat(wearer, "\The [correct_piece] hisses closed.") - correct_piece.icon_state = "[initial(icon_state)]_sealed0" //Solution to not need a sprite for off, on, and unused helmet light. - if(user != wearer) - to_chat(user, "\The [correct_piece] has been sealed.") - wearer.update_inv_head() - if(helmet) - helmet.update_light(wearer) - - correct_piece.armor = correct_piece.armor.setRating(bio_value = 100) - - sealing = FALSE - - if(failed_to_seal) - for(var/obj/item/piece in list(helmet, boots, gloves, chest)) - if(!piece) - continue - piece.icon_state = "[initial(icon_state)]" - flags &= ~NODROP - if(airtight) - update_component_sealed() - update_icon(1) - return 0 - - if(user != wearer) - to_chat(user, "\The [src] has been loosened.") - to_chat(wearer, "Your entire suit tightens around you as the components lock into place.") - if(airtight) - update_component_sealed() - update_icon(1) - -/obj/item/rig/proc/unseal(mob/living/user) - if(sealing) - return 0 - - if(!wearer || !user) - return - - var/sealed = (flags & NODROP) - if(!sealed) - to_chat(user, "\The [src] is already unsealed!") - return 0 - - sealing = TRUE - - var/failed_to_seal = FALSE - - if(!suit_is_deployed()) - to_chat(user, "\The [src] cannot unseal, as it is not fully deployed!") - failed_to_seal = TRUE - - if(!failed_to_seal) - if(user != wearer) - to_chat(user, "\The [src] begins to loosen it's seals.") - wearer.visible_message("\The [wearer]'s suit emits a quiet hum as it begins to loosen it's seals.", - "With a quiet hum, your suit begins to unseal.") - - if(seal_delay && !do_after(user, seal_delay, target = wearer)) - to_chat(user, "You must remain still to unseal \the [src]!") - failed_to_seal = TRUE - - if(!failed_to_seal) - var/list/pieces_data = list(list(wearer.shoes, boots, "boots", boot_type), - list(wearer.gloves, gloves, "gloves", glove_type), - list(wearer.head, helmet, "helmet", helm_type), - list(wearer.wear_suit, chest, "chest", chest_type)) - - for(var/list/piece_data in pieces_data) - var/obj/item/user_piece = piece_data[1] - var/obj/item/correct_piece = piece_data[2] - var/msg_type = piece_data[3] - var/piece_type = piece_data[4] - - if(!correct_piece || !piece_type) - continue - - if(user_piece != correct_piece) - to_chat(user, "\The [user_piece] is blocking \the [src] from deploying.") - failed_to_seal = TRUE - - if(seal_delay && !do_after(user, seal_delay, needhand = 0, target = wearer)) - to_chat(user, "You must remain still to unseal \the [src]!") - failed_to_seal = TRUE - - if(failed_to_seal) - break - - correct_piece.icon_state = "[initial(icon_state)]" - switch(msg_type) - if("boots") - to_chat(wearer, "\The [correct_piece] relax [correct_piece.p_their()] grip on your legs.") - if(user != wearer) - to_chat(user, "\The [correct_piece] has been unsealed.") - wearer.update_inv_shoes() - if("gloves") - to_chat(wearer, "\The [correct_piece] become loose around your fingers.") - if(user != wearer) - to_chat(user, "\The [correct_piece] has been unsealed.") - wearer.update_inv_gloves() - if("chest") - to_chat(wearer, "\The [correct_piece] releases your chest.") - if(user != wearer) - to_chat(user, "\The [correct_piece] has been unsealed.") - wearer.update_inv_wear_suit() - if("helmet") - to_chat(wearer, "\The [correct_piece] hisses open.") - if(user != wearer) - to_chat(user, "\The [correct_piece] has been unsealed.") - wearer.update_inv_head() - if(helmet) - helmet.update_light(wearer) - - correct_piece.armor = correct_piece.armor.setRating(bio_value = armor.getRating("bio")) - - sealing = FALSE - - if(failed_to_seal) - for(var/obj/item/piece in list(gloves, chest)) - if(!piece) - continue - piece.icon_state = "[initial(icon_state)]_sealed" - if(helmet) - helmet.icon_state = "[initial(icon_state)]_sealed[helmet.on]" - if(boots) - boots.icon_state = "[initial(icon_state)]_sealed[boots.magpulse]" - if(airtight) - update_component_sealed() - update_icon(1) - return 0 - - if(user != wearer) - to_chat(user, "\The [src] has been unsealed.") - to_chat(wearer, "Your entire suit loosens as the components relax.") - - flags &= ~NODROP - - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - - if(airtight) - update_component_sealed() - update_icon(1) - -/obj/item/rig/proc/update_component_sealed() - if(istype(boots) && !(flags & NODROP) && boots.magpulse) //If we have (active) boots and unsealed the suit, we deactivate the magboots. - boots.attack_self(wearer) - if(istype(helmet) && !(flags & NODROP) && helmet.on) //If we have an (active) headlamp and unsealed the suit, we deactivate the headlamp. - helmet.toggle_light(wearer) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!(flags & NODROP)) - piece.flags &= ~(STOPSPRESSUREDMAGE | AIRTIGHT) - else - piece.flags |= STOPSPRESSUREDMAGE | AIRTIGHT - -/obj/item/rig/process() - // If we've lost any parts, grab them back. - var/mob/living/M - for(var/obj/item/piece in list(gloves,boots,helmet,chest)) - if(piece.loc != src && !(wearer && piece.loc == wearer)) - if(istype(piece.loc, /mob/living)) - M = piece.loc - M.unEquip(piece) - piece.forceMove(src) - - if(cell && cell.charge > 0 && electrified > 0) - electrified-- - - if(malfunction_delay > 0) - malfunction_delay-- - else if(malfunctioning) - malfunctioning-- - malfunction() - - if(!istype(wearer) || loc != wearer || wearer.back != src || !(flags & NODROP) || !cell || cell.charge <= 0) - if(!cell || cell.charge <= 0) - if(electrified > 0) - electrified = 0 - if(!offline) - if(istype(wearer)) - if(flags & NODROP) - if(offline_slowdown < 3) - to_chat(wearer, "Your suit beeps stridently, and suddenly goes dead.") - else - to_chat(wearer, "Your suit beeps stridently, and suddenly you're wearing a leaden mass of metal and plastic composites instead of a powered suit.") - if(offline_vision_restriction == 1) - to_chat(wearer, "The suit optics flicker and die, leaving you with restricted vision.") - else if(offline_vision_restriction == 2) - to_chat(wearer, "The suit optics drop out completely, drowning you in darkness.") - if(!offline) - offline = 1 - if(istype(wearer) && wearer.wearing_rig) - wearer.wearing_rig = null - else - if(offline) - offline = 0 - if(istype(wearer) && !wearer.wearing_rig) - wearer.wearing_rig = src - chest.slowdown = active_slowdown - - if(offline) - if(offline == 1) - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - offline = 2 - chest.slowdown = offline_slowdown - return - - - for(var/obj/item/rig_module/module in installed_modules) - cell.use(module.process()*10) - -/obj/item/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai) - if(!istype(user)) - return 0 - - var/fail_msg - - if(!user_is_ai) - var/mob/living/carbon/human/H = user - if(istype(H) && H.back != src) - fail_msg = "You must be wearing \the [src] to do this." - else if(user.incorporeal_move) - fail_msg = "You must be solid to do this." - if(sealing) - fail_msg = "The hardsuit is in the process of adjusting seals and cannot be activated." - else if(!fail_msg && ((use_unconcious && user.stat > 1) || (!use_unconcious && user.stat))) - fail_msg = "You are in no fit state to do that." - else if(!cell) - fail_msg = "There is no cell installed in the suit." - else if(cost && cell.charge < cost * 10) //TODO: Cellrate? - fail_msg = "Not enough stored power." - - if(fail_msg) - to_chat(user, "[fail_msg]") - return 0 - - // This is largely for cancelling stealth and whatever. - if(mod && mod.disruptive) - for(var/obj/item/rig_module/module in (installed_modules - mod)) - if(module.active && module.disruptable) - module.deactivate() - - cell.use(cost*10) - return 1 - -/obj/item/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.inventory_state) - if(!user) - return - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = state) - ui.open() - ui.set_auto_update(1) - -/obj/item/rig/ui_data(mob/user, ui_key = "main", datum/topic_state/state = GLOB.inventory_state) - var/data[0] - - data["primarysystem"] = null - if(selected_module) - data["primarysystem"] = "[selected_module.interface_name]" - - data["ai"] = 0 - if(src.loc != user) - data["ai"] = 1 - - var/is_sealed = (flags & NODROP) //1 if NODROP, 0 if no-nodrop - data["seals"] = "[!is_sealed]" //1 if not NODROP (unsealed), 0 if NODROP (sealed) - data["sealing"] = "[src.sealing]" - data["helmet"] = (helmet ? "[helmet.name]" : "None.") - data["gauntlets"] = (gloves ? "[gloves.name]" : "None.") - data["boots"] = (boots ? "[boots.name]" : "None.") - data["chest"] = (chest ? "[chest.name]" : "None.") - - data["charge"] = cell ? round(cell.charge,1) : 0 - data["maxcharge"] = cell ? cell.maxcharge : 0 - data["chargestatus"] = cell ? FLOOR((cell.charge/cell.maxcharge)*50, 1) : 0 - - data["emagged"] = subverted - data["coverlock"] = locked - data["interfacelock"] = interface_locked - data["aicontrol"] = control_overridden - data["aioverride"] = ai_override_enabled - data["securitycheck"] = security_check_enabled - data["malf"] = malfunction_delay - - - var/list/module_list = list() - var/i = 1 - for(var/obj/item/rig_module/module in installed_modules) - var/list/module_data = list( - "index" = i, - "name" = "[module.interface_name]", - "desc" = "[module.interface_desc]", - "can_use" = "[module.usable]", - "can_select" = "[module.selectable]", - "can_toggle" = "[module.toggleable]", - "is_active" = "[module.active]", - "engagecost" = module.use_power_cost*10, - "activecost" = module.active_power_cost*10, - "passivecost" = module.passive_power_cost*10, - "engagestring" = module.engage_string, - "activatestring" = module.activate_string, - "deactivatestring" = module.deactivate_string, - "damage" = module.damage - ) - - if(module.charges && module.charges.len) - - module_data["charges"] = list() - var/datum/rig_charge/selected = module.charges[module.charge_selected] - module_data["chargetype"] = selected ? "[selected.display_name]" : "none" - - for(var/chargetype in module.charges) - var/datum/rig_charge/charge = module.charges[chargetype] - module_data["charges"] += list(list("caption" = "[chargetype] ([charge.charges])", "index" = "[chargetype]")) - - module_list += list(module_data) - i++ - - if(module_list.len) - data["modules"] = module_list - - return data - -/obj/item/rig/update_icon(var/update_mob_icon) - - //TODO: Maybe consider a cache for this (use mob_icon as blank canvas, use suit icon overlay). - overlays.Cut() - if(!mob_icon || update_mob_icon) - var/species_icon = 'icons/mob/rig_back.dmi' - // Since setting mob_icon will override the species checks in - // update_inv_wear_suit(), handle species checks here. - if(wearer && sprite_sheets && sprite_sheets[wearer.dna.species.name]) - species_icon = sprite_sheets[wearer.dna.species.name] - mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]") - - if(installed_modules.len) - for(var/obj/item/rig_module/module in installed_modules) - if(module.suit_overlay) - chest.overlays += image("icon" = 'icons/mob/rig_modules.dmi', "icon_state" = "[module.suit_overlay]", "dir" = SOUTH) - - if(wearer) - wearer.update_inv_shoes() - wearer.update_inv_gloves() - wearer.update_inv_head() - wearer.update_inv_wear_suit() - wearer.update_inv_back() - return - -/obj/item/rig/proc/check_suit_access(var/mob/living/carbon/human/user) - - if(!security_check_enabled) - return 1 - - if(istype(user)) - if(malfunction_check(user)) - return 0 - if(user.back != src) - return 0 - else if(!src.allowed(user)) - to_chat(user, "Unauthorized user. Access denied.") - return 0 - - else if(!ai_override_enabled) - to_chat(user, "Synthetic access disabled. Please consult hardware provider.") - return 0 - - return 1 - -/obj/item/rig/Topic(href,href_list) - if(!check_suit_access(usr)) - return 0 - - if(href_list["toggle_piece"]) - if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying)) - return 0 - toggle_piece(href_list["toggle_piece"], usr) - else if(href_list["toggle_seals"]) - if(flags & NODROP) - unseal(usr) - else - seal(usr) - else if(href_list["interact_module"]) - var/module_index = text2num(href_list["interact_module"]) - - if(module_index > 0 && module_index <= installed_modules.len) - var/obj/item/rig_module/module = installed_modules[module_index] - switch(href_list["module_mode"]) - if("activate") - module.activate() - if("deactivate") - module.deactivate() - if("engage") - module.engage() - if("select") - selected_module = module - if("select_charge_type") - module.charge_selected = href_list["charge_type"] - else if(href_list["toggle_ai_control"]) - ai_override_enabled = !ai_override_enabled - notify_ai("Synthetic suit control has been [ai_override_enabled ? "enabled" : "disabled"].") - else if(href_list["toggle_suit_lock"]) - locked = !locked - - usr.set_machine(src) - add_fingerprint(usr) - return 0 - -/obj/item/rig/proc/notify_ai(var/message) - if(!message || !installed_modules || !installed_modules.len) - return - for(var/obj/item/rig_module/module in installed_modules) - for(var/mob/living/silicon/ai/ai in module.contents) - if(ai && ai.client && !ai.stat) - to_chat(ai, "[message]") - -/obj/item/rig/equipped(mob/living/carbon/human/M, slot) - ..() - if(!istype(M) || slot != slot_back) - return //we don't care about picking up/nonhumans - - spawn(1) //equipped() is called BEFORE the item is actually set as the slot - - if(seal_delay > 0 && istype(M) && M.back == src) - M.visible_message("[M] starts putting on \the [src]...", "You start putting on \the [src]...") - if(!do_after(M, seal_delay, target = M)) - if(M && M.back == src) - M.unEquip(src) - M.put_in_hands(src) - return - - if(istype(M) && M.back == src) - M.visible_message("[M] struggles into \the [src].", "You struggle into \the [src].") - wearer = M - wearer.wearing_rig = src - if(has_emergency_release) - M.verbs |= /obj/item/rig/proc/emergency_release - update_icon() - -/obj/item/rig/proc/toggle_piece(var/piece, var/mob/living/user, var/deploy_mode, var/force) - if(!istype(wearer) || wearer.back != src) - if(force) //can only force retracting sorry - for(var/obj/item/uneq_piece in list(helmet, gloves, boots, chest)) - if(uneq_piece) - if(isliving(uneq_piece.loc)) - var/mob/living/L = uneq_piece.loc - L.unEquip(uneq_piece, 1) - if(uneq_piece == boots) - if(under_boots) - if(L.equip_to_slot_if_possible(under_boots, slot_shoes)) - under_boots = null - else - to_chat(user, "Somehow, your [under_boots] got stuck to the [boots], and were retracted with them. ((This shouldn't happen, bug report this.))") - uneq_piece.forceMove(src) - return 0 - - if(sealing || !cell || !cell.charge) - return 0 - - if(!(deploy_mode == ONLY_RETRACT && force)) //This should be the case while stripping, stripping does trigger the if statement below. - if(user == wearer && user.incapacitated()) // If the user isn't wearing the suit it's probably an AI. - return 0 - - var/obj/item/check_slot - var/equip_to - var/obj/item/use_obj - - switch(piece) - if("helmet") - equip_to = slot_head - use_obj = helmet - check_slot = wearer.head - if("gauntlets") - equip_to = slot_gloves - use_obj = gloves - check_slot = wearer.gloves - if("boots") - equip_to = slot_shoes - use_obj = boots - check_slot = wearer.shoes - if("chest") - equip_to = slot_wear_suit - use_obj = chest - check_slot = wearer.wear_suit - - if(use_obj) - if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) //user is wearing it, retract it if not forced to deploy - if((flags & NODROP) && equip_to != slot_head && !force) //you can only retract the helmet if the suit isn't unsealed - to_chat(user, "You can't retract \the [use_obj] while the suit is sealed!") - return - - var/mob/living/to_strip - if(wearer) - to_strip = wearer - else if(isliving(use_obj.loc)) - to_strip = use_obj.loc - - if(to_strip) - to_strip.unEquip(use_obj, 1) - if(use_obj == boots) - if(under_boots) - if(to_strip.equip_to_slot_if_possible(under_boots, slot_shoes)) - under_boots = null - else - to_chat(user, "Somehow, your [under_boots] got stuck to the [boots], and were retracted with them. ((This shouldn't happen, bug report this.))") - use_obj.forceMove(src) - if(wearer) - to_chat(wearer, "Your [use_obj] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") - - else if(deploy_mode != ONLY_RETRACT) - if(check_slot) - if(check_slot != use_obj) //If use_obj is already in check_slot, silently bail. Otherwise, tell the user why the part didn't deploy. - if(use_obj == boots) - under_boots = check_slot - wearer.unEquip(under_boots) - under_boots.forceMove(src) - else - to_chat(wearer, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.") - return - use_obj.forceMove(wearer) - if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, FALSE, TRUE)) - use_obj.forceMove(src) - else - if(wearer) - to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") - - if(piece == "helmet" && helmet) - helmet.update_light(wearer) - -/obj/item/rig/proc/deploy(mob/user) - if(!wearer || !user) - return 0 - - if(flags & NODROP) //We need to check if we have the part, the person is wearing something in the parts slot, and if yes, are they the same. - if(helmet && wearer.head && wearer.head != helmet) - to_chat(user, "\The [wearer.head] is blocking \the [src] from deploying!") - return 0 - if(gloves && wearer.gloves && wearer.gloves != gloves) - to_chat(user, "\The [wearer.gloves] is preventing \the [src] from deploying!") - return 0 - /*if(boots && wearer.shoes && wearer.shoes != boots) - to_chat(user, "\The [wearer.shoes] is preventing \the [src] from deploying!") - return 0*/ - if(chest && wearer.wear_suit && wearer.wear_suit != chest) - to_chat(user, "\The [wearer.wear_suit] is preventing \the [src] from deploying!") - return 0 - - - for(var/piece in list("helmet", "gauntlets", "chest", "boots")) - toggle_piece(piece, user, ONLY_DEPLOY) - -/obj/item/rig/dropped(var/mob/user) - ..() - user.verbs -= /obj/item/rig/proc/emergency_release - for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, user, ONLY_RETRACT, 1) - if(wearer) - wearer.wearing_rig = null - wearer = null - -//Todo -/obj/item/rig/proc/malfunction() - return 0 - -/obj/item/rig/emp_act(severity_class) - //set malfunctioning - if(emp_protection < 30) //for ninjas, really. - malfunctioning += 10 - if(malfunction_delay <= 0) - malfunction_delay = max(malfunction_delay, round(30/severity_class)) - - //drain some charge - if(cell) cell.emp_act(severity_class + 15) - - //possibly damage some modules - take_hit((100/severity_class), "electrical pulse", 1) - -/obj/item/rig/proc/shock(mob/user) - if(get_dist(src, user) <= 1) //Needs to be adjecant to the rig to get shocked. - if(electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here. - spark_system.start() - if(user.stunned) - return 1 - return 0 - -/obj/item/rig/proc/take_hit(damage, source, is_emp=0) - - if(!installed_modules.len) - return - - var/chance - if(!is_emp) - chance = 2*max(0, damage - (chest? chest.breach_threshold : 0)) - else - //Want this to be roughly independant of the number of modules, meaning that X emp hits will disable Y% of the suit's modules on average. - //that way people designing hardsuits don't have to worry (as much) about how adding that extra module will affect emp resiliance by 'soaking' hits for other modules - chance = 2*max(0, damage - emp_protection)*min(installed_modules.len/15, 1) - - if(!prob(chance)) - return - - //deal addition damage to already damaged module first. - //This way the chances of a module being disabled aren't so remote. - var/list/valid_modules = list() - var/list/damaged_modules = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.damage < 2) - valid_modules |= module - if(module.damage > 0) - damaged_modules |= module - - var/obj/item/rig_module/dam_module = null - if(damaged_modules.len) - dam_module = pick(damaged_modules) - else if(valid_modules.len) - dam_module = pick(valid_modules) - - if(!dam_module) return - - dam_module.damage++ - - if(!source) - source = "hit" - - if(wearer) - if(dam_module.damage >= 2) - to_chat(wearer, "The [source] has disabled your [dam_module.interface_name]!") - else - to_chat(wearer, "The [source] has damaged your [dam_module.interface_name]!") - dam_module.deactivate() - -/obj/item/rig/proc/malfunction_check(var/mob/living/carbon/human/user) - if(malfunction_delay) - if(offline) - to_chat(user, "The suit is completely unresponsive.") - else - to_chat(user, "ERROR: Hardware fault. Rebooting interface...") - return 1 - return 0 - -/obj/item/rig/proc/ai_can_move_suit(var/mob/user, var/check_user_module = 0, var/check_for_ai = 0) - - if(check_for_ai) - if(!(locate(/obj/item/rig_module/ai_container) in contents)) - return 0 - var/found_ai - for(var/obj/item/rig_module/ai_container/module in contents) - if(module.damage >= 2) - continue - if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) - found_ai = 1 - break - if(!found_ai) - return 0 - - if(check_user_module) - if(!user || !user.loc || !user.loc.loc) - return 0 - var/obj/item/rig_module/ai_container/module = user.loc.loc - if(!istype(module) || module.damage >= 2) - to_chat(user, "Your host module is unable to interface with the suit.") - return 0 - - if(offline || !cell || !cell.charge || locked_down) - if(user) - to_chat(user, "Your host rig is unpowered and unresponsive.") - return 0 - if(!wearer || wearer.back != src) - if(user) - to_chat(user, "Your host rig is not being worn.") - return 0 - if(!wearer.stat && !control_overridden && !ai_override_enabled) - if(user) - to_chat(user, "You are locked out of the suit servo controller.") - return 0 - return 1 - -/obj/item/rig/proc/force_rest(var/mob/user) - if(!ai_can_move_suit(user, check_user_module = 1)) - return - wearer.lay_down() - to_chat(user, "\The [wearer] is now [wearer.resting ? "resting" : "getting up"].") - -/obj/item/rig/proc/forced_move(var/direction, var/mob/user) - - // Why is all this shit in client/Move()? Who knows? - if(world.time < wearer_move_delay) - return - - if(!wearer || !wearer.loc || !ai_can_move_suit(user, check_user_module = 1)) - return - - //This is sota the goto stop mobs from moving var - if(wearer.notransform || !wearer.canmove) - return - - if(!wearer.lastarea) - wearer.lastarea = get_area(wearer.loc) - - if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0)) - if(!wearer.Process_Spacemove(0)) - return 0 - - if(malfunctioning) - direction = pick(GLOB.cardinal) - - // Inside an object, tell it we moved. - if(isobj(wearer.loc) || ismob(wearer.loc)) - var/atom/O = wearer.loc - return O.relaymove(wearer, direction) - - if(isturf(wearer.loc)) - if(wearer.restrained())//Why being pulled while cuffed prevents you from moving - for(var/mob/M in range(wearer, 1)) - if(M.pulling == wearer) - if(!M.restrained() && M.stat == 0 && M.canmove && wearer.Adjacent(M)) - to_chat(user, "Your host is restrained! They can't move!") - return 0 - else - M.stop_pulling() - - // AIs are a bit slower than regular and ignore move intent. - wearer_move_delay = world.time + ai_controlled_move_delay - - if(wearer.buckled) //if we're buckled to something, tell it we moved. - return wearer.buckled.relaymove(wearer, direction) - - if(cell.use(200)) //Arbitrary, TODO - wearer.Move(get_step(get_turf(wearer),direction),direction) - -// This returns the rig if you are contained inside one, but not if you are wearing it -/atom/proc/get_rig() - if(loc) - return loc.get_rig() - return null - -/obj/item/rig/get_rig() - return src - -/mob/living/carbon/human/get_rig() - if(istype(back,/obj/item/rig)) - return back - else - return null - -/obj/item/rig/proc/emergency_release() - set name = "Suit Emergency Release" - set desc = "Activate the suits emergency release system." - set category = "Object" - set src in oview(1) - var/obj/item/rig/T = get_rig() - return T.do_emergency_release(usr) - -/obj/item/rig/proc/do_emergency_release(var/mob/living/user) - if(!can_touch(user, wearer) || !has_emergency_release) - return can_touch(user,wearer) - usr.visible_message("[user] starts activating \the [src] emergency seals release!") - if(!do_after(user, 240, target = wearer)) - to_chat(user, "You need to focus on activating the emergency release.") - return 0 - usr.visible_message("[user] activated \the [src] emergency seals release!") - malfunctioning += 1 - malfunction_delay = 30 - unseal(user) - return 1 - -/obj/item/rig/proc/can_touch(var/mob/user, var/mob/wearer) - if(!user) - return 0 - if(!wearer.Adjacent(user)) - return 0 - if(user.restrained()) - to_chat(user, "You need your hands free for this.") - return 0 - if(user.stat || user.paralysis || user.sleeping || user.lying || user.IsWeakened()) - return 0 - return 1 -#undef ONLY_DEPLOY -#undef ONLY_RETRACT -#undef SEAL_DELAY diff --git a/code/modules/clothing/spacesuits/rig/rig_armormod.dm b/code/modules/clothing/spacesuits/rig/rig_armormod.dm deleted file mode 100644 index c04270aa97b..00000000000 --- a/code/modules/clothing/spacesuits/rig/rig_armormod.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/clothing/suit/space/new_rig/calc_breach_damage() - ..() - holder.update_armor() //New dammage, new armormultiplikator. - return damage - -/obj/item/rig/proc/update_armor() - var/multi = 1 //Multiplicative modification to the armor, maybe add an additive later on - if(chest) - multi *= (100 - chest.damage) / 100 //If we have some breaches, lower the armor value. - - //TODO check for other armor mods, likely modules, which need to be coded. - if(!armor) //Did we even give them some armor, if this is the case, the list should be initialized from New() - return - - var/datum/armor/A = armor - for(var/obj/item/piece in list(gloves, helmet, boots, chest)) - if(!istype(piece)) //Do we have the piece - continue - - piece.armor = piece.armor.setRating(melee_value = A.getRating("melee") * multi, - bullet_value = A.getRating("bullet") * multi, - laser_value = A.getRating("laser") * multi, - energy_value = A.getRating("energy") * multi, - bomb_value = A.getRating("bomb") * multi, - bio_value = A.getRating("bio") * multi, - rad_value = A.getRating("rad") * multi, - fire_value = A.getRating("fire") * multi, - acid_value = A.getRating("acidd") * multi) - -//Perfect place to also add something like shield modules, or any other hit_reaction modules check. diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm deleted file mode 100644 index b48e17b2c41..00000000000 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ /dev/null @@ -1,196 +0,0 @@ -/obj/item/rig/attackby(obj/item/W as obj, mob/user as mob) - - if(!istype(user,/mob/living)) return 0 - - if(electrified != 0) - if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. - return - - // Pass repair items on to the chestpiece. - if(chest && (istype(W,/obj/item/stack) || istype(W, /obj/item/weldingtool))) - return chest.attackby(W,user) - - // Lock or unlock the access panel. - if(W.GetID()) - if(subverted) - locked = 0 - to_chat(user, "It looks like the locking system has been shorted out.") - return - - if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len)) - locked = 0 - to_chat(user, "\The [src] doesn't seem to have a locking mechanism.") - return - - if(security_check_enabled && !src.allowed(user)) - to_chat(user, "Access denied.") - return - - locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] \the [src] access panel.") - return - - else if(istype(W,/obj/item/crowbar)) - - if(!open && locked) - to_chat(user, "The access panel is locked shut.") - return - - open = !open - to_chat(user, "You [open ? "open" : "close"] the access panel.") - return - - if(open) - - // Hacking. - if(istype(W,/obj/item/wirecutters) || istype(W,/obj/item/multitool)) - if(open) - wires.Interact(user) - else - to_chat(user, "You can't reach the wiring.") - return - // Air tank. - if(istype(W,/obj/item/tank)) //Todo, some kind of check for suits without integrated air supplies. - - if(air_supply) - to_chat(user, "\The [src] already has a tank installed.") - return - - user.unEquip(W) - air_supply = W - W.forceMove(src) - to_chat(user, "You slot [W] into [src] and tighten the connecting valve.") - return - - // Check if this is a hardsuit upgrade or a modification. - else if(istype(W,/obj/item/rig_module)) - - if(istype(src.loc,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = src.loc - if(H.back == src) - to_chat(user, "You can't install a hardsuit module while the suit is being worn.") - return 1 - - if(!installed_modules) installed_modules = list() - if(installed_modules.len) - for(var/obj/item/rig_module/installed_mod in installed_modules) - if(!installed_mod.redundant && istype(installed_mod,W)) - to_chat(user, "The hardsuit already has a module of that class installed.") - return 1 - - var/obj/item/rig_module/mod = W - to_chat(user, "You begin installing \the [mod] into \the [src].") - if(!do_after(user, 40 * W.toolspeed, target = src)) - return - if(!user || !W) - return - to_chat(user, "You install \the [mod] into \the [src].") - user.unEquip(mod) - installed_modules |= mod - mod.forceMove(src) - mod.installed(src) - update_icon() - return 1 - - else if(!cell && istype(W,/obj/item/stock_parts/cell)) - - to_chat(user, "You jack \the [W] into \the [src]'s battery mount.") - user.unEquip(W) - W.forceMove(src) - src.cell = W - return - - else if(istype(W,/obj/item/wrench)) - - if(!air_supply) - to_chat(user, "There is not tank to remove.") - return - - if(user.r_hand && user.l_hand) - air_supply.forceMove(get_turf(user)) - else - user.put_in_hands(air_supply) - to_chat(user, "You detach and remove \the [air_supply].") - air_supply = null - return - - else if(istype(W,/obj/item/screwdriver)) - - var/list/current_mounts = list() - if(cell) current_mounts += "cell" - if(installed_modules && installed_modules.len) current_mounts += "system module" - - var/to_remove = input("Which would you like to modify?") as null|anything in current_mounts - if(!to_remove) - return - - if(istype(src.loc,/mob/living/carbon/human) && to_remove != "cell") - var/mob/living/carbon/human/H = src.loc - if(H.back == src) - to_chat(user, "You can't remove an installed device while the hardsuit is being worn.") - return - - switch(to_remove) - - if("cell") - - if(cell) - to_chat(user, "You detatch \the [cell] from \the [src]'s battery mount.") - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - if(user.r_hand && user.l_hand) - cell.forceMove(get_turf(user)) - else - user.put_in_hands(cell) - cell = null - else - to_chat(user, "There is nothing loaded in that mount.") - - if("system module") - - var/list/possible_removals = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.permanent) - continue - possible_removals[module.name] = module - - if(!possible_removals.len) - to_chat(user, "There are no installed modules to remove.") - return - - var/removal_choice = input("Which module would you like to remove?") as null|anything in possible_removals - if(!removal_choice) - return - - var/obj/item/rig_module/removed = possible_removals[removal_choice] - to_chat(user, "You detatch \the [removed] from \the [src].") - removed.forceMove(get_turf(src)) - removed.removed() - installed_modules -= removed - update_icon() - - return - - // If we've gotten this far, all we have left to do before we pass off to root procs - // is check if any of the loaded modules want to use the item we've been given. - for(var/obj/item/rig_module/module in installed_modules) - if(module.accepts_item(W,user)) //Item is handled in this proc - return - ..() - - -/obj/item/rig/attack_hand(var/mob/user) - - if(electrified != 0) - if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. - return - ..() - -/obj/item/rig/emag_act(var/remaining_charges, var/mob/user) - if(!subverted) - req_access.Cut() - req_one_access.Cut() - locked = 0 - subverted = 1 - to_chat(user, "You short out the access protocol for the suit.") - return 1 diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm deleted file mode 100644 index 246e3beb10f..00000000000 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Defines the helmets, gloves and shoes for rigs. - */ - -/obj/item/clothing/head/helmet/space/new_rig - name = "helmet" - flags = BLOCKHAIR | THICKMATERIAL | NODROP - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK - body_parts_covered = HEAD - heat_protection = HEAD - cold_protection = HEAD - var/brightness_on = 4 - var/on = 0 - sprite_sheets = list( - "Tajaran" = 'icons/mob/species/tajaran/helmet.dmi', - "Skrell" = 'icons/mob/species/skrell/helmet.dmi', - "Unathi" = 'icons/mob/species/unathi/helmet.dmi' - ) - species_restricted = null - actions_types = list(/datum/action/item_action/toggle_helmet_light) - - flash_protect = 2 - -/obj/item/clothing/head/helmet/space/new_rig/attack_self(mob/user) - if(!isturf(user.loc)) - to_chat(user, "You cannot turn the light on while in this [user.loc].")//To prevent some lighting anomalities. - - return - toggle_light(user) - -/obj/item/clothing/head/helmet/space/new_rig/proc/toggle_light(mob/user) - if(flags & AIRTIGHT) //Could also check for STOPSPRESSUREDMAGE, but one is enough, both get toggled when the seal gets toggled. - - on = !on - icon_state = "[item_color][on]" - - if(on) - set_light(brightness_on) - else - set_light(0) - else - to_chat(user, "You cannot turn the light on while the suit isn't sealed.") - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_head() - -/obj/item/clothing/gloves/rig - name = "gauntlets" - flags = THICKMATERIAL | NODROP - body_parts_covered = HANDS - heat_protection = HANDS - cold_protection = HANDS - species_restricted = null - gender = PLURAL - -/obj/item/clothing/shoes/magboots/rig - name = "boots" - flags = NODROP - body_parts_covered = FEET - cold_protection = FEET - heat_protection = FEET - species_restricted = null - gender = PLURAL - -/obj/item/clothing/shoes/magboots/rig/attack_self(mob/user) - if(flags & AIRTIGHT) //Could also check for STOPSPRESSUREDMAGE, but one is enough, both get toggled when the seal gets toggled. - ..(user) - else - to_chat(user, "You cannot activate mag-pulse traction system while the suit is not sealed.") - -/obj/item/clothing/suit/space/new_rig - name = "chestpiece" - allowed = list(/obj/item/flashlight,/obj/item/tank) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEJUMPSUIT|HIDETAIL - flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT | NODROP - slowdown = 0 - breach_threshold = 20 - resilience = 0.2 - can_breach = 1 - var/obj/item/rig/holder - sprite_sheets = list( - "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', - "Unathi" = 'icons/mob/species/unathi/suit.dmi' - ) - -//TODO: move this to modules -/obj/item/clothing/head/helmet/space/new_rig/proc/prevent_track() - return 0 - -/obj/item/clothing/gloves/rig/Touch(var/atom/A, var/proximity) - - if(!A || !proximity) - return 0 - - var/mob/living/carbon/human/H = loc - if(!istype(H) || !H.back) - return 0 - - var/obj/item/rig/suit = H.back - if(!suit || !istype(suit) || !suit.installed_modules.len) - return 0 - - for(var/obj/item/rig_module/module in suit.installed_modules) - if(module.active && module.activates_on_touch) - if(module.engage(A)) - return 1 - - return 0 - -//Rig pieces for non-spacesuit based rigs - -/obj/item/clothing/head/lightrig - name = "mask" - body_parts_covered = HEAD - heat_protection = HEAD - cold_protection = HEAD - flags = THICKMATERIAL|AIRTIGHT - -/obj/item/clothing/suit/lightrig - name = "suit" - allowed = list(/obj/item/flashlight) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - flags = THICKMATERIAL - -/obj/item/clothing/shoes/lightrig - name = "boots" - body_parts_covered = FEET - cold_protection = FEET - heat_protection = FEET - species_restricted = null - gender = PLURAL - -/obj/item/clothing/gloves/lightrig - name = "gloves" - flags = THICKMATERIAL - body_parts_covered = HANDS - heat_protection = HANDS - cold_protection = HANDS - species_restricted = null - gender = PLURAL diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm deleted file mode 100644 index 4a71f6c67bc..00000000000 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ /dev/null @@ -1,335 +0,0 @@ -// Interface for humans. -/obj/item/rig/verb/hardsuit_interface() - set name = "Open Hardsuit Interface" - set desc = "Open the hardsuit system interface." - set category = "Hardsuit" - set src = usr.contents - - if(wearer && wearer.back == src) - ui_interact(usr) - -/obj/item/rig/verb/toggle_vision() - set name = "Toggle Visor" - set desc = "Turns your rig visor off or on." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_power_cost(usr)) - return - - if(!(flags & NODROP)) - to_chat(usr, "The suit is not active.") - return - - if(!check_suit_access(usr)) - return - - if(!visor) - to_chat(usr, "The hardsuit does not have a configurable visor.") - return - - var/mob/M = usr - if(M.incapacitated()) - return - - if(!visor.active) - visor.activate() - else - visor.deactivate() - -/obj/item/rig/proc/toggle_helmet() - set name = "Toggle Helmet" - set desc = "Deploys or retracts your helmet." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - toggle_piece("helmet", usr) - -/obj/item/rig/proc/toggle_chest() - set name = "Toggle Chestpiece" - set desc = "Deploys or retracts your chestpiece." - set category = "Hardsuit" - set src = usr.contents - - if(!check_suit_access(usr)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - toggle_piece("chest", usr) - -/obj/item/rig/proc/toggle_gauntlets() - set name = "Toggle Gauntlets" - set desc = "Deploys or retracts your gauntlets." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - toggle_piece("gauntlets", usr) - -/obj/item/rig/proc/toggle_boots() - set name = "Toggle Boots" - set desc = "Deploys or retracts your boots." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - toggle_piece("boots", usr) - -/obj/item/rig/verb/deploy_suit() - set name = "Deploy Hardsuit" - set desc = "Deploys helmet, gloves and boots all at once." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - if(!check_power_cost(usr)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - deploy(wearer, usr) - -/obj/item/rig/verb/toggle_seals_verb() - set name = "Toggle Hardsuit Seals" - set desc = "Seals or unseals your rig." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - if(flags & NODROP) - unseal(usr) - else - seal(usr) - -/obj/item/rig/verb/switch_vision_mode() - set name = "Switch Vision Mode" - set desc = "Switches between available vision modes." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - if(!(flags & NODROP)) - to_chat(usr, "The suit is not active.") - return - - if(!visor) - to_chat(usr, "The hardsuit does not have a configurable visor.") - return - - var/mob/M = usr - if(M.incapacitated()) - return - - if(!visor.active) - visor.activate() - - if(!visor.active) - to_chat(usr, "The visor is suffering a hardware fault and cannot be configured.") - return - - visor.engage() - -/obj/item/rig/verb/alter_voice() - set name = "Configure Voice Synthesiser" - set desc = "Toggles or configures your voice synthesizer." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!(flags & NODROP)) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!speech) - to_chat(usr, "The hardsuit does not have a speech synthesiser.") - return - - var/mob/M = usr - if(M.incapacitated()) - return - - speech.engage() - -/obj/item/rig/verb/select_module() - set name = "Select Module" - set desc = "Selects a module as your primary system." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - if(!(flags & NODROP)) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - var/mob/M = usr - if(M.incapacitated()) - return - - var/list/selectable = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.selectable) - selectable |= module - - var/obj/item/rig_module/module = input("Which module do you wish to select?") as null|anything in selectable - - if(!istype(module)) - selected_module = null - to_chat(usr, "Primary system is now: deselected.") - return - - selected_module = module - to_chat(usr, "Primary system is now: [selected_module.interface_name].") - -/obj/item/rig/verb/toggle_module() - set name = "Toggle Module" - set desc = "Toggle a system module." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - if(!(flags & NODROP)) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - var/mob/M = usr - if(M.incapacitated()) - return - - var/list/selectable = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.toggleable) - selectable |= module - - var/obj/item/rig_module/module = input("Which module do you wish to toggle?") as null|anything in selectable - - if(!istype(module)) - return - - if(module.active) - to_chat(usr, "You attempt to deactivate \the [module.interface_name].") - module.deactivate() - else - to_chat(usr, "You attempt to activate \the [module.interface_name].") - module.activate() - -/obj/item/rig/verb/engage_module() - set name = "Engage Module" - set desc = "Engages a system module." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!(flags & NODROP)) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - var/mob/M = usr - if(M.incapacitated()) - return - - var/list/selectable = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.usable) - selectable |= module - - var/obj/item/rig_module/module = input("Which module do you wish to engage?") as null|anything in selectable - - if(!istype(module)) - return - - to_chat(usr, "You attempt to engage the [module.interface_name].") - module.engage() diff --git a/code/modules/clothing/spacesuits/rig/rig_wiring.dm b/code/modules/clothing/spacesuits/rig/rig_wiring.dm deleted file mode 100644 index 9d3108ac016..00000000000 --- a/code/modules/clothing/spacesuits/rig/rig_wiring.dm +++ /dev/null @@ -1,70 +0,0 @@ -/datum/wires/rig - random = 1 - holder_type = /obj/item/rig - wire_count = 5 - -#define RIG_SECURITY 1 -#define RIG_AI_OVERRIDE 2 -#define RIG_SYSTEM_CONTROL 4 -#define RIG_INTERFACE_LOCK 8 -#define RIG_INTERFACE_SHOCK 16 -/* - * Rig security can be snipped to disable ID access checks on rig. - * Rig AI override can be pulsed to toggle whether or not the AI can take control of the suit. - * System control can be pulsed to toggle some malfunctions. - * Interface lock can be pulsed to toggle whether or not the interface can be accessed. - */ - -/datum/wires/rig/UpdateCut(var/index, var/mended) - - var/obj/item/rig/rig = holder - switch(index) - if(RIG_SECURITY) - if(mended) - rig.req_access = initial(rig.req_access) - rig.req_one_access = initial(rig.req_one_access) - if(RIG_INTERFACE_SHOCK) - rig.electrified = mended ? 0 : -1 - rig.shock(usr,100) - -/datum/wires/rig/UpdatePulsed(var/index) - - var/obj/item/rig/rig = holder - switch(index) - if(RIG_SECURITY) - rig.security_check_enabled = !rig.security_check_enabled - rig.visible_message("\The [rig] twitches as several suit locks [rig.security_check_enabled?"close":"open"].") - if(RIG_AI_OVERRIDE) - rig.ai_override_enabled = !rig.ai_override_enabled - rig.visible_message("A small red light on [rig] [rig.ai_override_enabled?"goes dead":"flickers on"].") - if(RIG_SYSTEM_CONTROL) - rig.malfunctioning += 10 - if(rig.malfunction_delay <= 0) - rig.malfunction_delay = 20 - rig.shock(usr,100) - if(RIG_INTERFACE_LOCK) - rig.interface_locked = !rig.interface_locked - rig.visible_message("\The [rig] clicks audibly as the software interface [rig.interface_locked?"darkens":"brightens"].") - if(RIG_INTERFACE_SHOCK) - if(rig.electrified != -1) - rig.electrified = 30 - rig.shock(usr,100) - -/datum/wires/rig/GetWireName(index) - switch(index) - if(RIG_SECURITY) - return "ID check" - if(RIG_AI_OVERRIDE) - return "AI control" - if(RIG_SYSTEM_CONTROL) - return "System control" - if(RIG_INTERFACE_LOCK) - return "Interface lock" - if(RIG_INTERFACE_SHOCK) - return "Electrification" - -/datum/wires/rig/CanUse(var/mob/living/L) - var/obj/item/rig/rig = holder - if(rig.open) - return 1 - return 0 diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm deleted file mode 100644 index 25c784ba7dd..00000000000 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/rig/unathi - name = "NT breacher chassis control module" - desc = "A cheap NT knock-off of an Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow." - suit_type = "NT breacher" - icon_state = "breacher_rig_cheap" - armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 45, bio = 100, rad = 50) - emp_protection = -20 - active_slowdown = 6 - offline_slowdown = 10 - vision_restriction = 1 - offline_vision_restriction = 2 - - chest_type = /obj/item/clothing/suit/space/new_rig/unathi - helm_type = /obj/item/clothing/head/helmet/space/new_rig/unathi - glove_type = /obj/item/clothing/gloves/rig/unathi - boot_type = /obj/item/clothing/shoes/magboots/rig/unathi - -/obj/item/rig/unathi/fancy - name = "breacher chassis control module" - desc = "An authentic Unathi breacher chassis. Huge, bulky and absurdly heavy. It must be like wearing a tank." - suit_type = "breacher chassis" - icon_state = "breacher_rig" - armor = list(melee = 45, bullet = 45, laser = 45, energy = 45, bomb = 45, bio = 100, rad = 75) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow. //Whoever made this was on meth - vision_restriction = 0 - -/obj/item/clothing/head/helmet/space/new_rig/unathi - icon = 'icons/obj/clothing/species/unathi/hats.dmi' - species_restricted = list("Unathi") - -/obj/item/clothing/suit/space/new_rig/unathi - icon = 'icons/obj/clothing/species/unathi/suits.dmi' - species_restricted = list("Unathi") - -/obj/item/clothing/gloves/rig/unathi - icon = 'icons/obj/clothing/species/unathi/gloves.dmi' - species_restricted = list("Unathi") - sprite_sheets = list( - "Unathi" = 'icons/mob/species/unathi/gloves.dmi' - ) - -/obj/item/clothing/shoes/magboots/rig/unathi - icon = 'icons/obj/clothing/species/unathi/shoes.dmi' - species_restricted = list("Unathi") - sprite_sheets = list( - "Unathi" = 'icons/mob/species/unathi/feet.dmi' - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm deleted file mode 100644 index cc05c8af2f7..00000000000 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/clothing/head/helmet/space/new_rig/combat - -/obj/item/rig/combat - name = "combat hardsuit control module" - desc = "A sleek and dangerous hardsuit for active combat." - icon_state = "security_rig" - suit_type = "combat hardsuit" - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) - active_slowdown = 1 - offline_slowdown = 3 - offline_vision_restriction = 1 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/combat - allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/baton) - - -/obj/item/rig/combat/equipped - - - initial_modules = list( - /obj/item/rig_module/mounted, - /obj/item/rig_module/vision/thermal, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/ai_container, - // /obj/item/rig_module/power_sink, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/chem_dispenser/combat - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/ert_suits.dm b/code/modules/clothing/spacesuits/rig/suits/ert_suits.dm deleted file mode 100644 index 5485e1fe882..00000000000 --- a/code/modules/clothing/spacesuits/rig/suits/ert_suits.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/clothing/head/helmet/space/new_rig/ert - -/obj/item/rig/ert - name = "ERT-C hardsuit control module" - desc = "A suit worn by the commander of an Emergency Response Team. Has blue highlights. Armoured and space ready." - suit_type = "ERT commander" - icon_state = "ert_commander_rig" - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/ert - - req_access = list(ACCESS_CENT_SPECOPS) - - armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50) - allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/t_scanner, /obj/item/rcd, /obj/item/crowbar, \ - /obj/item/screwdriver, /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, /obj/item/multitool, \ - /obj/item/radio, /obj/item/analyzer,/obj/item/storage/briefcase/inflatable, /obj/item/melee/baton, /obj/item/gun, \ - /obj/item/storage/firstaid, /obj/item/reagent_containers/hypospray, /obj/item/roller) - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/datajack, - ) - -/obj/item/rig/ert/engineer - name = "ERT-E suit control module" - desc = "A suit worn by the engineering division of an Emergency Response Team. Has orange highlights. Armoured and space ready." - suit_type = "ERT engineer" - icon_state = "ert_engineer_rig" - siemens_coefficient = 0 - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/plasmacutter, - // /obj/item/rig_module/device/rcd - ) - -/obj/item/rig/ert/medical - name = "ERT-M suit control module" - desc = "A suit worn by the medical division of an Emergency Response Team. Has white highlights. Armoured and space ready." - suit_type = "ERT medic" - icon_state = "ert_medical_rig" - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/chem_dispenser/injector - ) - -/obj/item/rig/ert/security - name = "ERT-S suit control module" - desc = "A suit worn by the security division of an Emergency Response Team. Has red highlights. Armoured and space ready." - suit_type = "ERT security" - icon_state = "ert_security_rig" - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/mounted/egun, - ) - -/obj/item/rig/ert/assetprotection - name = "Heavy Asset Protection suit control module" - desc = "A heavy suit worn by the highest level of Asset Protection, don't mess with the person wearing this. Armoured and space ready." - suit_type = "heavy asset protection" - icon_state = "asset_protection_rig" - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/vision/multi, - /obj/item/rig_module/mounted/egun, - /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/device/plasmacutter, - // /obj/item/rig_module/device/rcd, - /obj/item/rig_module/datajack - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm deleted file mode 100644 index d76691daf57..00000000000 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ /dev/null @@ -1,120 +0,0 @@ -// Light rigs are not space-capable, but don't suffer excessive slowdown or sight issues when depowered. -/obj/item/rig/light - name = "light suit control module" - desc = "A lighter, less armoured rig suit." - icon_state = "ninja_rig" - suit_type = "light suit" - allowed = list(/obj/item/gun,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank,/obj/item/stock_parts/cell) - emp_protection = 10 - active_slowdown = 0 - flags = STOPSPRESSUREDMAGE | THICKMATERIAL - offline_slowdown = 0 - offline_vision_restriction = 0 - - chest_type = /obj/item/clothing/suit/space/new_rig/light - helm_type = /obj/item/clothing/head/helmet/space/new_rig/light - boot_type = /obj/item/clothing/shoes/magboots/rig/light - glove_type = /obj/item/clothing/gloves/rig/light - -/obj/item/clothing/suit/space/new_rig/light - name = "suit" - breach_threshold = 18 //comparable to voidsuits - -/obj/item/clothing/gloves/rig/light - name = "gloves" - -/obj/item/clothing/shoes/magboots/rig/light - name = "shoes" - -/obj/item/clothing/head/helmet/space/new_rig/light - name = "hood" - -/obj/item/rig/light/hacker - name = "cybersuit control module" - suit_type = "cyber" - desc = "An advanced powered armour suit with many cyberwarfare enhancements. Comes with built-in insulated gloves for safely tampering with electronics." - icon_state = "hacker_rig" - - req_access = list(ACCESS_SYNDICATE) - - airtight = 0 - seal_delay = 5 //not being vaccum-proof has an upside I guess - - helm_type = /obj/item/clothing/head/lightrig/hacker - chest_type = /obj/item/clothing/suit/lightrig/hacker - glove_type = /obj/item/clothing/gloves/lightrig/hacker - boot_type = /obj/item/clothing/shoes/lightrig/hacker - - initial_modules = list( - /obj/item/rig_module/ai_container, - // /obj/item/rig_module/power_sink, - /obj/item/rig_module/datajack, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/voice, - /obj/item/rig_module/vision, - ) - -//The cybersuit is not space-proof. It does however, have good siemens_coefficient values -/obj/item/clothing/head/lightrig/hacker - name = "HUD" - siemens_coefficient = 0.4 - flags = 0 - -/obj/item/clothing/suit/lightrig/hacker - siemens_coefficient = 0.4 - -/obj/item/clothing/shoes/lightrig/hacker - siemens_coefficient = 0.4 - flags = NOSLIP //All the other rigs have magboots anyways, hopefully gives the hacker suit something more going for it. - -/obj/item/clothing/gloves/lightrig/hacker - siemens_coefficient = 0 - -/obj/item/rig/light/ninja - name = "ominous suit control module" - suit_type = "ominous" - desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." - icon_state = "ninja_rig" - armor = list(melee = 50, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 30) - emp_protection = 40 //change this to 30 if too high. - active_slowdown = 0 - - chest_type = /obj/item/clothing/suit/space/new_rig/light/ninja - glove_type = /obj/item/clothing/gloves/rig/light/ninja - - req_access = list(ACCESS_SYNDICATE) - - initial_modules = list( - /obj/item/rig_module/teleporter, - /obj/item/rig_module/stealth_field, - /obj/item/rig_module/mounted/energy_blade, - /obj/item/rig_module/vision, - /obj/item/rig_module/voice, - /obj/item/rig_module/chem_dispenser, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/fabricator, - /obj/item/rig_module/ai_container, - // /obj/item/rig_module/power_sink, - /obj/item/rig_module/datajack, - /obj/item/rig_module/self_destruct - ) - -/obj/item/clothing/gloves/rig/light/ninja - name = "insulated gloves" - siemens_coefficient = 0 - -/obj/item/clothing/suit/space/new_rig/light/ninja - breach_threshold = 38 //comparable to regular hardsuits - -/obj/item/rig/light/stealth - name = "stealth suit control module" - suit_type = "stealth" - desc = "A highly advanced and expensive suit designed for covert operations." - icon_state = "ninja_rig" //supposed to be "stealth_rig", but as it currently only has a semi-copied ninja rig sprite, we can just use them directly. - - req_access = list(ACCESS_SYNDICATE) - - initial_modules = list( - /obj/item/rig_module/stealth_field, - /obj/item/rig_module/vision - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm deleted file mode 100644 index 95abba52df9..00000000000 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/clothing/head/helmet/space/new_rig/merc - -/obj/item/rig/merc - name = "crimson hardsuit control module" - desc = "A blood-red hardsuit featuring some fairly illegal technology." - icon_state = "merc_rig" - suit_type = "crimson hardsuit" - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) - active_slowdown = 1 - offline_slowdown = 3 - offline_vision_restriction = 1 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/merc - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/gun,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/restraints/handcuffs) - - initial_modules = list( - /obj/item/rig_module/mounted, - /obj/item/rig_module/vision/thermal, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/ai_container, - // /obj/item/rig_module/power_sink, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/chem_dispenser/combat, - // /obj/item/rig_module/fabricator/energy_net - ) - -//Has most of the modules removed -/obj/item/rig/merc/empty - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/electrowarfare_suite, //might as well - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm deleted file mode 100644 index c4bbd059fae..00000000000 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ /dev/null @@ -1,223 +0,0 @@ -/obj/item/clothing/head/helmet/space/new_rig/industrial - -/obj/item/clothing/head/helmet/space/new_rig/ce - -/obj/item/clothing/head/helmet/space/new_rig/eva - -/obj/item/clothing/head/helmet/space/new_rig/hazmat - -/obj/item/clothing/head/helmet/space/new_rig/medical - -/obj/item/clothing/head/helmet/space/new_rig/hazard - -/obj/item/rig/internalaffairs - name = "augmented tie" - suit_type = "augmented suit" - desc = "Prepare for paperwork." - icon_state = "internalaffairs_rig" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - active_slowdown = 0 - offline_slowdown = 0 - offline_vision_restriction = 0 - - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/briefcase,/obj/item/storage/secure/briefcase) - - req_access = list() - req_one_access = list() - - glove_type = null - helm_type = null - boot_type = null - -/obj/item/rig/internalaffairs/equipped - - req_access = list(ACCESS_LAWYER) - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/device/paperdispenser, - /obj/item/rig_module/device/pen, - /obj/item/rig_module/device/stamp - ) - - glove_type = null - helm_type = null - boot_type = null - -/obj/item/rig/industrial - name = "industrial suit control module" - suit_type = "industrial hardsuit" - desc = "A heavy, powerful rig used by construction crews and mining corporations." - icon_state = "engineering_rig" - armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) - active_slowdown = 3 - offline_slowdown = 10 - offline_vision_restriction = 2 - emp_protection = -20 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/industrial - - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/bag/ore,/obj/item/t_scanner,/obj/item/pickaxe, /obj/item/rcd) - - req_access = list() - req_one_access = list() - - -/obj/item/rig/industrial/equipped - - initial_modules = list( - /obj/item/rig_module/device/plasmacutter, - /obj/item/rig_module/device/drill, - /obj/item/rig_module/device/orescanner, - // /obj/item/rig_module/device/rcd, - /obj/item/rig_module/vision/meson - ) - -/obj/item/rig/eva - name = "EVA suit control module" - suit_type = "EVA hardsuit" - desc = "A light rig for repairs and maintenance to the outside of habitats and vessels." - icon_state = "eva_rig" - active_slowdown = 0 - offline_slowdown = 1 - offline_vision_restriction = 1 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/eva - - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/t_scanner,/obj/item/rcd) - - req_access = list() - req_one_access = list() - -/obj/item/rig/eva/equipped - - initial_modules = list( - /obj/item/rig_module/device/plasmacutter, - /obj/item/rig_module/maneuvering_jets, - // /obj/item/rig_module/device/rcd, - /obj/item/rig_module/vision/meson - ) - -//Chief Engineer's rig. This is sort of a halfway point between the old hardsuits (voidsuits) and the rig class. -/obj/item/rig/ce - - name = "advanced voidsuit control module" - suit_type = "advanced voidsuit" - desc = "An advanced voidsuit that protects against hazardous, low pressure environments. Shines with a high polish." - icon_state = "ce_rig" - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90) - active_slowdown = 0 - offline_slowdown = 0 - offline_vision_restriction = 0 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/ce - - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/bag/ore,/obj/item/t_scanner,/obj/item/pickaxe, /obj/item/rcd) - - - req_access = list() - req_one_access = list() - - boot_type = null - glove_type = null - -/obj/item/rig/ce/equipped - - req_access = list(ACCESS_CE) - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/plasmacutter, - // /obj/item/rig_module/device/rcd, - /obj/item/rig_module/vision/meson - ) - - chest_type = /obj/item/clothing/suit/space/new_rig/ce - boot_type = null - glove_type = null - -/obj/item/clothing/suit/space/new_rig/ce - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/obj/item/rig/hazmat - - name = "AMI control module" - suit_type = "hazmat hardsuit" - desc = "An Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it." - icon_state = "science_rig" - active_slowdown = 1 - offline_vision_restriction = 1 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/hazmat - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/ert - - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/pickaxe,/obj/item/healthanalyzer,/obj/item/gps,/obj/item/radio/beacon) - - req_access = list() - req_one_access = list() - -/obj/item/rig/hazmat/equipped - - req_access = list(ACCESS_RD) - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets) - -/obj/item/rig/medical - - name = "rescue suit control module" - suit_type = "rescue hardsuit" - desc = "A durable suit designed for medical rescue in high risk areas." - icon_state = "medical_rig" - armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50) - active_slowdown = 1 - offline_vision_restriction = 1 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/medical - - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/firstaid,/obj/item/healthanalyzer,/obj/item/stack/medical,/obj/item/roller ) - - req_access = list() - req_one_access = list() - -/obj/item/rig/medical/equipped - - initial_modules = list( - /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/vision/medhud - ) - -/obj/item/rig/hazard - name = "hazard hardsuit control module" - suit_type = "hazard hardsuit" - desc = "A Security hardsuit designed for prolonged EVA in dangerous environments." - icon_state = "hazard_rig" - armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50) - active_slowdown = 1 - offline_slowdown = 3 - offline_vision_restriction = 1 - - helm_type = /obj/item/clothing/head/helmet/space/new_rig/hazard - - allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/baton) - - req_access = list() - req_one_access = list() - - -/obj/item/rig/hazard/equipped - - initial_modules = list( - /obj/item/rig_module/vision/sechud, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/mounted/taser - ) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 16014e7c353..a17d7b8ebbd 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -226,13 +226,6 @@ brainmob.emp_damage += rand(0,10) ..() -/obj/item/mmi/relaymove(var/mob/user, var/direction) - if(user.stat || user.stunned) - return - var/obj/item/rig/rig = src.get_rig() - if(rig) - rig.forced_move(direction, user) - /obj/item/mmi/Destroy() if(isrobot(loc)) var/mob/living/silicon/robot/borg = loc diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index d213ee7206f..4a0b9ea55b1 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -109,9 +109,6 @@ // log_world("k") sql_report_death(src) - if(wearing_rig) - wearing_rig.notify_ai("Warning: user death event. Mobility control passed to integrated intelligence system.") - /mob/living/carbon/human/update_revive() . = ..() if(. && healthdoll) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 16f1738d2f6..e07930f1241 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -5,7 +5,6 @@ icon = 'icons/mob/human.dmi' icon_state = "body_m_s" deathgasp_on_death = TRUE - var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. /mob/living/carbon/human/New(loc) icon = null // This is now handled by overlays -- we just keep an icon for the sake of the map editor. @@ -182,13 +181,6 @@ stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) - if(istype(back, /obj/item/rig)) - var/obj/item/rig/suit = back - var/cell_status = "ERROR" - if(suit.cell) - cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]" - stat(null, "Suit charge: [cell_status]") - // I REALLY need to split up status panel things into datums var/mob/living/simple_animal/borer/B = has_brain_worms() if(B && B.controlling) @@ -963,16 +955,6 @@ var/obj/item/clothing/mask/MT = src.wear_mask tinted += MT.tint - //god help me - if(istype(back, /obj/item/rig)) - var/obj/item/rig/O = back - if(O.helmet && O.helmet == head && (O.helmet.body_parts_covered & HEAD)) - if((O.offline && O.offline_vision_restriction == 1) || (!O.offline && O.vision_restriction == 1)) - tinted = 2 - if((O.offline && O.offline_vision_restriction == 2) || (!O.offline && O.vision_restriction == 2)) - tinted = 3 - //im so sorry - return tinted diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index f9058065fb0..621d8330761 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -129,13 +129,6 @@ O.heal_damage(0, -amount, internal = 0, robo_repair = O.is_robotic(), updating_health = updating_health) return STATUS_UPDATE_HEALTH - -/mob/living/carbon/human/Paralyse(amount) - // Notify our AI if they can now control the suit. - if(wearing_rig && !stat && paralysis < amount) //We are passing out right this second. - wearing_rig.notify_ai("Warning: user consciousness failure. Mobility control passed to integrated intelligence system.") - return ..() - /mob/living/carbon/human/adjustCloneLoss(amount) if(dna.species && amount > 0) amount = amount * dna.species.clone_mod @@ -342,7 +335,5 @@ This function restores all organs. ..(damage, damagetype, def_zone, blocked) return 1 - //Handle BRUTE and BURN damage - handle_suit_punctures(damagetype, damage) //Handle species apply_damage procs return dna.species.apply_damage(damage, damagetype, def_zone, blocked, src, sharp, used_weapon) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 21a3e8bf274..6141ad02f9f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -531,17 +531,6 @@ emp_act w_uniform.add_mob_blood(source) update_inv_w_uniform() -/mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage) - - if(!wear_suit) return - if(!istype(wear_suit,/obj/item/clothing/suit/space)) return - if(damtype != BURN && damtype != BRUTE) return - - var/obj/item/clothing/suit/space/SS = wear_suit - var/penetrated_dam = max(0,(damage - max(0,(SS.breach_threshold - SS.damage)))) - - if(penetrated_dam) SS.create_breaches(damtype, penetrated_dam) - /mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) if(HAS_TRAIT(user, TRAIT_PACIFISM)) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 5e1b5163a24..7cb33bce249 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -16,12 +16,6 @@ else if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) var/obj/item/clothing/suit/space/hardsuit/C = wear_suit thrust = C.jetpack - else if(istype(back,/obj/item/rig)) - var/obj/item/rig/rig = back - for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules) - thrust = module.jets - break - if(thrust) if((movement_dir || thrust.stabilizers) && thrust.allow_thrust(0.01, src)) return 1 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 90653a6750b..15dfe74880e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -302,14 +302,6 @@ if(!(head && head.flags & AIRTIGHT)) //if NOT (head AND head.flags CONTAIN AIRTIGHT) null_internals = 1 //not wearing a mask or suitable helmet - if(istype(back, /obj/item/rig)) //wearing a rigsuit - var/obj/item/rig/rig = back //needs to be typecasted because this doesn't use get_rig() for some reason - if(rig.offline && (rig.air_supply && internal == rig.air_supply)) //if rig IS offline AND (rig HAS air_supply AND internal IS air_supply) - null_internals = 1 //offline suits do not breath - - else if(rig.air_supply && internal == rig.air_supply) //if rig HAS air_supply AND internal IS rig air_supply - skip_contents_check = 1 //skip contents.Find() check, the oxygen is valid even being outside of the mob - if(!contents.Find(internal) && (!skip_contents_check)) //if internal NOT IN contents AND skip_contents_check IS false null_internals = 1 //not a rigsuit and your oxygen is gone diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 01a9990ebd8..957b0828725 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -62,11 +62,6 @@ return ..() /mob/living/carbon/human/proc/HasVoiceChanger() - if(istype(back, /obj/item/rig)) - var/obj/item/rig/rig = back - if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice) - return rig.speech.voice_holder.voice - for(var/obj/item/gear in list(wear_mask, wear_suit, head)) if(!gear) continue diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 0914852b131..6b17f64591c 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -817,20 +817,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(!isnull(hat.lighting_alpha)) H.lighting_alpha = min(hat.lighting_alpha, H.lighting_alpha) - if(istype(H.back, /obj/item/rig)) ///aghhh so snowflakey - var/obj/item/rig/rig = H.back - if(rig.visor) - if(!rig.helmet || (H.head && rig.helmet == H.head)) - if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses) - var/obj/item/clothing/glasses/G = rig.visor.vision.glasses - if(istype(G)) - H.sight |= G.vision_flags - H.see_in_dark = max(G.see_in_dark, H.see_in_dark) - H.see_invisible = min(G.invis_view, H.see_invisible) - - if(!isnull(G.lighting_alpha)) - H.lighting_alpha = min(G.lighting_alpha, H.lighting_alpha) - if(H.vision_type) H.sight |= H.vision_type.sight_flags H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1f38e564928..f5496652dad 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -964,10 +964,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) var/mutable_appearance/standing if(back.icon_override) standing = mutable_appearance(back.icon_override, "[back.icon_state]", layer = -BACK_LAYER) - else if(istype(back, /obj/item/rig)) - //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. - var/obj/item/rig/rig = back - standing = rig.mob_icon else if(back.sprite_sheets && back.sprite_sheets[dna.species.name]) standing = mutable_appearance(back.sprite_sheets[dna.species.name], "[back.icon_state]", layer = -BACK_LAYER) else diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index f3d23ca3f51..9d4c8a3c06d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -175,13 +175,6 @@ AM.setDir(current_dir) now_pushing = FALSE -/mob/living/Stat() - . = ..() - if(. && get_rig_stats) - var/obj/item/rig/rig = get_rig() - if(rig) - SetupStat(rig) - /mob/living/proc/can_track(mob/living/user) //basic fast checks go first. When overriding this proc, I recommend calling ..() at the end. var/turf/T = get_turf(src) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 737298e2815..7f6ed094dce 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1166,16 +1166,6 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( /mob/living/silicon/ai/can_buckle() return FALSE -// Pass lying down or getting up to our pet human, if we're in a rig. -/mob/living/silicon/ai/lay_down() - set name = "Rest" - set category = "IC" - - resting = 0 - var/obj/item/rig/rig = get_rig() - if(rig) - rig.force_rest(src) - /mob/living/silicon/ai/switch_to_camera(obj/machinery/camera/C) if(!C.can_use() || !is_in_chassis()) return FALSE diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 3d1293d2a34..2a5a7b0aa08 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -435,9 +435,6 @@ // Pass lying down or getting up to our pet human, if we're in a rig. if(stat == CONSCIOUS && istype(loc,/obj/item/paicard)) resting = 0 - var/obj/item/rig/rig = get_rig() - if(istype(rig)) - rig.force_rest(src) else resting = !resting to_chat(src, "You are now [resting ? "resting" : "getting up"]") diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index ce0abc8cc69..695ab02c43b 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -15,7 +15,6 @@ ammo_x_offset = 2 var/shaded_charge = 0 //if this gun uses a stateful charge bar for more detail var/selfcharge = 0 - var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically var/charge_tick = 0 var/charge_delay = 4 @@ -68,11 +67,6 @@ charge_tick = 0 if(!cell) return // check if we actually need to recharge - var/obj/item/ammo_casing/energy/E = ammo_type[select] - if(use_external_power) - var/obj/item/stock_parts/cell/external = get_external_cell() - if(!external || !external.use(E.e_cost)) //Take power from the borg... - return //Note, uses /10 because of shitty mods to the cell system cell.give(100) //... to recharge the shot on_recharge() update_icon() @@ -207,14 +201,3 @@ var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot if(R.cell.use(shot.e_cost)) //Take power from the borg... cell.give(shot.e_cost) //... to recharge the shot - -/obj/item/gun/energy/proc/get_external_cell() - if(istype(loc, /obj/item/rig_module)) - var/obj/item/rig_module/module = loc - if(module.holder && module.holder.wearer) - var/mob/living/carbon/human/H = module.holder.wearer - if(istype(H) && H.back) - var/obj/item/rig/suit = H.back - if(istype(suit)) - return suit.cell - return null diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 3e9c882458e..9106d80ef98 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -95,12 +95,6 @@ ..() damage = min(damage+7, 100) -/obj/item/gun/energy/lasercannon/mounted - name = "mounted laser cannon" - selfcharge = 1 - use_external_power = 1 - charge_delay = 10 - /obj/item/gun/energy/lasercannon/cyborg /obj/item/gun/energy/lasercannon/cyborg/newshot() diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 2df2d877c53..3d9925da974 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -21,11 +21,6 @@ /obj/item/gun/energy/gun/cyborg/emp_act() return -/obj/item/gun/energy/gun/mounted - name = "mounted energy gun" - selfcharge = 1 - use_external_power = 1 - /obj/item/gun/energy/gun/mini name = "miniature energy gun" desc = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: disable and kill." diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index e2eb9e84057..da72c971130 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -112,10 +112,6 @@ max_mod_capacity = 0 empty_state = null -/obj/item/gun/energy/kinetic_accelerator/crossbow/ninja - name = "energy dart thrower" - ammo_type = list(/obj/item/ammo_casing/energy/dart) - /obj/item/gun/energy/kinetic_accelerator/crossbow/large name = "energy crossbow" desc = "A reverse engineered weapon using syndicate technology." diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 70bb8be7e46..141366dd5d9 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -7,11 +7,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode) ammo_x_offset = 3 -/obj/item/gun/energy/taser/mounted - name = "mounted taser gun" - selfcharge = 1 - use_external_power = 1 - /obj/item/gun/energy/shock_revolver name = "tesla revolver" desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." diff --git a/code/modules/surgery/rig_removal.dm b/code/modules/surgery/rig_removal.dm deleted file mode 100644 index de15eacf8f3..00000000000 --- a/code/modules/surgery/rig_removal.dm +++ /dev/null @@ -1,59 +0,0 @@ -//Procedures in this file: Unsealing a Rig. - -/datum/surgery/rigsuit - name = "Rig Unsealing" - steps = list(/datum/surgery_step/rigsuit) - possible_locs = list("chest") - -/datum/surgery/rigsuit/can_start(mob/user, mob/living/carbon/target) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - var/obj/item/backitem = H.get_item_by_slot(slot_back) - if(istype(backitem,/obj/item/rig)) //Check if we have a rig to operate on - if(backitem.flags&NODROP) //Check if the rig is sealed, if not, we don't need to operate - return 1 - return 0 - -//Bay12 removal -/datum/surgery_step/rigsuit - name="Cut Seals" - allowed_tools = list( - /obj/item/weldingtool = 80, - /obj/item/circular_saw = 60, - /obj/item/gun/energy/plasmacutter = 100 - ) - - can_infect = 0 - blood_level = 0 - - time = 50 - -/datum/surgery_step/hardsuit/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(!istype(target)) - return 0 - if(tool.tool_behaviour == TOOL_WELDER) - if(!tool.tool_use_check(user, 0)) - return - if(!tool.use(1)) - return - return (target_zone == "chest") && istype(target.back, /obj/item/rig) && (target.back.flags&NODROP) - -/datum/surgery_step/rigsuit/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts cutting through the support systems of [target]'s [target.back] with \the [tool]." , \ - "You start cutting through the support systems of [target]'s [target.back] with \the [tool].") - ..() - -/datum/surgery_step/rigsuit/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/rig/rig = target.back - if(!istype(rig)) - return - rig.reset() - user.visible_message("[user] has cut through the support systems of [target]'s [rig] with \the [tool].", \ - "You have cut through the support systems of [target]'s [rig] with \the [tool].") - return 1 - -/datum/surgery_step/rigsuit/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ - "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") - return 0 diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index b66ec2d8aaf..294e98d38d0 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -111,7 +111,7 @@ prob_chance *= get_location_modifier(target) - if(!ispath(surgery.steps[surgery.status], /datum/surgery_step/robotics) && !ispath(surgery.steps[surgery.status], /datum/surgery_step/rigsuit))//Repairing robotic limbs doesn't hurt, and neither does cutting someone out of a rig + if(!ispath(surgery.steps[surgery.status], /datum/surgery_step/robotics))//Repairing robotic limbs doesn't hurt, and neither does cutting someone out of a rig if(ishuman(target)) var/mob/living/carbon/human/H = target //typecast to human prob_chance *= get_pain_modifier(H)//operating on conscious people is hard. diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index e6f132a73a5..3892442c6ea 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 6d6165509c8..66d1474d61a 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 88b28aff5a9..5200ad72e5a 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/rig_back.dmi b/icons/mob/rig_back.dmi deleted file mode 100644 index 923939d323e..00000000000 Binary files a/icons/mob/rig_back.dmi and /dev/null differ diff --git a/icons/mob/rig_modules.dmi b/icons/mob/rig_modules.dmi deleted file mode 100644 index 3d18b5435ce..00000000000 Binary files a/icons/mob/rig_modules.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi index e17fa4174c5..ef05daf5115 100644 Binary files a/icons/mob/species/skrell/helmet.dmi and b/icons/mob/species/skrell/helmet.dmi differ diff --git a/icons/mob/species/tajaran/helmet.dmi b/icons/mob/species/tajaran/helmet.dmi index 298ff823ea4..00c3f1d2bdc 100644 Binary files a/icons/mob/species/tajaran/helmet.dmi and b/icons/mob/species/tajaran/helmet.dmi differ diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi index 2f7d8f34907..61929dcceda 100644 Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ diff --git a/icons/mob/species/unathi/helmet.dmi b/icons/mob/species/unathi/helmet.dmi index 1fc21dd1611..68f6171bb19 100644 Binary files a/icons/mob/species/unathi/helmet.dmi and b/icons/mob/species/unathi/helmet.dmi differ diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi index 14d1eaaa73a..eabd0f94672 100644 Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index d71fb9b1d21..52a619508be 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index f7f54357fdb..06bb96f43a5 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index f942f9fd8cd..c9ebceba369 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 30cdfae56ef..aae2d9df6fb 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 7400d5d63ef..6d116a6b02e 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi deleted file mode 100644 index 90b1873d58e..00000000000 Binary files a/icons/obj/rig_modules.dmi and /dev/null differ diff --git a/paradise.dme b/paradise.dme index 720c307cc53..93ee7b237f2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -136,7 +136,6 @@ #include "code\_onclick\observer.dm" #include "code\_onclick\other_mobs.dm" #include "code\_onclick\overmind.dm" -#include "code\_onclick\rig.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" #include "code\_onclick\hud\action_button.dm" @@ -1377,7 +1376,6 @@ #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\spacesuits\alien.dm" -#include "code\modules\clothing\spacesuits\breaches.dm" #include "code\modules\clothing\spacesuits\chronosuit.dm" #include "code\modules\clothing\spacesuits\ert.dm" #include "code\modules\clothing\spacesuits\hardsuit.dm" @@ -1385,24 +1383,6 @@ #include "code\modules\clothing\spacesuits\plasmamen.dm" #include "code\modules\clothing\spacesuits\syndi.dm" #include "code\modules\clothing\spacesuits\void.dm" -#include "code\modules\clothing\spacesuits\rig\rig.dm" -#include "code\modules\clothing\spacesuits\rig\rig_armormod.dm" -#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm" -#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm" -#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm" -#include "code\modules\clothing\spacesuits\rig\rig_wiring.dm" -#include "code\modules\clothing\spacesuits\rig\modules\combat.dm" -#include "code\modules\clothing\spacesuits\rig\modules\computer.dm" -#include "code\modules\clothing\spacesuits\rig\modules\modules.dm" -#include "code\modules\clothing\spacesuits\rig\modules\ninja.dm" -#include "code\modules\clothing\spacesuits\rig\modules\utility.dm" -#include "code\modules\clothing\spacesuits\rig\modules\vision.dm" -#include "code\modules\clothing\spacesuits\rig\suits\alien.dm" -#include "code\modules\clothing\spacesuits\rig\suits\combat.dm" -#include "code\modules\clothing\spacesuits\rig\suits\ert_suits.dm" -#include "code\modules\clothing\spacesuits\rig\suits\light.dm" -#include "code\modules\clothing\spacesuits\rig\suits\merc.dm" -#include "code\modules\clothing\spacesuits\rig\suits\station.dm" #include "code\modules\clothing\suits\alien.dm" #include "code\modules\clothing\suits\armor.dm" #include "code\modules\clothing\suits\bio.dm" @@ -2413,7 +2393,6 @@ #include "code\modules\surgery\other.dm" #include "code\modules\surgery\plastic_surgery.dm" #include "code\modules\surgery\remove_embedded_object.dm" -#include "code\modules\surgery\rig_removal.dm" #include "code\modules\surgery\robotics.dm" #include "code\modules\surgery\surgery.dm" #include "code\modules\surgery\tools.dm"