From b2fcbabb0b814e673fbd413df591b9debcfafff5 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 15 Dec 2016 16:59:26 -0500 Subject: [PATCH] You can now push Wraith Spectacles up (#22188) * You can now push Wraith Spectacles up * you need to... actually LOSE the xray vision * Don't flicker toooo much * for bonus points, let's us refactor status effects while we're here * might as well keep that around --- code/datums/status_effects/buffs.dm | 2 +- code/datums/status_effects/gas.dm | 5 +- code/datums/status_effects/status_effect.dm | 66 ++++++----- .../clock_items/wraith_spectacles.dm | 110 +++++++++++++----- code/modules/clothing/clothing.dm | 32 ++--- code/modules/clothing/glasses/glasses.dm | 24 ++-- code/modules/clothing/head/misc_special.dm | 12 +- code/modules/clothing/masks/gasmask.dm | 10 +- code/modules/mob/living/living_defines.dm | 2 + icons/mob/eyes.dmi | Bin 11868 -> 12146 bytes icons/obj/clothing/clockwork_garb.dmi | Bin 1646 -> 1593 bytes 11 files changed, 160 insertions(+), 103 deletions(-) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index ab3ad39dfa3..35916bd5208 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -133,7 +133,7 @@ /datum/status_effect/cyborg_power_regen/tick() var/mob/living/silicon/robot/cyborg = owner if(!istype(cyborg) || !cyborg.cell) - cancel_effect() + qdel(src) return playsound(cyborg, 'sound/effects/light_flicker.ogg', 50, 1) cyborg.cell.give(power_to_give) diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index 763654605a9..53a8bb485f6 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -19,9 +19,8 @@ /datum/status_effect/freon/tick() owner.update_canmove() - if(owner) - if(owner.bodytemperature >= 310.055) - cancel_effect() + if(owner && owner.bodytemperature >= 310.055) + qdel(src) /datum/status_effect/freon/on_remove() if(!owner.stat) diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 3bf25eb02a2..3eba8c3aff8 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -1,7 +1,9 @@ //Status effects are used to apply temporary or permanent effects to mobs. Mobs are aware of their status effects at all times. //This file contains their code, plus code for applying and removing them. //When making a new status effect, add a define to status_effects.dm in __DEFINES for ease of use! -var/list/status_effects = list() //All status effects affecting literally anyone + +var/global/list/all_status_effects = list() //a list of all status effects, if for some reason you need to remove all of them + /datum/status_effect var/id = "effect" //Used for screen alerts. var/duration = -1 //How long the status effect lasts in SECONDS. Enter -1 for an effect that never ends unless removed through some means. @@ -11,13 +13,21 @@ var/list/status_effects = list() //All status effects affecting literally anyone var/unique = TRUE //If there can be multiple status effects of this type on one mob. var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description -/datum/status_effect/New() - ..() - status_effects += src +/datum/status_effect/New(mob/living/new_owner) + if(new_owner) + owner = new_owner + if(owner) + LAZYADD(owner.status_effects, src) + all_status_effects += src addtimer(src, "start_ticking", 1) //Give us time to set any variables /datum/status_effect/Destroy() - status_effects -= src + STOP_PROCESSING(SSprocessing, src) + if(owner) + owner.clear_alert(id) + on_remove() + LAZYREMOVE(owner.status_effects, src) + all_status_effects -= src return ..() /datum/status_effect/proc/start_ticking() @@ -27,13 +37,14 @@ var/list/status_effects = list() //All status effects affecting literally anyone qdel(src) return on_apply() - var/obj/screen/alert/status_effect/A = owner.throw_alert(id, alert_type) - A.attached_effect = src //so the alert can reference us, if it needs to + if(alert_type) + var/obj/screen/alert/status_effect/A = owner.throw_alert(id, alert_type) + A.attached_effect = src //so the alert can reference us, if it needs to START_PROCESSING(SSprocessing, src) /datum/status_effect/process() if(!owner) - cancel_effect() + qdel(src) return if(duration != -1) duration-- @@ -42,14 +53,7 @@ var/list/status_effects = list() //All status effects affecting literally anyone tick() tick_interval = initial(tick_interval) if(!duration) - cancel_effect() - -/datum/status_effect/proc/cancel_effect() - STOP_PROCESSING(SSprocessing, src) - if(owner) - owner.clear_alert(id) - on_remove() - qdel(src) + qdel(src) /datum/status_effect/proc/on_apply() //Called whenever the buff is applied. /datum/status_effect/proc/tick() //Called every tick. @@ -69,24 +73,28 @@ var/list/status_effects = list() //All status effects affecting literally anyone ////////////////// /mob/living/proc/apply_status_effect(effect) //applies a given status effect to this mob, returning the effect if it was successful + . = FALSE var/datum/status_effect/S1 = effect + LAZYINITLIST(status_effects) for(var/datum/status_effect/S in status_effects) - if(initial(S1.unique) && S.id == initial(S1.id) && S.owner == src) + if(S.id == initial(S1.id) && initial(S1.unique)) return - S1 = new effect - S1.owner = src + S1 = new effect(src) . = S1 /mob/living/proc/remove_status_effect(effect) //removes all of a given status effect from this mob, returning TRUE if at least one was removed . = FALSE - var/datum/status_effect/S1 = effect - for(var/datum/status_effect/S in status_effects) - if(initial(S1.id) == S.id && S.owner == src) - S.cancel_effect() - . = TRUE + if(status_effects) + var/datum/status_effect/S1 = effect + for(var/datum/status_effect/S in status_effects) + if(initial(S1.id) == S.id) + qdel(S) + . = TRUE -/mob/living/proc/has_status_effect(effect) //returns TRUE if the mob calling the proc owns the given status effect - var/datum/status_effect/S1 = effect - for(var/datum/status_effect/S in status_effects) - if(initial(S1.id) == S.id && S.owner == src) - return TRUE +/mob/living/proc/has_status_effect(effect) //returns the effect if the mob calling the proc owns the given status effect + . = FALSE + if(status_effects) + var/datum/status_effect/S1 = effect + for(var/datum/status_effect/S in status_effects) + if(initial(S1.id) == S.id) + return S diff --git a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm index 50ed7d61c89..6f98cba7171 100644 --- a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm +++ b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm @@ -5,10 +5,12 @@ icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "wraith_specs" item_state = "glasses" + actions_types = list(/datum/action/item_action/toggle) resistance_flags = FIRE_PROOF | ACID_PROOF vision_flags = SEE_MOBS | SEE_TURFS | SEE_OBJS invis_view = 2 darkness_view = 3 + tint = 3 //this'll get reset, but it won't handle vision updates properly otherwise /obj/item/clothing/glasses/wraith_spectacles/New() ..() @@ -18,24 +20,65 @@ all_clockwork_objects -= src return ..() +/obj/item/clothing/glasses/wraith_spectacles/attack_self(mob/user) + weldingvisortoggle(user) + +/obj/item/clothing/glasses/wraith_spectacles/visor_toggling() + ..() + invis_view = SEE_INVISIBLE_LIVING + tint = 0 + if(!up) + if(is_servant_of_ratvar(loc)) + invis_view = SEE_INVISIBLE_NOLIGHTING + vision_flags = SEE_MOBS | SEE_TURFS | SEE_OBJS + else + tint = 3 + vision_flags = NONE + +/obj/item/clothing/glasses/wraith_spectacles/weldingvisortoggle(mob/user) + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(src == H.glasses && !up) + if(H.disabilities & BLIND) + H << "\"You're blind, idiot. Stop embarassing yourself.\"" + return + if(blind_cultist(H)) + return + if(is_servant_of_ratvar(H)) + H << "You push the spectacles down, and all is revealed to you.[ratvar_awakens ? "" : " Your eyes begin to itch - you cannot do this for long."]" + var/datum/status_effect/wraith_spectacles/WS = H.has_status_effect(STATUS_EFFECT_WRAITHSPECS) + if(WS) + WS.apply_eye_damage(H) + H.apply_status_effect(STATUS_EFFECT_WRAITHSPECS) + else + H << "You push the spectacles down, but you can't see through the glass." + +/obj/item/clothing/glasses/wraith_spectacles/proc/blind_cultist(mob/living/victim) + if(iscultist(victim)) + victim << "\"It looks like Nar-Sie's dogs really don't value their eyes.\"" + victim << "Your eyes explode with horrific pain!" + victim.emote("scream") + victim.become_blind() + victim.adjust_blurriness(30) + victim.adjust_blindness(30) + return TRUE + /obj/item/clothing/glasses/wraith_spectacles/equipped(mob/living/user, slot) ..() - if(slot != slot_glasses) + if(slot != slot_glasses || up) return if(user.disabilities & BLIND) user << "\"You're blind, idiot. Stop embarassing yourself.\"" //Ratvar with the sick burns yo return - if(iscultist(user)) //Cultists instantly go blind - user << "\"It looks like Nar-Sie's dogs really don't value their eyes.\"" - user << "Your eyes explode with horrific pain!" - user.emote("scream") - user.become_blind() - user.adjust_blurriness(30) - user.adjust_blindness(30) + if(blind_cultist(user)) //Cultists instantly go blind return if(is_servant_of_ratvar(user)) tint = 0 user << "As you put on the spectacles, all is revealed to you.[ratvar_awakens ? "" : " Your eyes begin to itch - you cannot do this for long."]" + var/datum/status_effect/wraith_spectacles/WS = user.has_status_effect(STATUS_EFFECT_WRAITHSPECS) + if(WS) + WS.apply_eye_damage(user) user.apply_status_effect(STATUS_EFFECT_WRAITHSPECS) else tint = 3 @@ -62,38 +105,33 @@ if(istype(L)) //this is probably more safety than actually needed var/datum/status_effect/wraith_spectacles/W = attached_effect var/glasses_right = istype(L.glasses, /obj/item/clothing/glasses/wraith_spectacles) - desc = "[glasses_right ? "":""]You are [glasses_right ? "":"not "]wearing wraith spectacles[glasses_right ? "!":"."]
\ + var/obj/item/clothing/glasses/wraith_spectacles/WS = L.glasses + desc = "[glasses_right && !WS.up ? "":""]You are [glasses_right ? "":"not "]wearing wraith spectacles[glasses_right && !WS.up ? "!":"."]
\ You have taken [W.eye_damage_done] eye damage from them.
" if(L.disabilities & NEARSIGHT) desc += "You are nearsighted!
" - else if(glasses_right) + else if(glasses_right && !WS.up) desc += "You will become nearsighted at [W.nearsight_breakpoint] eye damage.
" if(L.disabilities & BLIND) desc += "You are blind!" - else if(glasses_right) + else if(glasses_right && !WS.up) desc += "You will become blind at [W.blind_breakpoint] eye damage." ..() +/datum/status_effect/wraith_spectacles/on_apply() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + apply_eye_damage(H) + /datum/status_effect/wraith_spectacles/tick() if(!ishuman(owner)) - cancel_effect() + qdel(src) return var/mob/living/carbon/human/H = owner - if(istype(H.glasses, /obj/item/clothing/glasses/wraith_spectacles) && !ratvar_awakens) - if(H.disabilities & BLIND) - return - H.adjust_eye_damage(1) - eye_damage_done++ - if(eye_damage_done >= 20) - H.adjust_blurriness(2) - if(eye_damage_done >= nearsight_breakpoint) - if(H.become_nearsighted()) - H << "Your vision doubles, then trebles. Darkness begins to close in. You can't keep this up!" - if(eye_damage_done >= blind_breakpoint) - if(H.become_blind()) - H << "A piercing white light floods your vision. Suddenly, all goes dark!" - if(prob(min(20, 5 + eye_damage_done))) - H << "Your eyes continue to burn." + var/glasses_right = istype(H.glasses, /obj/item/clothing/glasses/wraith_spectacles) + var/obj/item/clothing/glasses/wraith_spectacles/WS = H.glasses + if(glasses_right && !WS.up && !ratvar_awakens) + apply_eye_damage(H) else if(ratvar_awakens) H.cure_nearsighted() @@ -104,4 +142,20 @@ H.adjust_eye_damage(-1) eye_damage_done-- if(!eye_damage_done) - cancel_effect() + qdel(src) + +/datum/status_effect/wraith_spectacles/proc/apply_eye_damage(mob/living/carbon/human/H) + if(H.disabilities & BLIND) + return + H.adjust_eye_damage(1) + eye_damage_done++ + if(eye_damage_done >= 20) + H.adjust_blurriness(2) + if(eye_damage_done >= nearsight_breakpoint) + if(H.become_nearsighted()) + H << "Your vision doubles, then trebles. Darkness begins to close in. You can't keep this up!" + if(eye_damage_done >= blind_breakpoint) + if(H.become_blind()) + H << "A piercing white light floods your vision. Suddenly, all goes dark!" + if(prob(min(20, 5 + eye_damage_done))) + H << "Your eyes continue to burn." diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c5c2f56f33a..c6316509682 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -685,25 +685,31 @@ BLIND // can't see anything body_parts_covered |= CHEST return adjusted -/obj/item/clothing/proc/weldingvisortoggle() //Malk: proc to toggle welding visors on helmets, masks, goggles, etc. - if(!can_use(usr)) - return +/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. + if(!can_use(user)) + return FALSE - up ^= 1 - flags ^= visor_flags - flags_inv ^= visor_flags_inv - flags_cover ^= initial(flags_cover) - icon_state = "[initial(icon_state)][up ? "up" : ""]" - usr << "You adjust \the [src] [up ? "up" : "down"]." - flash_protect ^= initial(flash_protect) - tint ^= initial(tint) + visor_toggling() - if(istype(usr, /mob/living/carbon)) - var/mob/living/carbon/C = usr + user << "You adjust \the [src] [up ? "up" : "down"]." + + if(istype(user, /mob/living/carbon)) + var/mob/living/carbon/C = user C.head_update(src, forced = 1) for(var/X in actions) var/datum/action/A = X A.UpdateButtonIcon() + return TRUE + +/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags + up = !up + flags ^= visor_flags + flags_inv ^= visor_flags_inv + flags_cover ^= initial(flags_cover) + icon_state = "[initial(icon_state)][up ? "up" : ""]" + flash_protect ^= initial(flash_protect) + tint ^= initial(tint) + /obj/item/clothing/proc/can_use(mob/user) if(user && ismob(user)) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index e83e5c7338a..597876fb4ae 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -3,6 +3,17 @@ materials = list(MAT_GLASS = 250) var/glass_colour_type = null //colors your vision when worn +/obj/item/clothing/glasses/visor_toggling() + ..() + vision_flags ^= initial(vision_flags) + darkness_view ^= initial(darkness_view) + invis_view ^= initial(invis_view) + +/obj/item/clothing/glasses/weldingvisortoggle(mob/user) + . = ..() + if(. && user) + user.update_sight() + //called when thermal glasses are emped. /obj/item/clothing/glasses/proc/thermal_overload() if(ishuman(src.loc)) @@ -202,17 +213,8 @@ visor_flags_inv = HIDEEYES glass_colour_type = /datum/client_colour/glass_colour/gray - -/obj/item/clothing/glasses/welding/attack_self() - toggle() - - -/obj/item/clothing/glasses/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding goggles" - set src in usr - - weldingvisortoggle() +/obj/item/clothing/glasses/welding/attack_self(mob/user) + weldingvisortoggle(user) /obj/item/clothing/glasses/sunglasses/blindfold diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 130aa815b7e..3978b6ac385 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -28,16 +28,8 @@ visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH resistance_flags = FIRE_PROOF -/obj/item/clothing/head/welding/attack_self() - toggle() - - -/obj/item/clothing/head/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding helmet" - set src in usr - - weldingvisortoggle() +/obj/item/clothing/head/welding/attack_self(mob/user) + weldingvisortoggle(user) /* diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 4a5569bd0f0..f3d548503f6 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -29,15 +29,9 @@ visor_flags_cover = MASKCOVERSEYES resistance_flags = FIRE_PROOF -/obj/item/clothing/mask/gas/welding/attack_self() - toggle() +/obj/item/clothing/mask/gas/welding/attack_self(mob/user) + weldingvisortoggle(user) -/obj/item/clothing/mask/gas/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding mask" - set src in usr - - weldingvisortoggle() // ******************************************************************** diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index d33be72052d..1e31f0342af 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -72,4 +72,6 @@ var/blood_volume = 0 //how much blood the mob has var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override + var/list/status_effects //a list of all status effects the mob has + var/slipping = FALSE \ No newline at end of file diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index dfb09bf5908d2f513afea11f859d9d8e8c13a393..740573b2a593f562d706a091224e81771aa8044f 100644 GIT binary patch literal 12146 zcmdUV30PA}n{Lo{X%#iCh=PI*ZQBZhHnJ~il|`im5fP9jDgv@bz_0}p)K-zz4Z|J< zk)1Sa*g{Z&C`%%1fUwCHAcO!R2_eh5C$|5cJNM3=`_FS{{+Z!{qEc1ooSdrntMC2Z zuO45tvXI@Pumu8v$eufEdI)WzLbP&szDx`wJR=U>sUz(@TY`lri2#juwAP@%E!m2(xA^M9&Y zogD?}?JzB)7y@5eXk9Ao$69Q=S-&g3-w5A2PCwh11!ZE(KHqvV4cBaH{6%5umHN&f zD~sY$zijnd_t@OGHEYN5gOAO7Jd?B9)^GX=_twE}Z{yqHs1wQC7O%xWClY@3o6TUW zSLv%;>8%SfV591p>Ob3TCGI%dkzcnQVD2R`dsU1NHofqmx~(j5yK}>(?Z=;nSf>C9yEO88$;#}~_G=D=lQ*!X+8SeV$VIuF*=_y2TOS_FHRrOJayHvjOD#U@&3<8yoQfK zkABkjcRrYU>y=f+*$Fl^n@N01oX_)MgWbNZt%Lwv!|hxW9f-z<~PAA&&6 zlIaRW83-ii5JU#@gX;fM+*R%C?tUIW8Juv80`sE){eeSgG4Jf`U6PQ&!7ZL>MhKdj zFe)U%3MBP6nqxv|UOze?<{P-UcBWWsh!u7e+ct0@WC#j9aXfLhJC{-WsMv|%(Oapa zV!}zGn&wb@2f73uCZtJm#Qiugk2Bs`?Ci#goBDSJT;TaijRzp z+%&9vU9_r4tkmW^Zj+c3+{g*lGo_yrFXQ25Q@Z$%LE^yySitOpBO^VCBEzSqXdR|8 zNZ_bjP6q5(9Jawikr6gNdfFHuHwaf71qcBm$(c%Gtt~gsYl@pK6#^wwRaF*lP95>x zDjKtMtw96Pw?;S^Q7Ku+j$sq#-sT=w0yn8)bw9dv30^&xo#U1gz#JsZrKKF;ChJInQoVNx@2HMFSsGLXb%J#L)p|qoi_z^OcbS z-mTwbt0%j$l(SrsGQ2v%Rz!j)v&dy4t-nE{npO?L?ddV} z|6P32f+&iCjlL^u5XgliREX~iu;*~h}8ym&SkW{)`;sKhWvxdcm= zl&KoGTr%cUc7LkR&xI1#^@E0C%$QLi>|7&J@td($Wnqc4fwJH zlPv41r7~X6p~Qai2>K=Ge9o^~vh8WQnm%4$`ZGMSkWWt4_DK*BR34%vP^g-HiTb1< z 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 literal 11868 zcmdUV2UwHm-glhXs?gMd%1Dc?TMWL`nOxhwJo<%r2b;st@&>W1SdgQsU+>_788 z8_*IXj4k6~XujN`RNkL%zu{`brlfvLa@$z@_l#U9FTL!o-vbWHu&Hs+4#DFCpM6jjwW^IeTque8#$I^l-!c<)r(R>LUSDME-#) z^8;thRz_IxEk`h0??3-(L?e~c>mfDEI|>k^_pZOYbyqi`?veeYioSJemB~{@1~Z&uM2r}s5LP0N=Fb}l(pS%ee&KnfQ|j+_qUsl#vG2%h1;h6nfCU?c<=qT-Qy2o zjC($2t<}d#c^#RXA}*S4Z4%$0l`#713X5Da4*B{VdzDJ2=^k1a=YRHzRnMf$(cD;4 zRiAtKv0?2!@)Hq!1wxhJ&`TKK^x^4!f+==mXl6*S7=p1>sr}A_ik+{SN4c4*NKcI?m zgEj8$U{%#-nd~&WW0DR#`#Ca2n){te-?UV8V8b3XqhAsH^+aBzeE2S_m8w|V8p)cb z4nDmOfqVh^!RDKbky*1W`~wySHwrK@!O~yM*2QQ3xwK>N`?$LNa9i68imo*kEW(a; zC;Q+2no^n6?)Ub~;(;9-^YcdUY`L&~$Mx&&CZ~V+Bo2~xv_$zWn)+1n)~-Ep=MPV^ zU(|iFX3aNttKAT6#4A1YF5|E657W6LZ+HT;-End+4wWqtWy9#hKYUB-_FD~sL^b60 z=s+NkT~~ev`C|Kub&#JEA*&(Z+d)>!1C%mRvrQoP?U*7oR27%@dY4R-n}d%vI(+!E z9K|eKMe?_n)FS*;5fg2x!8}qmqpknLq^Q-^w_&LLBAJ=sUsAiv!1Jnpxi9??MoYqq zKy|zCHyFF0qqur>M^an1gs5Y(86VCgmHIPFw$&&W{3wdP2l(&G60M?#;gv6!fBon~n7xU1+xtEb^Q?JyaEtfR#~WGyl7eITz=mermK5^VO<7~RK0iD!OdQL$@->jzR9>J8_)Zr!(456#Qf1S zBMPcaOsyXShlmJf47kvN?ENJ}+W?7EZg5DgfO(NU65*tH#cs|(IfuM8)&}F!njKxP(!tykS?HXfd5p_? zfYWchl`+5nCXY#m2_y8zS+UQjI9!*$kz|YM!CW#Ksf+2Y^nfQE!N{Z$(Mre8FN*ek z>qtg==;$5KsOYMf7Tp&{_UzQwM#oNQB=kfx|7>-CUxw-I(I-w2CK-jY3<8vbMx`W0 z^3tgz2SKYquLdpktYwv#y``~b0~2TOknwq|MBFkQB|PDVM`Yt;u1vI@r$LcMhhLB# z6zAz*7>os=DD@+e_MUPZ#EhcrVyMfuV4C_PNUKA9qWq6HppZp zhEzdPPSemxxJ}Hs4&p8hSlSe)$f%xP6!I5kQ0V%t2lj-|4sJ=Z%ggg+7fjZAUViMS zOhSh0?lL@G9|sPu^X; z`&0wKG{sj(woVzg42_tWg8vzAuaY-X0E<}ZL71Tx6?rH~jKRYtf(|X(=U$ypX2`Af zdYAws#!O1ANJDc^<8IxXA27Y=m|F*aBwxzU!RIqm`jwxKE=;u7bG#mlQXBW7R@^9= zpns(r&O}LHjy=gy-F3P6=S{-75BqPjt~Qv5jcsYXok4+I{Z>796ExMbbGOWo7^@;8 zb6ACn1jGBy*C_sAo%`FQhR&Vvh=i2@H1l((~R?Vd%$3BbF^uW@f_pfsE^Ya(Y7bOyHy0!d9u}6KC zmoQv~Z4XoZ+?Qn@s#!pXlOadGblR|Cb3WPpNY|hR=m&~jb)xVW+aHr5Bzu1p&C6gDuO+tm3Nto~Jn1 zD;J~BB*u6YV4cfwKXh9N)h~OK2P$HfG6Mt8_B6tU@hJjfPb}aoU?3uG6|-pN0R|W< zmcs*Oxc16-g8pPZLC5?&Qle+&eL|N#q!Y^R+#jG6@tE3L!+4-Zf*$xh`28Di5_RYo z82m^!FeZdTz3dv{Bhs!tybX`Iz^k-;ul6)nwNm}<*8%C4a|)^uf2F<0`=Hg>;xYRc ziZ+I$*lDo!fOC+OO&0F;M$;yHgseM>l+Gl%NvLIv02e&B4#N}gn-v5aMj1v_x?9ON zq9eZpQ*J{qx%u|(+s&`F5W3LP(kQnrp|F$6KWz$3A?)$#N*qk5>2f=>JqBG)vZ(Mvr@DZPWaK!X7=i7RPyVS;@=gIAExc58 zos?eWO4B*$Uh^W772Mja?O1XEqp99$2TSQyC&jvcDd7H0NM`by7pHo>Saq06MmurP zVRxctS2P6)B8L+`hoebnn)tsW^`kzBmn497+DOoAb8l5-n4h0I5i~>w7p9auc8(&W zUvK2v%&3AFx!MQzXy#bSZ*q@Jfj%*L=)3Q}vvs+(3({(G^ytNgAT};|Vufn$DacC5 zSL24aApZ^C0lD{g^4doy>R~{JE3RGW?rJTXF5R8$ChjiOk*tP<8ImDq-hz&Coj9@z z()iNP9}?(M{*0)laa`Ml7OQ-S2-wCCe~i@&Kg=I?qDjS|6;e05U56#Vrf0I!PA5%( zspQ~n>Fxxoth3tGS6M5J4LTzfyOjH2Za9dXBuc)++zv%GE&OVZlimJzZ!!#>UyPOz z%&^>&?M7a*uHTL4QwF;>kX5%`j>W#g))q}n55OZj37tv26IS=BvU{E_i$o|?C$svJ zk>pvxP*roXEO|&$r|bxLO2%>TY;5*|hc_9&evM^CEI!y99D_!85KYOw(iBaWy0@*w zJ6Hko;e6p`97)#B)Zv`~1}kcVJp!DTP4ky1Cp{Y6)859WS4R}8BWgh!Ij5D;YUfhAZyf_s zZADk!j0mek!FDvnkLm<~!@t1Z9Nf|nRY^x-aKY1=g(KfYTqD{K_;&^fJN&_vXO*&f zV(sADw`ZZyU#uba+js2PhpgdKYeGDv>=-C&O8#;7vuKE&kEfdaX$(+7 zMPPu_ID_}jQohs~`*7c3uFc}m&}7DgT86f@D0^(bM0J$9_|y<{bwm_R0fSnF-??HW zCHjNdHeqY?PufUlS?pR3jf9Ezbbe)5WOe#f*G8Rq0wI-&fUQ`Z+gA7lT$OEJXGn`nmk3JP?i^A3JNW9B<;h&)N5np-S&VI2-DY3MySRSC0CUM zLO0eAG+8V67(ufwuOstLT-;8BeHq{6C#kkQpPtF|w+~}y!Ar@R`G@uz7*yRDz)>Xr zlweVxQ|ovNVnl3pD$|5iGxaR9PQ0aN->@YHOq;xCVA!#3x<#=te-BCQ*Rv!EjAYSv zm%1L`7Y44qY-5wx{XB_^6wA~(0p(m9vP=WxaTm>Rmof@vwbilZQw%iWQepI3pEK1p zBz}4GdbjLkuRvTxM}~2}I-VauHq^|*(wAd=u(?Y`mxX7<{Aq9~&Q&*DIvyP>ssl-` z-@g5-M=5&HbBu8Z$Iin@aP%uWK?C^TmH^zu9~AJs->zUX2%}Yj*yTBXlR9px&Gw{e z$F5h>h!Y<_cKeq5b?16^=h~(gqxvjZ#pe8d+^%-FnxHG)Y&J^fqV|XN+J|loS;STH zZW$OHqAb2sZ_%Li=TinCKDuk_5q2)W`kOd2AZF`9*NdRl)s^i5O%FqwK34z6nNFFG z8jc)KY6cD7u0$dhw|J*}q%Bw)7?f<=wg<#uY7}B;>7|B$(j(JKN?0uA#Bfkv6ajMRgH?N8Kg1YxYJSYf6E_U0GmjXgO=u2k`Z?GIY z*Xe=~hk*k9#t75)ATlu0%%>}ByCHSS(^Am1sZ|B~_ zCia5oNukwZCU9u0ijKOwWxwO*lj(;JVw8VXRPdT>hOnHyFXJB?RdpI!vVAFgB91B%e>n?8O1JoQbDg8nIiia7JrqdS9Ym8zrsnH zQ+bT1Rsh4re#RQ08#KNH!77|6`dk9R?oDaAAu;;vpv5A? zWpXt)xMg=v*m-ZLMOqoRJ7$8`Qz-USQZo@Iq7>$5se`TFN)nBg#@6e_F4- zl?E%#TA|jb8XwgaV&B2+Z9rAE>EA_MmVf}p*#jbiV zqd|11AHB~ws4}Zq79$kjz5SjnOH1#ysZ6DQKkQd`<+`>t+I7+aLA%^ekE|*P~`ml z-D;wb+t~6lA%9mFTk60Nl8^03`h@a2e#`!N za8p7*$OchBz4H{ih zjQ%)=qKbBK5%EHHC)o9F7VxK)FI-dr=QX{l$VXS-0T*niD=#Gq@`#2_2;9_UFKv@E zxPpSZ@#KUuJScd9@uBIyL(5>L|NfkEAq@3Q2ndSxjFi1j&BoOYyOOD+8m0d2DPzy= zu|%3MLIo~G`g0Z+@!kotGaUbgrF^EmG;HeKpn6rZv$HESa()rg1E$_RwY6yi+d#Sj zuiszzn}(UZ>eJ&8$SydErm zLfHT&8q^LD^`#u(ohS)J3;j95YZ6%=yG06n2ol|XHXGsNkrDxqOLM@>dc3lQk=3Do ze$w2!QV_#-8rB?4H%*SNKhJ>i1riKGBj23)N}7LECPW}D_}xq*@Zku!*f}`yz*5uh zzkQgSRNW5t{@sIBLTDY%yU>~pEclZy>RVB{VV@F?Zx07LzLM@N_i%COsSqE#B3 zZ$ge+$F2&R{A^im^}P)F1MdC<$@O1~S$|K!4L!TUnat#0XWD57DRb}hstZF5S&I#~ zvSbzt%=4b#|IQc|?}wmvnRR844#9pF=##tsdJCNq_0-JtQ-0Z-aPmMDZHQ4Uld>3+ z0g*QqS50OI_&X{UyLRZ#YCaI?qlIQDV9n<79p8rcu8ve3lV2EYQcJB%wjBxzjJf zQE%=Xy-K@0dgJ!ZV zRn#;x;N9#b3~t3La4ZLGF^U%3;pEg>Pn@elks&6aRk;Sxm;48}L4DKpQ1a*)fm2DE z)0lqZwy3_@mxM@fn=Hrhm|32n8CCm;+;q%~ELwPW1A~V>R($MC7mf7_eZ4| zs@lL}L{+3eyRSNhiVK=Yoj}ReP`@>NhTwZAPEyC8+tp19>sR;&Ce=pRSLQEoVUW9vk<$6%`PIDN2L{@VA}~& zzcXIx=HLhpW&yw@2N4DfqRS9Iv*sbgY0;^P51#nZ4pWfrA zQUeEqs}Xh@46tw^h<~^p3dPq)xfBSrOR*e;);vBVXgr=Yzn#ap7i#wC%+XBk(E(7&EH^hH}-?Yk#ImfNMs(osA?L09l!J z2(GX2($f;Qg&b6CZTqgOkUA~{ZoTQGBC_hbO}pjb#JiJ*NtuCl1+yve3^jK% zI>IB1l83GR8Tje%AxG)J{DqXe1OgFw@5e>usyU#mFRQme$fn|cDBWY=+07m)^%l9& z&11wf?-i@$CzC}Kx< zk=O$`m3N8hN9H-sUS%=;)Wwtzs8uD6`z@7rdEF(X6?apmYoeDG%I|@VmmfTN@?>nf zh@1=#3KL_}MT_o2RIA&5lFudVXOiHLYkxz#2QUAl0^EPE+x)B)`@+og{E)GJtf*#j zr!YQ_L3B#Q;0JiHUzM{XCxuQ;bnZEE9myC*i7PV)te9=#s>UZ1FIGk64>@JKHB2-W z2mtFPR;1(_IR$OK;GP8!!jf2-nFn0Cf+zH&Cy1|Mv31C>>m0P1vcI1ig%prP4y`OV z!vtn);!@yDV)>j^-cp1x<*sQ~?2RcNtV21w2*dNq*R@D+vYDqH6fge8IG$sfX4>W< zNh>Pp_u?Q1ToOzTYe@G}ZZm|y93wy=Hrq?p2R_qcV^7G0=&tb(Eu8aAoT3mmVU(d%=EgzkeQy$EGd}kCoP2 zJ1gGj^P0UPa4%|b6ScNmc=j`zFS`A!y7F##bv9u1y-Sqy6o+PqaE9F&AKyF}iR&QL zS0lF~2<`dXA&?Cw>azggIOF)Z!j6gY_t>0xhEtZSRmEIG?u@8)kUkmpfP~?&U4gJE zV{~5(wX@$Pw(tJ(OzJUi(?T>T6}tK&MbeZBkyfhwSR4h@)4_96;g~aDCxmx3fKYLl z;!HK!vO03QAb8!aRO2o>^}kZ%V*uSI`X5USq2 z?x_qoVC45$4xTA!{4nu9C#nCnRG^`Elg{LBneAUECujOt&yOHxA5pG$pEl-G z#4L~U^aFL*I7MuEcFDlWt*oQMREhh$W7s#KvaDuc;Z|EAkoz}bD^~r7NW(u{x61(8 zcWo$l>&I!S5=04gK87w~JsnOSbp`(7d$y*XiU;u6ypOl{u-3i*pG*r*H?Q|=wd==& zyAeSt8&MBC(*;BEESKcK*R4lfuo+hlaUkBirx%`f~JazF=Rb9 zPuUmty2G%R`yEJa8?iveICg4nXVk?fIzF*nb6;&Jl)|Le|Iw%_abhG82z`8qP(T$v+y^4&tXohhOS?LiFzg8CbpkddSTm8dGlm&*ARBa7207SSx=oa!wVB zf3J-at8SOlQYd7rs*@-sXQ;^87Y`PipWLG;_(I2qnHy|jCpy(cuEfpYW=lN^U48Mo z9m8wBfXKs?WZHb0#89@7e!>llhhb6J8|gsZ;=|B=E`Epul=pW|h!-eq#Y8#=5*{XQ!ake{6;Q6=;a#i%_%6Ads6{A;hHu= zmz0jKok(-to~cVwIrG5!_5k)8GFGv`^&AvkIGOWJsH&$V$0Ecnl`dBZ>4w%4Z8%Kv z)=djOiy>n@V&)9PTjEBdog3yb-QS_t4XVU)m9}Q62VtOOJJk3%&xW`mh_3 z!BOx;vR}C>vT~5zY<~!tydBDx-0EqwP5_JO!%<8peFcSwHkm1RJ4;U>jY~qi4)>6g(PfG7G7NvTO!7%FcW0b z3!Xx9U~whVdeq}oqnr(>Jd4p~<1A!a_e+?KPyi@r{W zyBa!G#+q)k62`#>#Em*RVI|r{NOeN6o#@Bw+BOjg6vuivt@9eY*B|6CM8nuGaHE z9yzGL$JKqWaAR6*?gDOtr+M7(+_@8v!>u~R%S2bNIo|jFST^Ic0?&h7+R&2_)p9`< z|Hb$94_p35j`Df6B2w)KxFH&HQP0Rdk?P*Ew$&AHP@PUm z=a8whDDu^{B>!XhR0?NO#CD}cUe!_`^!U9)HN&uEMv>`{nO4ZF@VLKxn3x0L>^G#$ zJQ0Ol;yHktqU1=3Y70*5hDXsRF8zu3D_}#%!Rq1jIwdIgQ_^?#;yUnO+sg$hc*`e4 z?IG$>k?2u1vBAM7^Ay{U`i|78cb=kpFpDz0gHT|DPkPbYFBP*%T!gornc#LN7W*|9 z5lt$jBa*j`D9!N;Ly`vfTOg4)^Q^gN?AJxZklN_L6SB5|V>*kgUFm^UY2he!LRh6^ zDmb90AgH#WXh0r&s`MI%72E&DiY-?X{~GvQ-r~PJY5T9iNGY)5h{e*$!p-0Q2myb7 Nusvf_^6ljx{|}r05}E)2 diff --git a/icons/obj/clothing/clockwork_garb.dmi b/icons/obj/clothing/clockwork_garb.dmi index 036a50cce3f5ee8c4cb4b28b70edba1dfa5029aa..23e5b979e2c507cfce0022c45dcc7fa67c4cbbc3 100644 GIT binary patch delta 1548 zcmV+n2J`vu47m)DB!8b!OjJd{z`!;n03{g!OfvzHWDajn5nVk1e_0QqbRDCSH2?3M z|JMg-D*=&b6PbY$|Ns9f0JJ6mY%Ks;F9JC)FE0`j5>F`u9|iy`3;-qy05K5&O90uk zTm@t_12GT)Js1Fi0RPM*_5MZwJQ)B^B>?|_>V-uGj!6Zqc9EtZf2LUjepnAex79EJ z0004WQchCV=-0C=30k--jvFbsyz+fyuXB?c6a zUJS%=kXInfsID>?*$TYAC4btk_591e?s7KXMB_*01nRG&!Bq z$|$9Ey{i=t=yQgv^my~t6f!<5wMCQ(f?#SujBTyW6uYK}2~^TUpbSANQcU|gm@0t@ zlmfG08t7Z2e?_g-X(y3CsYDGuJkDm1j|3x{?ZU<|49oMwFpAEfs|^tjaMcDD@0Gv&!2x|e|&y^eu^4?CUB>rFaN}>pJopa z6lfh(+lq>dJr6#K=feN;@*)cJ7#?Z~IMcAOzzY-!0*FFEpn_t)@IJezwt(H#1l#9p zy3vjRNW4aBq$Mb233f{)=9`BXBx`& zzEk0(e=bUz76`-B(Z(%&y%U%&m$`1bm`j5_$iuvjw|jtIhnumAkpVL{Q~3;)~On<%vV`v$AU+FH9_ zf2|$pmd((`C%XhtRD(lY7YY`pr_VQIM^i9{eGLc zSwTUA6|@>e0klvsN?ZO4`aXr~GnRv2gI&HvH|9PC3edV@s16BPJu84;8I#+?e;v<7 zIvy1db=h}-&l)j+bII5=yGMbT8{<+SNA9E+>>ORiw}Z{H{tETy+~b*#z?Rws*(2$L zFlRPNU_NL#~s)3QZ8&CV(e}(=(e@d=>=*Bhj{xm#Fd3 zNgi3N6P4IBO=~vxf2NaM_Xz{?fAh%WNNhw~-~fNX1_YuybU?=9*de#K`v{~*9!CxW zqTI}An`oVwEJ^C+g8Gnaz8883uv;WSMd3u?z!`K%T1ms}$Kmd;6dVF)XiaIuOFjL0 ymut7_vHqWf%bRymK<_PhoeIB@Ys85D_z!e$U@2JATNVHS002ovPDHLk0$_rYqv0$7 delta 1598 zcmV-E2EqBc4DJk&B!9h7OjJd{z`!;n03{g!OfvzHWDajn5ojv`k!KT`ff6YIv?c&- zO90tjJpg}M4=n&$F9JC)FE4=r|I8!x{zdTm@t_12GT)Js1Ey830Zt0Df2xg+&F9Ns*u;f3b@trdb1fQx82H z1WqCXl4crhHxJ_g0Mv5}r2u&O`*(|tFYy2X00DGTPE!Ct=GbNc006~$R9JLGWpiV4 zX>fFDZ*Bkpc$}4y%?^Sv5QNX|Q#5iV2K+gCF%ZK+UV$`awJU{^?IN!)YN97XxXo<# zo5^M)b*ho<$ zg=w5haUU6r)6PFTTddy$om#A|Qdi-=n4>Da=I;RNb^bp8Xkc*s) zzfwBYBI=&We+TN=(%NMg`u%=B?Dt)F;JTG@{|Ng5epD?h4BVW^#q|R)6yt$8=`Fhn zx)A%^=Eyck19#AO`tERewZ(AgVm!#Nuh_4**t0Xg6iNswcjQtE9FVzj%ivz!+Y^zb+u zJw6hgDEm~b1kA8Zfl0!kpfBy$*JTnac2tq1hY>hGjYgzY*_YLo*5?Y@!L72tX{U}y zBQxpIefX%5aPRYyN|FGPCAMKadb*U!Ch#;SjTa8a+IaC#ARRi?i`Njwi?f zg@cmX_Jwyoekk-zVb%;<+~mP(H6Mex8T?D~{vJZQ$Rq-Q>=UV*T)fBX$w%fYHWsBrq)iL`2CO1!n4xv za%8nDnmp0d#J1xiB|d-oQ&{(7*cJ+I!YV=IC&t)fhX-H&`rGaSO{apJuSU!Eo)t1S~3M{6dF1(S{lNI94D$6~{R{IJOYA4WO=j;kz z4mu1^REX0}wo0%Ll2x|ZOEcI4?W1~3`5?`q_I>zpN*)piC6uNKJ}C+b;}SB|0UR*( znU5p*5J~@dg(S_Gcax=PP|DI$e*ruJf*$H{$ER__K=Y+OI!Z|zvjUbv8Z&=f3TQ2T z;p-p>3O0^^DE&wtp9TmxNrI)2CfiO$V2yad2P9&5XpM@+v2~=6j!}|r(;DZCEY1o6 zseLJZ75aWLT~Mzh$!p>GB)k$RED}7ZptWBq8lFE6*S~VGDQth@7o#nkG~%hM7dHpK wcdHZTe;9mwb6(v*o89m%3TNbM(c*Oc3rUKDd=tZgGynhq07*qoM6N<$f)^0j&Hw-a