From 5e25201032502dfba8733039b95b8887cc64cdb2 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:05:42 -0400 Subject: [PATCH] Health alert tweaks (#20557) --- .../Mobs/Systems/MobThresholdSystem.cs | 94 +++++++++++------- .../Alerts/human_alive.rsi/health0.png | Bin 2153 -> 2177 bytes .../Alerts/human_alive.rsi/health1.png | Bin 2155 -> 2267 bytes .../Alerts/human_alive.rsi/health2.png | Bin 2152 -> 2249 bytes .../Alerts/human_alive.rsi/health3.png | Bin 2207 -> 2331 bytes .../Alerts/human_alive.rsi/health4.png | Bin 2269 -> 2401 bytes 6 files changed, 60 insertions(+), 34 deletions(-) diff --git a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs index 1cb32543eb..f34240d8fe 100644 --- a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs +++ b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Damage; using Content.Shared.FixedPoint; using Content.Shared.Mobs.Components; using Robust.Shared.GameStates; -using Robust.Shared.Utility; namespace Content.Shared.Mobs.Systems; @@ -52,6 +51,38 @@ public sealed class MobThresholdSystem : EntitySystem #region Public API + /// + /// Gets the next available state for a mob. + /// + /// Target entity + /// Supplied MobState + /// The following MobState. Can be null if there isn't one. + /// Threshold Component Owned by the target + /// True if the next mob state exists + public bool TryGetNextState( + EntityUid target, + MobState mobState, + [NotNullWhen(true)] out MobState? nextState, + MobThresholdsComponent? thresholdsComponent = null) + { + nextState = null; + if (!Resolve(target, ref thresholdsComponent)) + return false; + + MobState? min = null; + foreach (var state in thresholdsComponent.Thresholds.Values) + { + if (state <= mobState) + continue; + + if (min == null || state < min) + min = state; + } + + nextState = min; + return nextState != null; + } + /// /// Get the Damage Threshold for the appropriate state if it exists /// @@ -261,7 +292,7 @@ public sealed class MobThresholdSystem : EntitySystem threshold.Thresholds.Remove(damageThreshold); } threshold.Thresholds[damage] = mobState; - Dirty(threshold); + Dirty(target, threshold); VerifyThresholds(target, threshold); } @@ -291,7 +322,7 @@ public sealed class MobThresholdSystem : EntitySystem if (!Resolve(uid, ref component, false)) return; component.AllowRevives = val; - Dirty(component); + Dirty(uid, component); VerifyThresholds(uid, component); } @@ -344,42 +375,37 @@ public sealed class MobThresholdSystem : EntitySystem if (!threshold.TriggersAlerts) return; - var dict = threshold.StateAlertDict; - var healthAlert = AlertType.HumanHealth; - var critAlert = AlertType.HumanCrit; - var deadAlert = AlertType.HumanDead; + if (!threshold.StateAlertDict.TryGetValue(currentMobState, out var currentAlert)) + { + Log.Error($"No alert alert for mob state {currentMobState} for entity {ToPrettyString(target)}"); + return; + } - dict.TryGetValue(MobState.Alive, out healthAlert); - dict.TryGetValue(MobState.Critical, out critAlert); - dict.TryGetValue(MobState.Dead, out deadAlert); + if (!_alerts.TryGet(currentAlert, out var alertPrototype)) + { + Log.Error($"Invalid alert type {currentAlert}"); + return; + } - switch (currentMobState) + if (alertPrototype.SupportsSeverity) { - case MobState.Alive: + var severity = _alerts.GetMinSeverity(currentAlert); + if (TryGetNextState(target, currentMobState, out var nextState, threshold) && + TryGetPercentageForState(target, nextState.Value, damageable.TotalDamage, out var percentage)) { - var severity = _alerts.GetMinSeverity(healthAlert); - if (TryGetIncapPercentage(target, damageable.TotalDamage, out var percentage)) - { - severity = (short) MathF.Floor(percentage.Value.Float() * - _alerts.GetSeverityRange(healthAlert)); - severity += _alerts.GetMinSeverity(healthAlert); - } - _alerts.ShowAlert(target, healthAlert, severity); - break; - } - case MobState.Critical: - { - _alerts.ShowAlert(target, critAlert); - break; - } - case MobState.Dead: - { - _alerts.ShowAlert(target, deadAlert); - break; + percentage = FixedPoint2.Clamp(percentage.Value, 0, 1); + + severity = (short) MathF.Round( + MathHelper.Lerp( + _alerts.GetMinSeverity(currentAlert), + _alerts.GetMaxSeverity(currentAlert), + percentage.Value.Float())); } - case MobState.Invalid: - default: - throw new ArgumentOutOfRangeException(nameof(currentMobState), currentMobState, null); + _alerts.ShowAlert(target, currentAlert, severity); + } + else + { + _alerts.ShowAlert(target, currentAlert); } } diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health0.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health0.png index cce1b027b6101b060904679943dcbe32610f9910..6c9b54e52e29d1909a41d0562da1efb4eba88035 100644 GIT binary patch literal 2177 zcma)7c{J2(A0G`yiXl-(H7;SK*A|gTLKoTn zEKy^d%C0iGGe$$U8N=*zf86)H=e+;D-*cYl`~5!WIp_I)KcDCMJjqU%Y@{R+k`M?) z%Jzbl3+PM0(Ip`c&i73NZ-Y)G%EiV4QZsUh27ySJ+FG4+jV)X*LWPm9?6(QC5j$7b zQ|IUYDX?l+?r>#sNkDmNRrP~=_x3=cdesQmAObF-a&X_tn~fThO6~{K8eFa@jG(C?1q-*O3C&E(*XKq=9Fc%h0S^OBM@Bk99>=>w*YpUIzXzNZz#aCBI>{qsT#tW? zpHsf#pdO{v_JBr zJ~~o5>DBVhGsyw?ni6e#RaUko>(!7+Fjwl!VjT@Vg19tl&t;TJ1+{mCkaTO~+vXgo z8J#HMXgJR^DYa?BZxmH#rL8+s?e8lHiMhg@?Dm!$Yt>06VbOypOYBso0!L)?n^8R0 zAOVZ>Mc`u4ka)6I?%;T2i#IWV{&p1TeFR7&a|Y)Zm)7c|O^V8b@VJ1t*?q^FtgSkw z(Szs?yppkiy!C~sySLH;ns8!CJebp7s>R}O=8aS< z)>N3;o)R}v99GDPv@lctamo(&v|e0axe`nSp9S@^<*7A#W=`HB=gpmd$C&e~aQ_4_ zJ_w8(z6ksIbT*vTv1K`qpJ;Ps3K#i4lMzPk(`|Uf@FY&|$5cEBxAg(0v?I6*ESk5DNa!t1yv)~7Zj~x=zO`}Gtu?-#*VX212PT8{R^c=a{M(uBM z9VZ`!IU3;$hpO%((wDhX9x?B5vL0vA_OoY^X`IV3ARBCbUh`&wTJR8_Ih$9bdZ>>b zzpwiIrwbOl5ks&;Aw;U4afCZ#?#SgPMT4JxK!}$iV||6vUxOwu*a8prm+;f{Rjb2F zL?8qH5U|GO_?gSoMb_Jvw>a1!);J#mNhe2{9mauccYoec6nA|la&CLWD~=)O&> zp%F=9ePbK|p-S?S8$YH(pXdB53R%F8?iVf(3qy;sY@{#WS$(D$;LaA$z7NpwWZqub z*ZEE`I*hF<+$TQ>OGQR!PFFm^n2=E?xwp#Eg0j_oY&ykf9HpYxTW4iIHtMUzIAN1nhI5@tayk%?CmjK>^$g$6y|WX$Ut_1 zn|o>mIT6aov<51^^UJQG=GpS4zo}F&qm3cL z9xPCxs@(9vlO6B2`BD;8m6Qdj&QD73lT8$L-_u|MtYN>0*A&S-;Pt3Lvf^kTUBsUj zed+*>y6RT;=vh_}#?qad4VKU*1f4Y=$!179Lv_WT@c*T#%!VIj4lLafZ!Q81rGw z>A1o0%?V-YPxLQH8KB~SNnnH?bow0x^aJc&?cxnlQMW+zk2a=AX@CUo11-MS=B`2_ za9Cis6i;xpG;kKh;rTo71C(rSWSuoTniaFno*fg@l|vbwn`CaQ7zO&*ugqK`Y-lj4 zKKeoz$p_EIbg6I+c}Ks8)dCo^Yd&V)yn)y)14$aBEY@_j%-%=WreisJi*;FW){6XE)(mZ(Nww|I>y7glG#I@~&o1Ink@(2FNI|>FCXHBG z=3eSdmw%R-k@z3A)?>%#v%^{Z&8B%!AHHosA*a)cV8sO3yVW2+?SPcjW9y4>1WXFKjDvj*r<34XrJ7H z!sM?o%@qo?Kj{lCSZ9u=0F+z)nHO6fMr>jkAIISoOj+k z-+SNvym$JG$k0_5b`}^6W>t7tNEGTTQ0pM9M8^|b4zp1AUPf3f1B0>Zd}G)mcPo1g zhF~8a61XSp%EHyH^obpq0)Ae>uKZB?#-dE1Ug`Dv6p@uDT1!n)de zTVW6;aAyWaG_?x?;pOEM9~=W6kP1w((u?;a9&5@n%8mzGpo{O}B*h7~%fgo_<|{Tn zPr1Klx64-RF2DkCcMelnRZs?Z2iPlkLvq`WGtvO2U>|3TFoa|Mnl}P815Nb8^ZF}r zTX^ZIX%ZitVbs>-7R~E7X2DF=#R2gqnBSN1L|XU$MNo58)3O5`tz)eR{j z`Cilbt8?S>(apRINchBG#ydT3q<$^5k#;RdPCr=4xkb0y2y0te6qPq?i}>6i{k!qF zy^O<`g_TCZt8;_ET+ZM7KjYjB8FBr_<`@{q@qCbX!3|qqn}9`f;S**O#;!seqt1Zm z=RHnwLX5Bj?)YjmLKML{><@X)`Iz4bB=}A*^$_tC@W?cwmcKf2lma*(cAJ-r9WZFp zmT)uj1&{&X+Sq6@t145no6L@{)?*bBa6P&=r^6Dy-TyOl{<<-^YtzryNEz(O@E5K4 zDfc7<;+uTvJwyJ?0s z>GH1^74+%$6RLEg^evZFZVyt}b+%2Vw#*Gbj1s?;wHME3&-_(0)MGzU?Ca18NpFwI zgcDlj5EbkmvHvM06aL=O#P3O*ReX-BC7mnp_C}R$Ge!Y$-f|7+t=Rt~rFbo_QADnr z7uHSHX15>_nZSYdfPjkLR>s42E{paf`8ugz?5MwyApmZel#k$Ag)z{bsz^9+h<|7$ z)$P83I#P6S4|(0gJ&Pq}r>?`QBH$mV3Bo+*MHC~D#B4I2T#R{6~C!DsA;Rs{%BZhgdcf4G} zEuk#OW(?b|+hV=fK#9)-FG4_{t@Vxv6`YPjpUP=ctq3Az+^Hhb6#lN!$%_Rd8il!p zbG=!w){ynGvuQ>wcRdHrD{ApK_%1k2w32$ct4!_9(S&5Adj*`^j^LX`rRvOPIh&HZ z*m6N&ca}T6e14xtXoK(Yvw$-!(kwOSD~+a8w=^^ickciWL@-iSiR=BuKEH?tr3!I^(J12?xgH16|d{*Vhir1J#i@pb#0z*;~yzyrNZiT-}FKB;63gY3p~xj>4@hn z%d4SsPW!k;Zi2Mm>S|~PFrBN)p?R{!K5gYqiB6e%Y~66^Q(~6R%*dz|MN4iPX=^;@ z@Gp*gTRKMq)JiG-V_4;)_3A`^mkd-$&SyVG?2W#Lxi@rCMLGOWD0)Y%H@ydD0n=gn zx!0-iJ9;00^CI+$*TQ4A*3~D=&3V=3R?yQv3qsUeexVH@o99NfM05c0poz1sy!kQ5 z&lsySXmL#SgXq2=8hC#`{NdW@)^tjoBJ~3ilqMIZ-ecd2AuY<4eu#e_l6F5Fv)>e&NYfX0|=cpB+Nxu-hEO?a}26p?;Ea9vqT0SshXFcYrv8^5jyXrx7j=8M>V*BQ?Td= z(tID4t6aeQf2AuTuM@iiE@=i3Z ltsr?bz{L#9|MmhQ_%y;TLvM+|3H>`@!na3;GzL+R{|d53A2$F1 diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health1.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health1.png index 2ec0eb65515ba5b665988c0d2333bb717e256065..186d07386ec845d1b7f0e5174546f06f38cda0e6 100644 GIT binary patch literal 2267 zcmX|?4LH+lAIB}8Mi=HBN#6RGo)UG`$;w-{aws}X7e|Mz|Wuiy7`f4_I;DbxwQO{SYP zG&J-)J=}a%W2Ne8*WRe=Q=G%&RRiRP?+I58YM=S6hK4rD)9sl5Z)JjVWVo5<=5&go zQPhU04IAuj$M-|-e1Hei{V$%{X`sy{S)MwF6W}!8EWng4_rIunh{SG%vVVIM)}pU}=(Ax^0A(Bz^(*bjOkv z*WvdWqdy%|Rwon`ajP;i;8VWjfsxv-X3n#^+y?nAy;~NoQJe>i0yv7B-R70|@w&_= zxI_>lyMp`I3LWeyICr0T^E%es?NS5U2dCgU^@y-TlWfLv?m+1NljK160vQvipj_U1 z>Ybwm6MJCTJvO*-===%M$#jwyYOXY`Hm7(b7`Nnz@G(UBJf32775}Ir}2A(HLKuaLXG<*tc&9z{eTjEb-(@m^Vk+g1OjpJ;>hqQOc5U2NxY?8#{W4-EEA2L)#E`lNWppEKLGRhkYt?iFBA@=2O!FE{l#HK*|o(<)dC(h!6u?lffx4{eQ7Jr>Q~pY-|n@83g78 zD0hv2!!JW`1&miZk94OP7UT%TmwFn!J}H`BmHT&9zRucn25*+rESx(l<;Inn+fPvw z=)woPZ%$!DqMW&L*;MbflTG2Au}lx%J4RjZQoSHvCb#cw{y_X)PCeccj~Ejle$mQB z3^ymz6px(_gJ1uHOz==NhICbN1Y8O)TUqXdlq8AK;67%O4Nvnc?FI7N{J>(JN@W{V zx8$byJ+uROrUsshKPs;!2q8;#Qb(;68~FC8u88e~IOIBw_Q^+y7F!ibpr9^%X*I|m z@cCPbGk>96NU$etd8h(-z{-;{nabz&K)sfAaF~*kjC`;+Z*|E|<%=;r2YPN9k7=~@ zpuNHX=m^K_I~ugSa8P&r z@Z_vN&pP;v)0+Jn=v&1U;2qdn&s$o?B+*N&O;_GZgG&{UgRj8$IGvwVI#3HYjvv zHnrLJibE2yLEDtWVLGEq+`d!=rs8r*@@Fg8;Ft2RC4X)P_rHIu_xbnS+lcb_&-4cw zefj$Rz)D<%co5XkFtXy|o#ZO0u+OZ6y6d>m|G@sAr_{RAfpvfri=W!`b%`$WS3?j1 ztA@VEGLM5t84>>i_qnaZF5C;8a;Dh!TCFSvGAY+K^ldAb?1+v9l0&ALQ`4Rt8qV^R zF>(QN%xL|H_|0fiJL@y&PJZqRymUR7LF*o^6(_dt@|i?XUKWsG#|I9g-sz3n`oL$42<|4 z-%jVTCx=%X4fJaJlPXVA@$F7i>KAIO$n{PashH9UyZ^Btn!&~&#iVP=S67``&=ukK z30l4KDQLaz$^D~80Ne8kT+)(n_>B{`Wvwn!D|eD3n3foq%^2b^Xt@VL&$!>-L*cZf zpnbBacvKmn?2(G^?6Pn-4SD=pVyQ+A+hPv;qu>FV#_R7>lq_ zhXItY{<>~Z%6dTPzp31$r@db6IBdPNXmL0Ox`ocL^*;-bBlidaIlxCY-?l5I!CeO{x7*c$L~iBa1Q|o^sKDcmS%kv zrvowxIzO+ci-B;(sPSJJiq5B`V-v0Dy<+Mm{06|IQXI(fRI+^DXh$^QkAkdG4p literal 2155 zcmbVOX;4#H7ETNbE|3gOfdVF=(;|%`Dq;Z53vTRaqk_sNEsJ17fg&ziutoMT5Z-UCwennXFruGChv6a5$sp`M_VdGqS+p3|4#Y zaXXY!AT8W{!NPqd$7T=5qG{VX!gl+Ci)^){ZOC0`CX2~@oSYho9H%l*c(5V`j#I>D zh5dkmUd)OZ6tw9nqx8JTwb z?#KCqoSD*fwTD``Z>J@r+e_NQ5k_G5P)o1(ElkQKWfxhB2LPk$cSq0_W&S6Rrxe=x4O;L;OB&kl4ziglnPtQK0fX*E(w4~z{_y%3wT zDzm;CmAr*u$Y}uV0e(2$>jv)GL?9au#r*I-y*BHYY7x}6jV)l1b(={-rpbS!^7&$1 zzj>2FNIX)3&7gIn^sz12?`oOU9%XX{TQUqzuyL6t2;NREno*@Ct?~zjAp+j=DEjzI zKCr3jqD}PCqKhD1ll7Qd$hFj8^Fl`h*nkJ^4n6R*xDMsTokpr2pX{P+?dSCq$Hxi} zp^3DCN=>xPtX35u=`pF#(e}1&KLu}u)Jk|q*j$`tAR|BqKT4j9{`yx+yEySMPzX;{ zmcUb+b3X>n+VAIaa!X)i5Ni*#o+R&H3Ug#gp}KBjfcV%;DfN?Hox{5FV1Ml>^#x;y1#=zpu#w7^SEJMo8FuhXdR{H$x^YxxB1swNnSNp*bvYn{pY}!z&f{(6 zgyB47;twbvyINVERvwmW^|Lalgfl~r zm`gA}ZF#{#r-X$kwxVp>fT&8^F@mt$OH)Qz+D55W6$`eDeBZ99d0*Pliie6TdqLWrn|I+LIYM!wl0vBSr0{ z5jWtQp>BA>Sv?!K-D=K!%~{mO7Ubc_f~q68`~cFcNdd^yy-E@qYV89QvxCjP?Oj~Q z{IN^BK#D0whQ1)yYsKoz& z#QnkV0{QwX!svUh#e0>wVz^q=X1rqFmUM)bPw~CyI5e$`CM&98gs)seVArn*&15N> z45MzV?1*~LhUeANPSnX}|CGLbA}OS+>w#~Dpzjc*OUE>2NuK`b?i=q)!3G-2BsX5U zMh1!J8nL-+Zx|^ChqY%8d~xgVJ7YSDW1{rKM|32-tQaJYB`TT~QvNAK^pm&bxkvMe zTb!h)Ror12dp&6|yeA``;=Lm~7_3v=eHwK&x|{mS-Z)L~3zW9iX}@qAs_l8UIVRsP ze}#<8a!DKhK`#7V+>olGE<-3`|B9-w54l`2`$0x__o@sCgIG(HMXfE8TVoUY^1+k3 zhHV4Cf)|3e4RJOk_&?BdC^~CWj!sY7gnwNP>;{T!c=30XytjM`33~JwvCb~z8NqM< z12gpw=%P6WY}H{-Zdi<_%ueWkC%8=^!JWKElwUe?*w7R0B+5Rk9?EF|j$!dAJHLJv z#$Y|UZDtQ7M#;)Ls5{}^ zOzow$-oWvfXyWW6(65P|y8|EGewiEANj#DctOl!iIz#ja)C&{o^WOXC;F`Bs#br*c z8V_ewDll!Eq4f)#x5NBcD-(e9An-aE1X>ey_FC2lHk3eow^XZ{fe3Rdsdu%`0(Jq% zztrCM_XUbK)h3;K&ggdfQrFsjRU6?D5veip?zq0Zz049#GhiV*6K&mLa%1NhP5z6i zRNrUl`DwM2DNU7XAZdAd>wa6zPcYV3e~Hs}mfSd-z>0e3=bX-2MB0>= z1C~ig++P#NAMymUhhm!MM3&IOD$)dHPfzl#iqK+;oDeWcA?Wf{_3FWd|`t7;5>v-nB0oqL(2><{9 diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health2.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health2.png index 4fa9ffeccc324cbd18cd79aa7fa5c8a5a9a8ad4f..6463eb386facd0e5a56bcbca291eb2ecfbf5248d 100644 GIT binary patch literal 2249 zcmbVNdpy(YAD>HSatViWYpo&*S-BL$=3dm<${{MO`bA3U9M_Yz$xg(nMycgGDR&{t zkbE&Un!CzzkC9x)n6TS-zp3B(}o zu1B5RB{oMg8s&bH%p~i;D2b5@b3ft$DeK%m1A)kqT%GJaqBGf92eCS?n(^r5t$8(Z zangCY4yTG!Z#U;AVZ6Lk_dYagLD;q4y5*Cj20%{MCb?((Jn=Xs@04bE=H$sI>OGsY z+`acr7`6Y+@@HrHF0TJ4D!bsI0v$!|ud2#^Avz-~c~%mM;!B-xsstgkGTRGedp(O( z;dn8qB{I_Ln_wy)ZNpL>oRUr86`q!q{lj4xhh0(^h*EurQ$p+RESwmY^1WWyRi#R_ z5Mf~5ervo{qx-b-S%smC`=yCBU^)}6S;U-YFzg#~zT&~AvS)_~f?|_tT&{&c@pkCY zC6^wiEJ{Qz3!UP0`Pvc}qlNTSK_M`d=#5!Qzs_0K-Mgd~B%UASO23@RMf9ZC1|Oc) zt+Fi-?zxnMCDI1m>YtUi6V0Rfmk-dkP{F^#VuF&r6R_f8SnWB4TYA-nG|{+nSC^?` zq5Dzj2TK8mrI9jQk5D37i6D?Y0hZhE#nZ=Icet^DD%yiV7K2KOP)%77MD_B7o_BHt z;K=cttC96LRGmL7_ix-%X|j7`t8Q`33Y%9|jkr!+FJV!A;;QD`8G9ha#{`q69C?^Z zc$?`a+K`6DRtCHp{sZOhfnBj2FFF>rli-O~=-D{su?wyO6jN3I?GOXR1#?5q!buq< z-&&MiCcc8}CoWkQJsrBb^@{<#TPm#EQ*=aT#)r*3AM~4&pHPF`YdetK`H^sCsGS!} z?(f4l{$cf719#@CzJ+&0c*g!vucbs1vpz=Zz29o z_zp?z?>V+I&F~6fq>vm>rd{ddL_S4nyD*ADM$qO#V$A6~XtBe}+Gu46#BcLWdLGad#k@csqH}H*d{8~Q zgm{m8uc}h)Sj&~7ov8!22Xne6GL-}4&px=9`r+LrlrPuOyofGqn6^^p$(~CMB zF)(m!iMZ&$+CQJA|D64S#=u%Ks9J?&%phgAX$JXH2zQbWn>Vly=EH-<(PJpl67niA zBdcFr8ukkDyI!qmNszvxS=viop}o#1V4R)RRb`_8u*vsw>EC(Mk-ZRr%p4uD3GJqM zqcYVq$dt)D;*gKv`WT)+wd)H$dbH)Oc!nRTUt?O1E_#%PZ^>O0n@Y&t(^Ph6OJsx} z1-}_QA6~l9f8BSuUjNMGuaorU*} z;0L~`E$?VTHwZo7cF8>^ef4`CH=F!gCcX6M=LXICC3+rWKB)n?ohT=f7WV~7-Q=xV zPs^l_k2*ypw(A?c(qa9n2ZuKKMfI+V32JS8$KO%e<*hzmKzV@^N`&FXcJi+6zA({T zsh$#F+hSc(jYwk06lQ>TEnlsZnV_aRvl3%AllRv(UPI!ygv&e5 z>!p;QC4?nl2UEhy@7M-7R>eoR=ei|h+YwYdja7@E6=uCZ0aY4_MRYyNpnbO4 zxc%k`<0)*7>BvZ{-chrLMc4hOV6UEyn`1uVEiYHQ=o=q=xQQ2@2*#6$rqWyVUTrBS z(BqK!^-C@}O%q5PzMu<4J|0G{k)2=aFsJGJ=YTiruNHqX19KY=?FfTQRML7@ct)5|l*eY_v-PFfK}t8fI| z@~j>C30Cj8K{)X% zuSE8Lx?SWif(o8SYX=I*;Qb!u9v msZZPnO~2-5DQncB!$GLxlg!ej$jY*fQgL<0IF&h^i~BETrgA#~ literal 2152 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 XPo2HGQNQlwHz;1XBOW#GL0A3;FXX>} literal 2207 zcmbW3c~BEs9>(}3U?~nKT z`}uu;opbO2)yl%b0)xR=1^Dj@G|eTZ!6Pm6M=?JyJhMX!-`iM}B;WBq zHT2z<&1e#07t3uT{1_;XsE%?;n2Ok^5Xd-J?lzOt0)9+>(bv>;RvR54HA*`6f0&JV(tK|pYPf#1f^j6C;7}j57V+fDljVi|M%6e< z;o7q`G%1uCjW$^4eE)nCb+7T%lymbxj1SUMG8~Gm0rscFUt7q zDr~1}u9e;doWuC3@$Sv^VgR-%Pmzpy^z=B}mf8B``(k!lVDaww|0G`9T%}KQDYj5Q z4R8S~INmP)rN1iB#}Ei0EbV;|#?ITQi+tVsD(rAD7DthYIL5Dnx$=0_6WS8omDz1f zWh4$goFrON5Y`QYI-n4S!XB&38Q-m@(rtY_!0u?Z>~?bN zum=i^ni^w?$|#bwG-@l5b~Ymjz$fEEe4RW1}U?7q9~QZi)U2A( zb;PY3#EwnTwUI$UNr0a35qUFWjVw6ahPl`H(+cJdgmtaDIs%s7>Xa`mGpzO?K3C(0 zACY1!c$@c@BN3~?;q#^Q4NF@NP7&HDiyB-ky+3ttpeVGL2R>W*p(>sdg4^`ZZY2+XIU8D3i*Yv`5{Fk!SZ*$0e%T?mxokhq_#^QRjGevKv`wG< zL0RjB#Hq8@?9@r6z8kF{$={;euT>X zl1Jd@7CuW8_TQrF(Nkf*?~^XuF8 z6<@Wet-|*L1L#IgZicNUEa{; zVw;cU@)r|{1Jw7Pl|B3Ksf0&QXNn(zt{`Y{88}XedDguB)laZ?gQLi?RGc5BnjgE} z?zv+5rqe*l6fJ9qmTGwQx*TnRb^ZUUz5m0u8fD*@0KTWf)e_p5pcl=~x0i#wJFrv{ zg?tTTC5z>U_RV6W6Z6llJkPN;oYvh_;wCXnwy7?7NA>3YI}w(AtBKhG}5Ren6;|ID%knp(V%>gyjis zrW$3U$zGwF%`SdA2+|7}4OBS1xJqhhDrolPhxgIeK@96mF+0NyE%PSm(*T#l(tc1s z$2Y}lW6Vwb2Ep{igwKqp)407FxBO>XHeL2Hb^oWR4k?G0PZ6A?5DAV-2YLSJzEbGa zATFH*W2st?Omw(}vLT)0lba3lZlr`H?N{u$YN)ZTp*(H_>q7>8F0R;U31gSe3oH;; zTHeXvI@jz_Um>j*b07Ez#mbu*2oD;(VV(1bt!pct$6i2gDPVJ zImk^WJWfd}N0a%uy}*fZblAVwCL|CDwSYnqA{{VC@2VxE zW4W4%Cvc`8aAG&Qtd#P2BlGNIQ+NLT&eU#Xb%{6@$a6c>9|tC2_kmrHd{3nR6N5`! A6951J diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health4.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health4.png index ea55a429b2415d560556620a05de0fe6a5b3b640..9ae49ead79fb7cec528dcbaf4ab1b9b43a2d45e8 100644 GIT binary patch literal 2401 zcma)7X;4$i8U;~SHEv_{1<PP|hfbBBD6CfS@uWn*xH$GN7Uc!wv%^H-IP#iYy9( z5R}0vDly6y7Hb2+$7 z|6lqV8XC)-4mo%ra|zO!y4uK?ViOXJOq!7%2kkW~x(vrOH1se|4tB@l?uv^x5d??U z*+Lci_mh*{2~C44y(I+HWNjQf~4oa|{iXA8Xs)_YJU^!_Ghs#nzwR$wqh3X2h5BLd- zOo(6gKud_bI4bsqx}ifDe!5}phV$=a?c;!yk#*~K#%AL@ZL-{#1KsT$au*TMpD3rXK(Nn3S)_3`&8yxb_qy=|bpt*yy0(Uf zar+|PPXV+dN8`wUo=YA6cxtb;!8x&-VY{Ur+- zE+zIXgDT3XC5!FL4o{q6pK({Uh8xOWWZ*W! zQL3t?bk{5XTsFeFK7vIsBON1efoBo6-+gNyaOJsTS0ESP zAwHkp|71m7iA*l6t`upx5H1d7vP@^|S&FLT>t2KdZ)pP{HVeE-WX^pj&7c}H(JWx- zCsx2bx!&vADu#uK)VYg39_y`p4lw=cyXc4!REBxaWeR;nG4ees1mP2d2b*mo^_v$1@e>?VtUNkvFZ<23gv)8uahvYsj zhLS~(tz%TtPLvAk8?+mI7gjzzXnj&$KOP(ZN2rRQIjiaDP*JXI!<$qcCVVr;q>qE0 zk#dnNQ><$w*77s*DH`z@)hehZHtd+nL^PT@20A{oSP!;d$`H~{2VUk%j*6$Ksp&B{jul z&!^cH&z@!Mr-{xFYS48nXWh-!KsXAvy1-_1CV6ym+QKOQ9Yqd?RSBYlwYR{VO1Bxh# z3-){c*0+-Soo8MIz|TXA%S~HYc*w^1%}3=utE(cV=jspA?xBSwJarFc`rO>uh_`Z2 znQQEGwQzH-`cXenZM>tAv69jF^a&$ouqHP{a7;~?3pQ-J^L9i>VEz4%%e7}&W^Zxr zr%lP2u*z1KNnDZ65oLAvm;Y=|yvDCcQVhmkc&@W$K$ldny;VUx%A!g&uSZZ&pa<-` zc35zD@viwO^)!bhaR?~>NAcwz1wHr z5p$`)5S$^A&xA+^rl?{>D#V|E8X#`|Kk0th7V$CXM}{H$03#4PA0>-ciFg{a=^Fd_ zN{mu(9(`sXaj&ut4j?kAwiLToBuife+TQXaGA-s7q)(aEY@a3fPk!ddFS=2-kRDh( z=3QG#rPU>|Rx)@T-biGcF##7S78~|t;Up3b7w{H$7Zs|yXQg*pgqq7XSGuVNsYN#@(kxSO{kF=WR9wkO#6*vH6I=K)NS%MRN5{~f(xqcF z_PSbLZt~|Oz3C&Hp5CXkwZ2c>q7qwlyd$A0y=e*UYPTsYZ)M=Yvf_Rs^MUy-?+qy# zW72z9p|QhN!^Mf%5|s6J;N$id+^GLci;J1^L%0>QW*zN#3sg_qaiJbQpZe#nMY%>Kqp+ NadLEVsIU)6{x6GD9+3b5 literal 2269 zcmai0do+~m8lOSNmNE9qilT-sNww2XnNoZ%U5whMP1&`CZYRnX%BC9geUnS-NJ=hU z%%vhk$P`g#=t3%ubHpf@8KE-G6>~8&-#2Gy?X&k;XSMbp&--&+qsA-uK-0 zpeNNqmvEOckuzckE2kQ&!!EXzs%AOg)++_ZuH%8 zqDV}0jI$%6GU{_nDvT^hvCTue^bb@)^PMF%=4G$eaGMqW{lAcm?r=XkbJJRo(YKQx_s~v#`c=39t$pag&9($e2~HJnj!(-`uLKM3aE7h0A{cif!>=tVnz?N+uqEBJ%n`tAI> zY^M@vCvZ?Pd4FD7oV_c|V#k=M8eNHz zJ_RVyThy7#?}AgIQ^;p`<}vP5zzc|(DVO1ROFK}`3)Mw(l$CaU;-A=7mDF@ zH{9W)i<84fWO0w_3Azu}g=kl}BSH7E+CKnrK=$iqqMurBTil5|8!0TsTXEi!W^!KR z5a4J?7L{skWEO1pSEm*uBWJ@?JFy6?jKVVW^?GHjqOCsei*_Bs2pO1&VxY787nn@% z;+U82L~NK|!!oZ*I_}4eHt-zO$y`Pgeq~QqYvdUy9$>=s$~%lVASrZ|z+aq5(|&}` zj^IHvcEi*^d_u&f%bxR#tZKD(bNrUSD1}T1DX7y*a0- zsL2FM`1Z(Z+AcYKS%lF^HI1iW`K{N|+S!OJ$?UQib3femW9aF_dE2!e+e98=WjaZE zr;P!_EiFN26w=1q1Gp1O%6|N`ce2OWERH>#sN7Tm;}$}Fmb-KL>C%VF>wSkP zd-~F?`f(?ukIS66#yvdpM>j(Tm5Nl>HT|GX?`EEq)!@|oR9`KCZnGH4<9A1+Igikcc3&%?F z@s*t6%IXvPlz!z5sNATQ|6^_?+V}5hZ=eT1@++^*61cJpY>N zl|Q+#7Z^bide{fBx#|0o3HtB}Bggl_OOskSOJ3kh@bNb0cKJwnuVXiI!@`m&Ub@a& z(eci2n8;6=F4p^^IWvDoNWSvzL$d*mc!qnj7+6{pn8jsG)UdMP6z9i? z0Q9*o@y?`OffKV(5Uar}gTvj2fr>#N?QQMc>k`k-Nt5b`M&W*C*E^em(d6Bp(0Zo= zezKBR=ij@E6tb{*ywCZUKq$;%Am(x(ojmtgAZ74#rhBh8Jc@ZhGqzb9cl4`F}# z2^s;J=(q5}B@fB@B)0u7P!5NJP0splpUbEwhXQd-91##iag8U zruqizP(8C>S8OA5aI8*>wFcX82#-Hnp5pu=zDk6#hTA){p=O3fw$LV`hJN#_Bz;@Q z{^;gu=v2I~9sOV3LJX`fnd}KWuJuoxx!Ewj=#TG)$@^XeHr)L_j7Q0l)A#?eNdlWPPph(0Sd>2zYqF9j z8XgW15sHRwl*U1o(=q*>iv5qI8JzY(oNX3GRcHiLjp0H+h}emMD~&C0+oa`^#f;^Tinf^Xng%1(+zJ)df} zMn59H$F0o(8?Ao(oZ?~^dpgnok+?zS#cbE2DV${T2ezrjsye>&h)(fD9_gVAk7_P* zjElN0YIC>8Sga}m(!CLOrtmo(lLt1Ro7(C`1O$1Sv0$}Wv_;)G#M*l?cM