From 943cf41bc017a4f09867d0566c7810d6242f3e43 Mon Sep 17 00:00:00 2001 From: Spaghetti-bit Date: Mon, 1 Jul 2024 17:04:17 -0700 Subject: [PATCH] [FIX] Fixes floating blood on non-existent hands: My damn feet and hands are bloody! (#26100) * Fixes https://github.com/ParadiseSS13/Paradise/issues/7596 * Revert "Makes our time defines use strict numbers instead of nested defines (#26069)" This reverts commit 19cbfb129aaa1e62d8175c06acd18a8938d34d61. * Comments! * Revert unintended change * Actually reverts.... missed an * * Remove S, update comment. * Adds checks for hands and feet, making sure you don't have invisible blood. * Reverts unintended changs. * Mysterious. * Die unintended change, die! * Version one, needs pixel shifting, code works. * Splits hands and feed, leaves shoes / gloves in the case something has shoes / gloves on * Left! not Right! * unintended revert * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Spaghetti-bit --------- Signed-off-by: Spaghetti-bit Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> --- code/__DEFINES/misc_defines.dm | 38 ++++++++++-------- .../living/carbon/human/human_update_icons.dm | 38 +++++++++++++----- icons/mob/human_races/masks/blood_human.dmi | Bin 7640 -> 8679 bytes icons/mob/human_races/masks/blood_monkey.dmi | Bin 1772 -> 2245 bytes paradise.dme | 4 +- 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 27c6936d320..981e32ca4b5 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -182,22 +182,26 @@ #define FOAM_REACT_BEFORE_SPREAD (1<<3) //Human Overlays Indexes///////// -#define EYES_OVERLAY_LAYER 44 -#define WING_LAYER 43 -#define WING_UNDERLIMBS_LAYER 42 -#define MUTANTRACE_LAYER 41 -#define TAIL_UNDERLIMBS_LAYER 40 //Tail split-rendering. -#define LIMBS_LAYER 39 -#define MARKINGS_LAYER 38 -#define INTORGAN_LAYER 37 -#define UNDERWEAR_LAYER 36 -#define MUTATIONS_LAYER 35 -#define H_DAMAGE_LAYER 34 -#define UNIFORM_LAYER 33 -#define ID_LAYER 32 -#define HANDS_LAYER 31 //Exists to overlay hands over jumpsuits -#define SHOES_LAYER 30 -#define GLOVES_LAYER 29 +#define EYES_OVERLAY_LAYER 47 +#define WING_LAYER 46 +#define WING_UNDERLIMBS_LAYER 45 +#define MUTANTRACE_LAYER 44 +#define TAIL_UNDERLIMBS_LAYER 43 //Tail split-rendering. +#define LIMBS_LAYER 42 +#define MARKINGS_LAYER 41 +#define INTORGAN_LAYER 40 +#define UNDERWEAR_LAYER 39 +#define MUTATIONS_LAYER 38 +#define H_DAMAGE_LAYER 37 +#define UNIFORM_LAYER 36 +#define ID_LAYER 35 +#define HANDS_LAYER 34 //Exists to overlay hands over jumpsuits +#define SHOES_LAYER 33 +#define L_FOOT_BLOOD_LAYER 33 // Blood overlay separation Left-Foot +#define R_FOOT_BLOOD_LAYER 32 // Blood overlay separation Right-Foot +#define GLOVES_LAYER 31 +#define L_HAND_BLOOD_LAYER 30 // Blood overlay separation Left-Hand +#define R_HAND_BLOOD_LAYER 29 // Blood overlay separation Right-Hand #define LEFT_EAR_LAYER 28 #define RIGHT_EAR_LAYER 27 #define BELT_LAYER 26 //Possible make this an overlay of something required to wear a belt? @@ -226,7 +230,7 @@ #define FIRE_LAYER 3 //If you're on fire #define MISC_LAYER 2 #define FROZEN_LAYER 1 -#define TOTAL_LAYERS 44 +#define TOTAL_LAYERS 47 ///Access Region Codes/// #define REGION_ALL 0 diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 0cddc0d7a2d..223db9d026e 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -658,6 +658,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) /mob/living/carbon/human/update_inv_gloves() remove_overlay(GLOVES_LAYER) + remove_overlay(L_HAND_BLOOD_LAYER) + remove_overlay(R_HAND_BLOOD_LAYER) if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_GLOVES] if(inv) @@ -677,17 +679,24 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) else standing = mutable_appearance('icons/mob/clothing/hands.dmi', "[t_state]", layer = -GLOVES_LAYER) - if(gloves.blood_DNA) + if(gloves.blood_DNA) // No need to check for hands here because we won't have gloves on. var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "bloodyhands") bloodsies.color = gloves.blood_color standing.overlays += bloodsies overlays_standing[GLOVES_LAYER] = standing else - if(blood_DNA) - var/mutable_appearance/bloodsies = mutable_appearance(dna.species.blood_mask, "bloodyhands", layer = -GLOVES_LAYER) - bloodsies.color = hand_blood_color - overlays_standing[GLOVES_LAYER] = bloodsies + if(blood_DNA) // Checks for hands to make sure we don't get mysterious floating blood. + if(get_organ("l_hand")) + var/mutable_appearance/bloodsies_left = mutable_appearance(dna.species.blood_mask, "bloodyhand_left", layer = -L_HAND_BLOOD_LAYER) + bloodsies_left.color = feet_blood_color + overlays_standing[L_HAND_BLOOD_LAYER] = bloodsies_left + if(get_organ("r_hand")) + var/mutable_appearance/bloodsies_right = mutable_appearance(dna.species.blood_mask, "bloodyhand_right", layer = -R_HAND_BLOOD_LAYER) + bloodsies_right.color = feet_blood_color + overlays_standing[R_HAND_BLOOD_LAYER] = bloodsies_right apply_overlay(GLOVES_LAYER) + apply_overlay(L_HAND_BLOOD_LAYER) + apply_overlay(R_HAND_BLOOD_LAYER) /mob/living/carbon/human/update_inv_glasses() @@ -771,6 +780,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) /mob/living/carbon/human/update_inv_shoes() remove_overlay(SHOES_LAYER) + remove_overlay(L_FOOT_BLOOD_LAYER) + remove_overlay(R_FOOT_BLOOD_LAYER) if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_SHOES] if(inv) @@ -788,7 +799,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) else standing = mutable_appearance('icons/mob/clothing/feet.dmi', "[shoes.icon_state]", layer = -SHOES_LAYER) - if(shoes.blood_DNA) + if(shoes.blood_DNA) // No need to check for feet here since you need feet to wear shoes. var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "shoeblood") bloodsies.color = shoes.blood_color standing.overlays += bloodsies @@ -796,11 +807,18 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) standing.color = shoes.color overlays_standing[SHOES_LAYER] = standing else - if(feet_blood_DNA) - var/mutable_appearance/bloodsies = mutable_appearance(dna.species.blood_mask, "shoeblood", layer = -SHOES_LAYER) - bloodsies.color = feet_blood_color - overlays_standing[SHOES_LAYER] = bloodsies + if(feet_blood_DNA) // Checks for feet to make sure we don't have mysterious floating blood. + if(get_organ("l_foot")) + var/mutable_appearance/bloodsies_left = mutable_appearance(dna.species.blood_mask, "shoeblood_left", layer = -L_FOOT_BLOOD_LAYER) + bloodsies_left.color = feet_blood_color + overlays_standing[L_FOOT_BLOOD_LAYER] = bloodsies_left + if(get_organ("r_foot")) + var/mutable_appearance/bloodsies_right = mutable_appearance(dna.species.blood_mask, "shoeblood_right", layer = -R_FOOT_BLOOD_LAYER) + bloodsies_right.color = feet_blood_color + overlays_standing[R_FOOT_BLOOD_LAYER] = bloodsies_right apply_overlay(SHOES_LAYER) + apply_overlay(L_FOOT_BLOOD_LAYER) + apply_overlay(R_FOOT_BLOOD_LAYER) /mob/living/carbon/human/update_inv_s_store() remove_overlay(SUIT_STORE_LAYER) diff --git a/icons/mob/human_races/masks/blood_human.dmi b/icons/mob/human_races/masks/blood_human.dmi index 11581736e0902643956ddc34a5be5e5b6d45e901..56482b5705131d5affe0b33cd2a20aca9921cedb 100644 GIT binary patch literal 8679 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

Lw9t_*2na+`Kv0pYQlx}l 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 b*oDk>>Cx$;Hz((ZimUV4 zZHl`U0RY(MV2^YMX(KrDpqs(@yg{HZNT{*rydsgoxWI_eYmuQ>!vP>BH?zA-@wO=p zGKyPNOC5G3vZma14k*MWZg+^Zp>2Ktwzpb%rns6ud~tNoKXx-_yO#1!>Qb$+d7IP@ zC)3o*N6l{C>hM-v3TR^O=st48)z!nj=B~P0Zh`v!htdaZe-d&oEgH*uPY)9Iq~p_F z0-6^6nV;2l?!i%Zizg?E)T1&{#5PR%nd^2pfwVh#ulLx5lK`MF=72nNE+%)D=W=N; ze^={52u&kBIs_g{YrevqzifLzy%p-wYihQI$2~-M-QK31zrXdga*KWu+Q8W{KYKq0 z_xpi~EJxFqFRO=!_F2+hS-d=w;-j~1x}Hfv+z4(=Aje6MGMn$|kWe}oK9#P=5#lm7 zpE5CDN5QoluFkb*!Xb_Qx}he378(k8*#M2ZHvj`Lpdtx~w}1ep+JOJIZ-B6`iGp{>!-7*mVoT$>?{YqM{eInPRW3sG-AMt&zS&%d|C`rQ8WJS~r)R6yWpj@N8K#BZo@$Ba_L;g&@<7Lj_j| z1cDv$Ths%3L$G?w>tepD%C4k)ntS%t?@h{It_Um02zf*~*?GrQ>3L;kWk*uL#Q25Q zGj@0x8QQoab>N7)mtq@i%0-q!Ut2fA$cjFVQf~0G5I?8_C1+e9pLH;%r}qNUIp z2HB(&I~KsLVdSL7&fPV?0KJtriXTp_;bQN)QHaKH`S#kny7ivtVceVQ{ZZaIF3A0b zN|-^b`P6{`p@hL0*J>V?cR~PIvJ(rkfwc9nV)|d;{+j5BD{y-*U3o!$iIDK@HQvhF zXS1UJTj@ey*0O9ByX#MGla?L+$VQEzQHg9~b+rbxSki0)KYrGq_}Odq1%li$Nm0C| zHQi$~EsiZPXx}xmBF}31>_+Ko9Hh0@3ggs%X$N0B{%M8ia$c}kOdchGLBZa%;je|s zpL&y(Poo~w8RZzS`+b$qfCxVJa_yEc*-7#J9e$KwypS`;37EU93zSWM7?YAd+~ zLB>Ewm0BzI#So7t#TL5b9X$GL30Ca;%XPg$-UGD-b2e7g5jT&h?y6E8mV>gU%XFPk z-jTl7jg^{xV36_ZaNdavWu7~mObJvH^DtU4$c%%}Mzx?(-p??SVOez!y%zN?Pr-0< ziC2Fehg`aS@hKkj)C)*V~1lxm|e zqZEso5buHSkVpr@k8@qW<&Z%Q^Lj2tc1%|F&PH?f_4ID~8mLhg;{0MLE9N@uXRSMG zX7LoEM7A^0dMtI%(QpEIPMFm(DN3^&ziAz|nq-|nuar#2whcLI>F5{+cVly}g@lBB zns{^HW#7r@nHx-upHsvO%%HSj>I}h5tl`g@9jwM7k#IPCgiVyovIKS6zvc?-jJ>lg z-qL@(_AJ;eUMv=01A$OM_c2u6^ry4;rPD9C~2Ig^~C&u+SO929$%2QWPZ9g*#>yEiP{EMrua@%H0~Et zTUBWlyDiHV6jLBAAPlltoG>%Y&=%95dxLF#t$sji%IsJ0$v z@NbDQ8>uc#mbcX`-^ZA(n-KFHEK$AYdQJ93+ETNKDd7KsuCeFaLzrpAlg5r)M0wZO66XLS&wh^{W`hw4Vgpg z;+is{`Qry_oEJUxLK|PiFU%-PglQsT2A^WPElIGC-a0zXrm|HqDGf7G92J%KOsR*v z!2XjAF|($B=o23?zx=y6wt?NyAf1*;->*PHEBh~lR%$HCilN$8;AZflGoM;gVhro? ztLM$-AeY>q^snQ5a4Ti`envaw1%mZpZq!H(j^F)rNr}nzdfw3=$~+GiU22Jw%SS{m zsCOJq{zf2dRa^bvd&pR>zkUDX?~2?XrVIa%{_+J(Uv?$i-KU2nY$>6PX+s62CE z4LZ`&rff7VT}W@2ElI`*36Y$$t4uq^(U-E-C+_Wis;a7pZN1t3A+c=G{xieQ8c-++D1sGcYtASF5t$mOWDS=zez<&wgVC#%z ISo`1l1Af#bfdBvi literal 1772 zcmaJ?X*}DB7X8Q8*c(adM5`IwSlbSb(jhTOZDj~b+9#GIN^E)2*h=bYUu{ieqUzbA z9<@AL%CD`Ks!kAngu!T(7a=KSlvENW(_+lG`7nJS?mg$j{cwNhcka0b0sfxa8gLB& z0JOcmJh1zi^GAWz_B#g^HM|ekGlRn}dyrBH)HurJxa1@NNUsVyPodJbva;8cVGAK-zxEcMpUtRR%QsCOjwa|sZ9XK`P_#ii6ZlYu0?z8Z zA^?DziMPl1!Ra$=)yc7jq$AwQQ#jUOs;_lo^Nyx1F+P4q?$vUwVd!5c%(tTnj;c`z zJIv1)AWIP*S>r22JP(DJ_3cFVL`lSk>T-`{qfirKj7+b znnjm6@B~}R-0*cH>6P`ZEcUzg8C0lXdOA#f{J2^}j?zI5R|}vPxc&v=`VUIC;B@ZG zyUn$=3)wYeTe!zm8jaRVw9B|xS0|3c-Kms)g+2(*O0+B2@ic~5UUc$i;kEKO$+K%8 zi72rqnM~H1|4hhyPOsswR!`gpHqt+bnj&xVWMLf|Kfiwcy0fR}f7hhKrSIrLL6a*| zsZ<8Y-M+U~M97?)Q!xgGD{Mj& zHdLR&)2$g}jer~I|LN9ud~hwbl8EysKmYnk#R2yp*{y-CmttaebySp?j@6@@VzF3o zK_AFip7Sv(^asj@NigjQJbpJlF>!64S9$uPwwim`FoRjulj}T^Y^Hm|cvV5#Nbh;{ z?AbHlKv;^Y9i%%c7{7m2LA$tN^GzYCc^lX9yS1yg0c@;Kzk+NM~-J~2H4tt8n z;l4c|9DF#C85t5X)zZWtZW1OhGn$p&E`mk)v*O|Z^s3C85_Ix7`Rq1?qEx?#lpYne zz@3=DzDjV=l>{L5p#|4LCaxVF9aL@p9C|Y|TeaSq@!Nd^;}b)ilCbdC{RD(f1c&6x zG%90PRLt=C{4~lK+l8)G^dv2IJKXa#lF2oJUm^V4%>s7eC+v`~SXS|yQ=dpA8dS+= zv)Osr=3h=FX|+j+S^ZGX1CR@yfd*TRSQP8m0SP``jV)H-!NJ2VerD-5|o>D+g4~n_YO;JQU9(jzZ8yA-24`~#~>zsiL3ol6ny9K*i zDv_yE7JXMozDIw()J|~8y;rglQVVo_dS0A({Mpz$!=E0$yzd`kj-l$dAC>*0UZVt7 zMZj_b_MP>YMAaZCMT)e^nOvy?t0Sqa7`)SY1zD_d1{fmNop{IYJ+p4UXV#7 z%r{G-{c9W(>^ZNjJFR+hfhf6R(5M1MRVT2 zZ-vsjAdIuRb^fQ@wW5Tc`RM$vcfr=K<|}VlMLX!o@n+<1gX1SjU|wgBy6K-3h7|zH z%E}3L#J{Zy9Q}m`I>B%f&SPGwPi3Y(94VgFGYJFqn_OWulnRh0%n^{0e z$ST#$8H_k#ZT;z>%TB7Z(baSEEKDH2XdqfR-+n7DqcBKo?Gz?!Pa<8{_Zsz%4TOcimqbl>h($ diff --git a/paradise.dme b/paradise.dme index 16bb90769c3..9551d1dcd26 100644 --- a/paradise.dme +++ b/paradise.dme @@ -436,9 +436,9 @@ #include "code\datums\components\swarming.dm" #include "code\datums\components\tilted.dm" #include "code\datums\components\two_handed.dm" +#include "code\datums\components\zombie_regen.dm" #include "code\datums\components\riding\riding.dm" #include "code\datums\components\riding\riding_vehicle.dm" -#include "code\datums\components\zombie_regen.dm" #include "code\datums\discord\discord_manager.dm" #include "code\datums\discord\discord_webhook.dm" #include "code\datums\diseases\_disease.dm" @@ -2320,12 +2320,12 @@ #include "code\modules\mob\living\simple_animal\friendly\friendly_emote.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" +#include "code\modules\mob\living\simple_animal\friendly\nian_caterpillar.dm" #include "code\modules\mob\living\simple_animal\friendly\penguin.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" #include "code\modules\mob\living\simple_animal\friendly\sloth.dm" #include "code\modules\mob\living\simple_animal\friendly\snake.dm" #include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm" -#include "code\modules\mob\living\simple_animal\friendly\nian_caterpillar.dm" #include "code\modules\mob\living\simple_animal\hostile\alien_types.dm" #include "code\modules\mob\living\simple_animal\hostile\angel_statue.dm" #include "code\modules\mob\living\simple_animal\hostile\bat.dm"