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"