diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm
index 903d68a27f7..fee30a8843b 100644
--- a/code/__HELPERS/trait_helpers.dm
+++ b/code/__HELPERS/trait_helpers.dm
@@ -213,6 +213,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
//***** ITEM AND MOB TRAITS *****//
/// Show what machine/door wires do when held.
#define TRAIT_SHOW_WIRE_INFO "show_wire_info"
+///Immune to the SM / makes you immune to it when worn
+#define TRAIT_SUPERMATTER_IMMUNE "supermatter_immune"
//***** ITEM TRAITS *****//
#define TRAIT_BUTCHERS_HUMANS "butchers_humans"
@@ -270,6 +272,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_WAS_BATONNED "batonged"
#define CLOWN_EMAG "clown_emag"
#define MODSUIT_TRAIT "modsuit_trait"
+#define ENFORCER_GLOVES "enforcer_gloves"
//quirk traits
#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm
index b18f2173722..513fb4ce16f 100644
--- a/code/_globalvars/traits.dm
+++ b/code/_globalvars/traits.dm
@@ -80,10 +80,12 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CONTORTED_BODY" = TRAIT_CONTORTED_BODY,
"TRAIT_DEFLECTS_PROJECTILES" = TRAIT_DEFLECTS_PROJECTILES,
"TRAIT_TABLE_LEAP" = TRAIT_TABLE_LEAP,
- "TRAIT_DODGE_ALL_THROWN_OBJECTS" = TRAIT_DODGE_ALL_OBJECTS
+ "TRAIT_DODGE_ALL_THROWN_OBJECTS" = TRAIT_DODGE_ALL_OBJECTS,
+ "TRAIT_SUPERMATTER_IMMUNE" = TRAIT_SUPERMATTER_IMMUNE
),
/obj/item = list(
"TRAIT_SHOW_WIRE_INFO" = TRAIT_SHOW_WIRE_INFO,
+ "TRAIT_SUPERMATTER_IMMUNE" = TRAIT_SUPERMATTER_IMMUNE,
"TRAIT_BUTCHER_HUMANS" = TRAIT_BUTCHERS_HUMANS,
"TRAIT_CMAGGED" = TRAIT_CMAGGED,
"TRAIT_FORCES_OPEN_DOORS" = TRAIT_FORCES_OPEN_DOORS_ITEM,
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index d79a807b9c5..ec45a9d8525 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -856,3 +856,67 @@ GLOBAL_LIST_EMPTY(multiverse)
/obj/item/reagent_containers/food/drinks/everfull/proc/magic_fill(reagent_choice)
reagents.clear_reagents()
reagents.add_reagent(reagent_choice, volume)
+
+//Oblivion Enforcer clothing (the halberd and gloves are defined elsewhere)
+
+/obj/item/clothing/head/hooded/oblivion
+ name = "Oblivion Enforcer's hood"
+ desc = "A hood worn by an Oblivion Enforcer."
+ icon_state = "oblivionhood"
+ flags = BLOCKHAIR
+ flags_inv = HIDEFACE
+ flags_cover = HEADCOVERSEYES
+ armor = list(MELEE = 20, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, RAD = INFINITY, FIRE = 5, ACID = 5)
+ cold_protection = HEAD
+ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
+ magical = TRUE
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/clothing/species/vox/head.dmi',
+ "Kidan" = 'icons/mob/clothing/species/kidan/head.dmi',
+ "Grey" = 'icons/mob/clothing/species/grey/head.dmi',
+ "Drask" = 'icons/mob/clothing/species/drask/head.dmi',
+ "Tajaran" = 'icons/mob/clothing/species/tajaran/head.dmi',
+ "Unathi" = 'icons/mob/clothing/species/unathi/head.dmi',
+ "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head.dmi'
+ )
+
+/obj/item/clothing/suit/hooded/oblivion
+ name = "Oblivion Enforcer's robes"
+ desc = "A set of armored, radiation-proof robes worn by Oblivion Enforcers."
+ icon_state = "oblivionarmor"
+ item_state = "oblivionarmor"
+ body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
+ hoodtype = /obj/item/clothing/head/hooded/oblivion
+ allowed = list(/obj/item/supermatter_halberd, /obj/item/nuke_core/supermatter_sliver)
+ armor = list(MELEE = 35, BULLET = 20, LASER = 35, ENERGY = 10, BOMB = 15, RAD = INFINITY, FIRE = 5, ACID = 5)
+ flags_inv = HIDEJUMPSUIT | HIDESHOES | HIDETAIL | HIDESHOES
+ flags = THICKMATERIAL
+ magical = TRUE
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
+ "Kidan" = 'icons/mob/clothing/species/kidan/suit.dmi',
+ "Grey" = 'icons/mob/clothing/species/grey/suit.dmi',
+ "Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
+ "Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi',
+ "Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi',
+ "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi'
+ )
+
+/obj/item/clothing/suit/hooded/oblivion/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT)
+
+/obj/item/clothing/mask/gas/voice_modulator/oblivion
+ name = "Oblivion Enforcer's mask"
+ desc = "The mask of an Oblivion Enforcer. Don't forget to turn it on before giving your one-liners!"
+ icon_state = "oblivionmask"
+ item_state = "oblivionmask"
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
+ "Kidan" = 'icons/mob/clothing/species/kidan/mask.dmi',
+ "Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
+ "Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
+ "Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
+ "Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
+ "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi'
+ )
diff --git a/code/game/gamemodes/wizard/wizloadouts.dm b/code/game/gamemodes/wizard/wizloadouts.dm
index 7b4269a9f4a..02764f547b9 100644
--- a/code/game/gamemodes/wizard/wizloadouts.dm
+++ b/code/game/gamemodes/wizard/wizloadouts.dm
@@ -99,3 +99,23 @@
wizid.SetOwnerInfo(user)
wizid.UpdateName()
wizid.RebuildHTML()
+
+/datum/spellbook_entry/loadout/oblivion
+ name = "Oblivion Enforcer"
+ desc = "The Oblivion Order is an isolated clique of monks that revere supermatter. \
+ Oblivion Enforcers are how the Order imposes their will on the universe as a whole. By taking this loadout, \
+ you give up your identity and become a faceless hand of the Order.
\
+ You will be completely protected from the effects of supermatter by the items granted here, so far as to \
+ allow you to pick up and throw supermatter slivers, which your halberd can cut from the engine.
\
+ Provides a Supermatter Halberd, Oblivion Enforcer robes, and an air tank, as well as Instant Summons, Lightning Bolt, Ethereal Jaunt, and Summon Supermatter Crystal."
+ items_path = list(/obj/item/supermatter_halberd, /obj/item/clothing/gloves/color/white/supermatter_immune, \
+ /obj/item/clothing/suit/hooded/oblivion, /obj/item/clothing/mask/gas/voice_modulator/oblivion, /obj/item/tank/internals/emergency_oxygen/double)
+ spells_path = list(/obj/effect/proc_holder/spell/ethereal_jaunt, /obj/effect/proc_holder/spell/summonitem, \
+ /obj/effect/proc_holder/spell/charge_up/bounce/lightning, /obj/effect/proc_holder/spell/aoe/conjure/summon_supermatter)
+ category = "Unique"
+ destroy_spellbook = TRUE
+
+/datum/spellbook_entry/loadout/oblivion/OnBuy(mob/living/carbon/human/user, obj/item/spellbook/book)
+ if(!user)
+ return
+ ADD_TRAIT(user, SM_HALLUCINATION_IMMUNE, MAGIC_TRAIT)
diff --git a/code/game/objects/effects/temporary_visuals/misc_visuals.dm b/code/game/objects/effects/temporary_visuals/misc_visuals.dm
index a1e57947b11..5eedef93b65 100644
--- a/code/game/objects/effects/temporary_visuals/misc_visuals.dm
+++ b/code/game/objects/effects/temporary_visuals/misc_visuals.dm
@@ -398,3 +398,32 @@
/obj/effect/temp_visual/rcd_effect/reverse_short
icon_state = "rcd_short_reverse"
duration = 3.1 SECONDS
+
+/obj/effect/temp_visual/obliteration
+ duration = 2 SECONDS
+
+/obj/effect/temp_visual/obliteration/Initialize(mapload, atom/target)
+ . = ..()
+ if(isobj(target))
+ loc = target.loc
+ icon = target.icon
+ icon_state = target.icon_state
+ alpha = target.alpha
+ dir = target.dir
+ update_icon()
+ var/obj/effect/dusting_anim/dust_effect = new(loc, UID())
+ filters += filter(type = "displace", size = 256, render_source = "*snap[UID()]")
+ animate(src, alpha = 0, time = 2 SECONDS, easing = (EASE_IN | SINE_EASING))
+ QDEL_IN(dust_effect, 20)
+ return TRUE
+
+/obj/effect/temp_visual/obliteration_rays
+ duration = 1.25 SECONDS
+
+/obj/effect/temp_visual/obliteration_rays/Initialize(mapload)
+ . = ..()
+ var/new_filter = isnull(get_filter("ray"))
+ ray_filter_helper(1, 40, "#ffd04f", 6, 20)
+ if(new_filter)
+ animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1)
+ animate(offset = 0, time = 10 SECONDS)
diff --git a/code/game/objects/items/theft_items.dm b/code/game/objects/items/theft_items.dm
index eab0f42106d..e71d9496086 100644
--- a/code/game/objects/items/theft_items.dm
+++ b/code/game/objects/items/theft_items.dm
@@ -157,6 +157,7 @@
desc = "A tiny, highly volatile sliver of a supermatter crystal. Do not handle without protection!"
icon_state = "supermatter_sliver"
pulseicon = "supermatter_sliver_pulse"
+ w_class = WEIGHT_CLASS_BULKY //can't put it into bags
layer = ABOVE_MOB_LAYER + 0.02
/obj/item/nuke_core/supermatter_sliver/process()
@@ -170,7 +171,9 @@
/obj/item/nuke_core/supermatter_sliver/attack_tk(mob/user) // no TK dusting memes
return
-/obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes
+/obj/item/nuke_core/supermatter_sliver/can_be_pulled(mob/user) // no drag memes
+ if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
+ return TRUE
return FALSE
/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/I, mob/living/user, params)
@@ -224,6 +227,8 @@
/obj/item/nuke_core/supermatter_sliver/pickup(mob/living/user)
..()
+ if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
+ return TRUE //yay sliver throwing memes!
if(!isliving(user) || user.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions
return FALSE
user.visible_message("[user] reaches out and tries to pick up [src]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!",
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 79f4f5ce274..171894e7595 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -984,3 +984,99 @@
return ..()
#undef BROOM_PUSH_LIMIT
+
+/obj/item/supermatter_halberd //Supermatter Halberd, used by Oblivion Enforcers
+ name = "supermatter halberd"
+ desc = "The revered weapon of Oblivion Enforcers, used to enforce the Order's will."
+ icon_state = "smhalberd0"
+ base_icon_state = "smhalberd"
+ force = 5
+ sharp = TRUE
+ damtype = BURN
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = SLOT_BACK
+ throwforce = 15
+ toolspeed = 0.25
+ attack_verb = list("enlightened", "enforced", "cleaved", "stabbed", "whacked")
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ resistance_flags = FIRE_PROOF
+ var/static/list/obliteration_targets = list(/turf/simulated/wall, /obj/machinery/door/airlock)
+ /// Whether we'll knockdown on hit
+ var/charged = TRUE
+
+/obj/item/supermatter_halberd/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_FORCES_OPEN_DOORS_ITEM, ROUNDSTART_TRAIT)
+ ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT) //so it can't be dusted by the SM
+ AddComponent(/datum/component/parry, _stamina_constant = 0, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES)
+ AddComponent(/datum/component/two_handed, force_wielded = 40, force_unwielded = force, icon_wielded = "[base_icon_state]1")
+
+/obj/item/supermatter_halberd/update_icon_state()
+ icon_state = "[base_icon_state]0"
+ return ..()
+
+/obj/item/supermatter_halberd/afterattack(atom/A, mob/user, proximity)
+ if(!proximity)
+ return
+
+ if(!HAS_TRAIT(src, TRAIT_WIELDED))
+ return
+
+ if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) //same behavior as a fireaxe for windows
+ var/obj/structure/W = A
+ W.obj_destruction("fireaxe")
+
+ //dusting dead people + knocking down people
+ if(isliving(A))
+ var/mob/living/target = A
+ if(target.stat == DEAD)
+ visible_message("[user] raises [src] high, ready to bring it down on [target]!")
+ if(do_after(user, 1 SECONDS, TRUE, target))
+ visible_message("[user] brings down [src], obliterating [target] with a heavy blow!")
+ playsound(loc, 'sound/effects/supermatter.ogg', 50, TRUE)
+ target.dust()
+ return
+ to_chat(user, "You lower [src]. There'll be time to obliterate them later...")
+ return
+
+ if(charged)
+ playsound(loc, 'sound/magic/lightningbolt.ogg', 5, TRUE)
+ target.visible_message("[src] flares with energy and shocks [target]!", \
+ "You're shocked by [src]!", \
+ "You hear shocking.")
+ target.KnockDown(4 SECONDS)
+ do_sparks(3, FALSE, src)
+ charged = FALSE
+ addtimer(CALLBACK(src, PROC_REF(recharge)), 4 SECONDS)
+
+ //walls and airlock obliteration logic
+ if(!is_type_in_list(A, obliteration_targets))
+ return
+
+ if(istype(A, /turf/simulated/wall/indestructible))
+ return
+
+ to_chat(user, "You start to obliterate [A].")
+ playsound(loc, hitsound, 50, TRUE)
+
+ var/obj/effect/temp_visual/obliteration_rays/rays = new(get_turf(A))
+
+ if(do_after(user, 5 SECONDS * toolspeed, target = A))
+ new /obj/effect/temp_visual/obliteration(A, A)
+ playsound(loc, 'sound/effects/supermatter.ogg', 25, TRUE)
+
+ if(iswallturf(A))
+ var/turf/AT = A
+ AT.ChangeTurf(/turf/simulated/floor/plating)
+ return
+
+ if(istype(A, /obj/machinery/door/airlock))
+ qdel(A)
+ return
+
+ qdel(rays)
+ return
+
+/obj/item/supermatter_halberd/proc/recharge()
+ charged = TRUE
+ playsound(loc, 'sound/machines/sm/accent/normal/1.ogg', 25, TRUE)
diff --git a/code/modules/clothing/gloves/misc_gloves.dm b/code/modules/clothing/gloves/misc_gloves.dm
index b220bebf81a..48f789ba8dc 100644
--- a/code/modules/clothing/gloves/misc_gloves.dm
+++ b/code/modules/clothing/gloves/misc_gloves.dm
@@ -204,3 +204,28 @@
name = "gloves of headpats"
desc = "You feel the irresistable urge to give headpats by merely glimpsing these."
accepted_intents = list(INTENT_HELP)
+
+/obj/item/clothing/gloves/color/white/supermatter_immune
+ name = "hypernobilium weave gloves"
+ desc = "Sleek, white gloves woven from fabric doused in hypernobilium using a process known only to the Oblivion Order."
+ siemens_coefficient = 0
+ icon_state = "obliviongauntlets"
+ item_state = "obliviongauntlets"
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/clothing/species/vox/gloves.dmi',
+ "Kidan" = 'icons/mob/clothing/species/kidan/gloves.dmi',
+ "Grey" = 'icons/mob/clothing/species/grey/gloves.dmi',
+ "Drask" = 'icons/mob/clothing/species/drask/gloves.dmi'
+ )
+
+/obj/item/clothing/gloves/color/white/supermatter_immune/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT)
+
+/obj/item/clothing/gloves/color/white/supermatter_immune/equipped(mob/user, slot, initial)
+ . = ..()
+ ADD_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE, ENFORCER_GLOVES)
+
+/obj/item/clothing/gloves/color/white/supermatter_immune/dropped(mob/user, silent)
+ . = ..()
+ REMOVE_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE, ENFORCER_GLOVES)
diff --git a/code/modules/power/engines/supermatter/supermatter.dm b/code/modules/power/engines/supermatter/supermatter.dm
index b4e72ae11d5..610563b17f4 100644
--- a/code/modules/power/engines/supermatter/supermatter.dm
+++ b/code/modules/power/engines/supermatter/supermatter.dm
@@ -749,6 +749,9 @@
/obj/machinery/atmospherics/supermatter_crystal/attack_hand(mob/living/user)
..()
+ if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
+ user.visible_message("[user] reaches out and pokes [src] harmlessly...somehow.", "You poke [src].")
+ return
dust_mob(user, cause = "hand")
/obj/machinery/atmospherics/supermatter_crystal/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause)
@@ -770,32 +773,39 @@
return
if(moveable && default_unfasten_wrench(user, I, time = 20))
return
+
if(istype(I, /obj/item/scalpel/supermatter))
- if(ishuman(user))
- var/mob/living/carbon/human/M = user
- var/obj/item/scalpel/supermatter/scalpel = I
- to_chat(M, "You carefully begin to scrape [src] with [I]...")
- if(I.use_tool(src, M, 10 SECONDS, volume = 100))
- if(scalpel.uses_left)
- to_chat(M, "You extract a sliver from [src], and it begins to react violently!")
- matter_power += 800
- scalpel.uses_left--
- if(!scalpel.uses_left)
- to_chat(M, "A tiny piece of [I] falls off, rendering it useless!")
+ if(!ishuman(user))
+ return
- var/obj/item/nuke_core/supermatter_sliver/S = new /obj/item/nuke_core/supermatter_sliver(drop_location())
+ var/mob/living/carbon/human/H = user
+ var/obj/item/scalpel/supermatter/scalpel = I
- var/obj/item/retractor/supermatter/tongs = M.is_in_hands(/obj/item/retractor/supermatter)
+ if(!scalpel.uses_left)
+ to_chat(H, "[scalpel] isn't sharp enough to carve a sliver off of [src]!")
+ return
+
+ var/obj/item/nuke_core/supermatter_sliver/sliver = carve_sliver(scalpel, H)
+ if(sliver)
+ scalpel.uses_left--
+ if(!scalpel.uses_left)
+ to_chat(H, "A tiny piece falls off of [scalpel]'s blade, rendering it useless!")
+
+ var/obj/item/retractor/supermatter/tongs = H.is_in_hands(/obj/item/retractor/supermatter)
+
+ if(tongs && !tongs.sliver)
+ tongs.sliver = sliver
+ sliver.forceMove(tongs)
+ tongs.icon_state = "supermatter_tongs_loaded"
+ tongs.item_state = "supermatter_tongs_loaded"
+ to_chat(H, "You pick up [sliver] with [tongs]!")
- if(tongs && !tongs.sliver)
- tongs.sliver = S
- S.forceMove(tongs)
- tongs.icon_state = "supermatter_tongs_loaded"
- tongs.item_state = "supermatter_tongs_loaded"
- to_chat(M, "You pick up [S] with [tongs]!")
- else
- to_chat(user, "You fail to extract a sliver from [src]! [I] isn't sharp enough anymore.")
return
+
+ if(istype(I, /obj/item/supermatter_halberd))
+ carve_sliver(I, user)
+ return
+
if(istype(I, /obj/item/retractor/supermatter))
to_chat(user, "[I] bounces off [src], you need to cut a sliver off first!")
else if(user.drop_item())
@@ -809,6 +819,10 @@
radiation_pulse(src, 150, 4)
/obj/machinery/atmospherics/supermatter_crystal/Bumped(atom/movable/AM)
+
+ if(HAS_TRAIT(AM, TRAIT_SUPERMATTER_IMMUNE))
+ return
+
if(isliving(AM))
AM.visible_message("[AM] slams into [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!",\
"You slam into [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
@@ -917,7 +931,14 @@
remove_filter("outline")
QDEL_NULL(warp)
+/obj/machinery/atmospherics/supermatter_crystal/proc/carve_sliver(obj/item/tool, mob/living/user)
+ to_chat(user, "You begin carving a sliver off of [src]...")
+ if(tool.use_tool(src, user, 10 SECONDS, volume = 100))
+ to_chat(user, "You carve a sliver off of [src], and it begins to react violently!")
+ matter_power += 800
+ var/obj/item/nuke_core/supermatter_sliver/S = new /obj/item/nuke_core/supermatter_sliver(drop_location())
+ return S
// Change how bright the rock is
/obj/machinery/atmospherics/supermatter_crystal/proc/lights()
@@ -1018,6 +1039,8 @@
var/mob/M = P
if(M.mob_negates_gravity())
continue //You can't pull someone nailed to the deck
+ if(HAS_TRAIT(M, TRAIT_SUPERMATTER_IMMUNE))
+ continue
else if(M.buckled)
var/atom/movable/buckler = M.buckled
if(buckler.unbuckle_mob(M, TRUE))
diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi
index 98fefc6f829..7bf07f9d8a7 100644
Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ
diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi
index 3c48e781567..a56c730fb28 100644
Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ
diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi
index 87605eaa28c..b373d6ad3c0 100644
Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ
diff --git a/icons/mob/clothing/species/drask/gloves.dmi b/icons/mob/clothing/species/drask/gloves.dmi
index dbc775fd02f..c9e90d5b12a 100644
Binary files a/icons/mob/clothing/species/drask/gloves.dmi and b/icons/mob/clothing/species/drask/gloves.dmi differ
diff --git a/icons/mob/clothing/species/drask/head.dmi b/icons/mob/clothing/species/drask/head.dmi
index b54a7d74f5c..26a03031c1c 100644
Binary files a/icons/mob/clothing/species/drask/head.dmi and b/icons/mob/clothing/species/drask/head.dmi differ
diff --git a/icons/mob/clothing/species/drask/mask.dmi b/icons/mob/clothing/species/drask/mask.dmi
index a429bb2e537..7b6c4c9a347 100644
Binary files a/icons/mob/clothing/species/drask/mask.dmi and b/icons/mob/clothing/species/drask/mask.dmi differ
diff --git a/icons/mob/clothing/species/drask/suit.dmi b/icons/mob/clothing/species/drask/suit.dmi
index fe8d8226b5d..c7e8a00e98a 100644
Binary files a/icons/mob/clothing/species/drask/suit.dmi and b/icons/mob/clothing/species/drask/suit.dmi differ
diff --git a/icons/mob/clothing/species/grey/gloves.dmi b/icons/mob/clothing/species/grey/gloves.dmi
index f24910643e6..4ebc054e157 100644
Binary files a/icons/mob/clothing/species/grey/gloves.dmi and b/icons/mob/clothing/species/grey/gloves.dmi differ
diff --git a/icons/mob/clothing/species/grey/head.dmi b/icons/mob/clothing/species/grey/head.dmi
index 6d4f7985ea8..4b8b845f784 100644
Binary files a/icons/mob/clothing/species/grey/head.dmi and b/icons/mob/clothing/species/grey/head.dmi differ
diff --git a/icons/mob/clothing/species/grey/mask.dmi b/icons/mob/clothing/species/grey/mask.dmi
index a9cd1c7b4f5..7a9e7d2c767 100644
Binary files a/icons/mob/clothing/species/grey/mask.dmi and b/icons/mob/clothing/species/grey/mask.dmi differ
diff --git a/icons/mob/clothing/species/grey/suit.dmi b/icons/mob/clothing/species/grey/suit.dmi
index 425689ef861..0acb44ce742 100644
Binary files a/icons/mob/clothing/species/grey/suit.dmi and b/icons/mob/clothing/species/grey/suit.dmi differ
diff --git a/icons/mob/clothing/species/kidan/gloves.dmi b/icons/mob/clothing/species/kidan/gloves.dmi
index 2dc6b40529d..540e694464c 100644
Binary files a/icons/mob/clothing/species/kidan/gloves.dmi and b/icons/mob/clothing/species/kidan/gloves.dmi differ
diff --git a/icons/mob/clothing/species/kidan/head.dmi b/icons/mob/clothing/species/kidan/head.dmi
index e2e3a7f7d9a..04d4effb82d 100644
Binary files a/icons/mob/clothing/species/kidan/head.dmi and b/icons/mob/clothing/species/kidan/head.dmi differ
diff --git a/icons/mob/clothing/species/kidan/mask.dmi b/icons/mob/clothing/species/kidan/mask.dmi
index f115b93f093..8d4a485b1d9 100644
Binary files a/icons/mob/clothing/species/kidan/mask.dmi and b/icons/mob/clothing/species/kidan/mask.dmi differ
diff --git a/icons/mob/clothing/species/kidan/suit.dmi b/icons/mob/clothing/species/kidan/suit.dmi
index 4b2fe0c2b18..37483c8c8a5 100644
Binary files a/icons/mob/clothing/species/kidan/suit.dmi and b/icons/mob/clothing/species/kidan/suit.dmi differ
diff --git a/icons/mob/clothing/species/tajaran/head.dmi b/icons/mob/clothing/species/tajaran/head.dmi
index 84b0ba96ffa..9cda02f7aff 100644
Binary files a/icons/mob/clothing/species/tajaran/head.dmi and b/icons/mob/clothing/species/tajaran/head.dmi differ
diff --git a/icons/mob/clothing/species/tajaran/mask.dmi b/icons/mob/clothing/species/tajaran/mask.dmi
index 625eefdb0de..38328dbbd64 100644
Binary files a/icons/mob/clothing/species/tajaran/mask.dmi and b/icons/mob/clothing/species/tajaran/mask.dmi differ
diff --git a/icons/mob/clothing/species/tajaran/suit.dmi b/icons/mob/clothing/species/tajaran/suit.dmi
index c4c1f4c6bda..a2d34007429 100644
Binary files a/icons/mob/clothing/species/tajaran/suit.dmi and b/icons/mob/clothing/species/tajaran/suit.dmi differ
diff --git a/icons/mob/clothing/species/unathi/head.dmi b/icons/mob/clothing/species/unathi/head.dmi
index 55246ff29e2..a0886736f97 100644
Binary files a/icons/mob/clothing/species/unathi/head.dmi and b/icons/mob/clothing/species/unathi/head.dmi differ
diff --git a/icons/mob/clothing/species/unathi/mask.dmi b/icons/mob/clothing/species/unathi/mask.dmi
index 9bbc5d2ecc1..3351c20b642 100644
Binary files a/icons/mob/clothing/species/unathi/mask.dmi and b/icons/mob/clothing/species/unathi/mask.dmi differ
diff --git a/icons/mob/clothing/species/unathi/suit.dmi b/icons/mob/clothing/species/unathi/suit.dmi
index d50092797b5..36254627443 100644
Binary files a/icons/mob/clothing/species/unathi/suit.dmi and b/icons/mob/clothing/species/unathi/suit.dmi differ
diff --git a/icons/mob/clothing/species/vox/gloves.dmi b/icons/mob/clothing/species/vox/gloves.dmi
index 713d99e3f87..42c84233b73 100644
Binary files a/icons/mob/clothing/species/vox/gloves.dmi and b/icons/mob/clothing/species/vox/gloves.dmi differ
diff --git a/icons/mob/clothing/species/vox/head.dmi b/icons/mob/clothing/species/vox/head.dmi
index f2767bf36c1..a0938af8d2e 100644
Binary files a/icons/mob/clothing/species/vox/head.dmi and b/icons/mob/clothing/species/vox/head.dmi differ
diff --git a/icons/mob/clothing/species/vox/mask.dmi b/icons/mob/clothing/species/vox/mask.dmi
index 8c3fc3b9e4e..357dcdcdac8 100644
Binary files a/icons/mob/clothing/species/vox/mask.dmi and b/icons/mob/clothing/species/vox/mask.dmi differ
diff --git a/icons/mob/clothing/species/vox/suit.dmi b/icons/mob/clothing/species/vox/suit.dmi
index e17c8d59686..902be8d7508 100644
Binary files a/icons/mob/clothing/species/vox/suit.dmi and b/icons/mob/clothing/species/vox/suit.dmi differ
diff --git a/icons/mob/clothing/species/vulpkanin/head.dmi b/icons/mob/clothing/species/vulpkanin/head.dmi
index ea0cecb2779..82da87ce23c 100644
Binary files a/icons/mob/clothing/species/vulpkanin/head.dmi and b/icons/mob/clothing/species/vulpkanin/head.dmi differ
diff --git a/icons/mob/clothing/species/vulpkanin/mask.dmi b/icons/mob/clothing/species/vulpkanin/mask.dmi
index 03405006132..3ead9dc9358 100644
Binary files a/icons/mob/clothing/species/vulpkanin/mask.dmi and b/icons/mob/clothing/species/vulpkanin/mask.dmi differ
diff --git a/icons/mob/clothing/species/vulpkanin/suit.dmi b/icons/mob/clothing/species/vulpkanin/suit.dmi
index d3f64f16eb5..a117711f36b 100644
Binary files a/icons/mob/clothing/species/vulpkanin/suit.dmi and b/icons/mob/clothing/species/vulpkanin/suit.dmi differ
diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi
index 2ea815dc050..3b4c4fa4216 100644
Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index 351472113bb..acdbbb4c1ae 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index daced424869..cc4b3d11683 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index ccd10bcd5b7..f9ec36b54a6 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 8a4ff7a3f46..b33e22d5b29 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index a8abdefe5e3..617ce00f484 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 16e54e17e2a..ac87869adc5 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index d5d982cbeab..f3d259e6c69 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