From 7dedc58faf254a7c7b29b74f4af5acd34ee6635e Mon Sep 17 00:00:00 2001 From: Sparky Date: Fri, 31 May 2024 21:13:34 +0100 Subject: [PATCH] Various Clip-On Radio Fixes (#19224) Fixes Clip-On Radios layering under head items when on ear slots. Also fixed the flipped sprites being one pixel closer to the centre, due to asymmetry. --- code/__DEFINES/icon_layering.dm | 87 +++++++++--------- .../mob/living/carbon/human/update_icons.dm | 23 ++++- html/changelogs/clipon_layer_fix.yml | 7 ++ icons/obj/item/tools/radio/clip.dmi | Bin 3708 -> 3715 bytes 4 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 html/changelogs/clipon_layer_fix.yml diff --git a/code/__DEFINES/icon_layering.dm b/code/__DEFINES/icon_layering.dm index e8cc6e5bce5..31b3a96db5c 100644 --- a/code/__DEFINES/icon_layering.dm +++ b/code/__DEFINES/icon_layering.dm @@ -1,45 +1,46 @@ // Human Overlays Indexes // // Layer 1 intentionally left empty. -#define FIRE_LAYER_LOWER 2 -#define MUTATIONS_LAYER 3 -#define SURGERY_LAYER 4 -#define UNDERWEAR_LAYER 5 -#define TAIL_SOUTH_LAYER 6 -#define TAIL_SOUTH_ACC_LAYER 7 -#define SHOES_LAYER_ALT 8 -#define WRISTS_LAYER_UNDER 9 -#define UNIFORM_LAYER 10 -#define MOB_DAMAGE_LAYER 11 -#define ID_LAYER 12 -#define BANDAGE_LAYER 13 -#define SHOES_LAYER 14 -#define GLOVES_LAYER 15 -#define BELT_LAYER 16 -#define WRISTS_LAYER_UNIFORM 17 -#define SUIT_LAYER 18 -#define ID_LAYER_ALT 19 -#define TAIL_NORTH_LAYER 20 -#define TAIL_NORTH_ACC_LAYER 21 -#define HAIR_LAYER_ALT 22 -#define HAIR_LAYER_ALT_EMISSIVE 23 -#define GLASSES_LAYER 24 -#define BELT_LAYER_ALT 25 -#define SUIT_STORE_LAYER 26 -#define BACK_LAYER 27 -#define HAIR_LAYER 28 -#define HAIR_LAYER_EMISSIVE 29 -#define GLASSES_LAYER_ALT 30 -#define L_EAR_LAYER 31 -#define R_EAR_LAYER 32 -#define FACEMASK_LAYER 33 -#define HEAD_LAYER 34 -#define GLASSES_LAYER_OVER 35 -#define COLLAR_LAYER 36 -#define WRISTS_LAYER_OVER 37 -#define HANDCUFF_LAYER 38 -#define LEGCUFF_LAYER 39 -#define L_HAND_LAYER 40 -#define R_HAND_LAYER 41 -#define FIRE_LAYER_UPPER 42 -#define TOTAL_LAYERS 42 -//////////////////////////// +#define FIRE_LAYER_LOWER 2 +#define MUTATIONS_LAYER 3 +#define SURGERY_LAYER 4 +#define UNDERWEAR_LAYER 5 +#define TAIL_SOUTH_LAYER 6 +#define TAIL_SOUTH_ACC_LAYER 7 +#define SHOES_LAYER_ALT 8 +#define WRISTS_LAYER_UNDER 9 +#define UNIFORM_LAYER 10 +#define MOB_DAMAGE_LAYER 11 +#define ID_LAYER 12 +#define BANDAGE_LAYER 13 +#define SHOES_LAYER 14 +#define GLOVES_LAYER 15 +#define BELT_LAYER 16 +#define WRISTS_LAYER_UNIFORM 17 +#define SUIT_LAYER 18 +#define ID_LAYER_ALT 19 +#define TAIL_NORTH_LAYER 20 +#define TAIL_NORTH_ACC_LAYER 21 +#define HAIR_LAYER_ALT 22 +#define HAIR_LAYER_ALT_EMISSIVE 23 +#define GLASSES_LAYER 24 +#define BELT_LAYER_ALT 25 +#define SUIT_STORE_LAYER 26 +#define BACK_LAYER 27 +#define HAIR_LAYER 28 +#define HAIR_LAYER_EMISSIVE 29 +#define GLASSES_LAYER_ALT 30 +#define L_EAR_LAYER 31 +#define R_EAR_LAYER 32 +#define FACEMASK_LAYER 33 +#define HEAD_LAYER 34 +#define L_EAR_LAYER_ALT 35 +#define R_EAR_LAYER_ALT 36 +#define GLASSES_LAYER_OVER 37 +#define COLLAR_LAYER 38 +#define WRISTS_LAYER_OVER 39 +#define HANDCUFF_LAYER 40 +#define LEGCUFF_LAYER 41 +#define L_HAND_LAYER 42 +#define R_HAND_LAYER 43 +#define FIRE_LAYER_UPPER 44 +#define TOTAL_LAYERS 44 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index d1f04897da7..1394dd205ec 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -790,9 +790,18 @@ There are several things that need to be remembered: else if(l_ear.item_icons && (slot_l_ear_str in l_ear.item_icons)) mob_icon = l_ear.item_icons[slot_l_ear_str] - overlays_raw[L_EAR_LAYER] = l_ear.get_mob_overlay(src, mob_icon, mob_state, slot_l_ear_str) + var/layer = L_EAR_LAYER + var/layer_alt = L_EAR_LAYER_ALT + var/obj/item/device/radio/headset/wrist/W = l_ear + if(istype(W) && W.mob_wear_layer == WRISTS_LAYER_OVER) + layer = L_EAR_LAYER_ALT + layer_alt = L_EAR_LAYER + + overlays_raw[layer] = l_ear.get_mob_overlay(src, mob_icon, mob_state, slot_l_ear_str) + overlays_raw[layer_alt] = null else overlays_raw[L_EAR_LAYER] = null + overlays_raw[L_EAR_LAYER_ALT] = null if(update_icons) update_icon() @@ -822,10 +831,18 @@ There are several things that need to be remembered: else if(r_ear.item_icons && (slot_r_ear_str in r_ear.item_icons)) mob_icon = r_ear.item_icons[slot_r_ear_str] - overlays_raw[R_EAR_LAYER] = r_ear.get_mob_overlay(src, mob_icon, mob_state, slot_r_ear_str) + var/layer = R_EAR_LAYER + var/layer_alt = R_EAR_LAYER_ALT + var/obj/item/device/radio/headset/wrist/W = r_ear + if(istype(W) && W.mob_wear_layer == WRISTS_LAYER_OVER) + layer = R_EAR_LAYER_ALT + layer_alt = R_EAR_LAYER + + overlays_raw[layer] = r_ear.get_mob_overlay(src, mob_icon, mob_state, slot_r_ear_str) + overlays_raw[layer_alt] = null else overlays_raw[R_EAR_LAYER] = null - + overlays_raw[R_EAR_LAYER_ALT] = null if(update_icons) update_icon() diff --git a/html/changelogs/clipon_layer_fix.yml b/html/changelogs/clipon_layer_fix.yml new file mode 100644 index 00000000000..49fc4d5baa8 --- /dev/null +++ b/html/changelogs/clipon_layer_fix.yml @@ -0,0 +1,7 @@ +author: Sparky_hotdog + +delete-after: True + +changes: + - bugfix: "Fixed clip-on radios layering underneath head items when equipped to ear slots." + - bugfix: "Fixed clip-on radios being one pixel closer to the centre when flipped." diff --git a/icons/obj/item/tools/radio/clip.dmi b/icons/obj/item/tools/radio/clip.dmi index b0ee36352f07ae2b0fcd8615bfc473edc78ffeed..ba73eb5d0a6ac7f4ec004808c4a2bb3a1ad8ab4e 100644 GIT binary patch delta 3006 zcmaKsdsI_b7KaH4Ov})$sZ&!+CAzAm6${i>LV4Y>iV9TliHJyoE{j9tRS*KwdwEnD z#SXR<0ePfL-XJ6uAprtOj7T*=7E+K`9w;Ot1VU~ITym4l<>gFut-1f4bN0Ds?|t_E zoe%vmeG^k;3emmy?mk8J>^VW;ao>Y0~fE^2OKvN`Z<$eepny~?7CsC5t4SW;}=vf%SK zlG3v*tB~%^yQG`$P}@icy5_NE_U>@diB<`p&uZHUx!cTLC=T}7R2ich$w6tMQdMUK7Zm(Jsk1LS$j+shCS=m-J0PuE@L3;Gd zCW;pvkDF0Um~-g#Z3Gnv76433kU603v{@B`R!VMulmFQzz%C$D~5 zx`CM}p&qdcaF)7VsJnD999K}Vv@LI3-s+(q!Lt#nqX#tTE6SM9EyT|_ens>&jwLT7 ztE~p^5e`R&Y=@9dm8W^!i#x4cI2<+jU=0Wj0tri$d7V)DUGRQUG zJh^Xa;+Ajzp@jUMCx?ru;u{_foIw3!I&PgL*BtX~WE6-D}2==~8BD6Qa-< z4%*}uKt40ri6%sMP{IXqrv}ZZAbFGdg>wXE&S~cD#FmuWDbvQgRs)Y6DE6-wt=tjQ z_!&o5idaEE#hZo)W#&^{3*ew5#kgz1r8PzWRF4IjiKvsDnypV5km-5Z0&e^I0 zM1qSXitau4OJ=r2MHDYP8?|P)6mUnc$(7bLS{@fC>Q<9vNTR`l!~R|BH0++`9FkIH zAI&j2dO}9SmDlk`O?^W`+u@c8!j`L1{O63Xk4V!x$d^mo%(J*Y2fi1MOeeArilG6z_rb3gRM3xyrSMCu!+hi=~aC=dIl%P!TC# z$AFK@4U-(<2)QOtdd}$FA7}ZoHmccdy^bW_@<_o_!Ze0kzI0vN#MXI+nCJJMame~* zZ4~&_dz##mS~O;8uo=Lnx^-^(*w3+$$=YXoGY@3HKpCE%dSFLVMuWot_TuPmxIi6H zTt4>05WGKBAKimUgFP<=(X=JPG{Vzj;O)tb%x?1T=)=YYC6ZkUvQ?;BcGoOiWVz;b zZQSt3ApZR#qF6*I0uoVLt@2ohZ^hGFQpmjH?RjiL8?i$To}KV-bLC zUIaPlQ9n9?!`7m+*OPQOVdm)LMV!5eEFS)y&TZ1Cj00(pBX10a!Y8!OYK@ucTI#DK zukqSMM&`7l#siwo18V3_)kKG8Izx*djsrpivHJjICGvbDU;jf4CJTLXgMu*~F(xuz zBl0IZMH+$EJlt2zz03NkBAfo!M(DWQ|F&*av%WtcxHg^9>mT?}!zax|KOnRW$$kO4 z=zqwOo4uBSiPg&~tZ`Y>ip*~Ml(M#==wj+)`GaKIY0a|%^l&Vjw*QwR?jQI-s^RT4;Ua`fhwa8mF_I_5`fym7E{tTpNPayY zrT?KuaC~SqEfyE%aFX^cj&^&Fpoc)8p|1NG$07`P67ib0 z;$r+!^-JrC3~Kj=nSb4da~E;cF6>>5!qOWcTTO@7CHg|0HC>K)ht}P=*8-<(>{)tQ znH}ybkf&N{drwCeHKM|m?AkiCssp5Am?-r3Zt=){rIqB@wbGGQhw!;d)_?CUw|D{z`1JTJ9Xr?>5LUFUmco62qVa}}o z7Nk+f#sE?bg!>g))k}<7k?OJGHPGQ-CAUV|&LNDkJ~~_pET9|9HG;l1wUrX5p9#7! z-;p<$qysb~hfp+Xg-v~0vweyVz=+AKrV+~p+EWa?^1M1xmAwg^%Kle!f@ZJ#v#3f% z%V`Xs&cHHjE=GL>8OpV04;B081zrlqRK!@s1weLX?2RsxudQ(4eSL~BEGibDU^JG1 zykY-#eKO13vCaeIma-2^z79)Xpf1rN;VYbB5Dyt{N%s|l&_7;JcpzX^8vj+sGBPkc z*!^`f!>u{#)QBkI_>vYozL1a^a|qdSSraQ@X=eQd812Dzj4yy*JYgAwk0n^3H{vXm zq+#4Sv_2poxVj9UuqE&~>@dDq{2uGxMSdn#MD$vg%$KW@dGbGGNcju~l>9>zP4!H- Pr7L)Q`R%Rynv(V(4tf+G delta 2999 zcmaJ?3se(V8aAXrOP0pgVz#2q>DHB9E00z*k%y^mt;3Q1|Ik!QjyK|&IA2+5F1(n%nDJnio0oSXljd++(a z|NiscZ_aN)HeZ#xfE8hH?mJ4a(T*o&ZaA>fEzT|ZLT38=xxH@Hr}aCYc;6+t#AXxH z62^W$eq=s%yYK96o%&nL)nlArxR>{|9el;0>c*~Hmlt!;3;_ zFR0^7a?Z0##&Ui72eV2K4HA7i;FywXN>~PDndy?$ha%guc_70&H###k4@ihWH%KL;P0nnii(FXoe=eg zwC9OulW+Sf7jt*dY-~=kn&RlMcxT|q(SwC!E>Fu_UqmBHhNvFMVCjV3bl9f@P8*|i)gXXPaxIkhYppzjQ+CM8E%-eJ)B65o-bH~kszw_ z>PpfK*_JXPLJ(s%7J`5?hQId&FzkWaAeSP?~ndUWS5C7 z%;Q7l_mPixNvJArw>#`wBXnb{2x-<$xn;2;IB6!^icx5@dFhxl1+Fz-8`F+QiNX@Q zM^q&6fx-pdh(5m?k1o3Ba@3Oz-f4(OOecoL{E?)5m=3#*jr%In4nYsyLdbtn&?av3<8UyKXLa&5rv$SK$*rIrbw?9au;AltVZed!OI zE{(M-d%4eMC|=bshm5s>kS94+30{HMvd0sO7!j5lt1BYRBt>4O;*+=SaoVk=$}!xF*%NpiGs|0UJ!Tl5t@= z)@Rt_P5R(Q2Ryiy4^F#QhBTsQWwHkncF>pGv2c@{|VML5)b&*mR-bi&uz#dxd*C9vTGd z{~$V%PuDJE-%=kiLi^SJA&j;m+Lii|2jeO{3-qwPvdDdP^DaRUnX-pLd#K&S?7!LA z*$+TM0sWq79jj^uz6_O4HZl&h)y8Vv7j_FnJH96dkioCuKeaSk{;DC_NnMI1?oKji zJU&te@M6rEdPvN+l`V<23(0M@^E?`(9TrQ%r-#MqvO8dVJyB;GpUu*8W=&cS@8R#K067^NNWlbnD&iAf*D13W70HJb^QDu{8AX2| zvZM{c*H7tkC~ z2tjM+v^)J#=j>g9nzJ)V=boHen6%)&5CWdmU(T>@G-7w#p8T-$HHI`+#s?dJ!awN* zb;hh?htZ-bv3m3n)@GpRD!`iqx={Ezpoh1X%bxGHe3FkI)RHSub2TTAN^GAJyQ>HM z4dVSq$WSM2$U5>BalI4L8Lf>z{YS^(33Jx2SLCJRyb49E>PDKfh&& z27E`nI*KgM^Z_CzQlKj4U0wz`%?d;{(}&v;M0D2Zj8TavRwfx*_X`p{Xg%>WzP-I2 z<&-%%b8;@8!E+Az+vOl*MN-<>C0WPdODlu6$@x>GE}>+>hYXmuB=+Ro4Zf^J-lN2| z!`lAuq+syMWEHsn=r7jKjn#^pF_50`;^cG2m-pKxB4>8!EqRl$Lrndg2=5e5P*d#$ z)gdVBcdb%6n6?M)H2YRV#wb)W{3mlvUO6@(~8 zkmUp(+Cd2S9UkTstu!h;ozd|3BmfKBh0Z1KZ@V7>E_=tyS|^ zvFV2I4RGu(K`ttuRcz2YI)s-~(ORsu5b(DJD{;Sfpr29jH8TpDh750+;g%#zo&{X> zBgX|+i~u4Nf;MOl*(E6cRI7C#W9I%hZ1l#B+)Kj1vA>|y z`|0NoFINiJJA6fk3XJIIXItzoLf_Ns_iN30*2ED5JtiMrnGJJm^zefVUZ+FsC5G(} Lf3xNFxQ~AY>{1zO