From 97315940fe84c70069854f7c7129f944dbf28d6e Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 8 Mar 2020 01:01:21 +0100 Subject: [PATCH 1/8] Polychromic element. --- code/__DEFINES/components.dm | 1 + code/__HELPERS/_lists.dm | 21 +++ code/controllers/subsystem/dcs.dm | 5 +- code/datums/action.dm | 49 ++++--- code/datums/components/storage/storage.dm | 2 +- code/datums/components/virtual_reality.dm | 2 +- code/datums/elements/polychromic.dm | 127 ++++++++++++++++++ .../elements/update_icon_updates_onmob.dm | 2 +- code/game/objects/items.dm | 7 + .../modules/mob/living/carbon/update_icons.dm | 9 -- icons/mob/actions/backgrounds.dmi | Bin 6061 -> 18620 bytes tgstation.dme | 1 + 12 files changed, 188 insertions(+), 38 deletions(-) create mode 100644 code/datums/elements/polychromic.dm diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 56cf681a27..ff0750a28c 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -255,6 +255,7 @@ #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) #define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args) #define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable) +#define COMSIG_ITEM_WORN_OVERLAYS "item_worn_overlays" //from base of obj/item/worn_overlays(): (isinhands, icon_file, style_flags, list/overlays) // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index f16b566b00..8887a2aa1d 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -550,6 +550,27 @@ for(var/thing in flat_list) .[thing] = TRUE +/proc/deep_list2params(list/deep_list) + var/list/L = list() + for(var/i in deep_list) + var/key = i + if(isnum(key)) + key = "[key]" + continue + if(islist(key)) + key = deep_list2params(key) + else if(!istext(key)) + key = "[REF(key)]" + L += "[key]" + var/value = deep_list[key] + if(!isnull(value)) + if(islist(value)) + value = deep_list2params(value) + else if(!(istext(key) || isnum(key))) + value = "[REF(value)]" + L["[key]"] = "[value]" + return list2params(L) + //Picks from the list, with some safeties, and returns the "default" arg if it fails #define DEFAULTPICK(L, default) ((islist(L) && length(L)) ? pick(L) : default) diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm index faf95fd319..19a1ac26b5 100644 --- a/code/controllers/subsystem/dcs.dm +++ b/code/controllers/subsystem/dcs.dm @@ -16,7 +16,10 @@ PROCESSING_SUBSYSTEM_DEF(dcs) if(istext(argument) || isnum(argument)) fullid += "[argument]" else - fullid += "[REF(argument)]" + if(islist(argument)) + fullid += deep_list2params(argument) + else + fullid += "[REF(argument)]" element_id = fullid.Join("&") . = elements_by_type[element_id] diff --git a/code/datums/action.dm b/code/datums/action.dm index f1df2a80d8..65db324b2b 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -6,13 +6,15 @@ /datum/action var/name = "Generic Action" var/desc = null - var/obj/target = null + var/atom/target = null var/check_flags = 0 var/required_mobility_flags = MOBILITY_USE var/processing = FALSE var/obj/screen/movable/action_button/button = null var/buttontooltipstyle = "" var/transparent_when_unavailable = TRUE + var/use_target_appearance = FALSE + var/list/target_appearance_matrix //if set, will be used to transform the target button appearance as an arglist. var/button_icon = 'icons/mob/actions/backgrounds.dmi' //This is the file for the BACKGROUND icon var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND //And this is the state for the background icon @@ -88,7 +90,7 @@ /datum/action/proc/Trigger() if(!IsAvailable()) return FALSE - if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, src) & COMPONENT_ACTION_BLOCK_TRIGGER) + if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, target) & COMPONENT_ACTION_BLOCK_TRIGGER) return FALSE return TRUE @@ -116,7 +118,9 @@ return TRUE /datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE) - if(button) + if(!button) + return + if(button_icon && button_icon_state) if(!status_only) button.name = name button.desc = desc @@ -134,11 +138,22 @@ ApplyIcon(button, force) - if(!IsAvailable()) - button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) - else - button.color = rgb(255,255,255,255) - return 1 + else if(use_target_appearance && target && button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. + var/mutable_appearance/M = new(target) + M.layer = FLOAT_LAYER + M.plane = FLOAT_PLANE + if(target_appearance_matrix) + var/list/L = target_appearance_matrix + M.transform = matrix(L[1], L[2], L[3], L[4], L[5], L[6]) + button.cut_overlays() + button.add_overlay(M) + button.appearance_cache = target.appearance + + if(!IsAvailable()) + button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) + else + button.color = rgb(255,255,255,255) + return 1 /datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE) if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) @@ -165,6 +180,7 @@ /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING|AB_CHECK_CONSCIOUS button_icon_state = null + use_target_appearance = TRUE // If you want to override the normal icon being the item // then change this to an icon state @@ -188,23 +204,6 @@ I.ui_action_click(owner, src) return 1 -/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button, force) - if(button_icon && button_icon_state) - // If set, use the custom icon that we set instead - // of the item appearence - ..() - else if(target && current_button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. - var/obj/item/I = target - var/old_layer = I.layer - var/old_plane = I.plane - I.layer = FLOAT_LAYER //AAAH - I.plane = FLOAT_PLANE //^ what that guy said - current_button.cut_overlays() - current_button.add_overlay(I) - I.layer = old_layer - I.plane = old_plane - current_button.appearance_cache = I.appearance - /datum/action/item_action/toggle_light name = "Toggle Light" diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index ea72a8a6dd..3ed66dcf92 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -790,7 +790,7 @@ user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].") return TRUE -/datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source) +/datum/component/storage/proc/action_trigger(datum/action/source, obj/target) gather_mode_switch(source.owner) return COMPONENT_ACTION_BLOCK_TRIGGER diff --git a/code/datums/components/virtual_reality.dm b/code/datums/components/virtual_reality.dm index 63e4f4f092..cd5820d21f 100644 --- a/code/datums/components/virtual_reality.dm +++ b/code/datums/components/virtual_reality.dm @@ -174,7 +174,7 @@ /** *The following procs simply acts as hooks for quit(), since components do not use callbacks anymore */ -/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source) +/datum/component/virtual_reality/proc/action_trigger(datum/action/source, obj/target) quit() return COMPONENT_ACTION_BLOCK_TRIGGER diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm new file mode 100644 index 0000000000..4301a280f3 --- /dev/null +++ b/code/datums/elements/polychromic.dm @@ -0,0 +1,127 @@ +#define POLYCHROMIC_ALTCLICK (1<<0) +#define POLYCHROMIC_ACTION (1<<1) +#define POLYCHROMIC_NO_HELD (1<<2) +#define POLYCHROMIC_NO_WORN (1<<3) + +/datum/element/polychromic + element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH + id_arg_index = 3 + var/list/overlays_by_atom = list() + var/list/overlays_states //also used for worn/held overlsays + var/icon_file + var/list/overlays_names //wrap numbers into text strings please. + var/list/actions_by_atom = list() + var/poly_flags + //item variables + var/worn_file //used for boths held and worn overlays if present. + +/datum/element/polychromic/Attach(datum/target, list/colors, list/states, _icon, _flags = POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) + . = ..() + var/states_len = length(overlays_states) + var/names_len = length(names) + if(!states_len || names_len || !isatom(target)) + return ELEMENT_INCOMPATIBLE + var/atom/A = target + + overlays_states = states + icon_file = _icon + worn_file = _worn + poly_flags = _flags + + var/mut_icon = icon_file || A.icon + var/list/L = list() + for(var/I in overlays_states) + var/col = popleft(colors) || "#FFFFFF" + L += mutable_appearance(mut_icon, I, color = col) + A.add_overlay(L) + overlays_by_atom[A] = L + + if(_flags & POLYCHROMIC_ALTCLICK) + RegisterSignal(A, COMSIG_PARENT_EXAMINE, .proc/on_examine) + RegisterSignal(A, COMSIG_CLICK_ALT, .proc/set_color) + + if(!overlays_names && names) + overlays_names = names + var/diff = states_len - names_len + if(diff > 0) //It will be ugly, but still functional. + for(var/i in 1 to diff) + overlays_names += "[names_len + i]" + else if(diff < 0) + overlays_names.len += diff + + if(isitem(A)) + if(_flags & POLYCHROMIC_ACTION) + RegisterSignal(src, COMSIG_ITEM_EQUIPPED, .proc/grant_user_action) + RegisterSignal(src, COMSIG_ITEM_DROPPED, .proc/remove_user_action) + AddElement(A, /datum/element/update_icon_updates_onmob) //Since we can change the overall aspect of the item. + RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) + else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //Not safe until mob icon updating procs are standarized and stop using cut_overlays() + var/datum/action/polychromic/P = new(A) + RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) + actions_by_atom[A] = P + P.Grant(A) + +/datum/element/polychromic/Detach(atom/A) + . = ..() + A.cut_overlay(overlays_by_atom[A]) + overlays_by_atom -= A + var/datum/action/polychromic/P = actions_by_atom[A] + if(P) + qdel(P) + actions_by_atom -= A + if(poly_flags & POLYCHROMIC_ALTCLICK) + UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT)) + +/datum/element/polychromic/proc/apply_worn_overlays(obj/item/source, isinhands, icon_file, style_flags, list/overlays) + if(poly_flags & (isinhands ? POLYCHROMIC_NO_HELD : POLYCHROMIC_NO_WORN)) + return + var/f_icon = worn_file || icon_file + var/list/L = overlays_by_atom[source] + + for(var/I in 1 to length(overlays_states)) + var/mutable_appearance/M = L[I] + overlays += mutable_appearance(f_icon, overlays_states[I], color = M.color) + +/datum/element/polychromic/proc/set_color(atom/source, mob/user) + var/choice = input(user,"Polychromic options", "Recolor [source]") as null|anything in overlays_names + if(!choice || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + return + choice = overlays_names.Find(choice) + var/ncolor = input(user, "Polychromic options", "Choose [choice] Color") as color|null + if(!ncolor || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + return + var/list/L = overlays_by_atom[source] + if(!L) // Ummmmmh. + return + var/mutable_appearance/M = L[choice] + M.color = sanitize_hexcolor(ncolor, 6, TRUE, M.color) + source.update_icon() + return TRUE + +/datum/element/polychromic/proc/grant_user_action(atom/source, mob/user, slot) + if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED || slot == SLOT_HANDCUFFED || slot == SLOT_GENERC_DEXTROUS_STORAGE) + return + var/datum/action/polychromic/P = actions_by_atom[source] + if(!P) + P = new (source) + actions_by_atom[source] = P + P.check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING|AB_CHECK_CONSCIOUS + RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) + P.Grant(user) + +/datum/element/polychromic/proc/remove_user_action(atom/source, mob/user) + var/datum/action/polychromic/P = actions_by_atom[source] + P?.Remove(user) + +/datum/element/polychromic/proc/activate_action(datum/action/source, atom/target) + set_color(target, source.owner) + +/datum/element/polychromic/proc/on_examine(atom/source, mob/user, list/examine_list) + examine_list += "Alt-click to recolor it." + +/datum/action/polychromic + name = "Modify Polychromic Colors" + background_icon_state = "bg_polychromic" + use_target_appearance = TRUE + button_icon_state = null + target_appearance_matrix = list(0.7,0,0,0,0.7,0) diff --git a/code/datums/elements/update_icon_updates_onmob.dm b/code/datums/elements/update_icon_updates_onmob.dm index ca0e8b1641..5c71547f62 100644 --- a/code/datums/elements/update_icon_updates_onmob.dm +++ b/code/datums/elements/update_icon_updates_onmob.dm @@ -5,7 +5,7 @@ . = ..() if(!istype(target, /obj/item)) return ELEMENT_INCOMPATIBLE - RegisterSignal(target, COMSIG_ATOM_UPDATED_ICON, .proc/update_onmob) + RegisterSignal(target, COMSIG_ATOM_UPDATED_ICON, .proc/update_onmob, override = TRUE) /datum/element/update_icon_updates_onmob/proc/update_onmob(obj/item/target) if(ismob(target.loc)) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index fd6ae1bb43..7a155ca932 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -425,6 +425,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) item_flags |= IN_INVENTORY user.update_equipment_speed_mods() +//Overlays for the worn overlay so you can overlay while you overlay +//eg: ammo counters, primed grenade flashing, etc. +//"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file +/obj/item/proc/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) + . = list() + SEND_SIGNAL(src, COMSIG_ITEM_WORN_OVERLAYS, isinhands, icon_file, style_flags, .) + //sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user, datum/action/A) if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index e5483e8d73..0d6195e4dd 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -195,15 +195,6 @@ /mob/living/carbon/proc/update_hud_back(obj/item/I) return - - -//Overlays for the worn overlay so you can overlay while you overlay -//eg: ammo counters, primed grenade flashing, etc. -//"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file -/obj/item/proc/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) - . = list() - - /mob/living/carbon/update_body() update_body_parts() diff --git a/icons/mob/actions/backgrounds.dmi b/icons/mob/actions/backgrounds.dmi index 3697fe4ff5b3cc76b1c4abd6ec5f7fdd4f1d5a35..07839588ce366d2783e503982b7817658fb5def0 100644 GIT binary patch literal 18620 zcmb@uc{r5s`~N?ZJzGeUC6X;k_H9tMY-1}$OjOqFyT*_bvV|n;h-^ucE!#|4vkuvp zjD75kvCJ^W@19<-_xtnt9pB^l{`Ku>WNz1T-`73&bw1AL^Hhwfi5@fK1x64E#C%&{ z+Z+U<5~RH7X+a+Jg0gy(f4)8?bLJI#!{T&P z*Y!=6nS!(@kJDcun@v@{FDSSdSa4ycUwmDUFi1FiiUCHt4Zjgp-Wyo^B4Bbwb}7dE zGNCT!@YhY94(r38}+rH6ww#!|0Fq}wdkFK zHS@21M%s6=+&IV^@q|3OOIJiEaqkJMFq7v~k6_j0N|&bMQr)brNUQjq7RS+>4I8`6 z+VW@1va3feK_EfUZEY>fpsbB1cQ4-2RO~UG*iBA)bJ+9KU!Nq+iN(wh_l=$VRi>8d zEaFs^XQ!00!x6J)T(;QtSly!X&bW2rt)&*Y*RDNS`+`R0o>6aM^7{JcloF#?Z%28f z3LlqUd8g~G{-s)L^7iAlWUiREG|56@H`y4>-fF7}WN<5e|Ndv$W0y&PDvZmJ?P!sX z?H~(`-Q9Qwb3*6nKrvR>ndh{0VHZz@Ba!8fR3JF2frKDsvw{LPCQ|*m8b4P$p$|d1 zTdF6+9ORi=@{29Z@c=ty%!mq;oE9{dZ4}&f0{cE}K{hOJoI6r{7T9YnReX{-M73W1 zCl8x2M0Mh|`t(<=cm9o9`&*f^t!FcGazG^VA#;-P^mdWQ%+f*;p&LcAfe@q{x8Qt_d_g&vvd-dX z?>5RSEHRvvB(T8b|(94ARa*b=n~N20avzL6*7NT#|`3#MS~cHqgI+LKJ*AMJ0{)yNM}C(<_Dj-JyU z?QACTQ zl$%dR(+qMRt&oo+PLAB%nDHqm80qW4HNDPyW78K^5hS|s4sU;TnxSqHc0M-nriZdX zd!9+OG6Fd3G?h`Qmm{MNoBN^JvhN463ZV5Y)c26uO;jV;;sC)?b8Uu$Q&+RP+Kt-- zgS1_ExSovJ(sSRKpaC`OmmW#yXdVvAfje`2UY_t^?EFsJI0!_6lN7I`{KSCSNeo%R zyks(AJ2PWsen77Q6fK-Rv1dO;URJzk{lM?#7VBx#2Jq*)rt08);RklIm5Pxl&*}5t zks8l@4G2fehv%#aDYc#qVJPtn{*hsid~O`5m>214hOfdD!W8I1&eP7MJV(o3UN@W* z)We!E0)-6qPB$iI`espEqu@=C`l33w4jwr=T7NIYCFzm|U!5>)x{nvKdeNS^9-fR$ zkvBZU8pP@=Y^0>hltOlky(SOC_KA7R?H)uoHyM0vWwX0=!cQp|W!l=0i|41#`k(P| zaiyxuKrf+bWu6U=<2r^KD{8LOP=iGC1+FytNgcaf_^`%$aj_`WrPtj=SHsBIcul@m zndkUAk$Qqgmxt;O^mMDAFUxnhGW9ts<${`CD(%%bzJ6TXRK4zAR}MR63VG#gJL&ax zHSM}$>7!$~VzLv$Clu%yJ@DQ1(ZJywr+jXuo~M#gHai+fi3^W@eEPDmp!DLC)2$1- zr?o|d1%-I1I_ZBgchZYV^H8z>Gn4_PUo!g}Cg2qp{{Hc4ZJ-kmRj@dvEimY{zXLlY zv$G||g+D&MQ1EwD9;!N^Q73)$ZCy?6zx~tx_6Hh7{B3aM|NR6zH%`?n7X_4i37>lX z<{jsaQ$l~IoH8xY(c~EAu8{dy)90;n>QD?^-gJ5GaPO11()c^NaF5efe4*XhGV5t} zdS^8KH8s64(haSLQ7bzC{T8^;&#rOdLjJ`1xa_7MRl8`1y&tMBa-N^tdRdj|{1&?w zRm$35I%Xx?y-hKi{){KWn%z$bJsKZ?Px%iH#OAdL$3m+yC)l${6ht^a5Jh~xM9}-Zz9;lhs_LR z7i9?VzdwVYG}EZnxo1k6v2DC&EN1WDI_VyXJlQ!k`cq4`_Ge2{;rwW@7_Bkt3w3_r zJbf=VudmozeezH8U35V0$KlF9QZ9Q>0}cQGhj0l$nJfB=D;2lqHTW!_)hK#?_WyXk zx38Prq)bQX%TbR7f>PhOiEQrAp8`>!-14o``=Ia`etgY#*iIlAG*<0qHF9VB8_;r% zIvlx0vVss^U=CT4VF!A8YWA`;u)gVCv4VyaaR?E?S{u?8wvuWEJ8|6lqCCRAzVra8 z_Z|pRNM$-wOG)JidC=EjUz;Xb{YMjxb-jja4i)cy{xOC93{2W)$Cly2 z;2hTV154=;M!+lJj451eIE@FYr>D0WWo%Mq7(&~Zh2G6bpF&S>!T#Ju=Dffk;$^WM z9`4=8r$@(a*oS<){I*?~)j%09N{19eOp-o?&hsAMcWoS^0*PIJdI-#dxuQ}OjfU%K zP@e?mP7=@t2aB~hENm_6C=!8ag6`*>R4Jw&&DK_ol8|}sB)AaxMA6&ljOjZ8vCnmW zetsa(xpU{<7!-IN)yO7ZF})J1-lUryNm@s+&Wvja{3!7}j-Q8F%X+Wj-G+mk%Urd{ z>R^%r zYMqGRl!KDgUwtG|S(dHQA36NsXMS-SNr;xpW|S4)v~>JUt7^_}r#nd7V9uVu)6B4Q zq%1@GerR$VxAoKAtZqWQRlrY5yRd;F30wpEB_x0+&L_?d$_lz9y$Tr z3Pf(M4DQ>7k!R}PEDi2EzU~O%6s{($R}a#-*y+Z01aN)aTZrWN$in0WzsPy5W41Y8 ze{Hl}&w_(UT}QgU3OwU{8i(kPmqv;?ZF3r^Npu9wXe8Sig}0AGxG1-5Bn076cxhL? zo`+$zv&?(O;B*!IIAmy8dBVreDnR`AGLCa|V_1;y-Qkf}aXhZSxr@(Gv64bV;T4om5G?*1~t7ifeNvnBFWZxh?B5HBT>``M;LL9*vB_V2&ggPvp*C7Ev#1c%3gsfp^s2ieL zxzQ&>N$i-wC{%`g2=EliXrjW#GkD&VrI&t}|GHqM>E<}{={=9*&z{Gw9NzN&1J;`B zN4Tw$4xf&Nnv|B}N?ZoQ?asySz>;4ZdUhT2-mUZAy)>H58ccPFT6EOxPVhbshDnljN7N39N5$-b#l22b-0J>P00 zKbqUsebm4_B z#H)cb_~wV8!TW5SYj}4&q+0auGkEgRUhpM&SSfnseT;U`uNd!#xsP25CQd&H%!z#Sfp}cZh z2PRn=qSL{XE#A}JD9M`h4a``e%*G- zuFRz`OH)uvdc7@y9p{%sGx3B%J#;_;>d+^0d|aJtGC%aBU>OC~@frz`KfC8GVMEPD z_pK)h^MoPeM6=s@2`>`wEi3#D&xL_~r|2wuX=fG=JMw&AgKLuxc~HHsQo4qAiB#a5 zA5MzQ*nnkA*ene+v4g$5c>>87g!6`7{A0D1mHN@h@fvp-47kL+;#cnZ<-|~;dkFTl zKBHq{fP%8_r;&N8w zy~j5PC9j+txZWZ38b0Qox2)&amntY4I}n~rZ(Bw?(;8tBf*lHBT|ZW}O&mxWT`A5< z@yZu0!(P7YrZwS=8~YL=2P|!!GQp5pSNcqNp;UOFS-4fwdEbwA%0JuNuMFaY-+w+= zP;%;dbs-ji{l1ieRYnhI;)a+$^#kT#Fqo6S8Z>vX27o67Sm z=mIXJ$2(-w&*^6Q$WLgDNx#u?PlELsX;q}GYzOX}wPuYqFnV?P(`qr>m~S`o$6d`b zN}R7$rA6u|-7V!93V~8KdTocsDZdDzRD8I2%0NVw{-WB$uE$k^wk6+GC_PlHsBc&( zR^*>+={CZRQHC!U2IV%=J*}<*py)Di(Zf8wcbR@Se(rOwv3~PK?tbxp<17?yi%Zjg&tA@4#C1$&dYYD~I#se)PUnFjw@x!7TH49^qsgmp4gK z_PtLlh0n@bXh;TLj0U49lQ8}cvyQ7(1I|h-MC8{>o}U(by)`W=XUZqS`ho0TrH`vj z$c_qMDvis*la8~zj*P#JnuV&;XicR|Ox=`O4kuRhS}q<-w<(brK% zAv7xnZ*2{qo|n?6R_XTsZk9Ovq$;| z=XiDNs{!DXH{f$|w>qUHnsP%oK6OMd=t?}+_RwRI;eO7q3mdUOc3XE=O4q<+d->Qx%$qRZO0eGV&Fgukt=_~h@MPio|+Gx>b< z8F+mE{?liW!m$Qk%a+B46C9tIu#o>owfKP?l^b)uZriaJDw$cxW7u~boH!zS>#>>j z8ou(taIsaXe_pj>Q#Q;*9SQWuV~6G&E=f_ojqM|9kUI{1VFKZwxtl&vJskaFd;dq~ z^iZ-iF?mZJy8kMT5`5r-TMU0VpBNw)4B`Gep&&Je7H2}>F6Ja~^aKRj{vCECEC6aG z%*EzxL*c|H-C=lNY@cyoZ%LiM7-w@|wrYM&lT2qCERB#e8lH35!wxI7kKzu3`C!$4 zuStVIbGYxN>-VnG{>b2PfWjaC;HC<1do(VtNcUmEiZ-kl577qA{A2~+t02Ah(L{a6 z-Lm=)o%jf5=(=dC#!q))@_{|}ZI0&EbFv%Z%QNMyrL}3;6rRyI%^k@Xs3oGP&|X=* zMA(&$432M^(3$YVLu7`b4ta*jmoTo{Cd*BgTc;d1KK^mVeLZVkLC{~bhbWiV(sQI( zCf5!sHYxr=C5~DXtJRNzrUz)|{X{RkV%LX1*)G9h3D=Y^i4y7>9u5&f{eEDO9G_7M zFo;^Li(3nK#fMpTy|5Yum>FqlDS4Cpp7UsjRREl|NT&fBih7|0BX|XPc(7pmvNPqF z-;h#UuyF#QRU2Nb%czl<{O~^!dJ!%Ddp8>rkMum^VoaOv zFewl{vt>};=+rDc#<69bmB1|Nhfv2&x2|m3i}bIwOjXpCQ0~TrzsP4!at0O=o#m0; zJnf2wx*KM#W{J&gHBBrjVNRYx7A#{0j@%cxd#Ur-&j`>AxWhi)`kQQ}bge8$9n;_W z!2U*TU4xJJ?tbetj;8{vY^yC=r)gpA4PRcSHW%5Sl=Q`X!UDs+oB!{aACWrQw&1go z?xY9I#T5NOQ8?G>WZho?O6^lmZh6~2_PUsAW%weRm1 zjkUnust!B*1kWUtJ3jvSnl*7;^~3)TR|_J-xsA?!wmweGsTLe>V4Z<4plnq4Y3>iq z%p^WJ{gIujLOSeWtqS__=W1!3bw}>ae6|bwc=>eVV_Hb!o(L^gl@s)fML^bHM6S!p zA9Nu?wJod~_b5`As){AAO(V^en1aooWug*Srv9xgjfcQLPl11Qa|HqWc&e)#YeghYzTr{`4kTbGMsSv4j?3^n@`h+>u>L z;j`&H>$Q_6*~;53CO^cW_g?zFN5`2~(i;-6XZZ|@Z!e+?l3&I5iy?RfIAoiLdz?(7 zRRpBqtJwhsC0dI`o0sLYO`lUcm_(477O-1i!&VgFVJczK7~RAac2n=umk)Q+#{}urzL7SqN9b0v0OX$J!;48wq&Tlo$N2SyNjj17d z>pe-F=JeE29Ylfzx z+JiYs^_$LH4vou%>9!z;k6%<**Z9QhbzI+~l$FkwHK-QDM2?*!RGt&l<&ep6Iqz!& z9~x0J>Kf;+E_FmK;?aJI+R(N0mWQhyXNTy4d$2p4C^A7enffKg_8k$;x2vN-mpzX{ z_4CDVdgUa#=j(Jlnk;?;HPcyk{Y=HD7UX5Xx!>*^WJVI@`Z+-{Bly4dK@?(@#x>-8Q&^IkA{`MH?| z3CnUQRMs0zj;DD>T$eX}pP<~?5xKD{GpQ?2q+$8h1>-N(S=kERI!Tq!y>|vm-bpLc zR#wb~<3O6(tQ@_akg1Kh*T4DC#cb2u67)O`da10jXff~PVDiw#r85lvO;&>OXgoEj z0AIaSr>0)GQ=2t*wxGR3F67}58$uCY$jh`3>}9etqBHWSVkuUHD~=^{Q;&}w;W{wC z+jqO*KBD6Oit3{_RMj@@-Kc|d-GU+6V3Au{kbLbNSD2HLTV}CXnZL;=SJ=6$oQ$($ z>2)Q~|L|Cdj}0%~O0h9{8goh$in-_Db?%+T*JM)U9H&_2e*eNd#Zeuqhgf7qYu)Lq zMGviE?TxcCP&xD}YdL?$dX_pnO?U+od79SjZN&LS)Xw45kT0FAj`$mQ*fP+XlyMhJ z6miqkeK&gj*#lqSd+#IeJYrs6OoQ&@YBhqRs2BK788$ihWoJPg8a>sl=;r9u-YA|L z*zn3H8T+>|8ir0lzT9d4a4uCNkZJyCb8+=Ltha>`0cm)z71CLRf1u(>%LUIlb7WGC zOP{T@j1K%BfSXT$FI3MbJtvE8+4XAYf$MO6D6ODvU7{M8%>8p8r-ld&T~!l6&d@Dn zo0bG$xOM9mc;Eq>1fdD+UCN+WlDoWw6j{%;Ef&HHW zvue!3i8s$LZM_!*USH!+y4J=^(#O>_(gITFP)*_!aG$bySXuCm(#WtK(eaXTn_%*K z*_jKK1;jt|DFX>mayus!fB$-su%I%l{xf6eftK*R;B%80Q|$fzQB8Ye`mb1f(@Q6? z%r1<~Ed5E{3kd`d;#wF{{tcufYiTg^bZHW5izgMGmB_CVAeDqI8a#j0gyx;&9uDua z-5Ou^{zm%|#n0B;Y1mtt+m3#l1(}=p;Fbd11Njf8&YkNS*Ck&=;-ote4Uul@fg%_h zus>KCt`c8*Lh=yL@tmpNr#Wii&#m>T2NC`_~BR{4fB8JaF<>+J5z7 zQcgE{*IxhpqJ4}cN2hbH2i<+fd`{L{26l}`Ifp#Eie3Ad>wzb7u8*~`GUNP(1r=Za zw!Cpl;#|X7J~ThVps%z8M~ga+-(X~l+K?l2wLz~LO}fCidPP~Bj))3qB2Macm*Ol8 z1lUus)2-URJHYxkOYb*@Zn^Z~#jKK{TBKUV7$UT>Vvdjz&yb!aX0RrI#qZE$ELGK$ znoaJ?=iG*e*1s8}sE&kLJIf!!=aZtHg$lEi5^Z4P8Nrd-nnpsxUXQj7;gPr)4zCuX zQd_wg-9pWK>QlKYm$nSPPV>)quO`>H~Ez*30wiJz`dA|T3W<{Au^jJf0qwZ=NaykF6@;8xnsiVKnFGW zWPQhvcRJd+qg@`YVQ<5GuM&1rsm>0(?sOmQv1n_%oiRi%lyf3o=(MvTp>Dze5zQ8I zg6mx=) zcG9OVyaeuE0G?U(`Xw5U|I`8qs<6kX2oxTUw0{dR%beqwN8@ZVKE3iR*m?)>t;i0u zvfwIFceOtMS$Pdt8Qr%7SDU%rk&;A zOCtsT$goxXJ}`!e@By53fu)sm^`&#UN5i0u6xjdNk*JwJOocv#dp;&f%o5qVlDoh= zUn&1)!z4=LZ&&+Ra)<0bE)*yXkYd34f*EN+jxbBStcx1qC*2d{H_5;}jxZXMjri5$ zW#i7k=jDS3ZWF6M=TlpY`l7ltG1bYiUi#=I*xhNh@NYimooS>yKf=U_hp-RS4%?I{ z^YfW#9_d24CU|{rP(~0_`m8%fY5)#Jt$3O4+#&Cm6NRj977$^^uH?InQQVoAQAQLN zC%QPffT0}rO~133I%H)cAyHW~TbAu-eM@eF-3~r?hxyu8p>WaHP`{|m=H1*`@~V}i z>l-4OSBOZ9A^LP&h5X}|J^S}WVSV^CVWgI}0x2Ke{qr}>@nsL;GD?jyMF}gNnE=aN zb;3VKfd^hUY=}Xrt;i&LOI~_Gy4Hj-$~qTIVUk9i*?`?tNNCvZ;oZ~_XUGmyeB$c9 z5iO!uAIS@>k7X5i{V3^xyOkumCh@X-pw@V|-}Tz5JY__&S*V-u^--n_RywL-Jn{H2 zv~<_UrxT42o~I7qD@)!wN8yxWRx1_+Bnnjh$GdG?{;(#70A~!_%$5EIutiga>C^$X z{if%f(SiP3R=VfSUm@k5!$(Yi29^`%Z2aPYEeiTE;Ds;jr0t6{M9*8vTAcJFT-vAb z+2wj%h)mf0-VV`LwBe;ZRj2gARtz`(ptT8$m{#Emr7&lCXHP-$SV^%9WOOpK5xce< zKTkyF>m@P{vP>W{_6i&)?cs1v81vEh=bpAYM z6ob(a{}c@RG)o0Kp2tI*fB#NKSz-iNVej8_oHBh(GGcXFpZ$v!xn~J^S-hqwKoPeN zZAfquL0u#Z*r|WK?^}^lE{|Sc8FG?$18|6t+E-h3k&dIAp<6lXFEdnTL@n4@8ABjw zMa=Q=90{w!|1x6D)tC3)gtt!J&{xsv%{jNGEH(B)yf;eyyXT0l+i_(zAo6zYp9Q;EdzL&!3}1#jTKLM z&PshLhq6fl`;)uSlAA|O#;&465`{+huf(w z()vf&oDVjVVQ!>^bgf97suM&z7&(A+(It}9DuMH3%q%+B7$~HI+_Do=4m4c!mFJd( zWdvleW_iUSGU>EETe5+)U>b`#-Xz}!sJ)d;u80A7J-keh#DN78ofb!K-PVxB@5A)NAxUg;T5^KKQ|i#V=T){ zr2xH3RNF{He4T-@XrW7=78*lI=0Nu)^v77DtcxCjhUT)FQahM5_$ajQh=j|S3qFO* znAQ#qxI7^vE0!gyIrt?nP?Y$Jz=tBm|5gXzPsZ#<;!exo1aG9kVoB**1*)p%$&f*r zA3>Pw`2c#j2H*rpGcUwfU*4Oz^ZK7uz%4=gLBb0Yqf>8W!DMjQ`iG1n0Nj1cpTm^8 zmKe^fJ74Yp6k;p^5nV{8pS zhmb2`1x!Q+BO|rmMYQs>7$OHrvg0L>KYhL4^ZQz-z+FN{f6r6e@FE#36c@V`|e|UY&vOA#rcYiNLPSknRoEjFJCP;%qXuw|@l} zN|v7fn&q1@8<+@TL?3%Rt5P8V{F@XQdIWeDR-Blx)OntHD4c%la>T8G*El-aFZg5+!T;)2H+FrXKS5(R<9~_*8r5k`GBDXG&=hH#qFJFr2svdULLwp} zPdce&wy*#wC=J9;h-uV65)`t2WWDoe_P}pfPuuN*6%z_GDp2t|&~OKTV-7Cq7SDx=wJkX}T?lVr?nFDL&J0FYu%II3L3fx-yfU2m!9vRQ%LCR!1Er8dqK zh(QPdJxs-c_+#Xu{CxPA;(GY9_GMu6jOaZKjq2h860%2(^0$#TFjtb1G4pUsEoI)e z8w=sfsRzfAn_?KI3#OB82}AyR+0ie9z&6vV66gGKFoOdEIOzIL9A;}R(Jy;w$!*WJ zG86qSO{!mE1L;{B?^&~zx!_j%k@{@pG3-{zgyiI=pHVC%{yNYZ%C-+3+f+fkYMR7| zEmg`FZ4$xVtLIe5V-0giH!$Tzt{?zmI?D*`X!Mka9dyb%8Dt^k#5Obr=Uf^bZIkgx|(v>%AF;uneEvY*0K->;8t})kNXh21#iG1>4`b5ObXSq_Y9zYYRUMt&ij?wItK?#0mejTiC0+E1kjPlS^KrzW`?Y9VkC=&jnF@@4`hDa)S5_Mj? zl>kc~_+qOYUnEnR?7UNlsqo|WjuBIqDC>vq43-k89}Mo2n@6qq@eA#yeKzg5i>K(ocZ)2|2@LQ4(Q<-~}Q?N&cfsm-%(S2}Cc z5wYRUeWI?GP=RZI4n#*4Z+{JcrZkkN3VC=3N5fPc#mgIyw~0+G_jH%*8(p>$A<_bw z9hGLNVakH)j{}P!0Fsmk)z3b0cP^obZ^Hh627VG*>@f%&688WjI3g9{>er#2xAxe| zQtnZ*9nr)y+b7{<|BAiwFAwnAh$a^%@BC7w!gou6X?d`2yJZq>2O5(c$^`_zdCF7l z=8)P_=<)G!N?rzC?gjo_b@XC?eQAcW05x^D zj)X}M0~Om6DO_dy=`6>5H!dySbmvkJk;;E&{AW=+VqRMHxxoy+y`$CR>f7GY15bNJaE5Bm;Y4A3b&Z z!6&l|V+!XYnnq-bVN)bCv2R|^KJKe6reCjx!5Rw{EB*%!@?&bc|FXt8`qN*x`v|0# zj*MH+XC|g_S7|CDQAa*`?v0nwqT4do4PZ8=O`05aa+ z3e)}9>mS`r3)^an#j}DB^u@k@xfZC#)Zjj=v1uq)q8bdo{aoTXim+C@Bv7Tn^T{?1 z^}4bnwrjTIiwLKPf6=AsvxZ{hhCnl|PuW{eOvcju-6p-F!;yvQczZgE$eV%P0mRSd zrA|^6UfU1QLbZ-)aro0?RqjYL^?3~-!LY!~uHM|LBHQzZ)m`t!B#h2glDI*-d0yF& zmg!l|9yP?;s7CzcejecwI@kzguLTHmfH>G^DZuK=xJy~w-4Yqdd| zQWFf}-P|1!pA99eTM4DWQDHGZOXB)c23C13Z<8!uLxV`ut;v$4q);c3luAUc(Kx%`2vx7$U==rkZC9s5Rl|BpT4=@(@Q~uglhffu>53@IqUituM_4 zIX=)%rKTayO)*Y;5V=E?yGXlZ@A>DC))QaT%rF4g4}s;n0RU990Y(9U1SkuOL}$Wp zQU&G+1|0hCy1#R@x)FilE>@ z*o_w&jS|Fw?edo<+9fy{_r`0)#U1&r*}<&-9^RsFhqFMm7D1^H>Qkb}GH0G?Q4?2& zE23H$8_vq~_Bd{Ltu5BZO0{7u6+b`ygwHwgDtx2yO!7sFMn&Sk`p->re54uz-3hoY zSNVN&po1!(hpN87$;%kWA`dj@&V5E7l`F)>ZNokXPM%9APwD(`2JnQ5gN+-CId)#7 zv)2CW{HhAkgS_KyR36OeVT{zVUmhqclUPk!e6v=JzBE+OyZpQOYE zH~fM6d@LY@?QA5FB+|>PA7*DK=~e$9{BcF zBpKmLpf5@S>=cCx_-P8sfsAyrMDn&nV}MMrE3k#q?*B$4qd+8&9tjGtPKI70wF|RL zhK^pw@RNT$O4R$jn_YUDqI=MVeFw*Rg`W4g@O;6Fp2ATE82QfHD2?s0d7uMUBAz05 zya1R(_zj71R+<+INFMA4@DCJ6N*QpZUh%PIM_+ce6!^lrw$CR)(T!kCl!JaFy%f=^pfo82s$j$Fk;d}-}670t`lDERxN=z503Mi@>-0w-g}>V zMTB7_i-0vC+Tn%3HZ9+)mFZ;xV+CE_Q8hsvVvxb+cR-G4Qtj009YLe0*ZFk$HhYt+?VGU-y{~`F!segf^ z-V8Y%VwAiEbpXVlUmSQq80n?R2j}PA_If4u`W@wg8XUGJv^4NBc*>Ht{;chgHiq%; zY+>r2 zmL=1dNE1t}$n{3rVN}%N5WTS0u!?RO_{J-sRgWQZYk45Q`D@yK)Y3DZO0V~OP4xlG z6PGddua;t9efoo!K-ZfSopxa7SiT`4qam9nJ7qQ=SA)<_YYKx04yh0~kD*!W9~75D zV?&L-z>0rDvX>r!lt)_6fV-*i4lrVz)^s(pD%zbe!B?H*%SUSyu$1f}6JBcFfYpfnP>JgnzJfyLtFOOrhpoqU-W-^4=~URdc5LxNzm>tw{%{(Dfs& zTVKB@1gaT6d%Irn3b55~cG`9EK`g>G1;forw&Wm(Id~2_FY%;~Y(CjmEz69snMnU0 zhJEpBrd|zEz_+*!_#ZdCp)S!hO^Zi0@mD6U)h;GNk%woV)KuAi#|(Li;q~Xzp0i#! z^;0bjGNp7fBI?;oCj@zQ%0C!vsI@*5);N^u{2&E8$f=$9UnORMm%Oi7Bk7(tc|n); z-n{20-n$n@AGm(6$VH=+LIcQ2{*YIzBgtY8lf~|&$-oc}^1~d6gYIl)~ zmD;>I0)f4ug!#}Pe1l>JkKLT@A@ppEq6IQD3`=0vCtqWM^*4@9WV*bLGF3zOxWG$- zJqifAM$_$ur4e1rYU!yz4xpT9S(}h`bt^)_QeEnt&C29m z0E3vLgPT8mxFpbU79VbYKs4;-=y$Vre2uXtJ#+|l%XfzbhW<68+9xpH}P<3)>p55h72Qy4T=b zlvox9znD|3;k#`)E(M!- zK#a_QIBrK-vEJXj)09jYBKVNf<#J3y@9x;nSYT7;F$S}eOz}0_P#~q`D)@8t>_~=a zp!1(Qozg!?v*@&aZ_0XRb*)ALxoa9}b!N>(`>|)l77a774uci;K*l;gTpCiaP0Z*g z8C_t7Z~y#+MXY9-n)sUp^#L}(O>!CMJNRy)JBdz%@X!@r=%p_7E`ZX4kfHCW5VO85 z(?JwA6B9Q3>Eq6=III~>6tbsOgoj?q0_T4hR zTBd}wr_;u019@V_w;8j#WK!2(vFcy<2Y{br^uG40O$H-TK@aYMGggoLl$z2YLl6N5 zgc<*!pp07Bik_!QFUDYzcuh&5=&$w?B0@XUHIqi_n*S?(fvn;nzz2%#^h^l!z#D9W zlTsEuyaM{s%L-^O(!|mz=tzjBIq+xkS2DH3v?m3`3byXnB~#W|SuL=iLK0=kghD>H zV}SGTWkp zsG%5$&Ex6IY+W%R)$Vo^oXlpiWJJ6=&Ro5WP@$@)t+OD7q6tEu=bsvvhQj^?Yg#Ky zTYT9X{f09W8FabWK(N2h@$oW75RgPhU1#v}bXSA{VnM+G9JhS>f#^fXVDG;%6-L;e z{hX@En)^A+atE(m3&`NEi%fiMFMu%Osegiy0(25vL4kmFeilibl!2DXd!r(m{bvXW zB~O#P{t$feEs2!;-p1tojITVyNa>^tP+4Ff3DL`%!2=gU3_ypFMl-JIjjElzd<3iE zA9TekIv$;^tYsv!IvL=hWrljdeP7;*y~rkm)VH{G9?-KsPP<6|IdB^XteF9%y(8_1 z1uTjL(B|yn^$9xW?c130iV<)J5CKJtfG^eNu!-8hf9^x`C>Xdi^ zvVdVv%DCV6CXKw{G@s^Omog1bSO(rKws_}WU%xi2XvCRd2)~4={#kHA-INM2 zO?4(AU%2)|t?!Mdt?@3(L(4rMD3dnV^{XB^e$8c;dE-ef4@82vA%7dJB7cluQ&Xo5 zd8N#vIpfVA7(CtsG^W9D2@|-xY-T?O0J9thk-5gz+blB@xZ;Zca2x4wP=d6-dXWy) z$&KepK{}G$qP`dh^yNgK5-YA#YS+NL!=nE*SLZaO{Cr07UNDMXl(kW+gjxF<7T&1a zx(HN>ICq!=2*L&c|K*FWo%lebu`cXUO@&|2ZLp1E$jN0nB9aW4k7j)xKf))naxl8S zH%mhs&Luu60@3@LbV~Q40+urzd)w}UWylx9#u=Q4FNVV~#i@Ox8Caic;v2_uKTY|Y zw_tq)UlJcj&35%+jXIF}=is}oS)&(UE@s`@DT`g40v=?^ROsN~AilRU)(MMfJb5g3 z{ufl|KK(>MU77vv59hoM9~&AvMo;S5cxC%hav}#lMQ1BGPkGYX`oOnbs+eL0ZAs_%>ZQ4De-6$TtIb zA2bI86r4WXtPy}~0Sue5d7T2laYokL6`~z z$bu;D!zn>5Y?n}{?E6cj=5c)2N)QM{=S}&40bZ8Z0aYUml#Nnnuyj05PlfRQM&<2` z)`7!5<*tB#L#eJ>?X4^h07~Tw>nzWz<|S{@B7pLNq3p{SPTDA*`!j-^s2sk%jWyS~?2Hq)e{7 z3%Ct8nsvMBTXOjdx*QHyoEQ%Y2CH!25Av7r{O>L#)OKBUWiHS?5hLLP9Z z-azQ6p!g(GBm2Y?SZZI93%CDGJ6t-)jd>V|qiNQ~M2S+-ha*P@N@24o#)xO!2|42Z z$>Tp=^Sl9?yT*hNI-$H6uK+vZ-w523xOqN0`ijE@5Al1O;+|l-*hT6o;yh4_VTkNP zsD(Xsy_Sk?n1yA{Wxfu7znlsRmka}9It=i!^#Y4widl&kFhiDTBm>9`-$Lm{UY#wk z*t5NTyX^YLM0NM-hc6dMu8TI-M$y42N-YAKuL{LoZ3d_(u%uA5rL@NNnb>~Md6n}Zw7#N0 zbL`^97!`H~94Sh+4R{R$0jME${d|naNydVqXqAuUZ>pH)X$l&uT$(8T$7sp^(UQJ8 zZz25A&9vN;x!FYca{%&frNi zL!+t>RW81xAVD??X_<_|g^6fJTAI%{GP}TPGmXxzbUCm>RIHkzKnPO^a z0;UGH$5ZX^73_ecYJ3|kd(#n?>=`e;_~oCfii%XC;okAUn$4Zn59*!La>!F;AE#5D zwQ16Bn$r^8R0CNyL&e~WuHxedMV1(ermP1$3X$~uFrO;R;{A2NoYxl>qkIX}oF!mNm%|6Rca&1TVtTL> zOc`!mE(Pr2wt!)F2dx1oefQJk@A~a?vF=5huSdgl9Hr!8&M;LvOw4jB_QJ0szJH}v z5euHU>ixeJr&6Ld+DAYcY93OH;y_qrb94dO7){3@=T%OLO&w-Hxl$#3e&Lb;G0%NH zgXlC7v51Tu26FdtAX9pqB<6P%a7Pu|WkVdlISBkNlRT>m{c;*0`UyV}&^>zCaFen} zd;n^P5!tGNx;y~ag0ZzP&{-gP^6NPcz#;=mT?#{o=!ug9!+lY2i@Jcy?^>;f%KtBH z0+apXc^2>b)Oi-{%cn}tCo$ePo>*F1@}J&1B|Lu5m565FAj!9ne@gKSkKdbEl6;OY z=K*=ET>eaYLHqb{7*MY~Ea&FGd;kd7hx79^X3|C5=V#Koy`m-GMn2a@8c-uI$#&m}sP_ZPaOqX!CmK?A_(fzd?Q$*ySoV7u~_^rH!CgnZhi^=2er zpPzcCUGZP+D#<^**p#3~$ftdhFI6cLF2_M9h5^VKAMJ)13&s=M-`K9slQ}S&dky5n z;a3|!Rsa|>KFQbTr`~B-ni|NJf7@tD{!k#L05ENQ)x?)6n77hg4~XXE=O;U(d@EK! zH9`QOUp`ZEK8b6Gu37F?E%|wV`u}W+78oDXwo%D1lP?{Rx6+(LL2~jMt0ylf=aziQ z_mVH=j&vt+Ef0bvz85s0Uj5^lm=e##6h0?U&L?p^d%WzNyA&T6wkx=>ebw{d96LUh zx>Lw!DaiIWB;P5%l=CV%i&WH*o;e@34|PIzfB9N`Tp(dLaRRHAUtomW3TqzJ2qj-S zpOqxTz2Rw2{{BL@@QZ!2?p@0{zZt&&VwdpTOOL%*75uJ~V*Y#kB;PDw)_}Z~;pb@R zJPke_0f4zw($Soo@{7W80I56G!%xl^^ON(EFKa$4Po^H^6Qv`7>U<{8J3qZ$7>+|V z{x`>*54$Uce>{79iW;F?X-Bp5rR}CPKm>qL+x8FnWt9H=+zew1{rh(PgwSN<=Ramq?Uk2nnJ_ zCu;N>y^YQ=-?;aF&+|Ud`}h0DIlpJGwb$8u?Y(|$uYF$W>#EUGvr_{AK&zpy@`#9y z#3z@Mg7|&{voR;afZt)-=-nicl7bmSd6x9 z)CqL~_BVUC?CM%e^${0kDCV^msbc-&*-uWoc0*)jzQ94WL#{$-$dvoL;jjQYE33Kz z0j@7M8=`Jb#9CQ-J2)l8efP+ASmLL(vMMveI7e+?fS(*0Jn$LH3+H(8^A3s7HMA5T zr|39rf2d`Q&J_ z4(fwbOxDEQyB2yS;sU*L^lLGkY8SRoPZ@jzI_;oR-#x3zm%x!IEM8M~M9-cWd>Urh zG$W0)l;S2d&-dY<%>bJ3I-aVjf&KjaB04)f){V<19A7ciKK&||C78nNF+{0}xn?>z z5YisJ|E@oZ}xalbkiyx>-vC+T+_$%>M5I;`RP3nZ1l z>jXSJJiMqsqEl0^+gAA)0hIDR&7b7Laqq->g|qs(gKg|Mpg~JFGbhhKmIn?N3CX;i z1wLA24RSYBi6`h}U;&1N{oeuff2IkFleKOSWALdX#Dtnw+ZnChtD=YuZBd;cf<^p}5<1H(eU#K`ooSuVb87xJ3c6>Q zie2SAXUob$I%MT~V)kDevV7P|C;Waww*PKUZS(xASh!!P zzyrVt1gx!J6o(GeQ{w=oz^NNX<)_NMpbz>s0Lxvx0H0tib1N(qej;d6emU{!Z%lncITpODNp<&F05 zwI^Je$oGxRHMr;u{ub5^@ll`f@(+Q-izcq<^X$>)>aTnv2L0Fc^rR77bh>sCR${)) ztg$Bp#&l{RpraXMOyZLF3{O$1P{MQyMrBBsR;D2jhPM&EzV^AHB@Z66SL}>kgJsFx zg=85eeqEqLIJ6Aj$ZQ%p1IPK27&x@h$0#=QZg;`Ip~@w=xjy}Np#G~z*KkZAsjJ-R zR@%){qQF8_C(&(bz#QqxQOP#aRdDp_MYSL4);g7?sWJGhfpFe!>EiDh{Lyy(DovS3kw0k9ZYU+~*hu@?-qYR$2e8OKB zw(xTIU=3@_(U3LK-JJT?#ic8%x-x$m*|cO`5p7*TNnaO%i; zLkZSC&%FH@2_E&aBec_wMFC!#c~k;@*Z|9um~7iCtuJx-TVu&M@xQt$S^s4?&}ee8 zinLm{H#QpI`>VU}?>ZL3SJK8)x$|{B_nC`T?JeR^A5r(o>&0*d$rN&ZVNpVoJPN{u zU!WtWl!lA68DF&UO|%WQjb_{N zpd6RxjnC6xWnw>0f4FgdGYA5^+upu0Zz90_Sb+H*OHNc;hp_lk@L|Rb0KDrI#%v>@ zV~wtB$LZZe{y^KloXBn|xd?r3%teUt{u0CU=e5E?Jf4EVJlfFUHF+Q`uB}#{xc^Sg z6Cb2fau8Z4BvtL(a)7eh#tg&VTPBdb$ixoe()g3+pGR`^txIR`isExRJfSG7CJfb-}pPu}ds&tZlAgce^g<)ePD(40HMUStuum&V_o;^Z7E#oh6_s=Yc_b z>e3!&F7_3RPNWC4aS3o}MgmQn0W7ebKC>*B+RY_%WBUwr{0tHZWu~`kJX_vFdU|_* zgrVj-UQSp{N8I?fFT~Vu&NtX%E8~Z6>UimJ2n_BGuhH_#Ddmi;l^!haAs5{vBix<+ zk!g~@m3DUT)1w@XqNfiXSFcV%XV2%oTvC=*%41x+fHye8>^s-L5@%M94Yx^7-38sg zc0N%OQ`jz}=uI9VM$^9ka3!p^h)2A-k9ApKC;bgwPZJbA_eYaW``Tb$SiGeSguQ>8 zoSiNGg|Jebb4leRmX-ZaiXGp}ORMq=ab(CmziQms>4 z$q0^v~$aq9b%&d?2C_? zN^vE4@>XwuDG4pPlcaTanxQ5uVE+BDos>EBF}a*G)nk35A){vti(vj@-IE=((tx-- zJ^=E_gww|ne<~h49`}1y)$_p4>B59|lhES-%!G54@Wa~eDZ({UT@&efJ-+x3T5Iks zJKJYz0K=syE+u8>1s-eXA8Y5QD&1_s{33<>^k>FndwLeFc{W*I zn?V0)HJzbh8c+3ZV0=83F<$1e!dcFCnot$tB*=lI0Wz~Z8($rPJK8|HQK4pp!!|)q zHeH_PLGrbC8?v?Q31w0}60!u81!Q(5aVuart;#AU;rbGTQ6_9ps0estw8hgw_-`u+p* zMND;cG#pCVpjBda5+))_8mU^%ch#jGEARQCYU_* zt=)mhGRFQ9$`%_zn%Se#LOzl z>q_%-s7(WrZok?WJ#EO>Ow!lW5~cLs$bibdNaiOsU3i%&!^9t)%f2pVfNfoys>!3& zW2!FWX3AC3urdlKMN}ZdJ>?;?jm6Uxt%y~+RqhYkhAdoLWkWRu`ftvEL8$ffr#oFn zu2Dez$FMcBjn7F!omy8yJ3k|FA$}1=eYAQNW82r5p;)NMRT}_xPILg)G9vEqKNqC< z*4Q7)=T2n#g~OB!(=E}ZV44DrmlGx4tImV4j#9L(I&Y59x^6T-0%KxC<;EZt`&yb+ zsR25q9VI2oQtV=Me|&u8IJnDpoSnoaPO0)-f{kM5?D?;26bMcFSYH&@X!EDtwqs3p zhrw%W;xO%cqt8}+HSaW~^4YfAKLLMU2DDGAe!m<}bx81886n)kf zWFImbAc}rKT`p70eXeHgK=H-jwjc^@5*& z2A-1yl^tO-%~9Bzd<$E?sTmk_F$Tj|s5)rjc6~e_CwzHYkNyE>!D9{WCmO3Oo)I$% z)I6>12(LwWLI_0V<)!$SmslV%@?2CU2{(>HjFZ8)ln-`)2ko`D7tHfN>)$o>)Sh{< zA4odo$8f8G_%-*henNU#F3o>exm?Hw{L9zReYM-5pXK*_EQXyDh~$mFU(LG}0I3a{ z{3>JspNFmVhrxE>N^{KenjFp2s6q?C91eRM3$Gq@2evX0tmB}F+6cV5AP?hQ#|~28 zBkw=Cs3_JOaEt25d2Tjo`ZUr7lFK7OklrSL&M_5lDP63mNQS<8zm$^PR^?Sz#;bOI z**~@51ODbBzREI?v+bW|4hoKebn6&+FgEM?KFa|WWzy_t3jiXVNp`?L0mc$)7k0Uv zqr#LsO4q{2qyY?H!$3#58_97wNx3xjI8LSewF?_UP0fDs>?F2ELsZEffVe&-KhPL3 z3Q-=hXTZXhr&2_kIO|;GDKi>N)X~JtS`VM%8l=!JPTzZ@WTuvS%`o!+E6*9!mpDui zO#qulbgNGIO@!#?EA7>g*m5f8Dh*Md9gUq$KOE+HxB-rjxk5&@RWha$a{H3@8lnYT z8s$AI>Mfg&;g#pq8Q)5FRG2VuSbjRy3!=Gbb00~5OOJrHn`ZK&k?I}Y3VBk}9-SS` z7xDxCCM>iiFrP#E<{@okRzMw`^)}KdkpY|qf)4sI9KCum8E(2lqCFYMfH+%>Iqdn& zIKHofjVn**?{zEE0o|g)2I4|i=#%E#=Ed@Fed@W@BKFk)_ukI>pM~SSW{tS&yhmEt zO8IOs@8sDOm1t`rU9|o|8w(HYrk(oxhZ&UQFocc0(QXZm8Jtzh(~y}?YFv*)HrE>M zksNL+3z2nUQCjk+K*Z{MP9pY*p4ZS!{HLvXAuG}FL7eIJ0L~Cs{J2u%0R}A#acY-*z=rojI`b8)?dMR)_nbxP%-zbf$1e@CyxSiKS;*WyDPWNe1*R_5jaZ3kt zJ(&Rph~j|(9yUWb>`XygvHrbVb-px^2Uf;;eLK=R`*5NFpx#N0M)}|dg=U5+ zyb9l5&#gDEqw-DHt;e`()eq1=yPwoPHfH)~cC^0EbH`~$vLrl=!^euC7%T|_{ExQG z#m*D2_w9*@i6yz+Q|erze=!*n=XCKi(l@i=FbB5WM=Sevp9|%>)i5{YMtcD*~=0j%`)L**9Zr4 zlP_<5VV#SZddz}$vZ;G5x~ZyNot)a6ngSN3M(kNn^yI}73hc)t&ON;jth^63iBe*f zVR%93%<^?qmL&KSFt59EBU)m z&ya!5-vS!Et_qONr(`q<`Xpm-{TeYgdL0pgl=IbVC7f@xKGoqcD_X~`4|qA`aM#wB z6wGdHFv}hMMBjwS4_XYirLNZE{XEUb-$(!Yq7}0Fq+*i>tf1VcZ@Ei|_Z%S%*RU150LObX8G`~TT2{Tm% zrW1`(pX94`!&qzn2W#?5;)a5ly`48g1iA z=dRA*%C|vRl@yw&J?LJLL!l&Yx0KAB(Q2Yqi{Jd=l;Xdh=trMhN`o%$E6lfk>ycde zCV%1kOs)bl6O78f%pTh8veRd@YncDEe8W&H&wX{f?V0nXq|T$DXBrhB6u$K|nLe)X zEtH83$Rf5yOxPC2oj_Dhq$C|XKqcCx=(Ra3pCUA$*xlK@8bstfzlnatkWmC^!ykxx zSp0@!N3QRQ+awJj$c%Q-@#UL|4={#K6*^N`LZ>3}iHV8b1dxMuIxkD~w|?UPcR)i` LSLNdatI+=k=$XBH diff --git a/tgstation.dme b/tgstation.dme index 7ce9569f9a..b12baa9c47 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -501,6 +501,7 @@ #include "code\datums\elements\firestacker.dm" #include "code\datums\elements\ghost_role_eligibility.dm" #include "code\datums\elements\mob_holder.dm" +#include "code\datums\elements\polychromic.dm" #include "code\datums\elements\swimming.dm" #include "code\datums\elements\sword_point.dm" #include "code\datums\elements\update_icon_blocker.dm" From 2b4b626facaefedebbbcea6f15080b08ecf6c194 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 10 Mar 2020 16:55:30 +0100 Subject: [PATCH 2/8] support for items that switch states through update_icon. --- code/__DEFINES/components.dm | 2 +- code/datums/elements/polychromic.dm | 65 +++++++++++++------ code/game/objects/items.dm | 4 +- code/game/objects/items/RCL.dm | 2 +- code/game/objects/items/holy_weapons.dm | 2 +- code/game/objects/items/melee/energy.dm | 2 +- code/game/objects/items/storage/belt.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/tools/screwdriver.dm | 2 +- code/game/objects/items/toys.dm | 2 +- code/game/objects/items/twohanded.dm | 2 +- code/game/objects/structures/bedsheet_bin.dm | 2 +- .../clockcult/clock_items/clockwork_slab.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 2 +- code/modules/clothing/glasses/_glasses.dm | 2 +- code/modules/clothing/gloves/_gloves.dm | 2 +- code/modules/clothing/head/_head.dm | 2 +- code/modules/clothing/head/hardhat.dm | 2 +- code/modules/clothing/head/misc_special.dm | 2 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/neck/_neck.dm | 4 +- code/modules/clothing/shoes/_shoes.dm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 6 +- code/modules/clothing/spacesuits/plasmamen.dm | 2 +- code/modules/clothing/suits/_suits.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 4 +- code/modules/clothing/under/_under.dm | 2 +- .../clothing/under/polychromic_clothes.dm | 2 +- code/modules/food_and_drinks/pizzabox.dm | 2 +- .../modules/mining/equipment/explorer_gear.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 2 +- .../clothing/suits/polychromic_cloaks.dm | 2 +- .../projectiles/guns/energy/energy_gun.dm | 2 +- .../modules/projectiles/guns/pumpenergy.dm | 2 +- 34 files changed, 82 insertions(+), 59 deletions(-) diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index ff0750a28c..85a8d7a37d 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -255,7 +255,7 @@ #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) #define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args) #define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable) -#define COMSIG_ITEM_WORN_OVERLAYS "item_worn_overlays" //from base of obj/item/worn_overlays(): (isinhands, icon_file, style_flags, list/overlays) +#define COMSIG_ITEM_WORN_OVERLAYS "item_worn_overlays" //from base of obj/item/worn_overlays(): (isinhands, icon_file, used_state, style_flags, list/overlays) // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 4301a280f3..d7057cfdf7 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -6,8 +6,8 @@ /datum/element/polychromic element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH id_arg_index = 3 - var/list/overlays_by_atom = list() - var/list/overlays_states //also used for worn/held overlsays + var/overlays_states //A list or a number of states. In the latter case, the atom icon_state/item_state will be used followed by a number for the overlays. + var/list/colors_by_atom = list() //list of color strings or mutable appearance depending on the above variable. var/icon_file var/list/overlays_names //wrap numbers into text strings please. var/list/actions_by_atom = list() @@ -15,7 +15,7 @@ //item variables var/worn_file //used for boths held and worn overlays if present. -/datum/element/polychromic/Attach(datum/target, list/colors, list/states, _icon, _flags = POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) +/datum/element/polychromic/Attach(datum/target, list/colors, states, _icon, _flags = POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) . = ..() var/states_len = length(overlays_states) var/names_len = length(names) @@ -30,11 +30,17 @@ var/mut_icon = icon_file || A.icon var/list/L = list() - for(var/I in overlays_states) - var/col = popleft(colors) || "#FFFFFF" - L += mutable_appearance(mut_icon, I, color = col) - A.add_overlay(L) - overlays_by_atom[A] = L + if(islist(overlays_states)) + for(var/I in overlays_states) + var/col = popleft(colors) || "#FFFFFF" + L += mutable_appearance(mut_icon, I, color = col) + else + for(var/I in 1 to overlays_states) + var/col = LAZYACCESS(colors, I) || "#FFFFFF" + L += col + colors_by_atom[A] = L + + RegisterSignal(A, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlays) if(_flags & POLYCHROMIC_ALTCLICK) RegisterSignal(A, COMSIG_PARENT_EXAMINE, .proc/on_examine) @@ -61,40 +67,57 @@ actions_by_atom[A] = P P.Grant(A) + A.update_icon() + /datum/element/polychromic/Detach(atom/A) . = ..() - A.cut_overlay(overlays_by_atom[A]) - overlays_by_atom -= A + A.cut_overlay(colors_by_atom[A]) + colors_by_atom -= A var/datum/action/polychromic/P = actions_by_atom[A] if(P) qdel(P) actions_by_atom -= A if(poly_flags & POLYCHROMIC_ALTCLICK) - UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT)) + UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) -/datum/element/polychromic/proc/apply_worn_overlays(obj/item/source, isinhands, icon_file, style_flags, list/overlays) +/datum/element/polychromic/proc/apply_overlays(atom/source, list/overlays) + var/list/L = colors_by_atom[source] + if(isnum(overlays_states)) + for(var/i in 1 to overlays_states) + overlays += mutable_appearance(source.icon, "[source.icon_state]-[i]", color = L[i]) + else + overlays += colors_by_atom[source] + +/datum/element/polychromic/proc/apply_worn_overlays(obj/item/source, isinhands, icon_file, used_state, style_flags, list/overlays) if(poly_flags & (isinhands ? POLYCHROMIC_NO_HELD : POLYCHROMIC_NO_WORN)) return var/f_icon = worn_file || icon_file - var/list/L = overlays_by_atom[source] + var/list/L = colors_by_atom[source] - for(var/I in 1 to length(overlays_states)) - var/mutable_appearance/M = L[I] - overlays += mutable_appearance(f_icon, overlays_states[I], color = M.color) + if(isnum(overlays_states)) + for(var/i in 1 to overlays_states) + overlays += mutable_appearance(f_icon, "[used_state]-[i]", color = L[i]) + else + for(var/I in 1 to length(overlays_states)) + var/mutable_appearance/M = L[I] + overlays += mutable_appearance(f_icon, overlays_states[I], color = M.color) /datum/element/polychromic/proc/set_color(atom/source, mob/user) var/choice = input(user,"Polychromic options", "Recolor [source]") as null|anything in overlays_names if(!choice || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) return - choice = overlays_names.Find(choice) var/ncolor = input(user, "Polychromic options", "Choose [choice] Color") as color|null if(!ncolor || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) return - var/list/L = overlays_by_atom[source] + var/list/L = colors_by_atom[source] if(!L) // Ummmmmh. return - var/mutable_appearance/M = L[choice] - M.color = sanitize_hexcolor(ncolor, 6, TRUE, M.color) + var/K = L[overlays_names.Find(choice)] + if(istext(K)) + K = sanitize_hexcolor(ncolor, 6, TRUE, K) + else + var/mutable_appearance/M = K + M.color = sanitize_hexcolor(ncolor, 6, TRUE, M.color) source.update_icon() return TRUE @@ -105,7 +128,7 @@ if(!P) P = new (source) actions_by_atom[source] = P - P.check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING|AB_CHECK_CONSCIOUS + P.check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) P.Grant(user) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 7a155ca932..5d3725200c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -428,9 +428,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) //Overlays for the worn overlay so you can overlay while you overlay //eg: ammo counters, primed grenade flashing, etc. //"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file -/obj/item/proc/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/proc/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() - SEND_SIGNAL(src, COMSIG_ITEM_WORN_OVERLAYS, isinhands, icon_file, style_flags, .) + SEND_SIGNAL(src, COMSIG_ITEM_WORN_OVERLAYS, isinhands, icon_file, used_state, style_flags, .) //sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user, datum/action/A) diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 9513519fa9..5444b0c557 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -113,7 +113,7 @@ cable_overlay.color = GLOB.cable_colors[colors[current_color_index]] . += cable_overlay -/obj/item/twohanded/rcl/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/twohanded/rcl/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands || !(loaded?.amount)) return diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 4d275e2034..65c188918f 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -309,7 +309,7 @@ block_chance = 50 var/shield_icon = "shield-red" -/obj/item/nullrod/staff/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/nullrod/staff/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = list() if(isinhands) . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index aba07c9120..83d7ec1b6d 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -337,7 +337,7 @@ . = ..() . += "Alt-click to recolor it." -/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(active) if(isinhands) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 4e03d029a8..3ee4fbead8 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -22,7 +22,7 @@ for(var/obj/item/I in contents) . += I.get_belt_overlay() -/obj/item/storage/belt/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/storage/belt/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands && onmob_overlays) for(var/obj/item/I in contents) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index c1cbf534ca..5210f00e99 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -376,7 +376,7 @@ filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) -/obj/item/reagent_containers/chemtank/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) //apply chemcolor and level +/obj/item/reagent_containers/chemtank/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) //apply chemcolor and level . = list() //inhands + reagent_filling if(!isinhands && reagents.total_volume) diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 0d2892cb4a..24fe73ba12 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -53,7 +53,7 @@ base_overlay.appearance_flags = RESET_COLOR . += base_overlay -/obj/item/screwdriver/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/screwdriver/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(isinhands && random_color) var/mutable_appearance/M = mutable_appearance(icon_file, "screwdriver_head") diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index ba51fa3d65..08b87fe1d6 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -352,7 +352,7 @@ update_light() return TRUE -/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(active) if(isinhands) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 11a06e149d..7f2e322c69 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -530,7 +530,7 @@ update_light() return TRUE -/obj/item/twohanded/dualsaber/hypereutactic/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/twohanded/dualsaber/hypereutactic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(isinhands) var/mutable_appearance/gem_inhand = mutable_appearance(icon_file, "hypereutactic_gem") diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 8dc7caa5ad..7859b888f2 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -252,7 +252,7 @@ LINEN BINS add_overlay(g_mouth) add_overlay(g_eyes) -/obj/item/bedsheet/gondola/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/bedsheet/gondola/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) . += mutable_appearance(icon_file, g_mouth) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index b12c72b4af..b0ba3ccaaa 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -103,7 +103,7 @@ . = ..() addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later -/obj/item/clockwork/slab/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clockwork/slab/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(isinhands && item_state && inhand_overlay) var/mutable_appearance/M = mutable_appearance(icon_file, "slab_[inhand_overlay]") diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 3dc199b56d..888e99f1ad 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -425,7 +425,7 @@ return 1 return 0 -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands && current_charges) . += mutable_appearance('icons/effects/cult_effects.dmi', "shield-cult", MOB_LAYER + 0.01) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 5ae86636d6..2b6036498e 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -333,7 +333,7 @@ add_atom_colour("#[user.eye_color]", FIXED_COLOUR_PRIORITY) colored_before = TRUE -/obj/item/clothing/glasses/sunglasses/blindfold/white/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/glasses/sunglasses/blindfold/white/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands && ishuman(loc) && !colored_before) var/mob/living/carbon/human/H = loc diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 0729317eac..21ebeaa2bb 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -26,7 +26,7 @@ user.visible_message("\the [src] are forcing [user]'s hands around [user.p_their()] neck! It looks like the gloves are possessed!") return OXYLOSS -/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) if(damaged_clothes) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index d599fbf6f7..121217c128 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -48,7 +48,7 @@ -/obj/item/clothing/head/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/head/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) if(damaged_clothes) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index e7a8243889..9715709e00 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -125,7 +125,7 @@ playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing update_icon() -/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) . += mutable_appearance('icons/mob/head.dmi', "weldhelmet") diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 4be949a65e..ec5573e4d7 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -208,7 +208,7 @@ M.color = hair_color add_overlay(M) -/obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) var/datum/sprite_accessory/S = GLOB.hair_styles_list[hair_style] diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 5019633cf0..ac087fd9e2 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -28,7 +28,7 @@ /obj/item/clothing/mask/proc/handle_speech() -/obj/item/clothing/mask/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/mask/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) if(body_parts_covered & HEAD) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 2b43460257..cfc806b4db 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -6,7 +6,7 @@ strip_delay = 40 equip_delay_other = 40 -/obj/item/clothing/neck/worn_overlays(isinhands = FALSE, icon_flag, style_flags = NONE) +/obj/item/clothing/neck/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) if(body_parts_covered & HEAD) @@ -192,7 +192,7 @@ tagname = stripped_input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot", MAX_NAME_LEN) name = "[initial(name)] - [tagname]" -/obj/item/clothing/neck/petcollar/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/clothing/neck/petcollar/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(hasprimary | hassecondary | hastertiary) if(!isinhands) //prevents the worn sprites from showing up if you're just holding them diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 4c6d3a8f88..7ac4f062f3 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -49,7 +49,7 @@ last_bloodtype = blood_dna[blood_dna[blood_dna.len]]//trust me this works last_blood_DNA = blood_dna[blood_dna.len] -/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) var/bloody = FALSE diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index d9e4f17649..a391a3807f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -793,7 +793,7 @@ var/mob/living/carbon/human/C = loc C.update_inv_wear_suit() -/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) var/file2use = style_flags & STYLE_ALL_TAURIC ? 'modular_citadel/icons/mob/64x32_effects.dmi' : 'icons/effects/effects.dmi' @@ -956,7 +956,7 @@ add_overlay(helm_overlay) -/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) var/mutable_appearance/energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER) @@ -993,7 +993,7 @@ add_overlay(suit_overlay) -/obj/item/clothing/suit/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/suit/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) var/mutable_appearance/energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index fee8dbce33..f17eb91b74 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -67,7 +67,7 @@ var/datum/action/A=X A.UpdateButtonIcon() -/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands && on) . += mutable_appearance(icon_file, light_overlay) diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 1b2080feb1..3d312e260a 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -11,7 +11,7 @@ var/suittoggled = FALSE mutantrace_variation = STYLE_DIGITIGRADE -/obj/item/clothing/suit/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/suit/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) if(damaged_clothes) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 6f61bf56cb..febecd9f71 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -987,7 +987,7 @@ item_color = "winterhood_poly" item_state = "winterhood_poly" -/obj/item/clothing/head/hooded/winterhood/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. +/obj/item/clothing/head/hooded/winterhood/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. . = ..() if(suit.hasprimary | suit.hassecondary) if(!isinhands) //prevents the worn sprites from showing up if you're just holding them @@ -1000,7 +1000,7 @@ secondary_worn.color = suit.secondary_color . += secondary_worn -/obj/item/clothing/suit/hooded/wintercoat/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. +/obj/item/clothing/suit/hooded/wintercoat/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. . = ..() if(hasprimary | hassecondary | hastertiary) if(!isinhands) //prevents the worn sprites from showing up if you're just holding them diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 63e3a63968..d0cfef4f71 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -16,7 +16,7 @@ var/mutable_appearance/accessory_overlay mutantrace_variation = STYLE_DIGITIGRADE -/obj/item/clothing/under/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE) +/obj/item/clothing/under/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = list() if(!isinhands) if(damaged_clothes) diff --git a/code/modules/clothing/under/polychromic_clothes.dm b/code/modules/clothing/under/polychromic_clothes.dm index 53011d42d1..e56e1eb265 100644 --- a/code/modules/clothing/under/polychromic_clothes.dm +++ b/code/modules/clothing/under/polychromic_clothes.dm @@ -27,7 +27,7 @@ can_adjust = FALSE mutantrace_variation = NONE //Not all clothes are currently digi-compatible (only the shorts are as of time of writing) -/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. +/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. . = ..() if(hasprimary | hassecondary | hastertiary) if(!isinhands) //prevents the worn sprites from showing up if you're just holding them diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index b163c6ba97..3505a35487 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -86,7 +86,7 @@ tag_overlay.pixel_y = boxes.len * 3 add_overlay(tag_overlay) -/obj/item/pizzabox/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/pizzabox/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = list() var/current_offset = 2 if(isinhands) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 5165d95340..d3bf4368f7 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -117,7 +117,7 @@ glass_overlay.appearance_flags = RESET_COLOR add_overlay(glass_overlay) -/obj/item/clothing/head/helmet/space/hostile_environment/worn_overlays(isinhands, icon_file, style_flags = NONE) +/obj/item/clothing/head/helmet/space/hostile_environment/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(!isinhands) var/mutable_appearance/M = mutable_appearance('icons/mob/head.dmi', "hostile_env_glass") diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f1b1570e24..fa138e38f8 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -593,7 +593,7 @@ generate/load female uniform sprites matching all previously decided variables //Get the overlays for this item when it's being worn //eg: ammo counters, primed grenade flashes, etc. - var/list/worn_overlays = worn_overlays(isinhands, file2use, style_flags) + var/list/worn_overlays = worn_overlays(isinhands, file2use, state, style_flags) if(worn_overlays && worn_overlays.len) standing.overlays.Add(worn_overlays) diff --git a/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm b/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm index ade6cee3ba..ac7d2e80b0 100644 --- a/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm +++ b/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm @@ -13,7 +13,7 @@ secondary_color = "#FFFFFF" tertiary_color = "#808080" -/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon +/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon . = ..() if(hasprimary | hassecondary | hastertiary) if(!isinhands) //prevents the worn sprites from showing up if you're just holding them diff --git a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm index 49a8a26f35..49d48e0000 100644 --- a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm @@ -39,7 +39,7 @@ obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user) body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() -obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file, style_flags = NONE) +obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) . = ..() if(isinhands) var/mutable_appearance/body_inhand = mutable_appearance(icon_file, "cxe_body") diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index f7c0b343c3..fcead7f179 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -87,7 +87,7 @@ . = ..() . += "Alt-click to change firing modes." -/obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file, style_flags = NONE) //ammo counter for inhands +/obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //ammo counter for inhands . = ..() var/ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1) var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] From 0816512150d221acf17caff365f2e6d8b9e3eeac Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 13 Apr 2020 16:09:52 +0200 Subject: [PATCH 3/8] more work. --- code/__HELPERS/_lists.dm | 2 +- code/datums/elements/polychromic.dm | 38 +++++++++++--------------- code/modules/clothing/under/costume.dm | 8 +++--- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 8887a2aa1d..a34b3ce67c 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -555,7 +555,7 @@ for(var/i in deep_list) var/key = i if(isnum(key)) - key = "[key]" + L += "[key]" continue if(islist(key)) key = deep_list2params(key) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index d7057cfdf7..5e1a3e3c73 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -6,20 +6,20 @@ /datum/element/polychromic element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH id_arg_index = 3 - var/overlays_states //A list or a number of states. In the latter case, the atom icon_state/item_state will be used followed by a number for the overlays. - var/list/colors_by_atom = list() //list of color strings or mutable appearance depending on the above variable. + var/overlays_states //A list or a number of states. In the latter case, the atom icon_state/item_state will be used followed by a number. + var/list/colors_by_atom = list() //list of color strings or mutable appearances, depending on the above variable. var/icon_file var/list/overlays_names //wrap numbers into text strings please. var/list/actions_by_atom = list() var/poly_flags - //item variables - var/worn_file //used for boths held and worn overlays if present. + var/worn_file //used in place of items' held or mob overlay icons if present. /datum/element/polychromic/Attach(datum/target, list/colors, states, _icon, _flags = POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) . = ..() - var/states_len = length(overlays_states) + var/make_appearances = islist(overlays_states) + var/states_len = make_appearances ? length(states) : states var/names_len = length(names) - if(!states_len || names_len || !isatom(target)) + if(!states_len || !names_len || !isatom(target)) return ELEMENT_INCOMPATIBLE var/atom/A = target @@ -30,14 +30,9 @@ var/mut_icon = icon_file || A.icon var/list/L = list() - if(islist(overlays_states)) - for(var/I in overlays_states) - var/col = popleft(colors) || "#FFFFFF" - L += mutable_appearance(mut_icon, I, color = col) - else - for(var/I in 1 to overlays_states) - var/col = LAZYACCESS(colors, I) || "#FFFFFF" - L += col + for(var/I in 1 to states_len) + var/col = LAZYACCESS(colors, I) || "#FFFFFF" + L += make_appearances ? mutable_appearance(mut_icon, overlays_states[I], color = col) : col colors_by_atom[A] = L RegisterSignal(A, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlays) @@ -46,12 +41,12 @@ RegisterSignal(A, COMSIG_PARENT_EXAMINE, .proc/on_examine) RegisterSignal(A, COMSIG_CLICK_ALT, .proc/set_color) - if(!overlays_names && names) + if(!overlays_names && names) //generate overlays_names = names var/diff = states_len - names_len - if(diff > 0) //It will be ugly, but still functional. + if(diff > 0) for(var/i in 1 to diff) - overlays_names += "[names_len + i]" + overlays_names += "[names_len + i]°" else if(diff < 0) overlays_names.len += diff @@ -61,13 +56,13 @@ RegisterSignal(src, COMSIG_ITEM_DROPPED, .proc/remove_user_action) AddElement(A, /datum/element/update_icon_updates_onmob) //Since we can change the overall aspect of the item. RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) - else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //Not safe until mob icon updating procs are standarized and stop using cut_overlays() + else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized. var/datum/action/polychromic/P = new(A) RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) actions_by_atom[A] = P P.Grant(A) - A.update_icon() + A.update_icon() //apply the overlays. /datum/element/polychromic/Detach(atom/A) . = ..() @@ -75,10 +70,9 @@ colors_by_atom -= A var/datum/action/polychromic/P = actions_by_atom[A] if(P) + actions_by_atom -= A qdel(P) - actions_by_atom -= A - if(poly_flags & POLYCHROMIC_ALTCLICK) - UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_WORN_OVERLAYS)) /datum/element/polychromic/proc/apply_overlays(atom/source, list/overlays) var/list/L = colors_by_atom[source] diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 12988c26ae..7cbfe5abf5 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -91,13 +91,13 @@ name = "polychromic kilt" desc = "It's not a skirt!" icon_state = "polykilt" - hasprimary = TRUE - hassecondary = TRUE - primary_color = "#FFFFFF" - secondary_color = "#F08080" body_parts_covered = CHEST|GROIN|ARMS|LEGS mutantrace_variation = NONE +/obj/item/clothing/under/costume/kilt/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#FFFFFF", "#F08080"), list("polykilt-primary", "polykilt-secondary"), null, POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD|POLYCHROMIC_ACTION) + /obj/item/clothing/under/costume/gladiator name = "gladiator uniform" desc = "Are you not entertained? Is that not why you are here?" From bfa006fac1300e3addba0b9fe706bc6a0c5c7b87 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 13 Apr 2020 17:25:13 +0200 Subject: [PATCH 4/8] Fixing runtime errors. --- code/datums/elements/polychromic.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 5e1a3e3c73..109da4ac50 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -16,7 +16,7 @@ /datum/element/polychromic/Attach(datum/target, list/colors, states, _icon, _flags = POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) . = ..() - var/make_appearances = islist(overlays_states) + var/make_appearances = islist(states) var/states_len = make_appearances ? length(states) : states var/names_len = length(names) if(!states_len || !names_len || !isatom(target)) @@ -52,10 +52,11 @@ if(isitem(A)) if(_flags & POLYCHROMIC_ACTION) - RegisterSignal(src, COMSIG_ITEM_EQUIPPED, .proc/grant_user_action) - RegisterSignal(src, COMSIG_ITEM_DROPPED, .proc/remove_user_action) - AddElement(A, /datum/element/update_icon_updates_onmob) //Since we can change the overall aspect of the item. - RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) + RegisterSignal(A, COMSIG_ITEM_EQUIPPED, .proc/grant_user_action) + RegisterSignal(A, COMSIG_ITEM_DROPPED, .proc/remove_user_action) + if(!(_flags & (POLYCHROMIC_NO_HELD|POLYCHROMIC_NO_WORN))) + A.AddElement(/datum/element/update_icon_updates_onmob) + RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized. var/datum/action/polychromic/P = new(A) RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) From 8c995dbad983e585266eea0bc28f755f33d6d652 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 13 Apr 2020 19:16:55 +0200 Subject: [PATCH 5/8] Making things work. --- code/datums/action.dm | 50 ++++++++++++++--------------- code/datums/elements/polychromic.dm | 21 +++++++++--- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index e94e6a182d..f2f93ac40d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -120,34 +120,34 @@ /datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE) if(!button) return - if(button_icon && button_icon_state) - if(!status_only) - button.name = name - button.desc = desc - if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) - var/list/settings = owner.hud_used.get_action_buttons_icons() - if(button.icon != settings["bg_icon"]) - button.icon = settings["bg_icon"] - if(button.icon_state != settings["bg_state"]) - button.icon_state = settings["bg_state"] - else - if(button.icon != button_icon) - button.icon = button_icon - if(button.icon_state != background_icon_state) - button.icon_state = background_icon_state + if(!status_only) + button.name = name + button.desc = desc + if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) + var/list/settings = owner.hud_used.get_action_buttons_icons() + if(button.icon != settings["bg_icon"]) + button.icon = settings["bg_icon"] + if(button.icon_state != settings["bg_state"]) + button.icon_state = settings["bg_state"] + else + if(button.icon != button_icon) + button.icon = button_icon + if(button.icon_state != background_icon_state) + button.icon_state = background_icon_state + if(!use_target_appearance) ApplyIcon(button, force) - else if(use_target_appearance && target && button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. - var/mutable_appearance/M = new(target) - M.layer = FLOAT_LAYER - M.plane = FLOAT_PLANE - if(target_appearance_matrix) - var/list/L = target_appearance_matrix - M.transform = matrix(L[1], L[2], L[3], L[4], L[5], L[6]) - button.cut_overlays() - button.add_overlay(M) - button.appearance_cache = target.appearance + else if(target && button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. + var/mutable_appearance/M = new(target) + M.layer = FLOAT_LAYER + M.plane = FLOAT_PLANE + if(target_appearance_matrix) + var/list/L = target_appearance_matrix + M.transform = matrix(L[1], L[2], L[3], L[4], L[5], L[6]) + button.cut_overlays() + button.add_overlay(M) + button.appearance_cache = target.appearance if(!IsAvailable(TRUE)) button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 109da4ac50..70424507b7 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -11,6 +11,7 @@ var/icon_file var/list/overlays_names //wrap numbers into text strings please. var/list/actions_by_atom = list() + var/list/already_updates_onmob = list() var/poly_flags var/worn_file //used in place of items' held or mob overlay icons if present. @@ -54,8 +55,11 @@ if(_flags & POLYCHROMIC_ACTION) RegisterSignal(A, COMSIG_ITEM_EQUIPPED, .proc/grant_user_action) RegisterSignal(A, COMSIG_ITEM_DROPPED, .proc/remove_user_action) - if(!(_flags & (POLYCHROMIC_NO_HELD|POLYCHROMIC_NO_WORN))) - A.AddElement(/datum/element/update_icon_updates_onmob) + if(!(_flags & POLYCHROMIC_NO_HELD) && !(_flags & POLYCHROMIC_NO_WORN)) + if(!SSdcs.GetElement(/datum/element/update_icon_updates_onmob)) + A.AddElement(/datum/element/update_icon_updates_onmob) + else + already_updates_onmob[A]++ RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized. var/datum/action/polychromic/P = new(A) @@ -69,6 +73,13 @@ . = ..() A.cut_overlay(colors_by_atom[A]) colors_by_atom -= A + if(!(poly_flags & POLYCHROMIC_NO_HELD) && !(poly_flags & POLYCHROMIC_NO_WORN) && isitem(A)) + if(!already_updates_onmob[A]) + A.RemoveElement(/datum/element/update_icon_updates_onmob) + else + already_updates_onmob[A]-- + if(!already_updates_onmob[A]) + already_updates_onmob -= A var/datum/action/polychromic/P = actions_by_atom[A] if(P) actions_by_atom -= A @@ -99,10 +110,10 @@ /datum/element/polychromic/proc/set_color(atom/source, mob/user) var/choice = input(user,"Polychromic options", "Recolor [source]") as null|anything in overlays_names - if(!choice || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + if(!choice || QDELETED(source) || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) return var/ncolor = input(user, "Polychromic options", "Choose [choice] Color") as color|null - if(!ncolor || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + if(!ncolor || QDELETED(source) || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) return var/list/L = colors_by_atom[source] if(!L) // Ummmmmh. @@ -142,4 +153,4 @@ background_icon_state = "bg_polychromic" use_target_appearance = TRUE button_icon_state = null - target_appearance_matrix = list(0.7,0,0,0,0.7,0) + target_appearance_matrix = list(0.75,0,0,0,0.75,0) From 616d482cf6a44d2b426d152f502a9fdb2646fdc6 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 13 Apr 2020 22:51:46 +0200 Subject: [PATCH 6/8] Deleting poly clothes copypasta. --- code/__DEFINES/dcs/signals.dm | 1 + code/datums/elements/polychromic.dm | 64 ++++-- code/modules/clothing/clothing.dm | 194 ------------------ code/modules/clothing/neck/_neck.dm | 65 ++---- code/modules/clothing/suits/cloaks.dm | 11 + code/modules/clothing/suits/miscellaneous.dm | 67 +----- code/modules/clothing/suits/toggles.dm | 24 ++- code/modules/clothing/under/_under.dm | 132 ++++++++++-- code/modules/clothing/under/costume.dm | 2 +- code/modules/clothing/under/miscellaneous.dm | 52 +++-- code/modules/clothing/under/shorts.dm | 13 +- code/modules/clothing/under/skirt_dress.dm | 15 +- code/modules/clothing/under/suits.dm | 10 +- icons/mob/clothing/head.dmi | Bin 223286 -> 223289 bytes icons/mob/clothing/neck.dmi | Bin 45707 -> 47399 bytes icons/mob/clothing/suit.dmi | Bin 424980 -> 424968 bytes icons/mob/clothing/suit_digi.dmi | Bin 439805 -> 439792 bytes icons/mob/clothing/uniform.dmi | Bin 403435 -> 403416 bytes icons/mob/clothing/uniform_digi.dmi | Bin 344180 -> 344171 bytes icons/obj/clothing/hats.dmi | Bin 109697 -> 109696 bytes icons/obj/clothing/neck.dmi | Bin 2866 -> 3253 bytes icons/obj/clothing/suits.dmi | Bin 143821 -> 143808 bytes icons/obj/clothing/uniforms.dmi | Bin 112864 -> 113086 bytes .../clothing/suits/polychromic_cloaks.dm | 38 ---- .../modules/custom_loadout/custom_items.dm | 5 + .../icons/polyclothes/item/neck.dmi | Bin 633 -> 0 bytes .../icons/polyclothes/mob/neck.dmi | Bin 1418 -> 0 bytes tgstation.dme | 1 - 28 files changed, 264 insertions(+), 430 deletions(-) delete mode 100644 modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm delete mode 100644 modular_citadel/icons/polyclothes/item/neck.dmi delete mode 100644 modular_citadel/icons/polyclothes/mob/neck.dmi diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index b16002e35b..e0f7457a4a 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -249,6 +249,7 @@ // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () +#define COMSIG_SUIT_MADE_HELMET "suit_made_helmet" //from base of obj/item/clothing/suit/MakeHelmet(): (helmet) // /obj/item/implant signals #define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): () diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 70424507b7..f664ed9063 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -14,13 +14,16 @@ var/list/already_updates_onmob = list() var/poly_flags var/worn_file //used in place of items' held or mob overlay icons if present. + var/static/list/suits_with_helmet_typecache = typecacheof(list(/obj/item/clothing/suit/hooded, /obj/item/clothing/suit/space/hardsuit)) + var/list/helmet_by_suit //because poly winter coats exist. + var/list/suit_by_helmet //Idem. -/datum/element/polychromic/Attach(datum/target, list/colors, states, _icon, _flags = POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) +/datum/element/polychromic/Attach(datum/target, list/colors, states, _flags = POLYCHROMIC_ACTION|POLYCHROMIC_NO_HELD, _icon, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) . = ..() var/make_appearances = islist(states) var/states_len = make_appearances ? length(states) : states var/names_len = length(names) - if(!states_len || !names_len || !isatom(target)) + if(!states_len || !names_len || colors_by_atom[target] || !isatom(target)) return ELEMENT_INCOMPATIBLE var/atom/A = target @@ -59,8 +62,10 @@ if(!SSdcs.GetElement(/datum/element/update_icon_updates_onmob)) A.AddElement(/datum/element/update_icon_updates_onmob) else - already_updates_onmob[A]++ + LAZYSET(already_updates_onmob, A, TRUE) RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) + if(suits_with_helmet_typecache[A.type]) + RegisterSignal(A, COMSIG_SUIT_MADE_HELMET, .proc/register_helmet) else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized. var/datum/action/polychromic/P = new(A) RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) @@ -71,33 +76,48 @@ /datum/element/polychromic/Detach(atom/A) . = ..() - A.cut_overlay(colors_by_atom[A]) colors_by_atom -= A - if(!(poly_flags & POLYCHROMIC_NO_HELD) && !(poly_flags & POLYCHROMIC_NO_WORN) && isitem(A)) - if(!already_updates_onmob[A]) - A.RemoveElement(/datum/element/update_icon_updates_onmob) - else - already_updates_onmob[A]-- - if(!already_updates_onmob[A]) - already_updates_onmob -= A var/datum/action/polychromic/P = actions_by_atom[A] if(P) actions_by_atom -= A qdel(P) - UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_WORN_OVERLAYS)) + UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_WORN_OVERLAYS, COMSIG_SUIT_MADE_HELMET)) + if(isitem(A)) + if(!(poly_flags & POLYCHROMIC_NO_HELD) && !(poly_flags & POLYCHROMIC_NO_WORN)) + if(!already_updates_onmob[A]) + A.RemoveElement(/datum/element/update_icon_updates_onmob) + else + LAZYREMOVE(already_updates_onmob, A) + var/obj/item/clothing/head/H = helmet_by_suit[A] + if(H) + UnregisterSignal(H, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_WORN_OVERLAYS, COMSIG_PARENT_QDELETING)) + LAZYREMOVE(helmet_by_suit, A) + LAZYREMOVE(suit_by_helmet, H) + colors_by_atom -= H + if(!QDELETED(H)) + H.update_icon() //removing the overlays + if(!QDELETED(A) && ismob(A.loc)) + var/mob/M = A.loc + if(!(poly_flags & POLYCHROMIC_NO_HELD) && M.is_holding(A)) + M.update_inv_hands() + else if(!(poly_flags & POLYCHROMIC_NO_WORN)) + M.regenerate_icons() + if(!QDELETED(A)) + A.update_icon() //removing the overlays /datum/element/polychromic/proc/apply_overlays(atom/source, list/overlays) var/list/L = colors_by_atom[source] + var/f_icon = icon_file || source.icon if(isnum(overlays_states)) for(var/i in 1 to overlays_states) - overlays += mutable_appearance(source.icon, "[source.icon_state]-[i]", color = L[i]) + overlays += mutable_appearance(f_icon, "[source.icon_state]-[i]", color = L[i]) else overlays += colors_by_atom[source] -/datum/element/polychromic/proc/apply_worn_overlays(obj/item/source, isinhands, icon_file, used_state, style_flags, list/overlays) +/datum/element/polychromic/proc/apply_worn_overlays(obj/item/source, isinhands, icon, used_state, style_flags, list/overlays) if(poly_flags & (isinhands ? POLYCHROMIC_NO_HELD : POLYCHROMIC_NO_WORN)) return - var/f_icon = worn_file || icon_file + var/f_icon = worn_file || icon var/list/L = colors_by_atom[source] if(isnum(overlays_states)) @@ -148,6 +168,20 @@ /datum/element/polychromic/proc/on_examine(atom/source, mob/user, list/examine_list) examine_list += "Alt-click to recolor it." +/datum/element/polychromic/proc/register_helmet(atom/source, obj/item/clothing/head/H) + LAZYSET(suit_by_helmet, H, source) + LAZYSET(helmet_by_suit, source, H) + colors_by_atom[H] = colors_by_atom[source] + RegisterSignal(H, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlays) + RegisterSignal(H, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) + RegisterSignal(H, COMSIG_PARENT_QDELETING, .proc/unregister_helmet) + +/datum/element/polychromic/proc/unregister_helmet(atom/source) + var/obj/item/clothing/suit/S = suit_by_helmet[source] + LAZYREMOVE(suit_by_helmet, source) + LAZYREMOVE(helmet_by_suit, S) + colors_by_atom -= source + /datum/action/polychromic name = "Modify Polychromic Colors" background_icon_state = "bg_polychromic" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 402d16e7ec..d484027ad5 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -47,25 +47,12 @@ //Add a "exclude" string to do the opposite, making it only only species listed that can't wear it. //You append this to clothing objects. - //Polychrome stuff: - var/hasprimary = FALSE //These vars allow you to choose which overlays a clothing has - var/hassecondary = FALSE - var/hastertiary = FALSE - var/primary_color = "#FFFFFF" //RGB in hexcode - var/secondary_color = "#FFFFFF" - var/tertiary_color = "#808080" - - //No idea what this is but eh -tori - var/force_alternate_icon = FALSE - /obj/item/clothing/Initialize() . = ..() if(CHECK_BITFIELD(clothing_flags, VOICEBOX_TOGGLABLE)) actions_types += /datum/action/item_action/toggle_voice_box if(ispath(pocket_storage_component_path)) LoadComponent(pocket_storage_component_path) - if(hasprimary | hassecondary | hastertiary) //Checks if polychrome is enabled - update_icon() //Applies the overlays and default colors onto the clothes on spawn. /obj/item/clothing/MouseDrop(atom/over_object) . = ..() @@ -150,8 +137,6 @@ how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" . += how_cool_are_your_threads.Join() - if(hasprimary | hassecondary | hastertiary) //Checks if polychrome is enabled - . += "Alt-click to recolor it." /obj/item/clothing/obj_break(damage_flag) if(!damaged_clothes) @@ -195,173 +180,6 @@ BLIND // can't see anything female_clothing_icon = fcopy_rsc(female_clothing_icon) GLOB.female_clothing_icons[index] = female_clothing_icon -/obj/item/clothing/under/verb/toggle() - set name = "Adjust Suit Sensors" - set category = "Object" - set src in usr - var/mob/M = usr - if (istype(M, /mob/dead/)) - return - if (!can_use(M)) - return - if(src.has_sensor == LOCKED_SENSORS) - to_chat(usr, "The controls are locked.") - return 0 - if(src.has_sensor == BROKEN_SENSORS) - to_chat(usr, "The sensors have shorted out!") - return 0 - if(src.has_sensor <= NO_SENSORS) - to_chat(usr, "This suit does not have any sensors.") - return 0 - - var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes - if(get_dist(usr, src) > 1) - to_chat(usr, "You have moved too far away!") - return - sensor_mode = modes.Find(switchMode) - 1 - - if (src.loc == usr) - switch(sensor_mode) - if(0) - to_chat(usr, "You disable your suit's remote sensing equipment.") - if(1) - to_chat(usr, "Your suit will now only report whether you are alive or dead.") - if(2) - to_chat(usr, "Your suit will now only report your exact vital lifesigns.") - if(3) - to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.w_uniform == src) - H.update_suit_sensors() - - -/obj/item/clothing/under/CtrlClick(mob/user) - . = ..() - - if (!(item_flags & IN_INVENTORY)) - return - - if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - - if(has_sensor == LOCKED_SENSORS) - to_chat(user, "The controls are locked.") - return - if(has_sensor == BROKEN_SENSORS) - to_chat(user, "The sensors have shorted out!") - return - if(has_sensor <= NO_SENSORS) - to_chat(user, "This suit does not have any sensors.") - return - - sensor_mode = SENSOR_COORDS - - to_chat(user, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.w_uniform == src) - H.update_suit_sensors() - -/obj/item/clothing/under/AltClick(mob/user) - . = ..() - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(attached_accessory) - remove_accessory(user) - else - rolldown() - // Polychrome stuff: - if(hasprimary | hassecondary | hastertiary) - var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays - switch(choice) //Lets the list's options actually lead to something - if("Primary Color") - var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. - if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. - primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly - update_icon() //updates the item icon - user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works. - if("Secondary Color") - var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null - if(secondary_color_input) - secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - if("Tertiary Color") - var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null - if(tertiary_color_input) - tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - return TRUE - -/obj/item/clothing/neck/AltClick(mob/user) - . = ..() - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - // Polychrome stuff: - if(hasprimary | hassecondary | hastertiary) - var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays - switch(choice) //Lets the list's options actually lead to something - if("Primary Color") - var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. - if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. - primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly - update_icon() //updates the item icon - user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works. - if("Secondary Color") - var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null - if(secondary_color_input) - secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - if("Tertiary Color") - var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null - if(tertiary_color_input) - tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - return TRUE - -/obj/item/clothing/under/verb/jumpsuit_adjust() - set name = "Adjust Jumpsuit Style" - set category = null - set src in usr - rolldown() - -/obj/item/clothing/under/proc/rolldown() - if(!can_use(usr)) - return - if(!can_adjust) - to_chat(usr, "You cannot wear this suit any differently!") - return - if(toggle_jumpsuit_adjust()) - to_chat(usr, "You adjust the suit to wear it more casually.") - else - to_chat(usr, "You adjust the suit back to normal.") - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.update_inv_w_uniform() - H.update_body() - -/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() - adjusted = !adjusted - - if(adjusted) - if(fitted != FEMALE_UNIFORM_TOP) - fitted = NO_FEMALE_UNIFORM - if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted - body_parts_covered &= ~CHEST - else - fitted = initial(fitted) - if(!alt_covers_chest) - body_parts_covered |= CHEST - - return adjusted - /obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. if(!can_use(user)) return FALSE @@ -441,15 +259,3 @@ BLIND // can't see anything return FALSE return TRUE - -/obj/item/clothing/update_overlays() // Polychrome stuff - . = ..() - if(hasprimary) //Checks if the overlay is enabled - var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_state]-primary", color = primary_color) //Automagically picks overlays - . += primary_overlay //Applies the coloured overlay onto the item sprite. but NOT the mob sprite. - if(hassecondary) - var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_state]-secondary", color = secondary_color) - . += secondary_overlay - if(hastertiary) - var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_state]-tertiary", color = tertiary_color) - . += tertiary_overlay diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index f775fca203..33666d2b00 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -169,54 +169,44 @@ name = "pet collar" desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule. It seems to be made out of a polychromic material." icon_state = "petcollar" - mob_overlay_icon = 'icons/mob/clothing/neck.dmi' //Because, as it appears, the item itself is normally not directly aware of its worn overlays, so this is about the easiest way, without adding a new var. - hasprimary = TRUE - primary_color = "#00BBBB" pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar + var/poly_states = 1 + var/poly_colors = list("#00BBBB") var/tagname = null + var/treat_path = /obj/item/reagent_containers/food/snacks/cookie + +/obj/item/clothing/neck/petcollar/Initialize() + . = ..() + if(treat_path) + new treat_path(src) + +/obj/item/clothing/neck/petcollar/ComponentInitialize() + . = ..() + if(!poly_states) + return + AddElement(/datum/element/polychromic, poly_colors, poly_states) /obj/item/clothing/neck/petcollar/attack_self(mob/user) tagname = stripped_input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot", MAX_NAME_LEN) name = "[initial(name)] - [tagname]" -/obj/item/clothing/neck/petcollar/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) - . = ..() - if(hasprimary | hassecondary | hastertiary) - if(!isinhands) //prevents the worn sprites from showing up if you're just holding them - if(hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-primary") //automagical sprite selection - primary_worn.color = primary_color //colors the overlay - . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite - if(hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-secondary") - secondary_worn.color = secondary_color - . += secondary_worn - if(hastertiary) - var/mutable_appearance/tertiary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-tertiary") - tertiary_worn.color = tertiary_color - . += tertiary_worn - /obj/item/clothing/neck/petcollar/leather name = "leather pet collar" icon_state = "leathercollar" - - hasprimary = TRUE - hassecondary = TRUE - primary_color = "#222222" - secondary_color = "#888888" + poly_states = 2 + poly_colors = list("#222222", "#888888") /obj/item/clothing/neck/petcollar/choker desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel." name = "choker" icon_state = "choker" - - hasprimary = TRUE - primary_color = "#222222" + poly_colors = list("#222222") /obj/item/clothing/neck/petcollar/locked name = "locked collar" desc = "A collar that has a small lock on it to keep it from being removed." pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked + treat_path = /obj/item/key/collar var/lock = FALSE /obj/item/clothing/neck/petcollar/locked/attackby(obj/item/K, mob/user, params) @@ -238,32 +228,19 @@ /obj/item/clothing/neck/petcollar/locked/leather name = "leather pet collar" icon_state = "leathercollar" - - hasprimary = TRUE - hassecondary = TRUE - primary_color = "#222222" - secondary_color = "#888888" + poly_states = 2 + poly_colors = list("#222222", "#888888") /obj/item/clothing/neck/petcollar/locked/choker name = "choker" desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel." icon_state = "choker" - - hasprimary = TRUE - primary_color = "#222222" + poly_colors = list("#222222") /obj/item/key/collar name = "Collar Key" desc = "A key for a tiny lock on a collar or bag." -/obj/item/clothing/neck/petcollar/Initialize() - . = ..() - new /obj/item/reagent_containers/food/snacks/cookie(src) - -/obj/item/clothing/neck/petcollar/locked/Initialize() - . = ..() - new /obj/item/key/collar(src) - ////////////// //DOPE BLING// ////////////// diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 7d56fbe6dd..ce3d2576f9 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -91,3 +91,14 @@ heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF | GOLIATH_RESISTANCE + +/obj/item/clothing/neck/cloak/polychromic + name = "polychromic cloak" + desc = "For when you want to show off your horrible colour coordination skills." + icon_state = "polyce" + item_state = "qmcloak" + var/list/poly_colors = list("#FFFFFF", "#FFFFFF", "#808080") + +/obj/item/clothing/neck/cloak/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, poly_colors, 3) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 71f04afc9c..c133ea7c88 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -974,70 +974,11 @@ icon_state = "coatpoly" item_state = "coatpoly" hoodtype = /obj/item/clothing/head/hooded/winterhood/polychromic - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#6A6964" - secondary_color = "#C4B8A6" - tertiary_color = "#0000FF" + +/obj/item/clothing/suit/hooded/wintercoat/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#6A6964", "#C4B8A6", "#0000FF"), 3) /obj/item/clothing/head/hooded/winterhood/polychromic icon_state = "winterhood_poly" item_state = "winterhood_poly" - -/obj/item/clothing/head/hooded/winterhood/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. - . = ..() - if(suit.hasprimary | suit.hassecondary) - if(!isinhands) //prevents the worn sprites from showing up if you're just holding them - if(suit.hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[icon_state]-primary") //automagical sprite selection - primary_worn.color = suit.primary_color //colors the overlay - . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. - if(suit.hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[icon_state]-secondary") - secondary_worn.color = suit.secondary_color - . += secondary_worn - -/obj/item/clothing/suit/hooded/wintercoat/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. - . = ..() - if(hasprimary | hassecondary | hastertiary) - if(!isinhands) //prevents the worn sprites from showing up if you're just holding them - if(hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[icon_state]-primary[suittoggled ? "_t" : ""]") //automagical sprite selection - primary_worn.color = primary_color //colors the overlay - . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. - if(hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[icon_state]-secondary[suittoggled ? "_t" : ""]") - secondary_worn.color = secondary_color - . += secondary_worn - if(hastertiary) - var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[icon_state]-tertiary[suittoggled ? "_t" : ""]") - tertiary_worn.color = tertiary_color - . += tertiary_worn - -/obj/item/clothing/suit/hooded/wintercoat/AltClick(mob/user) - . = ..() - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(hasprimary | hassecondary | hastertiary) - var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays - switch(choice) //Lets the list's options actually lead to something - if("Primary Color") - var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. - if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. - primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly - update_icon() //updates the item icon - user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works. - if("Secondary Color") - var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null - if(secondary_color_input) - secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - if("Tertiary Color") - var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null - if(tertiary_color_input) - tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - return TRUE diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index cbbd64ebcc..4f29eab6ab 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -6,7 +6,7 @@ var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this /obj/item/clothing/suit/hooded/New() - MakeHood() + hood = MakeHelmet() ..() /obj/item/clothing/suit/hooded/Destroy() @@ -14,11 +14,15 @@ qdel(hood) hood = null -/obj/item/clothing/suit/hooded/proc/MakeHood() +/obj/item/clothing/suit/proc/MakeHelmet(obj/item/clothing/head/H) + SEND_SIGNAL(src, COMSIG_SUIT_MADE_HELMET, H) + return H + +/obj/item/clothing/suit/hooded/MakeHelmet(obj/item/clothing/head/hooded/H) if(!hood) - var/obj/item/clothing/head/hooded/W = new hoodtype(src) - W.suit = src - hood = W + H = new hoodtype(src) + H.suit = src + return ..() /obj/item/clothing/suit/hooded/ui_action_click() ToggleHood() @@ -125,7 +129,7 @@ //Hardsuit toggle code /obj/item/clothing/suit/space/hardsuit/Initialize() - MakeHelmet() + helmet = MakeHelmet() . = ..() /obj/item/clothing/suit/space/hardsuit/Destroy() @@ -140,13 +144,13 @@ suit.helmet = null return ..() -/obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() +/obj/item/clothing/suit/space/hardsuit/MakeHelmet(obj/item/clothing/head/helmet/space/hardsuit/H) if(!helmettype) return if(!helmet) - var/obj/item/clothing/head/helmet/space/hardsuit/W = new helmettype(src) - W.suit = src - helmet = W + H = new helmettype(src) + H.suit = src + return ..() /obj/item/clothing/suit/space/hardsuit/ui_action_click() ..() diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 42783ab518..fe3aaf4bda 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -19,27 +19,13 @@ var/mutable_appearance/accessory_overlay /obj/item/clothing/under/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(isinhands) return if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") if(blood_DNA) . += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color()) - if(accessory_overlay) - . += accessory_overlay - if(hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[icon_state]-primary") //automagical sprite selection - primary_worn.color = primary_color //colors the overlay - . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. - if(hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[icon_state]-secondary") - secondary_worn.color = secondary_color - . += secondary_worn - if(hastertiary) - var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[icon_state]-tertiary") - tertiary_worn.color = tertiary_color - . += tertiary_worn /obj/item/clothing/under/attackby(obj/item/I, mob/user, params) if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil)) @@ -167,5 +153,121 @@ if(attached_accessory) . += "\A [attached_accessory] is attached to it." +/obj/item/clothing/under/verb/toggle() + set name = "Adjust Suit Sensors" + set category = "Object" + set src in usr + var/mob/M = usr + if (istype(M, /mob/dead/)) + return + if (!can_use(M)) + return + if(src.has_sensor == LOCKED_SENSORS) + to_chat(usr, "The controls are locked.") + return 0 + if(src.has_sensor == BROKEN_SENSORS) + to_chat(usr, "The sensors have shorted out!") + return 0 + if(src.has_sensor <= NO_SENSORS) + to_chat(usr, "This suit does not have any sensors.") + return 0 + + var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") + var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes + if(get_dist(usr, src) > 1) + to_chat(usr, "You have moved too far away!") + return + sensor_mode = modes.Find(switchMode) - 1 + + if (src.loc == usr) + switch(sensor_mode) + if(0) + to_chat(usr, "You disable your suit's remote sensing equipment.") + if(1) + to_chat(usr, "Your suit will now only report whether you are alive or dead.") + if(2) + to_chat(usr, "Your suit will now only report your exact vital lifesigns.") + if(3) + to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.w_uniform == src) + H.update_suit_sensors() + + +/obj/item/clothing/under/CtrlClick(mob/user) + . = ..() + + if (!(item_flags & IN_INVENTORY)) + return + + if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + + if(has_sensor == LOCKED_SENSORS) + to_chat(user, "The controls are locked.") + return + if(has_sensor == BROKEN_SENSORS) + to_chat(user, "The sensors have shorted out!") + return + if(has_sensor <= NO_SENSORS) + to_chat(user, "This suit does not have any sensors.") + return + + sensor_mode = SENSOR_COORDS + + to_chat(user, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.w_uniform == src) + H.update_suit_sensors() + +/obj/item/clothing/under/AltClick(mob/user) + . = ..() + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + if(attached_accessory) + remove_accessory(user) + else + rolldown() + +/obj/item/clothing/under/verb/jumpsuit_adjust() + set name = "Adjust Jumpsuit Style" + set category = null + set src in usr + rolldown() + +/obj/item/clothing/under/proc/rolldown() + if(!can_use(usr)) + return + if(!can_adjust) + to_chat(usr, "You cannot wear this suit any differently!") + return + if(toggle_jumpsuit_adjust()) + to_chat(usr, "You adjust the suit to wear it more casually.") + else + to_chat(usr, "You adjust the suit back to normal.") + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + H.update_inv_w_uniform() + H.update_body() + +/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() + adjusted = !adjusted + + if(adjusted) + if(fitted != FEMALE_UNIFORM_TOP) + fitted = NO_FEMALE_UNIFORM + if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted + body_parts_covered &= ~CHEST + else + fitted = initial(fitted) + if(!alt_covers_chest) + body_parts_covered |= CHEST + + return adjusted + /obj/item/clothing/under/rank dying_key = DYE_REGISTRY_UNDER diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 7cbfe5abf5..69a1dc67b3 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -96,7 +96,7 @@ /obj/item/clothing/under/costume/kilt/polychromic/ComponentInitialize() . = ..() - AddElement(/datum/element/polychromic, list("#FFFFFF", "#F08080"), list("polykilt-primary", "polykilt-secondary"), null, POLYCHROMIC_ALTCLICK|POLYCHROMIC_NO_HELD|POLYCHROMIC_ACTION) + AddElement(/datum/element/polychromic, list("#FFFFFF", "#F08080"), 2) /obj/item/clothing/under/costume/gladiator name = "gladiator uniform" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index a7557a0702..d475ca8100 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -241,69 +241,67 @@ desc = "A fancy button-up shirt made with polychromic threads." icon_state = "polysuit" item_state = "sl_suit" - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#FFFFFF" - secondary_color = "#353535" - tertiary_color = "#353535" mutantrace_variation = NONE +/obj/item/clothing/under/misc/poly_shirt/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#FFFFFF", "#353535", "#353535"), 3) + /obj/item/clothing/under/misc/polyshorts name = "polychromic shorts" desc = "For ease of movement and style." icon_state = "polyshorts" item_state = "rainbow" - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#353535" - secondary_color = "#808080" - tertiary_color = "#808080" can_adjust = FALSE body_parts_covered = CHEST|GROIN|ARMS +/obj/item/clothing/under/misc/polyshorts/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#353535", "#808080", "#808080"), 3) + /obj/item/clothing/under/misc/polyjumpsuit name = "polychromic tri-tone jumpsuit" desc = "A fancy jumpsuit made with polychromic threads." icon_state = "polyjump" item_state = "rainbow" - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#FFFFFF" - secondary_color = "#808080" - tertiary_color = "#FF3535" can_adjust = FALSE mutantrace_variation = NONE +/obj/item/clothing/under/misc/polyjumpsuit/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#FFFFFF", "#808080", "#353535"), 3) + /obj/item/clothing/under/misc/poly_bottomless name = "polychromic bottomless shirt" - desc = "Great for showing off your junk in dubious style." + desc = "Great for showing off your underwear in dubious style." icon_state = "polybottomless" item_state = "rainbow" - primary_color = "#808080" - secondary_color = "#FF3535" body_parts_covered = CHEST|ARMS //Because there's no bottom included can_adjust = FALSE mutantrace_variation = NONE +/obj/item/clothing/under/misc/poly_bottomless/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#808080", "#FF3535"), 2) + /obj/item/clothing/under/misc/poly_tanktop name = "polychromic tank top" desc = "For those lazy summer days." icon_state = "polyshimatank" item_state = "rainbow" - primary_color = "#808080" - secondary_color = "#FFFFFF" - tertiary_color = "#8CC6FF" body_parts_covered = CHEST|GROIN can_adjust = FALSE mutantrace_variation = NONE + var/list/poly_states = 3 + var/list/poly_colors = list("#808080", "#FFFFFF", "#8CC6FF") + +/obj/item/clothing/under/misc/poly_tanktop/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, poly_colors, poly_states) /obj/item/clothing/under/misc/poly_tanktop/female name = "polychromic feminine tank top" desc = "Great for showing off your chest in style. Not recommended for males." icon_state = "polyfemtankpantsu" - hastertiary = FALSE - primary_color = "#808080" - secondary_color = "#FF3535" + poly_states = 2 + poly_colors = list("#808080", "#FF3535") diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index ebf7cb5896..f61a41e4c3 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -35,19 +35,18 @@ desc = "95% Polychrome, 5% Spandex!" icon_state = "polyshortpants" item_state = "rainbow" - hasprimary = TRUE - hassecondary = TRUE - primary_color = "#FFFFFF" - secondary_color = "#F08080" mutantrace_variation = NONE + var/list/poly_colors = list("#FFFFFF", "#F08080") + +/obj/item/clothing/under/shorts/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, poly_colors, 2) /obj/item/clothing/under/shorts/polychromic/pantsu name = "polychromic panties" desc = "Topless striped panties. Now with 120% more polychrome!" icon_state = "polypantsu" item_state = "rainbow" - hastertiary = FALSE - primary_color = "#FFFFFF" - secondary_color = "#8CC6FF" body_parts_covered = GROIN mutantrace_variation = NONE + poly_colors = list("#FFFFFF", "#8CC6FF") diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index f00e96d821..fa2c9eed71 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -211,21 +211,18 @@ desc = "A fancy skirt made with polychromic threads." icon_state = "polyskirt" item_state = "rainbow" - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#FFFFFF" - secondary_color = "#F08080" - tertiary_color = "#808080" mutantrace_variation = NONE + var/list/poly_colors = list("#FFFFFF", "#F08080", "#808080") + +/obj/item/clothing/under/dress/skirt/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, poly_colors, 3) /obj/item/clothing/under/dress/skirt/polychromic/pleated name = "polychromic pleated skirt" desc = "A magnificent pleated skirt complements the woolen polychromatic sweater." icon_state = "polypleat" item_state = "rainbow" - primary_color = "#8CC6FF" - secondary_color = "#808080" - tertiary_color = "#FF3535" body_parts_covered = CHEST|GROIN|ARMS mutantrace_variation = NONE + poly_colors = list("#8CC6FF", "#808080", "#FF3535") diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm index 3ee5204c3b..087262dd1e 100644 --- a/code/modules/clothing/under/suits.dm +++ b/code/modules/clothing/under/suits.dm @@ -109,11 +109,9 @@ desc = "For when you want to show off your horrible colour coordination skills." icon_state = "polysuit" item_state = "sl_suit" - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#FFFFFF" - secondary_color = "#FFFFFF" - tertiary_color = "#808080" can_adjust = FALSE mutantrace_variation = NONE + +/obj/item/clothing/under/suit/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#FFFFFF", "#FFFFFF", "#808080"), 3) diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index c499c236e36e363136e61b121b430ee0a94787b3..f2ea9fa55dc7b92f45665ae280be3722c8af95d1 100644 GIT binary patch delta 8017 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 C$vD6O diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index de59a136d99ca23e0b751b962395756793bcaafb..68fde7bff95931d53484b9bcb01221142988828d 100644 GIT binary patch literal 47399 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 F{}*HUlUe`( literal 45707 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˭+ynM8_{)Ni| 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 >%FmDPF@jm(^Lq(K+`udPkc3p3< z%*mynJ-86w#5D-3^^#=yQBbf=1Oi5c7Z$l{-W!jUA%oIF&9hA=S2!BMo);v@K`&Zb>uFT-e zzdQEA^GKZMXm;SmzRcpPLJ`3IRH#isPfb;GH@48f)~*oowL#9SUK8LNoRv%h^sdwO z9l;@K$5O@`;QT)T`_?Y^K@mVQl|PN$<$J&sxsK?P5Du;0c&O9u)_!Q z?*04!g-jHld=eGUE#j>ks^;4CmdGg&0f=n%yzfIpmAW2COGkm_w=ox_^X3du&%Q|o zP!%-1MI^FcJHj4u-iv9Mq)MfP?i*k_r+VtMUr}X8>d4s1P_Rf|4_ts5q#h7p4!4;S z_rJfDHyAQjFFNjTrQje0z|js^RXQ~M_<`5z5z}Q+&8&(f9$4;FByr|LSE$}Gq?q!v zNej(|OMNq-7#Y#}aOLUmfM<7)k5}@RPvn?Zfy*MSDH>=h2S%Khk>yLVcVZtH9Xg1yna5Us*#N ziS`^;JO`v;!0`GpBgL6S-;~wf^Q-)1?dF(@>AbPn(>!D#2iP79eLDbHk`E;8Uv%=L zu!cz_apNztQ|tl(>@@lBFkE_4r+_h2)6;o1HSbvgu?)6{Ag87#E{ttGp_og-@iseo zUcb}=XKEu2W#-MBYMDQhjcPe0* zyoAck-=?c)kNmpENFmlkF+q~zqJVJw2a@D!?TG9%wqM^Bv5bO`P;>M3Byhr?L=0iY z>Ri@e8{ig%X$*i75Ugy&HzPEMbyZm-=V3N4F!W9*6X2JB!a7xZf9Y40W3ttY|*HcVrObqoUl; z5EB0O71LwODA`?ghyea>1<5Pl_>+b(teGS4{oxazF-ZI^+>LDanY;n#`?MfFgoBY_mZmUvm^dB zFp4fw4RXD)Pmbwf=l0d}ha`v^ZDgMJ!GR%v-iQJtCnrfNyS94)va+A!l*ZeQA%H+N z9%?xCug$FhNlZLYKWFPS?K5e=rlZrcg;g7ZR5G#ZNCo|D0Ox-p7HK`M4}7CjV^KfO z*2r;uxY`A{O5!k^zT#q6ENQQBIq?z$dx>n@qVetVI=0{eq+5g|+_n6U?`FTG6_#Ev zoonvU0C0~r9_M`e833fdDq4n(8zyHhzlVlI>LqJWy5C;Ea|$!skI>r$clHoI=H?y{ z32DDl6jc3JNRZ7)cQd6ZU|~@NF)*vGCqGLWA44Z7VNxzD6`_%1lICNlE(S67Vi7}2t1KLtWr1Psfm{S{m#M>{~yi4 zHt6jtKFh4{>Qbatz)XNTWyx6&qcbqZE$(7Ax^IEpnPS(BQTPFidK}Oj&5X4DuMU8y zx4!aY?NLN{xNLxHYYA$gxEi6j;1V`(8#Vy`0TYok=uuh9=l{ICcw+tP9zF=J9b%~C zv~wwFx927kcYXu1_2LCGY$ldfPt;xgFrbIj%S;NMG<9hm0YxJZM)cuw?1BqR8VT% z0XzA$=r->9-(SCb-`eZ)yUUH~eIJu-1$nHgqdIdh5BI{oor8nbg9{clphgOX`4StA z!z`hhakSoRa7J*Q8qlCK zm|s1M^!h2&0b^zQCZm&2F%H!-GfglaLBNZ9-a%{MZ+<&$w{ZKUnCCTi{%)n%FqiwT zArd2cC0;j%=&+Xa1bptEm^YW-d*@PaNSbRFVxO&SO^%`r3f@Uc8@M)NPl*^@Wm&8F zd6Lk$3Vh4k|g!{9==nizu|IO+dhsPaK316`2yA;cab_8;+yP z&Q&x23Dx9@I;)_5)5l!hDpLY0KtT-PI_trd+&xN7E33Ifg{J>%0Sf<46si55nJL#Z z-(H0P@^b5J|HnxBcLpaAN+O+Gq^e9vl_zr)7AER4UCWM8V@{CG6pKMoTTD=XqhbUE z35{xZO5+z@*+q|2K@pf#Ap6@JsaT7OxSvs#*5}LNsOiKT>k(3b-n?9b*p3IgGhc-~ z`ou)vt}^HA84k<~P}kPpM16O1G~5t+0JJ~XQKlcuvUTVySGfP9ix0Rq%yhu^$tmqi zrD04l=mmx7b>|#NS=KF8vbG1S7ZRowEb1%>AuG#q;BA3IM5k z9xQU=PK#t#bzm2X(khIIsj_51H~{2bi~BCkF%npO*PsR3MeSz-z7(P1)wd{>QWtp+ zG`BV(GoMLr{(~f0q)U)oSH2>SWx4eM`2cOU{~0|?N^_!ZTdAo&Z>C=jN%(Pq|?gB-A-lIkP zK`Jcbnt%{riSs>BTjS(d_L#1%{JU|P!j&-N5x_6R0@6fW!mYWcQ*Kx5z0se(9O`1w zTIKatheOG+5(BYv@LJ>VX4^RF_QRpXrqx{dS}O#m{oac%g1_u$g^iKWw#Xfbye{Bs zbCe7sbGfZ{;kGVZ8=_F>LXcz7=#)gOKb9r~hMr&SLI^r0Ti%3=e6J>rq*`blLJ48Q zFPPh_uY-1gg?Nm=U4xF&+Kk<`N!m;Q7@&ivuRGG-52{Uc@175MW61-J6i^~uJ7wZa zp#GpgqEoeYV&U!YRGI#Gt^T^b_D6~NMz!Fg%D;C1>?+C4$rOS@^OOt87p&Lbz(``P z-M*7AtfMeTp=1%}!BdI>WZa(p8!{E}fHK=1OGuZT5(n5wQ?%eQ?NjXth~651mgu63u78Y4P*L~v zyt#vU2IrF}l;0E;DP><=5AvWrn<918H+z4VjEpS75&s{wUfpz9BRR&|samDc=+ty5 z=+0p-ae4S)C0ewHou6Or7Tr@2uxL+ldHE|34^fYU#ceTZ(+*IvBt3jPj5X-*0v*!v z$?wNoo=E2TiSWpdTniWi*^yQ9dYnQgtKyUwgRMk%C%KFoOBmd!v(W<&r#SSS>mN0G zre9?7=f_<_Q-ZpS{S_*})Q{TSi_N;h;(<@{ss!__xPqLO@)*u>(D62kIhKV`n}GDQ+uJ zkNK{*wEF|;W_uL1+cEoqHtf~=a2#e17ekz>dbEu#{^PMGT&9PzwB`d(1H7vhCk)iUJ>38f5Yu0mrLEk z5gqCjLwH3nkjsE%z0i+2((BJX&2dcn#`KuO~*|d%P9Vj<$O@#-0-US4X9`j zFF{OiFp6a-{7#JDXP5P!55FE{ue67?DU4*;wu06;Er>f5L*CAeodyS_E*tF7pUaw9v#v=L)gu-g#oI|pK-bw0y9!`( z0Rhs-Cnrb45{MO36r7!njetd3zd`W^Pp9tpZm}$)$E-J>lG*RJOZdTTP#~gH_BV+A z8}F&M!A0Rl02F!?#{TF^x*!VzXpy+@8BgFv*LTqUS)xMa-pYH*6^4N7B=qPV;9AF5 zj#W&RqdDW_UFim2 zwwzZ0nH4Xphcs>txpX{pKgr^OAkY_9MQIYNL{MYV5FJL*{-4hKPCJg&8!4BJ0d9s59$!pMXbJwJVintOg; z(WY>R0Et=_Tu;y3seCg@zOOgBP9;*I;^K2Ius%TgakvQy3IyoT)ffyQ?fN^KOOz&J zA38s;pCRNVB?$F<;j?FzEzRYhTH0Ja^lH_nn+6118xRK`MDTjk!eo`Z^32Iz7nI3^ zQo&ml;pIBDYA%*da&1t=wLg2J7f&W%Oe-dxH zmSg>M{2v~m4{H?0_pmE*LkWAY3ZS7W@Ja_+mw^e33v63AJE!x6zf+TGKH_z2OJ1I(5?m+LsB8W5r6%++tI!1_~h^UCtdl3bxk=_X+2vP-0chqhQK3&r;gY>x2DzfF;OCRf-5QP>9wyJVb9B|zdmc6+(K4t{f6vS3YP3% z*`QeGGXl4*fET#CUylx=?d|2tR*y}raz^Ob8*hOx5e!8H4t?qR8-J%Eue1uxH)qVcf8MuLl36-z@(HXlX z+u1ut^LT2-mh=-p&tL%GFaxuuq#wn@&hE6gG#8vbeA2hz~ISdi+WlK6TaUAME$!`gin|taiPT@u{e9 zJ2k7uX-SG|#uOF-W!^0r?uyy`vaDdg8^bk9>(O>cy$JN8sPraw3=+H2IO8*GuBM5kPdy;VQqmv19jjot3FqODtWi@kzO$MV{`q zBX<3?!iYuTH{|=$wZ6=f#jIHjax$V>4NGcDcOMKCnaKMe?u-D`x1_uk`67B* zZOE<2nELFVe^zXFk!uLn9SqK&gbcro;&hl_r#k-)$c`#b**1PnZiG?+`@e|GshuzX z^LeRf;h+d-SKz;XC$c_Z-QF2N@mrP?mU=S;Tuoeb@JUZ@qK?*9f4{PpTPIJ;IZrCM zG}CeYA>kX_$15GK;~$kn19fb7532vqAE+W5bh6-&=ypGU>q#&forKO#@IfcNzqiZ( zjK+|c!Vfa7)?dyMSYc&*J&3*0nV&rN$+wr|Ak$)G)aK(IZD)l>@INaCa>Gk&)KI_B{c>j`=D2@l7JnJz68f0hcj2F4I z5Mjami&Mq3U7n)Z(wmXuEp;aX{@euJ8j*pgc7%Gl6V4NQ)&DTaL!r?1A3_bd;=N3E zaKhbnbelaI5xA&)VrD{EK5%;t^NVmB;gZ^mm`k2=>40m+{C>*g1sQfic($`h)L}7` za)r4{eeEpObFof`q@~|0ghT4(Jxo4^($ZdyQrdCJLYPgJ6>tkXXcZj1alC+vUI4f^}VTq-}8po%R9TNx{!Wzu&RfduS3W1FgFp`-_jpzjq zq12C*PP-7c)Lzv8t20> zGV=d)+GQ+o z@_LL`Un$h0Y_5HRBv_d&Ar#+=GncKO({W$#Nm}0{5CiWOz1aNnhgVW4LVz${pl(0< zNn(sJhdq2}jQ;lnUH{fD$$#Gzr^;W?bEW_o+}l&)H4qGfsx(||=CDsH`5$Jg%qnXo zZG%2D_cNOP=+m>6S)Lyc+82wa*@A2NTbnLs?8EK%MIx*fvjQb;Cu>}+7G)cGrLka_ z!=Go812cILD{d~M`0f*;mSAl{b&kN)cy?G*+&-hO$5|T<(bvySoR#1esSNEH0tj*8 zDA+F`WX}m!4Ju2!*F_Ha9+!BAM6e$07)HWKv#CbZnPIQx=N}y+*U8;c0*41)7XIZ} z$s|N=2KBLOwFq%9b5>^2qZ+u6(yNKwj~rOyOfK%l+FK+qHYzZ%@L$u`(TM|$7hq3e zqPG~cZ>ncmLFqwykJ9dB3Bm(cyL3=#1%_nnG|5t(+_45DA23%xls+oI55d}qii?C7 z^Vw`kY;6hLuOYVb!@Sc*hZ}i;^QaQ8!&+SbS{c@%8BbO}rNkr0aST$C5eF!1Ld*D9 z-I0%4JY`Hh_o`aW$z$BG%>$N3REvbpUGnmTu*i}3h$dt^sPD;j9s*mdQ;L2op!~>s z(Zzvm`Bz~$*V}>d+k^9lLv&8Nf{^+-o;iiQ?u`BF%c#GYw*(H?oMYip0~}j_b5G<( zE4$b$exH&xyCE3dep2>R&eJ1knxi&=!l_pDhdqTyJcl-#72G_Q6ulekHRf%lM)NK` zUA%u_04o7eZDpKLe*4k>=ubY13x=TBi+OqnI4CU`Q!-%GChM>bq}3MfO!T{Xg^QRJR$owxW8$1cR+(}rCx+4QNkbi)3a zNW=q=w$Q49p*Nr;{l~5-DVZ^ym+4T1?!62-^P2v2#Kf_Oo|FWkUbgGCNf|ma>*l*r zaJavab`f=F=@u^~Re8E}PO-}xH&(9h!(?<6dG0{Nyf{E`c;8r;>S!;>d81;K_Q{CxUm+fv%*95zQ_S`IYbytVp5rYySVNv|)(4>E1pDmt&4uYIn%i4v1VD7TR5_uw5W3NeZ!%SUfKTbA2=?NbMg3gql-}#;=%HgLI za;9iIb2Rnom>;IHOZerOH`O~SnoHlGMv|(GMw~%6UP`9^E=@*MCL=yuGzO|93E0=k z9Hg=f?O9fy!IszyS45vt#hh4s1I(<;t%(dhzJ+fgOHA2ranb@#>S zUc^5pgKv~*;}P7#pZOax=Z(+lMm!IkbPfW<>VvyqPXk`p z7oK~7T)p?ZnChN&DP*t2S!oQASRB#R&nmA?6R0Y$=|MQig<<_DM{%*Hn>IH6(+~eP z4C__6qj1PQ{3t8rF))kus=M7A)64?O*;=^KQaXsoz7>Tpct193- zAVGlfKeyEjV}O_j>jEvByw=;!JEEn!&aQ2#e9oPQ>kD^wDuOS8)o1XB>H ze^D1Dk18#}w}nS~;ir>bmk`M2O_&9GG6*pCH-J7nY z|HiT3bA9v`AJo%w`LnZO=~K0AV4CRAx|{X9ZM##>cHgzTvpV}0#uh|B$&BM{M4Kf{ zrDm5h?YaYJ)z-P8lQRiiitQXQ7QAQZj)|y+GIbH5i zer*TGA7k!B{2{WGK)j?uoV4qK=@%)VZiE?0RnEWhJ^J?JhC#Byg9Yp7nH$r~ajD?mST)hXW zX;!1^84u}yy@~r7!K39$f&sX5}he1PIlb|__lnNxbyM^L}j z<7&b9>iaGHqk5jzdr9UQyI{4j0H9)%GYvY2bry&%+GG zb(dhzI}@yI^;jFb%e!ZC{hF1i-5K47Od%bJk}W*A%;roTcA}1HeIKdBx^EEPW_P)_MJgD@_LC^;;$d20n z&NSAP>UCFN`aQ)@O z! zRRvv$juuVEEjYPf-u&>QgDr1O@uYu(dJ#5%Q^56;NlCW$4pYZnq!@$t2kN_tH)^2~ z5d{L3!3#QLOHamgKtB=errchA+DjRRiO!r~`nWnG`r~b6E=8yBkqr}J8q`s(W8u!8 ziOy;wYq#DbUzZnBs6?uGuQ>d%d;0@QG(LKN_v-@UaHi#S1kSs&kho6Y@L=au zT^0y1)>b@SYI=41hvA-~-to`~J6oD%kevo8UOI5h-XiGdh@N!djJ-vNe(TVzozqLz zzibExT*jqa#0mIXBTt0T1IDI0)!VV$g`zqg_y7|Q>5By;u*cLC=`x{W_K>TPA`tMK zHPH_tu8n9NXHGoM%!=t6ePkC_dZt{;xkPT1dty~c((tC(NDJkVbQqD*WT)SU+E^!V zRu`Nr&t8^&6PCI6*ZSUdr!al@QN82b7{o2soSV*;eb2238uK^xxo&xK1)din9v^G& zQtdbyDk1yqx#0Z!mg|!QlA+Ow(q$pW=7=nC;b@5xm+imZr#_n54ov)9CN=AJTR=%o%gAw0XtN1lGoAbZ|zyD3609yR&>i%c4`i$t0Cd)2{7sw3_$Tf5$-ew9=-!4 zr0pG9hhf7y)a|oY;1J1CQ~(qOZmdC5$H&-P9R${YNHFXS0)er)MWi+{9bPx9Z573R z53s5M6b~6tatiKDx+=b<#i3i{M zdJ~^h)KSN_0xdE^3k%G0rT>dzm1BzXHM2Sn7y+JoaI$ z8(@JQ!@Uq@-A@*8LURI)1YF5~uzk5vwEr0tMp9iy0q*^vfPhjTfIVeJfs zuZ+yZ->U5P~z>vE~r9d$WxF~so3Dx6`h4R!DZ=Yq#TakuW@ zXT;UaF$0XD<9<^l7?Jy$238Yaq3^F5T#~O+JTH7VYJ-&5AIfF^?dBUtXGdw)Cpu5- zAUrqRzvUHU0p#rp_Lzm#{`s8TT!7_b!|?6VgMC}D-P9J}Ir5EZVm_rI>ruwBQCXk@ zKCf{{MR(zYmoa_>v=lj4D^*U@PGWSnE%J$}Y2mZ6s~lWh)`ZzM?Ib&5M4k8dO{(PfdDfXTQhBI2tN>B)Y&Gd4D9cfU%_W!L&+u;`P2lBk2<}-M3X$kHyEw zKL#C7g;Va|r0mUY&M9wQ)i3`3=)hI)BN<)bDX+p^v;nw?SEKor&eJk5w=QKMie+Lz z_q#VQ_hn<9>Em?Ad%UKtQ3V(QligPos6X`n3Uo%xfXaLbr&y#!Rz#&v@T1{Bnc3d> zGb{=~LMArxbqO2n?Chna@u>rEC#UPgsL|IzBB()Bct6dRP5BRWC9pM|_27)RHp+2- zfB$|GGI(8%r3>eHBxfZYao4%}(QLZW+zxm^m=PeXtYR|fH)0|FYGX>}KZUDPC-E6+ z-Su6jX*-dx_J0 zRFS9=_gP}o^~>*r0q6+Q*UWca>|nR;2Uj|Pdg*bZHh7DdF+=7y3m z%{s9SmzAiY7XD&xE~jPk863g(+S9>rPZHDScNag(zf_~5jtU8kZMN(|xl6Bwa?=;3 zvW+2}P}&U-MuTm9r2NQtK_xlArr>(Y!CI)EJmqG3&;Vn_+{mEIre?&oVv1RJ`reMJma}^wa!v0_Gqa-e>*zV zo+}G*%_y?H#G?%5=omieY*K>rZ8bGI&gTZ(d_DFJMg_`zA$ASsNh%kRiKk>D#5z%v~;J$oj5uNgyeWCqHAX)vr0F@QQr1oaQ1SEH7YVXhX z26z{v+l*9gQlTEJ7tzWVC1CB|uhohl%u6st`76F*5s3Nt@%(o%3wnduia;UZ=YE`$ zXsySiB0)M6h<9}-NhI+jwwL>gZ!kP0>b-ki28~QDuB&L?hBNayNMdsf#6JM(sn6>@ zSr$oKF01YzFdI{GoAd(*9*P-U$7E!1XS5Tuh`c;k5I&LJtlqN?Xld-2Bkcxq zXTTIXv^0has2>~!F#zo(+t9&5U0x+$UAri38^Z^2SUe($|8~9j(!@BuP?n)=J_PF1 zUndp=0J)D%%udt10wE{MUms-wT=OxFUyNW@$}YFZ9xT!nyx3I*To zZ|}(rYuE!z{44ryX1NT;iAWZEf*LGTEqR!-TnO67iz;=2hDZ zds1xoRVBTIGR?jE-e0_bQ~Q!avTQswjp{%?-~19M~!rt7+&xr28HH>0SSQg*7a8 zXI*6w0LV%Y4i03brL!MSIsOTC7%5&rqtV}xNG))QFu$Ya_01M~`lMo*)NA+hSLH~i z_G4pWMG()8Kg}Ku`-QuE?uU{vi!c*JHZqCRgG6+iYD8FA_`8^RQ9TSa@$xIt0^e&_ z+6;x`!aY{E?FtIYyW{n*YN!|o|9C-N&dCeT11UE=4l2&Ry(72XVuat~YY60@2fCpE zrJb9XcO|sN3ZSFMTA~-%UMduV1b}^TvhOGXyM9-%U#|o%rf_V`$ivHv!Jd-z#N50X zhjaeb)06-CbCc9aWt>}4bp+dd{sVP|XG4u!RnLPXCnl>uO9se~46rh@{tUWSw#u_G zRA6vje_?inXEv>$TL%|xV5+%>K$O{&*i5ERQJXW^x)X$A(-@ko=uMfUu7jZ8| zYFWSn@^$z`c9ymf{Q@v^AIGN2$+Y1C3X+AlnH>FeTF^q? zoz0@PtzKXlNV&a}xbvs%QfC>zDUn30&;e_?usij^2m1-x*xN{}LgA*b#Y6rS@CBxS zC)%D3Ob>jJrlZA-$3u<8B|Y3eOAV_$?(3L0h_9!nO@#k!D}6e*5gOTsvbGKx$k)ZkrSWf{T27@ zkT?o9+ICG2@RM1}P_H(}-AUANY=9#CGPpah6{opY{$K=)pr})a_{El;StdBx0)^|4&=Q_`Lm!$>Xg%o>pq?z2nh~>(AU%u=3RPz z&xi0mrO(cee=il3j9skR`|XqC6M$tpEHVF$%a=+T1CyvR>C}uVAIAXUZ3wHX)3>q4nh7xBvn+!q0|fT&$TtI;z02|&po{H)2l~rYs(e8 zM$BGifCO5dV7u4MM0;N>vm4!Z{$twXoGaHfB4k2kWfTRace{*EPB@;C#J1-Oj0sv- z5`{^s=c8h-${lu$TzDF6xl}sW)!VHXXkMH%*ivpT<&^9RjpZBZ-+J!1%moP!Zsd5S zrx3>V<-=<1#hqBDi3#+XWVgNU0!YOW7D|c(6&{bculDf==&U@%GeetxzojqA^_xou z8*XoqJ=X1)G`=b~dDKU^CZl0!dA@by-E8Fx3VC(T3zOvpLDXEe4kkn?Lv+sh- zSLf0ual91ibtvu5ls1PsT}hEWrU(Z5!E;nPKw9dFk1OS28uq?e^Lvdw&<6DvUg-_$ z>t22sED#k_7ud9BN|j`U}!ee2zNi7q4Ww3_avH9Szexo&1dtILa?6hoF>=Cnitq z5L1R`a}x*F&S_#jw!ZzOXpvaAw2`jWT}W`a;JphM&KEf7Y8&Q&68iN$DR+9_xPEda zP|C}6_+VPw*YJ@4)|n?Xw8JISnb(nFKhXP62V&WNym1pZ1ZKr-5y;Y((qubK8IRDw z=Q0la|LC$dKHU;T9R%FfVUFxcBRRu!`{MCBf-B_GNKd`pVEtEsIPnyNLt&Yv- z@kC}F*5g4JGLO;cSms}g3lJRA*UhiYvL8~%R_N;*Ri6DoB$!vh?*JWmekSL|z)J#i z3oT6vB;n^HB^fKHPL&)x!FKFiiAsSI>38?ew*&PzW?U8?r&K_vtqO1xJ(LO^^ZXT` zTW3HlWsgf<=;oWkSoXR^NT4T9#UyfYjv2wW5oje^Q|g3W!k>lVFNdplm#Zi zqO*F50=>dASZMDGFU5TVw@X`EE(prt(D*<6W62>|04z%~xbG0bY6$|-P$lsRZS)ovPm9Ng+nc~~ z2)6&H7#S~~7QggS`Ip-pAGIu=7GG{}dZm%e;%RYzf>!KHV74mg+1Od!fAErY6s__N z6s7v`t2rgMNk#f98>AqNDQ6d|q(%Xz7X@Lufio*5h}}e$B*PAZ3%gmPVem8MXu#K5 zMd^x*oGlh;4>~sj`yk`0%n?v{0K0972AJ|IUf9*YD)}l?CUPtZ1nbl;`{>Acxk}{L zt^9IO=G-i`N^|qnmLmg;XnrFjN_l7>N`GP~&O>Y&sdeWDWzI`a+VYWpV*S9E*+{&y zKVNQdJSW;Mo)!;x4|flDXRg1PQXGPH&*avCbGN`c0&XcVZR#$jYzetf$U^x(Bj@mS z%ODr9VZc|J$85qpVxQaigOjcS78{=l<$yzT0PDB%fdr1!0R&W1w)$G0XAhjqW0T(j zavUQuV7xd^tZ^Q@QF7g3oPhglUoYDJChV|q=#rCd0w;fw1ok0NvAJ#-XB#}tIsuB` zNYp1XfR06(K5_ehoPwUNN zFSqdr4pS6%k#l`VWy4A-VZNgSBby_N_}f>LCj%fTJ{aN3?YQ4_JZ5lWzkT0WOn=11|wlleYsN0W_1=10a9rpBz_h^3rs) z8zv2uT#jZ0sl`&GgYwP;;mAtH6)PCKye^8z1{3ahth0So>|!MwrF1avgbd9Hp0UV{ zEo6=+qX?vcPAsT7Nc|Cg;6RPvu?_f+uU&__X&*^cEAUnpG6!XSgzWW^*aU;R$wnX? zK9ZnTwEBC-qVw$qDkFcLv7qK{%m(i99z{>V&MRhPVdoXLvA|<2ru9}Kg^nodG^C8zN?5zB@4b6TR=!WKbx7jzfP%3vtKn^2tkyXhN6PgjvRa3_ zV^-_%kS3^PxgI7z-dt{VmH$kjSVvDE6?{|OPy^{qOF~$^)bO+*&bOK9n zq*Ldp%t&x|Vv(vp&~Fq8df?IoK1ELDb)a7)ke6+`DDMtkD?aF4uoj5}2=zf8VUh+Q z3-vhd!wBIhI-7jblPd-we}4ZnLd%%H*IhaDnt1~Dgzz4VFASVzi` z$2igT`J7mwH1Wy;VaUuS#2$DJ?7M^~LJa+AYA(qZm<5?79tmi4f8Ef;V22MQzaK(g zi+zeiFetp(Msp#|&`Y@3>^a+<>-{ipRzi}VgQQ3nI+p}!RlcBseV7@nH}5?y)XMIa z+?)uCR=xJh{DV7)9>f9!PJxu9{u&5UEGF(aZ|Z{wDb``XP3set09n_OL|P7c12oF> zhM>!+ehKgkas!a3e-T>hc{*W9iGc%umQ-kvIHVRDBwiB?pveA*df16H*>XMVH+JE( z{@b&B(}zu;CwU-a^`VA_43$=1#Gl2fZs#S(x*1>MoorYW)t?Pi%8b1l`$X$!q>aY~ zjm1VPPRO7X)EN$SYM%+z`!p}{R{cP~?He8#LFWRtRO(zXe^0M*SQgntz}KF=DvP6p zrIja1SdxB{geK@GNxS8JgVqLk`Ou;lhnJ5ndh0MJcBWE{fbR3tFAtq$Q*u}K`QhZc z9`7E{Zh2A~*+;iTF2)lLMKPB+k}S%7O!jF|_v_-%zrQZN{`Kwl|5sY#ieREkpa1|M o07*naRCt{1gH#BIR0siwR0slxR0soyR0srzR0svPR0syZa|iZDKL7v# delta 1749 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 UItT-YItT=ZItT@~ItT{Ct)gLib^rhX delta 1806 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 L2?e($2?oXhCZA{P~wJ zzg<56`sL}$nw-ST^W~?%{`mCa=4_rW&zHad?dikBZk%%YCuPcie0jcn7uY&O{=26S z)@iytUw(S}Fen91m*>mJJ7;DW|Q5uzSPFct={hoMVF<14m{m9 z)~@$tW)xPoc)M$VeMU>#%=8WHA5R}Fd)h9~mydsW^Y>T z)p30mhGRBTKN&I%&H!7TwrHI}W>N0v?6f|};E-otr5EUhyphX5dw1aDALtC^sLamS zp}1}A!ZeyYgD zUT%OgBJa0%-mh%DQMvAmt#)Hco2)zE3(Y?Ho1`Mp+&WM)eOA5M~hJBrA_4cGR0&(rQ{3-hc#u2 zBL-uk#uuiTHd*61h@Sy-aB`U!idYy91A9+@X2#G=5d;-(^Mwfrmd_K-4p8qw8YbOk zihvKQY&*VkbaCuP(D%mFCj?HC2nZq+47nqT&8jW~H}oKpRwp1cq7(E~YB7^g4$)tp zoP{F#CkeNT1^-VJZWr{01@gct?7eXxJ{=d}l``UXwkuj+v43V&U^C~z%G{>=?Qa6) z34tQuf1MJ6Z8CL}BP-7x$HpEww#|WmW7~lKQ;&_1&Xaf`roZPJA#E_SOA`UQUn!fZ zt_4DHF-yoTc-r3MDKBHBcZ3dKv}7tG;_3onE@K< zVGRK=mkcQz1uj^c*>eWYr&ThmC%}sK(nC|RIwIGxV0m0Zk)ep{0q7`4aaz-Y9?IzNQxJD(7fNjH`R|DZAUxwjFh6JT`6qMcTU16LD z9NiNfDF2v`0A&I?&wJJpBl4#CUGRhF#541xm9FEC-Im&Zjw;8=#uW)T#P;wNnjZ2Nc~{=Yk=E--Sb2sexwf3 z;MxBbgu!yQ37_B><6f7Cw!Md#F#4>rMfsBD#^5t0jlOsIg(_w&{*Iz|=x!o|TK#nF zn$$XW<6MOG%Yz33UjE`#Vesx7wwRhN7pLK*w%i$b0~-!VTFCGMl!f1O^kBoM7u9fC z8ZPeJQc!evigArD<*Jl_CuIU6C#zCxqb(&=Jtgi5sA)W-=Nzw21#)~3#U4^0cJwrMTQPT*w?%R6=ft1f(tx9>&~Yn#yG8OfR)WYeIE#5=~* zw!#C4OtI9BuI&;{Q+g}eI5m8L?-<#;hSW>W5eca$Fa5VLjRyR{vuzEr{r4GvOr`c)l(v25jUMdSxlWIg0@U7LWTd2POuWlg$ z*Ql^ay@i=r;)qzkEOD&oz6%Eg5##J)y|OK3b<4uq0mWGd3Vfuf&N8@^g~iH})LHJp zs+j_#pJS_kvkdKLdR-}JR$23ac&KYi()*PS1?hlqGI*QBbGk7h

