diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm
index 7c74f77b054..37c88241173 100644
--- a/code/modules/clothing/spacesuits/breaches.dm
+++ b/code/modules/clothing/spacesuits/breaches.dm
@@ -92,7 +92,7 @@ var/global/list/breach_burn_descriptors = list(
if(!breaches)
breaches = list()
- if(damage > 25) return //We don't need to keep tracking it when it's at 250% pressure loss, really.
+ if(damage >= 25) return //We don't need to keep tracking it when it's at 250% pressure loss, really.
if(!loc) return
var/turf/T = get_turf(src)
@@ -125,7 +125,7 @@ var/global/list/breach_burn_descriptors = list(
var/datum/breach/B = new()
breaches += B
- B.class = min(amount,5)
+ B.class = min(amount,(5 - max(damage - 20,0))) //We cap the check at 25, this line could overshoot without the calculation if it gets enough dammage in one shot.
B.damtype = damtype
B.update_descriptor()
diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm
index 16ddf2bdd69..925beda23cd 100644
--- a/code/modules/clothing/spacesuits/rig/modules/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm
@@ -119,7 +119,7 @@
gun.attack_self(holder.wearer)
return 1
- gun.process_fire(target,holder.wearer)
+ gun.afterattack(target,holder.wearer)
return 1
/obj/item/rig_module/mounted/egun
diff --git a/code/modules/clothing/spacesuits/rig/modules/handheld.dm b/code/modules/clothing/spacesuits/rig/modules/handheld.dm
new file mode 100644
index 00000000000..1a8a66a5fc4
--- /dev/null
+++ b/code/modules/clothing/spacesuits/rig/modules/handheld.dm
@@ -0,0 +1,50 @@
+
+/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/device
+
+/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/weapon/bikehorn
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index 46471966aa7..aa1e644e506 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -94,7 +94,9 @@
*/
/obj/item/rig_module/device/New()
..()
- if(device_type) device = new device_type(src)
+ 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)
@@ -417,13 +419,15 @@
interface_desc = "Leave your mark."
engage_string = "Toggle stamp type"
usable = 1
- var/iastamp
- var/deniedstamp
+ 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/weapon/stamp/law(src)
deniedstamp = new /obj/item/weapon/stamp/denied(src)
+ iastamp.flags |= ABSTRACT
+ deniedstamp.flags |= ABSTRACT
device = iastamp
/obj/item/rig_module/device/stamp/engage(atom/target)
@@ -488,4 +492,4 @@
W.update_icon()
/obj/item/rig_module/welding_tank/proc/get_fuel()
- return reagents.get_reagent_amount("fuel")
\ No newline at end of file
+ return reagents.get_reagent_amount("fuel")
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 2ebd01a9162..0b9e87891d8 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -42,7 +42,7 @@
//Component/device holders.
var/obj/item/weapon/tank/air_supply // Air tank, if any.
- var/obj/item/clothing/shoes/boots = null // Deployable boots, if any.
+ var/obj/item/clothing/shoes/magboots/boots = null // Deployable 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.
@@ -76,6 +76,7 @@
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
@@ -126,14 +127,17 @@
if(helm_type)
helmet = new helm_type(src)
verbs |= /obj/item/weapon/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/weapon/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/weapon/rig/proc/toggle_chest
for(var/obj/item/piece in list(gloves,helmet,boots,chest))
@@ -183,6 +187,10 @@
/obj/item/weapon/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)]"
@@ -254,6 +262,7 @@
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()
@@ -269,6 +278,7 @@
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()
@@ -383,10 +393,14 @@
sealing = FALSE
if(failed_to_seal)
- for(var/obj/item/piece in list(helmet, boots, gloves, chest))
+ 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)
@@ -406,6 +420,10 @@
update_icon(1)
/obj/item/weapon/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
@@ -695,6 +713,8 @@
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/weapon/rig/proc/emergency_release
update_icon()
/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/user, var/deploy_mode, var/force)
@@ -705,15 +725,15 @@
if(isliving(uneq_piece.loc))
var/mob/living/L = uneq_piece.loc
L.unEquip(uneq_piece, 1)
- uneq_piece.flags &= ~NODROP
uneq_piece.forceMove(src)
return 0
if(sealing || !cell || !cell.charge)
return 0
- if(user == wearer && user.incapacitated()) // If the user isn't wearing the suit it's probably an AI.
- 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
@@ -752,7 +772,6 @@
if(to_strip)
to_strip.unEquip(use_obj, 1)
- use_obj.flags &= ~NODROP
use_obj.forceMove(src)
if(wearer)
to_chat(wearer, "Your [use_obj] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")
@@ -762,13 +781,11 @@
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)
- use_obj.flags &= ~NODROP
if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, 0, 1))
use_obj.forceMove(src)
else
if(wearer)
to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.")
- use_obj.flags |= NODROP
if(piece == "helmet" && helmet)
helmet.update_light(wearer)
@@ -777,17 +794,17 @@
if(!wearer || !user)
return 0
- if(flags & NODROP)
- if(wearer.head && wearer.head != helmet)
+ 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(wearer.gloves && wearer.gloves != gloves)
+ if(gloves && wearer.gloves && wearer.gloves != gloves)
to_chat(user, "\The [wearer.gloves] is preventing \the [src] from deploying!")
return 0
- if(wearer.shoes && wearer.shoes != boots)
+ if(boots && wearer.shoes && wearer.shoes != boots)
to_chat(user, "\The [wearer.shoes] is preventing \the [src] from deploying!")
return 0
- if(wearer.wear_suit && wearer.wear_suit != chest)
+ if(chest && wearer.wear_suit && wearer.wear_suit != chest)
to_chat(user, "\The [wearer.wear_suit] is preventing \the [src] from deploying!")
return 0
@@ -797,6 +814,7 @@
/obj/item/weapon/rig/dropped(var/mob/user)
..()
+ user.verbs -= /obj/item/weapon/rig/proc/emergency_release
for(var/piece in list("helmet","gauntlets","chest","boots"))
toggle_piece(piece, user, ONLY_RETRACT, 1)
if(wearer)
@@ -996,6 +1014,38 @@
else
return null
+/obj/item/weapon/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/weapon/rig/T = get_rig()
+ return T.do_emergency_release(usr)
+
+/obj/item/weapon/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/weapon/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.weakened)
+ 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
new file mode 100644
index 00000000000..ec045c7da2d
--- /dev/null
+++ b/code/modules/clothing/spacesuits/rig/rig_armormod.dm
@@ -0,0 +1,21 @@
+/obj/item/clothing/suit/space/new_rig/calc_breach_damage()
+ ..()
+ holder.update_armor() //New dammage, new armormultiplikator.
+ return damage
+
+/obj/item/weapon/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.
+
+ for(var/obj/item/piece in list(gloves, helmet, boots, chest))
+ if(!istype(piece)) //Do we have the piece
+ continue
+ if(islist(armor)) //Did we even give them some armor, if this is the case, the list should be initialized from New()
+ var/list/L = armor
+ for(var/armortype in L)
+ piece.armor[armortype] = L[armortype]*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
index b89c59cf837..a57c2258b04 100644
--- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
@@ -141,7 +141,7 @@
if(user.r_hand && user.l_hand)
cell.forceMove(get_turf(user))
else
- cell.forceMove(user.put_in_hands(cell))
+ user.put_in_hands(cell)
cell = null
else
to_chat(user, "There is nothing loaded in that mount.")
diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
index dab4ad5ac35..0480490c0ca 100644
--- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
@@ -4,7 +4,7 @@
/obj/item/clothing/head/helmet/space/new_rig
name = "helmet"
- flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL | NODROP
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK
body_parts_covered = HEAD
heat_protection = HEAD
@@ -12,11 +12,12 @@
var/brightness_on = 4
var/on = 0
sprite_sheets = list(
- "Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
+ "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
@@ -28,13 +29,17 @@
toggle_light(user)
/obj/item/clothing/head/helmet/space/new_rig/proc/toggle_light(mob/user)
- on = !on
- icon_state = "rig[on]-[item_color]"
+ if(flags & AIRTIGHT) //Could also check for STOPSPRESSUREDMAGE, but one is enough, both get toggled when the seal gets toggled.
- if(on)
- set_light(brightness_on)
+ on = !on
+ icon_state = "[item_color][on]"
+
+ if(on)
+ set_light(brightness_on)
+ else
+ set_light(0)
else
- set_light(0)
+ 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
@@ -42,7 +47,7 @@
/obj/item/clothing/gloves/rig
name = "gauntlets"
- flags = THICKMATERIAL
+ flags = THICKMATERIAL | NODROP
body_parts_covered = HANDS
heat_protection = HANDS
cold_protection = HANDS
@@ -51,12 +56,19 @@
/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/device/flashlight,/obj/item/weapon/tank)
@@ -64,14 +76,14 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT|HIDETAIL
- flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT | NODROP
slowdown = 0
- //will reach 10 breach damage after 25 laser carbine blasts, 3 revolver hits, or ~1 PTR hit. Completely immune to smg or sts hits.
- breach_threshold = 38
+ breach_threshold = 20
resilience = 0.2
can_breach = 1
+ var/obj/item/weapon/rig/holder
sprite_sheets = list(
- "Tajara" = 'icons/mob/species/tajaran/suit.dmi',
+ "Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
"Unathi" = 'icons/mob/species/unathi/suit.dmi'
)
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index 0bda9f9288a..2a38480dabc 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -112,7 +112,7 @@
name = "stealth suit control module"
suit_type = "stealth"
desc = "A highly advanced and expensive suit designed for covert operations."
- icon_state = "stealth_rig"
+ 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)
diff --git a/code/modules/surgery/rig_removal.dm b/code/modules/surgery/rig_removal.dm
new file mode 100644
index 00000000000..4e0403e43a4
--- /dev/null
+++ b/code/modules/surgery/rig_removal.dm
@@ -0,0 +1,58 @@
+//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/weapon/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/weapon/weldingtool = 80,
+ /obj/item/weapon/circular_saw = 60,
+ /obj/item/weapon/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(istype(tool,/obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/welder = tool
+ if(!welder.isOn() || !welder.remove_fuel(1,user))
+ return 0
+ return (target_zone == "chest") && istype(target.back, /obj/item/weapon/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/weapon/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/icons/mob/feet.dmi b/icons/mob/feet.dmi
index 09ba4ebe9d1..597f35d2e89 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 8e851a7c26c..fb10621a79c 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi
index d8a5beaf448..8e2965371c0 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 37d312d3133..49f209387bf 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/unathi/helmet.dmi b/icons/mob/species/unathi/helmet.dmi
index 46b11152ba7..c84122e9571 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 062c1b86db3..f30cb9facef 100644
Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 16ed4ce4b04..e1c56b46b69 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 04dfe342cb6..22aca1fd733 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/paradise.dme b/paradise.dme
index f3d7ee259aa..0f9fa26434c 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1167,6 +1167,7 @@
#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"
@@ -2035,6 +2036,7 @@
#include "code\modules\surgery\limb_reattach.dm"
#include "code\modules\surgery\organs_internal.dm"
#include "code\modules\surgery\other.dm"
+#include "code\modules\surgery\rig_removal.dm"
#include "code\modules\surgery\robotics.dm"
#include "code\modules\surgery\slime.dm"
#include "code\modules\surgery\surgery.dm"