KY1-8!o;N3VO zUn<-sEGZhqK80HOGOWfy)m>rbxwSSFuM2Id3BAhJ)b>@jwt-(|YZ{PEpV~UG=~L4T zZ2ANbC_z5A=bJSIC>1Yam2J1sAO5z%_m`i4`+WHh{Ogye{{gzsMyw@~qELek35N{{ a0f!9<0*4I=1BVR>1cwa?1-A_e2Fo6`p>Xs7 diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi index 9deb214335569dc3f88987f0f768b6be48fff785..6827581b8530877c7bb8691b9b2968daed005771 100644 GIT binary patch delta 1880 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 bOb3Td2LXpn2Lgvo2Lp#p2L!iF2L&HFhsBC_ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 07d9c8cee6b8c5e2341a074263dd8132b4e672e0..2e0906ea20108632f2e31ffda05ac3eb1d3a7580 100644 GIT binary patch delta 15697 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 delta 15697 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 diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi index 0bdaa36e6248c6651f423569e52749145389f88c..cf8e13292f622b8acbb91518d8171d6b88c15abc 100644 GIT binary patch delta 2981 zcmV;W3tIHD7PT3WBmq#dB@Y3A|Nj90)BwV(Hvpxj0KdQ8-Q5TX2(q%W(~1HA#sGIC z2XG+H-uow0fx*lc~zCSh4Ga`AlUFuy#BI zkqtw?%u9a;M#xoGA;o^DP}z}81H<~`2r3D4fe1@4Dj6Brg=j;Uwxu`rBr0kR9h2$~ zB^epDjxcg#qKro-?4YWD384Ke<2i`G68eeAdu zs=Ehysp?S#;gg$Z)E+Ho=eti=Rkv*zp8j9u^XcP$zdjxaJnj9#pg!&!c%dcq55CkA z28KdUA`A|{(i8ed^o0IVJz*dm3O|J~IHo7`4UCKoXaN0#qoacwz(6QG&I3+Nxbh8; zjScGoCr3uKfK#J?qgucaKgSW{0f5o5F%2LXI5{#o$rcJ2I5j#o#TE)o@X+{Bm@1Tr z`07Fk21duCQNB=oF9t?@kcOOz{+ENJen>;c#K3qs40Pk6p%%i4hJgiqH9QuCG~`TF z72@L@R2AZ991MVYn1BJw!G{p43JG!!Vub+O>#trje1jr?|K9xV4Mhje!Ss#?jJJP( zOT-@lh!qmlyx;Im;@rM|&BgswIJa-!wD1Lx4kh^B*7KR>!wG{?oLlz&KHub|wt)Rp zQ)KQ1ptqoRLQRuvPE0t2Zh*mHG^#0Jfd}=g#e@1K_(GvjI1Je*7#jiqF){sh6CndA z@SuM6c&vec3Xe7rTOU-fbg>!mpVJfflRUxkDLl4#eXx8WAy>S9SU!-D;~O7B6T>Zh zKp2}b>%N_c&60Sqd>|oPyaUkwutn2={=q?Lf7qfKKyXk@b88A3Ml9Cw?YnOXzTshL zf7qgFK-j-1LXPjHA|$&X0*2%)iz03zl%CCk>b`A%;CrPA89sqG@Pb={{Q__BC9?zv zq<^@;VG_0iz7rOH8w1T!fI)#b{EA(I9Ru0bLm9}e9x?+%A`1yViS%vk9iq-sfXYC2 z^^gYg^(zfzcQDF9m4p-^a>-1Dn|HCMs4|dmfIf-G_dkip?yzbp2!N!4f)EW9fbymu zP~vHS8Z@rIE<04+pCJ+ur#VcOh$4)s@tc1&$He-p-J!Bu7X`>|T^vA^aFE=?IE0va zv$0qUAMRXS{z~eE1f}j5fN*xUWqSKcFwK3<=gE^NPhD0#k(is)#FMGi{QR@gvM4~kbQ>o=- zM&YGWR1)rOW%m#>!VtQ}4|jGC4fK(;5a-pwqpAew)xl$`WG{;VkcTut6b$?i<{@X{ zJ{TzSkhCzd0EDX1kbsLos2U9o2nI!eV1}_yNIs;e0yu4> z+1r8+VzKX!=2ll%f51BC3_Mt0U;h#7m@*Iw1Q2VDW~sT+K!E^atoozQf>u=3RaBA2HrnyLgU1Q9byr_&Hs0)Tt`>)qprJKKj`47e2HoU^5A z00b_DIPYv}D8Q_aAevj7fj-E8YyV(#W1j;QQwxX*)d-sb#nb{~N;N{J&tzRJ)W_9I zLIb9kmPDTs#nQ4TOlC66%c9SSVqx}#ds|yNfM_nKbr38(;2fNb&%r)=DV-2r0&CN* zdOkT1`{?CNN_YvZ^sahOYmj^Vkj=pbVbJSBfPoDk)$`=YpN4(YXcOEOsF!+ZMq ztI}022VWRIm{$jnt`a~K;s^mvh$cK^?(6sv4k2m6!Z8r4MneLBBA*x;LgW)8P3Q`E zRg&I0V+&vb;B<|q#>E3R-82H;C*COuSaO`Z%9V&P6bK;J8qG;-qrv>EA6o$>m@_u% zyheChpN{u}{3}UNa*kyMt44#R+*-#lx1X-BKdG4}2m#G7EH%>vp+I!H4MAASl}doe z%`l*yNI+35M5DQXxVZl9w`-0M3Gcr$h-WMws3Z`tN+ciFump6rG}NylAp7q>L@ph$ z#1shDFcxv4n0Go2vm9SPjgRYqt^zKFc;swpy0c&4=T|Q|wSZVqjj%g_r)}>Q^2OrG ziRd$;Sh}<)g#L1N-X7sm{s{KbC&hyB5?H&kt3Go+9_w9+U`wvXyV(jv~l67oCF5>PB)H!a1B1|02cIhMe9w~@ br{3s)NRsDW;0Ddj00000NkvXXu0mjf(07OK delta 2591 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 B(yagh diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 530cd61e6fd1e5cb9537a9f91887267b71bd0e94..607c26bb62ef0d3523f771d7176fd9f2ac266ae1 100644 GIT binary patch delta 1537 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 A0ssI2 diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 55ec7669ba9cdc31b6ca4969319703a8738e3c9e..dfebe3815511ac769eec289436d3d340c2bfa981 100644 GIT binary patch delta 20853 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 delta 20629 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 diff --git a/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm b/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm deleted file mode 100644 index c2b7aab55f..0000000000 --- a/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/clothing/neck/cloak/polychromic //enables all three overlays to reduce copypasta and defines basic stuff - name = "polychromic cloak" - desc = "For when you want to show off your horrible colour coordination skills." - icon = 'modular_citadel/icons/polyclothes/item/neck.dmi' - mob_overlay_icon = 'modular_citadel/icons/polyclothes/mob/neck.dmi' - icon_state = "polyce" - item_state = "qmcloak" - hasprimary = TRUE - hassecondary = TRUE - hastertiary = TRUE - primary_color = "#FFFFFF" //RGB in hexcode - secondary_color = "#FFFFFF" - tertiary_color = "#808080" - -/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. - . = ..() - if(hasprimary | hassecondary | hastertiary) - if(!isinhands) //prevents the worn sprites from showing up if you're just holding them - if(hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-primary") //automagical sprite selection - primary_worn.color = primary_color //colors the overlay - . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. - if(hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-secondary") - secondary_worn.color = secondary_color - . += secondary_worn - if(hastertiary) - var/mutable_appearance/tertiary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-tertiary") - tertiary_worn.color = tertiary_color - . += tertiary_worn - -/obj/item/clothing/neck/cloak/polychromic/polyce //DONATOR ITEM - name = "polychromic embroidered cloak" - desc = "A fancy cloak embroidered with polychromatic thread in a pattern that reminds one of the wielders of unlimited power." - icon_state = "polyce" - primary_color = "#808080" //RGB in hexcode - secondary_color = "#8CC6FF" - tertiary_color = "#FF3535" \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index a9b502d629..bd377d6081 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -563,3 +563,8 @@ unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad") mutantrace_variation = NONE +/obj/item/clothing/neck/cloak/polychromic/polyce + name = "polychromic embroidered cloak" + desc = "A fancy cloak embroidered with polychromatic thread in a pattern that reminds one of the wielders of unlimited power." + icon_state = "polyce" + poly_colors = list("#808080", "#8CC6FF", "#FF3535") diff --git a/modular_citadel/icons/polyclothes/item/neck.dmi b/modular_citadel/icons/polyclothes/item/neck.dmi deleted file mode 100644 index e2792cf9d0f6513951f4c23c54c1e6dcd4135ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmV-<0*3vGP)YnTGV!QaR&e!m0s9jGydXy0oR2Zn0004K zNklB?Uyc=}U@Fthu+dlX9`9v!f^^a$`TjPZQ{mL5t7MAi3O zqP&_2SmK%MgVy6)DIbh$qu#gv-h==YViOOF0Ob0nKga{n&~twF)^k8Z&B@_w4}fOz z`TgVN)B(+W;t$Xku^x>yu0ail3fFM1$I}SaaHPhQ2x=f=q^)MIO*T|kvl0LW9qF!c z2gPzKQe6foDW;1A049qB1c-{PNR+@r8A_Bu`9fr;|EbLT!ag*Gpu{eEG!3x75J>^N zwc&RFZ_U$<@#~e66u`DbGZMI$o{(8XqMy~UmasyC00012P)t-sz`(%& z|Notxotm1Osi~=~tgMfZkBp3r&d$!RuCCG1(aX!ry}iAgwp|=;h_*prD|N4xmE-0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6# za*U0*I5Sc+(=$pSoZ^zil2jm5sUSb6GC5U=i!&v&s2HS+i!-e#F*g;&HbhsZTTqml zn^;sytn%X2gNLXCjh{sM(DV6=jQ+b1W!psK~#90?VF8u zqA(DJXF>vO6RN1x{=NTm?o4E@$_z=No}O)UISQTt_ag~Jt^!b0R8;gK#LJnuLe%~I z4ey)YWedcrvd&hOj!= zWB_9#0sBieiB%T~ob9^DO7f^TA-HW#7776pUcGf8NCZgs>>Zeb7pDNEj>QWiKvglp z7IgsJvVT=c0HF;?hi*(2;_}4bQWs?J%F&Wc5Ew!Aj|6NVq$VKKwl#6l(9#ruY970I z7Cd6tiRVGxbJfk930y|i+iL)3TsATQbwjeImq!I)*W{fu1E9+Hc%aFv zeIV?xPXY9}TMB?j0vHDLgVqNEzRdfx&x_myd?h@0LV}rI2P_}^X&RK%uzSq`cpd(LXZfq z@&Oru^8uJ+pfWWd0L}-9fc?dqyvhe;|CkSuh2~FqYCZrQ3P8*UPK#53%X~lt81n(W z7aP#?0SIk?F&~J_6MqZmd;qLW5c7eVvk3SQm3#nh@_|V?)jW*(0MNam2*CLO%$*5T zrsV^0lMe_0)D6j+ULF*HT@RcO%m9Rb4{|;LH#etKfP;sDd;ilB{6Pi?!1;jgPcC!^ z4_Xr>0FH3Z2S5Yhd|=L>Y_xnJ4M3Ie;XspD`#{)1p91JX&Id98;79<&0DjQ=K!BHo zKl!{UO#s*Vz_i@*v7e?vISn}A*B<};50^RH-jN`)dbIx^b0O#ibEDot~_G7yIivgBj34cAnn&J3ks9gGd!MZObU!d}QLD3TZ Y1(A#3{Jpcdz07*qoM6N<$g6Hs|Hvj+t diff --git a/tgstation.dme b/tgstation.dme index 84d74db295..5d0ca735bc 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -3291,7 +3291,6 @@ #include "modular_citadel\code\modules\client\verbs\who.dm" #include "modular_citadel\code\modules\clothing\neck.dm" #include "modular_citadel\code\modules\clothing\trek.dm" -#include "modular_citadel\code\modules\clothing\suits\polychromic_cloaks.dm" #include "modular_citadel\code\modules\clothing\suits\suits.dm" #include "modular_citadel\code\modules\custom_loadout\custom_items.dm" #include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm" From 42ff9b1d35a46914a156c740a70b4875b9a56966 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 14 Apr 2020 01:23:26 +0200 Subject: [PATCH 7/8] Final test, fixes and parent calls. --- code/datums/elements/polychromic.dm | 61 +++++++++--------- code/game/objects/items/holy_weapons.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/tools/screwdriver.dm | 2 +- .../clockcult/clock_items/clockwork_slab.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 2 +- code/modules/clothing/glasses/_glasses.dm | 2 +- code/modules/clothing/gloves/_gloves.dm | 2 +- code/modules/clothing/head/_head.dm | 2 +- code/modules/clothing/head/misc_special.dm | 2 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/neck/_neck.dm | 2 +- code/modules/clothing/shoes/_shoes.dm | 2 +- code/modules/food_and_drinks/pizzabox.dm | 2 +- icons/obj/clothing/cloaks.dmi | Bin 2114 -> 2616 bytes icons/obj/clothing/neck.dmi | Bin 3253 -> 2759 bytes 16 files changed, 42 insertions(+), 45 deletions(-) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index f664ed9063..bce5a765fe 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -9,11 +9,10 @@ var/overlays_states //A list or a number of states. In the latter case, the atom icon_state/item_state will be used followed by a number. var/list/colors_by_atom = list() //list of color strings or mutable appearances, depending on the above variable. var/icon_file + var/worn_file //used in place of items' held or mob overlay icons if present. var/list/overlays_names //wrap numbers into text strings please. var/list/actions_by_atom = list() - var/list/already_updates_onmob = list() var/poly_flags - var/worn_file //used in place of items' held or mob overlay icons if present. var/static/list/suits_with_helmet_typecache = typecacheof(list(/obj/item/clothing/suit/hooded, /obj/item/clothing/suit/space/hardsuit)) var/list/helmet_by_suit //because poly winter coats exist. var/list/suit_by_helmet //Idem. @@ -58,11 +57,8 @@ if(_flags & POLYCHROMIC_ACTION) RegisterSignal(A, COMSIG_ITEM_EQUIPPED, .proc/grant_user_action) RegisterSignal(A, COMSIG_ITEM_DROPPED, .proc/remove_user_action) - if(!(_flags & POLYCHROMIC_NO_HELD) && !(_flags & POLYCHROMIC_NO_WORN)) - if(!SSdcs.GetElement(/datum/element/update_icon_updates_onmob)) - A.AddElement(/datum/element/update_icon_updates_onmob) - else - LAZYSET(already_updates_onmob, A, TRUE) + if(!(_flags & POLYCHROMIC_NO_WORN) || !(_flags & POLYCHROMIC_NO_HELD)) + A.AddElement(/datum/element/update_icon_updates_onmob) RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) if(suits_with_helmet_typecache[A.type]) RegisterSignal(A, COMSIG_SUIT_MADE_HELMET, .proc/register_helmet) @@ -83,19 +79,16 @@ qdel(P) UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_WORN_OVERLAYS, COMSIG_SUIT_MADE_HELMET)) if(isitem(A)) - if(!(poly_flags & POLYCHROMIC_NO_HELD) && !(poly_flags & POLYCHROMIC_NO_WORN)) - if(!already_updates_onmob[A]) - A.RemoveElement(/datum/element/update_icon_updates_onmob) - else - LAZYREMOVE(already_updates_onmob, A) - var/obj/item/clothing/head/H = helmet_by_suit[A] - if(H) - UnregisterSignal(H, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_WORN_OVERLAYS, COMSIG_PARENT_QDELETING)) - LAZYREMOVE(helmet_by_suit, A) - LAZYREMOVE(suit_by_helmet, H) - colors_by_atom -= H - if(!QDELETED(H)) - H.update_icon() //removing the overlays + var/obj/item/clothing/head/H = helmet_by_suit[A] + if(H) + UnregisterSignal(H, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_WORN_OVERLAYS, COMSIG_PARENT_QDELETING)) + LAZYREMOVE(helmet_by_suit, A) + LAZYREMOVE(suit_by_helmet, H) + colors_by_atom -= H + if(!QDELETED(H)) + H.update_icon() //removing the overlays + if(!(poly_flags & POLYCHROMIC_NO_WORN) || !(poly_flags & POLYCHROMIC_NO_HELD)) + A.RemoveElement(/datum/element/update_icon_updates_onmob) if(!QDELETED(A) && ismob(A.loc)) var/mob/M = A.loc if(!(poly_flags & POLYCHROMIC_NO_HELD) && M.is_holding(A)) @@ -124,26 +117,29 @@ for(var/i in 1 to overlays_states) overlays += mutable_appearance(f_icon, "[used_state]-[i]", color = L[i]) else - for(var/I in 1 to length(overlays_states)) - var/mutable_appearance/M = L[I] - overlays += mutable_appearance(f_icon, overlays_states[I], color = M.color) + for(var/i in 1 to length(overlays_states)) + var/mutable_appearance/M = L[i] + overlays += mutable_appearance(f_icon, overlays_states[i], color = M.color) /datum/element/polychromic/proc/set_color(atom/source, mob/user) var/choice = input(user,"Polychromic options", "Recolor [source]") as null|anything in overlays_names if(!choice || QDELETED(source) || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) return - var/ncolor = input(user, "Polychromic options", "Choose [choice] Color") as color|null - if(!ncolor || QDELETED(source) || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) - return + var/index = overlays_names.Find(choice) var/list/L = colors_by_atom[source] if(!L) // Ummmmmh. return - var/K = L[overlays_names.Find(choice)] - if(istext(K)) - K = sanitize_hexcolor(ncolor, 6, TRUE, K) + var/mutable_appearance/M = L[index] + var/old_color = istype(M) ? M.color : M + var/ncolor = input(user, "Polychromic options", "Choose [choice] Color", old_color) as color|null + if(!ncolor || QDELETED(source) || !colors_by_atom[source] || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) + return + ncolor = sanitize_hexcolor(ncolor, 6, TRUE, old_color) + if(istype(M)) + M.color = ncolor else - var/mutable_appearance/M = K - M.color = sanitize_hexcolor(ncolor, 6, TRUE, M.color) + L[index] = ncolor + source.update_icon() return TRUE @@ -153,6 +149,7 @@ var/datum/action/polychromic/P = actions_by_atom[source] if(!P) P = new (source) + P.name = "Modify [source]'\s Colors" actions_by_atom[source] = P P.check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) @@ -187,4 +184,4 @@ background_icon_state = "bg_polychromic" use_target_appearance = TRUE button_icon_state = null - target_appearance_matrix = list(0.75,0,0,0,0.75,0) + target_appearance_matrix = list(0.8,0,0,0,0.8,0) diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 845d14ccff..ac60a322d8 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -304,7 +304,7 @@ var/shield_icon = "shield-red" /obj/item/nullrod/staff/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(isinhands) . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 5210f00e99..6ff5dfc8ad 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -377,7 +377,7 @@ add_overlay(filling) /obj/item/reagent_containers/chemtank/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) //apply chemcolor and level - . = list() + . = ..() //inhands + reagent_filling if(!isinhands && reagents.total_volume) var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpackmob-10") diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 24fe73ba12..e9f517a9f1 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -54,7 +54,7 @@ . += base_overlay /obj/item/screwdriver/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(isinhands && random_color) var/mutable_appearance/M = mutable_appearance(icon_file, "screwdriver_head") M.appearance_flags = RESET_COLOR diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index e6045b2548..5837ac302d 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -122,7 +122,7 @@ addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later /obj/item/clockwork/slab/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(isinhands && item_state && inhand_overlay) var/mutable_appearance/M = mutable_appearance(icon_file, "slab_[inhand_overlay]") . += M diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index ea6bfa9b92..b05aa7f769 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -452,7 +452,7 @@ return BLOCK_NONE /obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands && current_charges) . += mutable_appearance('icons/effects/cult_effects.dmi', "shield-cult", MOB_LAYER + 0.01) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 362e4a5605..8cbc416b2e 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -347,7 +347,7 @@ colored_before = TRUE /obj/item/clothing/glasses/sunglasses/blindfold/white/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands && ishuman(loc) && !colored_before) var/mob/living/carbon/human/H = loc var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/eyes.dmi', "blindfoldwhite") diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 21ebeaa2bb..ddf5e4b584 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -27,7 +27,7 @@ return OXYLOSS /obj/item/clothing/gloves/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 121217c128..475e7a4e51 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -49,7 +49,7 @@ /obj/item/clothing/head/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 4ef2970a24..9c96223a6f 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -205,7 +205,7 @@ icon_state = S.icon_state /obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands) var/datum/sprite_accessory/S = GLOB.hair_styles_list[hair_style] if(!S) diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index ac087fd9e2..7df38661e5 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -29,7 +29,7 @@ /obj/item/clothing/mask/proc/handle_speech() /obj/item/clothing/mask/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 33666d2b00..402ea37f21 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -7,7 +7,7 @@ equip_delay_other = 40 /obj/item/clothing/neck/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index cc5e88c5d6..802dd7265e 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -50,7 +50,7 @@ last_blood_DNA = blood_dna[blood_dna.len] /obj/item/clothing/shoes/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() if(!isinhands) var/bloody = FALSE if(blood_DNA) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 3505a35487..94c8d7219c 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -87,7 +87,7 @@ add_overlay(tag_overlay) /obj/item/pizzabox/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) - . = list() + . = ..() var/current_offset = 2 if(isinhands) for(var/V in boxes) //add EXTRA BOX per box diff --git a/icons/obj/clothing/cloaks.dmi b/icons/obj/clothing/cloaks.dmi index dd1ae7d727541359971f603e226d63c94065b7f0..6f4de62cc06828e238bc3a9eba60c77316a9dac9 100644 GIT binary patch delta 2329 zcmV+!3Fh{~5V#aUiBL{Q4GJ0x0000DNk~Le0001h0001B2m=5B0OF*IdjJ3e8Bk1A zMZmzoKPCY{CILbx0bK!go0%1K?dpR=`2fKPE7%kfEWfsLIFWR0g;#?0|2tjk+~!Z zK|umSLIO@r0+HPzN>^3_S5^T`ObJ(31XorAKqdlGF9B{u4sb#TcSQwFOafR}16EZA zR#gg4O$2d73uQV2VmJXaQe;+D1aCwQbVLYaI00B!1Xfj(Aptsn0XIYeI!KKG8vrds z|Ns91DKh~@RRJk90XIb`C@3*8F?tmhumAu6M`i$EhMJn1si~=~tgP6I0|7-=9UUEv zjEn(edjVs7MMXu+%gX^#WdT%aJ3BkXv^BcAy0^Et0aR!JPjLWLcmYON0d9!_Uv^DR zO#-AK0cwN+Mp)S|+1b|C*3{J0+}zya;^NNE&H*?^0Xav&z`%FZ$9ez&00DGTPE!Ct z=GbNc005ekEdqOgiF9H?eokd_Dv`=`4T)7~M65z%Tnd#HT>V_Y(G379wU0_PkC&4G z00$>YL_t(&f$f)zR~tnX#urFPg_V#5X+mo&MB17J5G>SfRYEmwEr^yDi=y@Ys*n19 z)JL<)8cAT2P)cND2qYv>Nm2VBdhag9G;^0Dw6*HlZ#O%C6DH?;zrAzs48w7T3>h+1 zrmE`d>YD0m-Eos9-EnhmE#A807EOA?JMO8etLOQ;x_fJM>>C=aR%=6p4uaX-*l4ra z8XL_tg2iIDJDMDJyAHyR`U1f+mO0*I_4r01ozcb#-<3^&L6{ZSSK5fJtMp z(v@KD0Re-@+t}Dh0)Tud?63gUb$o9xGJtz;@4mXq5SSXAR;N?-c0#YAlEB>K^0-{U zfR*5}HC7T>><+=a(=7Xpj~Jn(@K5CCU| z<74MudG)o|$9%#WVhVO1hB+7?27uu=-h7MiWB{zHbE|4kOaUk`0swEr1HUi;$9%#$ zVN7^OaFaPur2_cDfBfC|&Y$NicO*>0G5{h8yg{6|0j z9zpa6T6YcA-KUD@(>zoH~NhK{EIIK2m6nH_4PLw_$n6Q z<_NF=+WVWe7*GJCWf33%F5*_acQ4O>*Vmu=ww?kg7Xk2{=P!LvM!1OzM+3;=F!+bVG7X?i zC)628BozuEm`bO?9mA0Rg&+vcWisF%0)|Y6APCRPavTuC@RaA-Jdl)Zc6xd?Ih&kb zSfB`kVp=1Jq!-f@1VA){1Xs|1KNBSYc zbSVH(28A600Hx*tT?vqZ31rA-vBLsD0W3zA&|8EUM3@jj=rdRWQLKbaj41?|fxIlM z-ZJ!k@CT_y08@~jVE{1l8MO-34g()$N zawQ1Gz#nh4pIasX=1OVo+Eqq^>TebODx^ zmp22L&*u?=1Xz=@tIFDc+Hb$FW+egurU3j`P!NJN0gwTI6#xk69FXIAR9x1}0YzGc zOCfVW1c0ll6h@#30L)^110bXaFrUlg5-^X8K|aS;0p!3M0F+9SQlfGI2*5v;S}CT0 zV1``?U=BiabFdP^W0@$!a5#@EQCwSx*o6R+0N!1@N<c*x;+o-G130!h5JhT0DQfd7R=QM^7eF(F3?z#-(x* zlQj&Q=BIceRD{`!)f%8#Ayi zfSb5TTod6=wt)JgHIJ;3lkt*8T z4FG8f*6>j{5@5Z&=qkGn0ILdD!tB4c#=-fW`iZ30*&T~?z#6x4e&7HcLso41AtPAQ%ZLw2OtUH-LlJ25!e<0tc189tBsDu9gV=P$~gZU`mgFwJY=ccz>W{%00000NkvXXu0mjf)e-J; delta 1843 zcmV-32h8}m6v7ZbiBL{Q4GJ0x0000DNk~Le0001B0001B2m=5B0M$l^3IG5B?@&xs zMZmzoKPCY{CILbx0bK!go0%1FMb#OI>Y11!6b?S26)sG67>b0&YPCB0*ClLR68nA(7W4lLP@FBS0nsQZE5+ zL=JF52X{pUaYPGcIs#%i0W(r$Z$u4rL|WT0!~c=0d9!_Uv^DRO;=U|S5^T`ObJ(31XorA z0;C`TQ)+|(Mp#Wu0$5iAR#gU8RSHf`1Xfi9SXTsARRIAwMgciTz`(!&Ekk-06|evR z07qs3V1~rBH2_a>091Hv>+oe+DmYv*RMY&KwVWo~Kzmp}ue8ka6DZr{x#dFX_qQInVR`cMNdkYL4}x%o;7t(R!?75;e|y3Ko~H<-V^JU+3qCm# zKOP+;0A_+hroWGcv!%zubs)n zle5#)$(dyQ^*6W^G$0a**Z{%^$fjfPgAj-m9XbU$f0~^Ez|5O(z0HlXDKecSrah4& zP&x~McVNJO_5=D%Knnb4-+k}=d2auSheh54Ad1ZM$cUjkRb(K{WKy%K=~U|d4=!+{ z48Rq_5BFI^h}{Tg09kO)S|P9iE}2QCGSjK44?nuV1h9KlyX=l^_s4)pXU`3%!Jazp zKH)z7f9&&2COP%RmtS4r`dGl-5wHO3``uOy1Yi!2>Z348zslI?mPCFE__MN9Vfg@RO+3I!X4 z@LfJ%DwXoW_wzRP<#MG`DVJ>!IcZ^0LM<*xe-uF|T`pO=yd+Tml`CQeC0?nJgj}^) zSVR@1DhZHFmk|NO4^#+Ztx`sUSgzD4K(1P^7mEwhf>c~yCJ1@C(ExW0qwym_5NpjQ zxQoDOHYq}`P&Wxhsa{_$5CEZJ5lW4f#ykNiH<54!{hMVH0IH*KLICoDkZ+&_m{I^x ze-nih7LY4QiX@?Tp$IdE01dQKT19UGVkj{oKx&%UL1pZuW`%8}9ArkRn_aZ5)ay(i zfj`J>B1lnVi2-0{nr0W76AGYI0a3rIT)VDNfJUp049Jn(A_1LR(^9QN0&Y~5wW^{h zKiyQWuM>clyaI@g6?wDKZvDJ}Cx{jBf5!*yYaI%3Q@OT&>z7}D`+dEx++YAgsnv!U zS{p5Sb49iVbUGbdz}32POIcU`P^xqd8sNWyf)E-6pb7pa00=fU_!9tYe<{^9q6Pv0 zHf0$jXaj&bEbahAI{+2|zTNs;W7`x6;4jM?Z5aql>_&hbiM1N+WEeU`n*uWO^NS$^$X>Csg1i*}-4H>!zz`PD@0kD(dv0fAawYs_r z;}QkHb57hHS-_p^%=S|I8}2ee5N^-U&kMJSb#bqV^`3g_siy}Y!>}1JVN&-RO3m0HDkoIMYdx zAw$zlZw+SmKSz+Eu9+dsQMao(0nn^2MT{c=t*aZlu>(IHSPlVp32JUYf2m3;q&U3fD!GzrVT`|yppq~bh_LjcmXU#7h&J@|w)Dm}qNdi+byhv0BqO8N z5k_uJl<~-fJybOTbbnR65Aj#Qa1ojBfo<^KkX$Zu!9}pEXO#!T4oEnEq6Irl{aSF# z(7^l}Bl|r+(}zp(`E4%&*#&l)Yu$DL00>@5e?&o4c%1Fn30E3P5CC8@ zXW2r51kO#(&9Q|76FfFE7NrU$F21`6A%ThMM1n6A|Fe-vKP*EoiGk7ZQ~;JClf>Xm zGzz+z$e2SI>$aBdeC9KImxFof@U zr|-p!{)M3g&MkX?zkhaCTfl+2IdbgL_$-*f(P}hf8{~_ z623?z5{<&@6UJ`f@3EJE^avTC;6eTBd29j|k4_-AKB!)q#a`f_FJtXVj&VN4V~f`h z+Xo7{;tjy|fkMtVGlofwI(#5ZF23maF_v5+d9Zz;kS*R3Xn)wEX<#56hW3XongK!v z#WXvYpwE{~cKx{gitvq(L;J%Pe@z47{Gx=MZ&V4%?uWpLoMlnO4x!B15=6(3UA_q= zWPE}*@{HSp1A-SGWwzj;%pY!WxCouVWs$9Y%i;x1MORhwCvz+W1RSD!9f1qFT`2Ht( z>IG z3dkK@Y#@fnAbEzdg}CyTl1YaTPcANhCEZ5|rS2C%xU}S$-X|3>%}?6rg%@6UG2}=Y z#>$FjJZ+k*s}H7e2J+U{e~eU$8Asmwx|vQtsHz>3XJj%NS}1vDHk*AMp&@v0-sEyL z&=kD4Z#Om`3n+LPw9phh3|_b?g1?8`_?8G}FlA(N5@;9(F`hQF8xm-mCUgJocsw7^ zbArOV#l@Y)oxn02&tuQrdW5}a3?$5cr&>q))ct}D}AaiYZK%?US-$dnr|(&l0p;!e}xXn9pmf1_4H~QQ2-P=AnR{- zzwr@XYnVrz>;jUklY<#R30S`$qyc%71D{5@kJpY1!o6`v*S^5UU=~zh?-@coIEx{6UaL~wQ9A; zhA<&{e^$L-f0{x|@Vh|#`s`fZ5~}EKoh|UfhK|$o-^+|e27CNe=W35L8uxH2}GZ`GD7r;D=l;d-ZW+I z?5hK40Z!LwS}q>g^QIfvUU+9DuxV%RrqU#ap+JDxYBUXJqrvspd36FM%)a)-MN4?r zxg6U8>#r%HdHdHe0#E$2gF`#VECXL%4!LA+^_KCEF0w2w5@uOX2A{C>iv12&lg!5YRQ zw(2#z(=gld?cID_2XqZ^DdLHJq#4e6fuCP}$f*UQr5fRIfM)}r6>9Z*qapf?D3&3e z38BB7UkoNZshz+%x>2`8F2OpKQ}wz1fA#Zm>N~BS)DQ(gp#$=L`>jBEK^g?%z0M>NB_=YxHWyZR7!%{-iH3AH}WfAc~2 zaaUhEL-Z%u4_%mtFD}mqUB}&{{d|uGkZ-#HJ#T()+%?3*GYtCqUJJ$!>Yop~j`tz- zZ3`Yxfa%e!LVP|b{|z?YFHu(_vWnPodHaFK`$g&oT|WKVz3{>dFTC)=3org_ a@h{p-KOfl+_P_uD002ovPDHLk0$_sZ4~8@V delta 2957 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 z Date: Tue, 14 Apr 2020 01:55:01 +0200 Subject: [PATCH 8/8] I knew using lazy helpers wouldn't have helped much. --- code/datums/elements/polychromic.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index bce5a765fe..1c438c86c5 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -14,8 +14,8 @@ var/list/actions_by_atom = list() var/poly_flags var/static/list/suits_with_helmet_typecache = typecacheof(list(/obj/item/clothing/suit/hooded, /obj/item/clothing/suit/space/hardsuit)) - var/list/helmet_by_suit //because poly winter coats exist. - var/list/suit_by_helmet //Idem. + var/list/helmet_by_suit = list() //because poly winter coats exist. + var/list/suit_by_helmet = list() //Idem. /datum/element/polychromic/Attach(datum/target, list/colors, states, _flags = POLYCHROMIC_ACTION|POLYCHROMIC_NO_HELD, _icon, _worn, list/names = list("Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary")) . = ..() @@ -82,8 +82,8 @@ var/obj/item/clothing/head/H = helmet_by_suit[A] if(H) UnregisterSignal(H, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ITEM_WORN_OVERLAYS, COMSIG_PARENT_QDELETING)) - LAZYREMOVE(helmet_by_suit, A) - LAZYREMOVE(suit_by_helmet, H) + helmet_by_suit -= A + suit_by_helmet -= H colors_by_atom -= H if(!QDELETED(H)) H.update_icon() //removing the overlays @@ -166,8 +166,8 @@ examine_list += "Alt-click to recolor it." /datum/element/polychromic/proc/register_helmet(atom/source, obj/item/clothing/head/H) - LAZYSET(suit_by_helmet, H, source) - LAZYSET(helmet_by_suit, source, H) + suit_by_helmet[H] = source + helmet_by_suit[source] = H colors_by_atom[H] = colors_by_atom[source] RegisterSignal(H, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlays) RegisterSignal(H, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) @@ -175,8 +175,8 @@ /datum/element/polychromic/proc/unregister_helmet(atom/source) var/obj/item/clothing/suit/S = suit_by_helmet[source] - LAZYREMOVE(suit_by_helmet, source) - LAZYREMOVE(helmet_by_suit, S) + suit_by_helmet -= source + helmet_by_suit -= S colors_by_atom -= source /datum/action/polychromic