From 78c3fffbc7707330df7ff1c787ef0fbcb79cb3ac Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Sun, 11 Aug 2024 02:53:15 -0500 Subject: [PATCH] Allows mobs with no usable legs to walk if holding two canes --- .../signals/signals_mob/signals_mob_carbon.dm | 4 ++ code/__DEFINES/living.dm | 5 +++ code/datums/status_effects/wound_effects.dm | 3 ++ code/game/objects/items/weaponry.dm | 22 ++++++++++ .../mob/living/carbon/carbon_movement.dm | 39 +++-------------- .../mob/living/carbon/human/examine.dm | 2 +- code/modules/mob/living/living.dm | 40 ++++++++++++------ icons/mob/inhands/weapons/melee_lefthand.dmi | Bin 6642 -> 14281 bytes icons/mob/inhands/weapons/melee_righthand.dmi | Bin 6485 -> 16311 bytes icons/obj/weapons/staff.dmi | Bin 1118 -> 1232 bytes .../code/datums/components/limbless_aid.dm | 35 +++++++++++++-- 11 files changed, 98 insertions(+), 52 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index 267b328fcf37..38d0e6035e89 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -151,3 +151,7 @@ /// Sent at the very end of human character setup #define COMSIG_HUMAN_CHARACTER_SETUP "after_human_setup" + +/// from /datum/status_effect/limp/proc/check_step() +#define COMSIG_CARBON_LIMPING "mob_limp_check" + #define COMPONENT_CANCEL_LIMP (1<<0) diff --git a/code/__DEFINES/living.dm b/code/__DEFINES/living.dm index d256bb7de448..fe79f7064cf1 100644 --- a/code/__DEFINES/living.dm +++ b/code/__DEFINES/living.dm @@ -66,6 +66,11 @@ /// The trait that determines if someone has the robotic limb reattachment quirk. #define TRAIT_ROBOTIC_LIMBATTACHMENT "trait_robotic_limbattachment" +/// Mob can walk despite having two disabled/missing legs so long as they have two of this trait. +/// Kind of jank, refactor at a later day when I can think of a better solution. +/// Just be sure to call update_limbless_locomotion() after applying / removal +#define TRAIT_NO_LEG_AID "no_leg_aid" + #define COLOR_BLOOD "#c90000" // Used in ready menu anominity diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index f7d640a6d1cf..afda360acbdd 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -70,6 +70,9 @@ if(!owner.client || owner.body_position == LYING_DOWN || !owner.has_gravity() || (owner.movement_type & (FLYING|FLOATING)) || forced || owner.buckled) return + if(SEND_SIGNAL(owner, COMSIG_CARBON_LIMPING, (next_leg || right || left)) & COMPONENT_CANCEL_LIMP) + return + // less limping while we have determination still var/determined_mod = owner.has_status_effect(/datum/status_effect/determined) ? 0.5 : 1 diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 8209c47536e1..a8dd52a274b9 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -519,6 +519,28 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE +/obj/item/cane/crutch + name = "medical crutch" + desc = "A medical crutch used by people missing a leg. Not all that useful if you're missing both of them, though." + icon = 'icons/obj/weapons/staff.dmi' + icon_state = "crutch_med" + inhand_icon_state = "crutch_med" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 12 + throwforce = 8 + w_class = WEIGHT_CLASS_BULKY + custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5) + attack_verb_continuous = list("bludgeons", "whacks", "thrashes") + attack_verb_simple = list("bludgeon", "whack", "thrash") + +/obj/item/cane/crutch/wood + name = "wooden crutch" + desc = "A handmade crutch. Also makes a decent bludgeon if you need it." + icon_state = "crutch_wood" + inhand_icon_state = "crutch_wood" + custom_materials = list(/datum/material/wood = SMALL_MATERIAL_AMOUNT * 0.5) + /obj/item/staff name = "wizard staff" desc = "Apparently a staff used by the wizard." diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index 1a5b79bd86ab..5331a891362b 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -33,52 +33,25 @@ has_momentum = FALSE // NON-MODULE CHANGE END -/mob/living/carbon/set_usable_legs(new_value) - . = ..() - if(isnull(.)) - return - if(. == 0) - if(usable_legs != 0) //From having no usable legs to having some. - REMOVE_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - else if(usable_legs == 0 && !(movement_type & (FLYING | FLOATING))) //From having usable legs to no longer having them. - ADD_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - if(!usable_hands) - ADD_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - - +// NON-MODULE CHANGE START /mob/living/carbon/set_usable_hands(new_value) . = ..() if(isnull(.)) return if(. == 0) REMOVE_TRAIT(src, TRAIT_HANDS_BLOCKED, LACKING_MANIPULATION_APPENDAGES_TRAIT) - if(usable_hands != 0) //From having no usable hands to having some. - REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) else if(usable_hands == 0 && default_num_hands > 0) //From having usable hands to no longer having them. ADD_TRAIT(src, TRAIT_HANDS_BLOCKED, LACKING_MANIPULATION_APPENDAGES_TRAIT) - if(!usable_legs && !(movement_type & (FLYING | FLOATING))) - ADD_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) /mob/living/carbon/on_movement_type_flag_enabled(datum/source, flag, old_movement_type) . = ..() if(movement_type & (FLYING | FLOATING) && !(old_movement_type & (FLYING | FLOATING))) - remove_movespeed_modifier(/datum/movespeed_modifier/limbless) - remove_traits(list(TRAIT_FLOORED, TRAIT_IMMOBILIZED), LACKING_LOCOMOTION_APPENDAGES_TRAIT) + update_limbless_locomotion() + update_limbless_movespeed_mod() /mob/living/carbon/on_movement_type_flag_disabled(datum/source, flag, old_movement_type) . = ..() if(old_movement_type & (FLYING | FLOATING) && !(movement_type & (FLYING | FLOATING))) - var/limbless_slowdown = 0 - if(usable_legs < default_num_legs) - limbless_slowdown += (default_num_legs - usable_legs) * 3 - if(!usable_legs) - ADD_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - if(usable_hands < default_num_hands) - limbless_slowdown += (default_num_hands - usable_hands) * 3 - if(!usable_hands) - ADD_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - if(limbless_slowdown) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/limbless, multiplicative_slowdown = limbless_slowdown) - else - remove_movespeed_modifier(/datum/movespeed_modifier/limbless) + update_limbless_locomotion() + update_limbless_movespeed_mod() +// NON-MODULE CHANGE END diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 6b28e33c06b4..5fc589f278d9 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -166,7 +166,7 @@ damage_text = "limp and lifeless" else damage_text = (body_part.brute_dam >= body_part.burn_dam) ? body_part.heavy_brute_msg : body_part.heavy_burn_msg - msg += "[capitalize(t_his)] [body_part.name] is [damage_text]!\n" + msg += "[capitalize(t_his)] [body_part.plaintext_zone] is [damage_text]!\n" //stores missing limbs var/l_limbs_missing = 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 11d84be746a9..c910ba0f54ea 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2269,6 +2269,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) num_legs = new_value +// NON-MODULE CHANGE START ///Proc to modify the value of usable_legs and hook behavior associated to this event. /mob/living/proc/set_usable_legs(new_value) if(usable_legs == new_value) @@ -2277,19 +2278,23 @@ GLOBAL_LIST_EMPTY(fire_appearances) stack_trace("[src] had set_usable_legs() called on them with a negative value!") new_value = 0 - . = usable_legs + var/old_value = usable_legs usable_legs = new_value - if(new_value > .) // Gained leg usage. + update_limbless_locomotion() + update_limbless_movespeed_mod() + + return old_value + +/// Updates whether the mob is floored or immobilized based on how many limbs they have or are missing. +/mob/living/proc/update_limbless_locomotion() + if(usable_legs > 0 || (movement_type & (FLYING|FLOATING)) || COUNT_TRAIT_SOURCES(src, TRAIT_NO_LEG_AID) >= 2) REMOVE_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - else if(!(movement_type & (FLYING | FLOATING))) //Lost leg usage, not flying. - if(!usable_legs) - ADD_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - if(!usable_hands) - ADD_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - - update_limbless_movespeed_mod() + return + ADD_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) + if(usable_hands == 0) + ADD_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) /// Updates the mob's movespeed based on how many limbs they have or are missing. /mob/living/proc/update_limbless_movespeed_mod() @@ -2305,6 +2310,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/limbless, multiplicative_slowdown = limbless_slowdown) else remove_movespeed_modifier(/datum/movespeed_modifier/limbless) +// NON-MODULE CHANGE END ///Proc to modify the value of num_hands and hook behavior associated to this event. /mob/living/proc/set_num_hands(new_value) @@ -2314,18 +2320,24 @@ GLOBAL_LIST_EMPTY(fire_appearances) num_hands = new_value +// NON-MODULE CHANGE START ///Proc to modify the value of usable_hands and hook behavior associated to this event. /mob/living/proc/set_usable_hands(new_value) if(usable_hands == new_value) return - . = usable_hands + if(new_value < 0) // Sanity check + stack_trace("[src] had set_usable_hands() called on them with a negative value!") + new_value = 0 + + var/old_value = usable_hands usable_hands = new_value - if(new_value > .) // Gained hand usage. - REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) - else if(!(movement_type & (FLYING | FLOATING)) && !usable_hands && !usable_legs) //Lost a hand, not flying, no hands left, no legs. - ADD_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) + if(usable_legs < default_num_legs) + update_limbless_locomotion() + update_limbless_movespeed_mod() + return old_value +// NON-MODULE CHANGE END /// Whether or not this mob will escape from storages while being picked up/held. /mob/living/proc/will_escape_storage() diff --git a/icons/mob/inhands/weapons/melee_lefthand.dmi b/icons/mob/inhands/weapons/melee_lefthand.dmi index 79a362a0090072591bcc932bdd33106cbc36c45c..b2a0cd8a8d3a49979c637a4c4e52a01cc3e47825 100644 GIT binary patch literal 14281 zcmb_@2|QHo-}hKbWl1PXmK2g~*+Payl4XjNtVLuO8taTv(PEeEdqh!$F?N&e+4mSs zj3w(dmSN18dC%y+pZmW5@Bew9_j#XpJ|E1v&ULPHopZk5@9+EjUB{~%M!M{WP8TgAGPIOiE6MZ+Zo&+Z5n1 zRTNF3wv@%Hfa)5V@Ypkj-!BP%(>etWL!^B9!q;I{m@msHzhiax+S>iw2|7#JtyMv0 zz55xJvY-Z8kIGu zcFW_GR3mqugoe$ZPH&P?9owAxekZ?!K>irS;023t_B(OwDF~!wsHc7TmS5V+1pJNA z9slnH(m^H_hSBd@;r9M+quXwE335RA)jUL+J~LZS^#EeD`q&K%m!xz5k%dF|-p zu&2T6V**Al1_S-oHh2-4(ip3X4~`5qR>qag8l=SCU>h*SG+?0tHV+%Jn) zJof`#)O=S@T0G{HfRq{@`UvKE2m&#mYHnrG*lxIAazNtTF>wbn&o5?XQ1G#%;fGUU zgsD=SPFDz`;9Av1CeX%!@U6xRdXwHg>Z3cGOJ%;bIDu|#{sL9*Y>V)|rVp5{p|IxV zR4r=|=)i?1q?9v?5Y#Dhk%|nkjgL#jx8KA)z+BB#oZANi*@gDBXc>g{M zBseFzMk-}qZ^}pH$P!k=Q01;#-LQFxpOj`1n!0oO{VQdS(Uy-ZqOnQgF{7iSmnT>UEFJr=zN{w= zpBXMd&d$7uo{ZbwN(~YvH=9hV?wHuyCb)GHON)`&m($G(`%}1!5NPD=gRWRf7L-Vn z3j;Z3eEkCuHyrsem9G0_S$qTjpblt^>0~{c$HaBI{ z0p6@mE>XE@8k}YMv3XPtu_<)enwleHkAMz_#^ZzSEk<>TZaLBQl`ZD+b7?Qd1-BER zw$et((&($Ewx7<0rnQlF;?b1MQ9bcYODEu}9soyRs#fW@(c6ornTU z_AZ7S_hzJSnG| zUs$PG;dME21YwZc=hX=j+#X-^GT?f0Igv7R&N$hz^@GW^+*`1jVvj7A++)K$3Cit5e+G)O8+l^TsA~#j7JLimzvr_E`R(D#8DG$Cq#bv-jIp z?B>*tMOGzeX8JCcEfM9`1;Sg#JG;76Hbf}T z;*Y^h4lgk_-Jw9ykO==m)dNmwvOwz{gB0(9T+mPyqr#+k);oM~n|6&)fE#MAE&kl_ z)7;E{Y>dv!gtU`j*mr$3@)lmGxyloF)s#1*czY>GD6S&umK6(ex8Ir#)|{)NY>Evf z>~t%3H`&qt z)l|P}_3GlcYbUuNaU$9-Mt+Q6xjFBpm8w~Gb+DQaMaspGf1my-(tXoZMxTv$^4H>W zeNE8oL96=n$!S3Z$ub!$@&litkqK+ITN&Icu`uGOZ(w#g{puNl{Tu_)4W{Y7T3l_f z@IfveS1fji5_mx`TaE}J45&MIiE7H@aWm;@m+JVWvME_R;1Bc6Akdc@mr1V&#rRH4 z7#i=tKUi$L^(WWk3B}gO6QM@sM-kX{w*NCd{_S32FK=(}#w3hO8)J1GA~<5})Sj_*hz`GHpOB*RGL zL<=&1VS9_fQ3JH%nD@`Qi_Be(4*m5c_l?!NT2BHK-I` z-`gKRS!!}O=`>tkjJiYGMGDe@QDiiCz@S&EGNN#y6}HHcbb@8Fc~q>_vW9=khwI zRU7irFg-EG%vr}O?gEPvmya9adx*KjFfibL_7X#QMIGvvK$$|Mn<*(wLfhS0 zo#Dud)sP2SwRFjY661G~>_~s$V*1|jX9O=eDf46mH)E_V3cyu;+aawjcMMK>nbd&f z;%;;v^&EI&jL}Txt;U-Ju>CTq+B*lNF&6G-Phahwr5G9EA`NSPW9$C(6{*C;(QQ+O zIIaM{o--@ab1|D-B%yr1p$TK1>N@{1&wI=?vsLTAhnIiXdr(e8LxZgf-U(}cE2o@j z?TP$Lrk>-3JObT*Y`0>p`IW3o3y?jMT8Q}@N=mild@{p2glPazFJm9-<ubPo*^)b~ zb&@7}l14q6^(V-Dt#5R9SBn-@!aHA~JR|E?h+6VY4nwScuKD&^=}n40sh(ARSqsd$ zo7=1a;;e(6!PHZ%H>BQPd{`*0llz%sJR>O>6o0EdiOty#$e#ENFTC3&b<6mI!c zPD`r6@xlU(oyt`p2k16b%@7FLa>{d}wJ*>V+Br85)cWq4HLs;z1whXi9F)zU_yQSR z@=9k=N>z({j-qmr%qbsYzb%N)Uw#{$&1us_4y2Uattm+{w<@`Kk0G^&X@LxsTHU3Q z?{3JsmhlqPI&bek2+u#VZi*qPzrvd#=fqOPQ7BR7NPRX_#YjUt_fE~bn|+?1rNaun z$LOb$Q|8Iy$ts$6AyoHuZj~1(D)*%oqB0NkQ3qt=6e0~>+{2jiEVY|iuYr|$6HyF4 zfR1AvyV>_SqFHZDsX94_dvIa*JsTd^9>SK|GrM)LLI)#ndb@Y(;8a0Qg=?(@x*g;Z z|54iT-t2)>Sc$>V-h>r{K6ysrmcH|+c;|d5zSdSLE&%=`7>Z$aM;Hg~Gx@2>e$wJ+yi+9Mx5$8`C6Gl#ZRdWzXHndB5XDh$uwoO8Kcd9NKmqak7Z& zuQV>7FWslZ^{i>S+|a%%ww{9{QoZxtKb$IL{1?|h@I82(sXWrto{tu9O}m5kxNi8g z!xeyaScC8RJoSN~&c(T4oQ)BV5KZDZ`=+`ClSEVyKolVml~jvff0h&9GEbfoY5=5B zshyz}oz{ZG{w0uqbh}|WAEnZ#RLj&$5#WqMR1(L&5C949H9!;^opY#xrI|;gU6z$_ zUO7*ym(c5n+HzuiHO=1_2CFZU3Cg~%McgsOntM|xY9d?4D~(d>#aEb-|Wv90;bMd}knj4y+jQzJ9kNyT< zb9?{r!*yt+KD$m4fUC~Pu_c?vW>Zsa;=Nn9zhpdOfj!PScuhZBF$%b>6tC0pLW|(Y z)DYXKa(d_(^U5LaM5}x#+NotWspWKo%iP`?3;VRkiP^l1X2ZZm@L2d~+x8}z>;$6!&qA^0p+!LIQyH1-2cwAojl4qlSElOfVug036 z{o0P|#hC<$ziDOv$kbwH&C2>RF~#;g5PMxxzXA8d%C}!X{qMG~aa#!4bhg63arx|% z?A2fcvYb4;b_Z@^1cy$5ukOWTPYSMuP^_`v8TQSjX`2QUB5yP2x-VO!s}3lFj-ny1 z^jzr=%XgA?(UW5Hz2ffydS(Ba845l^@yj2c571>H;5r>u>2dj#hi3VY9sJ8G3j(x1 z$p<-ciuj4K+YU6n-8yc~ze8j`UyPSImAYQOsO^dx@XO$>YFSMuwbZNrsHsD3tQ>I_ z^!;L>DOWMFzX%BKtX<_Zhn>zhx92bDnYik9FnGb8b2fpPd5OW|>z?~^=r$cWcnzZhrsE3m z%4ub;yV78}UZ0|QU_Mr!rH%ny#~@%g@$4l~E@?*Ij}a9jnnXVvw0}e0$+z9N0k99v z+itkqfR=L2Uo0vKH2oN)rT#P=E^^K&sp#mVL*iM*hs?Zx2lE&}X|N*(i7=aDb8i#H z!{)fu+;us%Ol=$Pm}nGGtNPHL7XR&1;&q_f`ak+ywhUJGMLpNILCCQ%dbC&w6a)(RYa*Q> z0|ac9cfN@Ykn+&OyFp+|6ha6eywu`uH#YE?0zeQ+_lJgBiKX(7{&0bER55LYniI~L>CO9bAcl8Omy{**}u7cjM!X|NVF1f#?Su(a_Ak@AI0 zBqn-+OY@~(n+N zt<2hL)9AC`i+qw5XfM9cwI~;P1sv~jeMlVWRP^DGtdg5AT;jgr1`xp$ID?D(4w2)A z^#y&|=2>3$4q1n~>P2I1&sUdm0TsX1{zkBIaLW2nIcNykY1RS^@u}+mL9t2VIr)7r zB(#y>eX-&1FY$>@HoU_RixOY2%WH+g2q$pBw*7&y|eU zLSH-=$@PoM;GmL^hCG;nMd4pV2$B__R)+dkw|})r~U!?&hBp2 zzg$2i73WsW9yj;#Xf~SksAv4q{re5{B#6j5_-^=50+^VX{3`(<5Ve00U@3D6yLHlR zbdFtrXy*wNOB&Z)H9TUGj&S*v*3JzA{VD!~5_lYU?;l2h1_m<}{=pRVy45@iI|6%( z^1!YRG61w4*vr57C{dLWoSybsQ1R7-7&ar}?xQO`~X{$Da)y{^p+>6w!LRQwS(Wzov08^s*TZ?J&{zS zNS9ZuNkA9rQT_P&Lhy4%j1&KZRythm+$*VM_-?pSX7CM$tr|upUl+icuyvhr$bOaGaqS4Q1E z(OP*Sf_4|>G9pb+{;^GAo;1(<_fPS!_W5QX)nnrdhl~OKAw46*XG|A0!ef`LO27A! z|9c4l+M?-ZXL-DZ_RiLJb8(2y0=J{5>{w$EEd^ILAT3s?U6`) z`4q^2W6?nK!$}$^cMJ+gTTO&DI%$l8<8gT4k+nzW;cVvjpNYo_P4Cz4ASC8PEl{q< z&r3_Iu83ngf}T{{`{MZT=wy!Tt%<+Do2{+vxpP%#5%zZ0~ZO1+(~-RUzneXrWdsGc-zi3Ny$vl74b*QhV4T9ePttib z@6eT^XkEeDa?96TNO3lq4`%w&+`BRQehbFhaW3uC&P z5qe0NZ$Yt{K$FGJu17sXJ@GjSRJ*p6kaN#}n-stjamTdyribleIF*Toqc-baX{1H7 z=>9VFRe)rzEFiX&rspo=c>SpB`9^`tSR=pS}7Z@keOTlAm`S64F(`kg6T3 z=}be7!=|}2`F5?K5^pP;?h!|TsipFGmAPS14V9UXV#S5lu(L~68!n^W>1sANW}PgY z+a#sYN#7Uy)A$qaO}ojQ8Sx(8QXCM)juZ}$-|Bicye&q6a^xnYP8;j<=*xhDAJ2$? zE9kgNT2X)?p|%xzqRK!lPN#Jr27zMgJ@@G*>a=|qY6RBu7Q&_$UMym_fE@+$p)V+b zGHagsv{lysCx%_?EwZY44tUPz0%|@N{|XGm)rr4R%oC{kMA6f`<1}$N95C(D;vI`a zg>`^scTzq0uGnSxqvyX+$f0d?{$??cSn^Zz;3Mj7x9t#ce*oQ$_M7 z83H9+AXv?W)-nyh_0X5~=gHc&c-p@7;9y=`tJUY>8k?NO&>R9|*+L*gwbMY}RDn{beO{?<))^fSPMN}*{iTQLR+O)aOv;4uDC!nwI@VGLZ`171R!tE-%J-X6qL-1;g_g( zBXj@}NbdVBAf){1`con-#uD!rv`jiPh*<7F-SvzEbin^9zt>**LErtss&fGDJlW;E z7OY8-jV7(NTkJB28qL_dRhXXItW(({PWNjA=_Lo16PX7$27!3C1Nw83q`b*z-rWG{-xC)PYVL zNGQkI>Pd8arZnZND@*T=2)e}f_$kb`=-MbYr{7_%<`SX$9mdCLr+wLBrOB?`iZYmzov*G3C{YNGXB)4?|<^RY-Dydae z`);869JN<{##VVsYd!#tmD+dQb9a~CVLAhUQ$MW2V2{?EaMqz`8SV-KG*#{!=UO$I zm~&UQy?4nugq>n z2Qu<-K$MSeSweTSzjOeKhzl_4$hKp_!ijspqKDzKOK|p(RarMae{=hVdGQEQ5Hy0Q zT`A9AP`d{(!V4el#1C5(`?#(h$a!wRVbuqD4n}H_0 z$NRX~fRvYppvFFK-8}%H_k373>sDDl!G<*X8Lb~Uas=z z+wkX!HbJD%%S&sDqj_E6P>1kQoiGvuNce2>MJ#!8%Um2XDi*JYa_*E?n3<1|@8&y3 zd*fE~Hj-myth__w{+|neWxjapzgB3v04AmVRWG`5zsLp+u35-S-H&p!=O0xf>J7Ju zI`E!YD|4Tyc9rEjPmAs8V3yH*@YV7UzO=kTz292{1Sn)_`S@Rg5@0+2k;#0JKjM<~ zK>VO7jPJyncc)zId0O%rM}`Z^%F5#av$DFG&j4%owzJsT43kPh)QA%cg9&9Tbxp-yPGzKCRJn*2D%%HyGm@Gr{fD!MExU#GMfi>ug#_k29`0sAUUFss7e|_H$(+hNWZ7v(0t`5s9d6&k&!K*L(q=dOlJAuPh=Ek>?a%njOAZ!1_ zj`d$^LnIbgOyr{s!Y0Hv$FtDp5}F(WsyvVBkw^61coyQp@$8F7I_BYK)_lA*hBjVI z%ze3wTN8;WU*@W6c1Cpam5rW~kujrhXmWl7>@41(>1`J!~4A z$@hsR8hr3el`cc5- zZs*(EmIP)CJw1xjTGJJxiuYXd^5iZ#F&v4D8c@6oNrS~hKAR3ofscWynm>Ku*ucvh3kUOJ|4f>y?zZ;*vc z;51IY7hcd}6S^$_ZJ^V@r(0$Ifif1h{!1NC+Fc&?;B<>xBXl%5iD73CDoVnNU{9qA zP9Tn!MpOC%DE8AQ4YNkqxeHTift*DQg0)ZQg3DJumXD=Gw34%C+}Nzut{j8RfnKamji)l^3#rF z0ftzO@R}_nC#7!3d%1#7!YG7X?>E4=rbm=$bEvD&nx42cViIZAhL>5nPOcvnTl8f3 zm7}Y_R;33PztB*mzFN7w9!NYR@#lE+eBfLrb zCFal0euwF)=t{KC=_jhZemf=PT6M98rmL^>jOUagE9XGBldk1CSd6*fW?z8BkOItZiC2fwn)qof1NBJV~&vK&ih##1oc4EUW z_WjW90@xgeB^fkgl$j*pOF5Xlp+CNZcmE~`-?%?dy=HNzo?Mp`JzLrFAn;e;3zzcv zbD5;8%C|Hajvx^0OIMp)O(46-rJ{(m&1~+gaoIfVqfYGnYHlC4V~Dv{wMiqez(=?j zVA&M5ca9f5c8^Dnz21E%0KBTz98T)2I86IhF{we{7xVS~!BLyB*u8^#U^#H$f%)$c z0A6*k()#-6c{3=bM&vR|(=^pp;fNq9AyEoG-n83O?mgDu+8;F1!B%qMHGY35cX()E zy<*CN;#!JSPIPL_-pRlT#2RadmpU(D%J(zO+TzY7AAp}vP8Jn&f&jbjI+$^ZU>!3T zbxrdQ94XxpsWuNfLbB(+dx+C8fytmG)+0_dX`a;WYw~~5I2#J|RQ_QQ7E@#c?uygv z+cF8`bjuR~ynpUbvV_h{C6gl-?hlMNcHf9-r+yGt{#Pdc7u#RTF2_ec&!I&s6(Q9D z&Yu~6`jtnhO5iN;dW+_1$pVi6>x327kys_G$9+1D9WrQG)#umIvuNmOes7pu&Ce@A zAka$bG2sr#C8E@WXX|ARk8JV+L|(soyt@Oyq+$X^Iim|spd~DxQImGy{V>l0;#4t# zwP8=N9>JId^WZm9FOkk(m(%ze9WQx@19&g=dXEh$#dW|TQ>(0bS)`egWx=5@JG#cr zNm9G@LhHjCk8ru#ZXN_2X54Xj=ZaW2E?NUj?yn&xx}Ua*b2CnUP}sCAQclSVG}`yF zx020HY&zAwx?S~1hmwRrskB_pHBsPP6m3euRwDLN`w0DjmSvH56k(3;eJ^DpnhHE3 zP%+z;IM?^njW1O+FesYmV|ZA5R}B@moh?A~v5lHpDz&nJA8Ln+7~Ox(eiOzww&qP7 zeK@je7YDy-_=!>5@vK&gL6aP$G%iFM%;rQZiiXLl`C+Qxua)7dw?0@1x;~RojmiYq z_Y)n|EK0b_s<}&0dP*`62=^Vo^)yCb8f>qJn^c(T`+QD#MX2N!{FYK*JYATsbWLu1 z`}9(2d7=gn+(vPGIq}#FUj%8juT^NwCo(K8LA}avVn@EL80+mpY~qGI0CWjH+6}xm z)bBS*aKQ^@cn&X&rYO23Y)O_uJFu|JYI9^>S|A2y(4;|mq*VKhTYl6oT0KDk47<34 z!(Jt1_fK&2I44vMWI{JSVzvrUe;?^+>a|a6spgSS;Jmn5BW<#l)bO zc!Z(E@P^7u$W8d-F%eC!T#!U+$P!W%!URJOl~=3ii3a7m5ta^fcvKQ>IHCiFVmsyw zNf&9@0_ReX#9Z{6?%I(x@-^~Y;4H01Lemeiziy@s#K5Ux0*fG<$1!SI5Msqi2TVh5 zwO7oIGnC&92JOl@U2w$(`V!!Uhi-;^UsGTG&~`?5d*K)W=h*gNWi>Q?pA{DBO>sPb z+g8-5xBu~@ryinL-?XR{yv7Ud{%SSC<`bi*80B7Pj#Vy8B|<0IK@3nU*h^`&uW7$- z`#^&-x~eaZb5ujSJ_jOvBc9TIh}3tJbaMbNNO32Y97e>f^Iv;u5CYk4Z!IkfKWyl3 zUgL8MM){PS?7A|qflrffCuOeK>_Dk_b-x%!=CkYkcy!QqA-?(?c{UlEhSAj0G771` zCbVR*mOUh;r8R%4TARUe27%BWL9?+23!Ml%e2N=BAOk{MA2CpMW+}ys0~CD6T>R^~IM|&6%KMK?(F2U27@kku*~38< zkx&89&kt(&+Oj3-tk!LHAdF@~dHz5AJ}@^lkA8t*FJ&s3**%Q)zMB)IFo7-(TKDh} z_PFr`!Oq)vfqNm2OntMCd||+_riKV$Y1QDQDq22%B`*By+x$cYkKmf_Sj21*SgB;T zdESIo;?hhsvV9TUAk!R^w$z;we22Zoc3}0P> zFYZXho{tOhb5gifBN3YqDT2K6V|*%2;5blwh+y;-sY{T%%hvoNMx4=w62-f{pJ2c)~A#1`>Kltd8 OR8Pl9yGZNa)Bgn_N1Pe} literal 6642 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 diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index 222f8955396c6324eb03708f74adba51ee356df7..b04ce88aa25753d94058f9d80a69ceb0cea9be9f 100644 GIT binary patch literal 16311 zcmch8XIN8Rn{EOspdeW3O;kj>Qly5WA}XL*C<37>9R-n2P?|~!h|(b-MS3qHB?3a| zpp*boga}9tErgcjtf22Z-#0U7X3ktQ=Z9q{Yp=btv+n0E&&sP?+8Rs;ISxV~5GKuQ zmvtc!8b0bD`UBvVnpfYrAP}gm=Ux4$m#thZoNXRIwQ+KUK-?4a-_~FMBEb^Wy?E#C zXzuF*liC)s5<23EHmNunf19Ikvdf*Ea@3Uc-!!~wXY{5pZ^gy=5S%@g;5oSORl6#@ zE%9?zo}a44Ln2S-4l44rsqwqMM#O*q%+_w4`$2-{;y^~Nn-RG%6N!yMCfhhCB(#@35?ccT4>ErT3?3v>v zj`^pij{is!t=G9KkWUk}qII^{N~HQ~M7cnWiI5qS7mGcqCTO7VnS(1?yR=@u>mp7@ zK5YAW;OiNIq%Y#~!-R=Jy$|gxJ9)lPXYWv3caFO+AP{8*&C9BH-4ho_nIpLMTxV8% zzZ7NvfPJZGj$SObZ$Q1fKtpFyHulzHXuqU|VD|OU>#th{J<+N z`&b|l({Kn41k!Ot1p@JtqoD`mh-Hw~9>k{r{B^K4`b6ni7#XRG6-hDM@Vaq8hOz`Vzs+-f{~L*e5Xu+dvKm+1Jdm=4TP`ak*JfsU_*u0~H<NAx+-Pn6;r|R@=xqr8AW{9Cq0tpQcVCl!C40ap+9hd zC2}$d+q`__&TAzoB*ifcwO@cU(LS?eqMVd#;mpkY{GJZ^`v%O~6-`&ntsHq!tkl@`Xc6aX*WF0@J3XqvCKS$lzb-#2KR1+=Mb(|M{DS~lPU|N zt#nR%Cn|Uq*oH;=aunFR<9&(M54@@o@eLX*O95X_imkiO50qDo3r7|Q2l59So>Ynq zTcR^rJ{GuJI!_BT*~JMEZQkh$TExf&Yz1g3mK*XYO%TTG45O78CU6UPwD0Fj>q2Z4 z7&J^!!OM)WV!O5%ZWBb9;V#Nc`NUe0SVKcf)z&`ex}P;ReI>s%2Y-Db!kq3A=4X60 zh};pG5*re%ohTgzAG+j^O6i`^F@F@1Jc zCsY(Yf>5!R^*aMLF()Z=c8GiWBcIBabtv;pfgPF(0WDi^)=pMOU(t!@9M$95eGqm* z%u?(m|LJF<$mEu*ZWC)LxVIS|{%~bGMy|!kQhS*Ha_-(^Qgq%;pCnhKZyVJtHO-L( z{Y(vf(t5p39JQw3A7K=+HCRs{zZ$dc%HqjirhaV!Jcw+kr_9P_u%SBHR--&M@KUsr z+-gsC?sD;RKSIdFr4xuT#MR-x`oa#adVq6M%I`h>D z`Z`r! z2GI$FC-jVN6H@d{+4RsB21%UlJn40t>lTuQ`r!FQs6!S5A@Yg@W(Q6ek9`7`rOKop z&Jbq!apE&?air3!e(Jp&;X;^bj)B9x%JwEMN277&Iac>DJ4rE_cgOa75&a-@@WxWQ z)hYC$Lx&9Vp%+jl@B#Z({=OYN`RYo`N>rbEOVhl`$k(hhm^T(}#Ti%ga5P$D_?ohe zWwBU{xIBGIV_YW0_NWRKJo1O&q?q$;Tpqthb68Cm44oO}qPgybb6bR}M2UE=h80#g zjVBYN&#pyz*g9Uu4Opu))2EQ7YrG=9<6=^zq~2qlG_~+`XHAa$BbWwLR7-FSI?bK*!FT|U)z$T>KfFKz zX{-FIe|e#Pa?<=hsc-sM@&vp-2W>Os+Hv!BSq) zzC4ZwSk~|@EP=STuH=gcESs-p<*V93bBJ&&=y`8X7L%J*>+rqfGkzzPm6naXq^$Sf z8lXs(xsp(q`~oJ`?4Y&-#kUZW2H5b_t@mFI{pMz_{`J~a4R zR@~`Q^mQ3g!x-+XB*~jOQoQIdSw~2mkxkbhjLlw*X%f8l-^NRjq9$e z8sz$-_RCN`1@GppBT9ZP7EzkVa(8{YG2*8PfggmL0$TvA@O9=txR))>mG4(PTw(kE z9#qDkD=&z?Qs>zVH_~F*q~)#Re%c*^Ku(A9UZwlLF3$g4oc_Z~{;v)`a3G?ps_L69 zpVr#inq#@Neuv;Quu$!XO3vhxAN)Q5tCoXGT?gh7ig}b;CPu!}($Xu%?K5hzadA&_ zxsBa;`n`|lP7L`sH8tgJ!#f3wIg+W%?EQRKTD*=qb+wz3@OGw<>;sRd)Mn2n6G^PND&ERY3#Ex%MjBe@<6-p#?A)^3$gXVz$SzpCL!jKAjmm zvv!DIB$KCH+S)ohIs86RE=%fLr0t;W*uFg~x zEPSZJnxUJy%?2nN@thITgzlR{c6$d-DrI?WDvII(eX^;1O`RG$AB8o2Xl>1DIke_D zZyn?8v354t@jp(4gh&>$smvkG@}^1{GCpou^SYhM9*5@Q4iEks^xL&_C#clzdYPH= zS7F5bTfEEAc}fqNa(NgDVJ(9J%`tP+$BG!V#C~6(b*fV%VlsiHkmu(!qVTm@vDkae zK?nKFj;($?_GbI++tq0c*Ii%dp#a?x?=ocdn-Q7Rw=%r>I3{6&G#d4Gg9gk?${(D% z9g1;~40)huDB@^g(6>AXb^A=c5xz>Ta~Yi)^X`oicA}LS@#h^kcFK>Z1z9nJwY|Q5 z7y>!^g*lD(e@s&Smq6k}+Y&AM;ClOW>(W@A1+c^hH{*Lt=g>{w=Gf&0D2Z68O2MU4 z(yAs`FKXEmnfO9NLar3sDI-IQ{;uBpS(O#2qH9l$$!jFPyGP00I(;ATe+`)gm?6c8 zU>r5<1DB*i;>q6PcA13-PzBs=-QNrQ(&lm{RmAb0Nu^N9B*oD0!ap4T=$S!BQD;5J zKtdXWiSKPnW{t}Fb#!#xMUPdv35A46bO_4)Ez{DsfJ`GC&Kg6!b5q$*LOv%W&;A?f z_N_o^^GFB7#J&&d9^cA%>ifFG+5}>GT+3QZG0e62$1|=@O1WhP+&5||7ntLa%@_M0 zJA#L@q)Kwso+Ggux_t%=Fm+fT`A4+%@0xOlKHed+tMtx3X~X)sUxAs z2;CitJs16~l?s+0{?=(MV%`MiC3c3j9&c4l0jMopG}heEr%&TiaVvm*^ED)R@)~ry z`?W~IR}=L+gzqyI^0X)vR&Q|Sk9h>bjSn2v^x;{}ZLS7)QRAfoAryi+9?J?6u)d~} zDC%pbCw!BixXvtZW}xo!G?vY-+?cC0Z`_m~-%q_BEq?hJC%9hcyqxRF!Zhj$KQ`#k zVlm>X2a#rqo_rz6-fMBo^_Yk{E2tFj&C6y`=C#PJRz(ZP%f+^3sdW2pQNYKf$NRce z(`IfJC_iJu^L$i%5too4TnQxIdQj=nI8;YzzI2TzUxM-AuZD)0?+Pi)xgB?=zgK`W zt%Fd@+9URmgALrT9$vDy1E*gjc`j>_6y6Wu&$iY`)ipj^;Bff$yk8(z+u*E^4}VEf z#Kw+`?Vig3;+x<+haNDJvi;ddo5H*2bz(5;$`DAz@x6op23h<+*`W@amJ=~3gUtJl z<{cz^@6OqOVHbB3FAjIohdU2wNje`Yf_&GC8ThKF+nxK}qH=F@7kZ6k(Q)g}w3Loe z8A9Wa`{@*}6aO2DirC~|`Vsxrseu}N~bv23wC;`uBhL3U2Q(7{o2u>UHK=HgeFk0o7opxJ*ODEjP zhu?i*K!u`ltl_R0341VwK+fIQ^8$-ttRZV$1Q#xcd{eYBto+f?^x<}zZ;dDSq2zLl z6iSpF!275zre^`+qb%9qt+l{mqU1jMp!+<2*rn{4vj5xP(kD)DL4IQ7OTombzl{ee zcYnmRW^c{@5BI?1a>(PRCGny}e5+xrmV#5v@B4Se*CMv8?Ntl`qF7GOzs34_QW_P@ z)UvJu%-!srhiz#{#7m1bk07T*`u&@{rN*HT4!ZWkK0Z3#p}ywbOa;)gnQb>gFjIoL zlllD~qHH`#3Hw<>qOv^>jp-g{_!#c?IgKF%-iG&^Z%~wyO#y4(lf{uF%L`4@ZfqtNZ2*}#xx1Vx1g$I&(qo=)ER#NjBzD$1<5A`a0 zVc$ycW9VOL-~Tp7-XDk%7K4@AudQ4yUXlJ#-9NBbn-sl%cr4l!#WELCHYN!uZ3iZY zMMMpx#IDY0?KM8+*`@y*NB|p+{w=^h{%Cmgh`QRTHUv74)(Sh9_Q|u+$iS$oM-Cw2 z%cYT$IrrbLBan9wDn}H!27vzBck2Vs-4OUy5_ZH-jdD+h@55it#Z|6=a&NOUixTgo zqDH}FOFn@_PP#1_&$Zz1$)t$M)e!=L-JmKnQ5Ap}k-rE^B$H}EXaNNPQkm%WXUU|B zHO>gn-*YfDHPr{Bm1ZZBGxvZ*V2yHJWQ!N)`0YGSraa_6w2rt`wSlgSod$k{3HXt_ zOMZkbi+UIQtJERNpqGopESYz)KEm779`MaV%~JlOE1DtBTyn`+y08CaN75*1?b(!g zq=<;rjuT)K1=E3_jc+B17nlj;;M%)u{#m$zmnT&ks^95r3Ug_Y8eN3@x&r~G@O}n2 ze(SU_?5DIQAnV*div<2iXy;*>PG$dv$v-0M7tm0w?7$h0TM=v7S-N3gjMoM#X$i_1 zfdKpzU?)E1_SyC1+AAv0^Ka%Lrd~z@JgUGP!_Ga@mw82{X4m48@|j;>ShYx(oQ>wS z{&5=BIizX4`@V}cMK7l}4(q$nzBX>mrCX)vUr>_VxZp(aXes1Cnw`x)a>h?e7NsfP zFx~X1mce7p=PS$3(%UP5L6+&8(Ezaxo>AWwOgmkro`Jgp_9(sXuoO`@jPUdg$1%4` z-&~R1^Fr2dEP|x^6_?U2xUVWfy+(Xq<$JhY7l2|4z6SC9bS4V_IMVTW4tccPL_B(~ z@Jzl&Jit96r7k>>`L6b-7>`3U;)yzYQzn&!UW}ITo5t57_d`AxIS(U5rY~rQSyRJy zQ+*G`pWt6j{{IC#|8Go?qbXzvXuun}&!sv$JFEVNTai_Jbl$cTRTn6FNx)#JzvDT5 z3dv4C)WZ}q%QZ_Lul5#e7#cFDq|(am-!@0z$fzTS^2h(g#l`&%KU1JD&A$3Sho%Ei zzW+!K>kjNld3I*+jQ*xI-ZTAjx>=wwb2`;XQkm`c(QRI8W!uZ_q-m{xp|3++=TuMl z0{{OI!bHvG+LYMXRKz|m5A_!U)LlTc48VvtD~CB6yv?Ir1ZJ*LEr^W$;E($c)MIt* z3FN&xzw9U$L$<4>Edc1_e!Pc1=UMc9NInq`0)bD|DGw{}E>4XHYZ^v8LdGB-7njZu zSYrmtEwW{AQZ<`Mh6j zA7V!XKPRyE&7BnxjoV(_26QZ(TwPQYvCds29~a!AvDO|B6vPq~+J_EmiuKAod(Tl?nu%<)Vpe9ibV)p{%+h7})C(O_-Radi7EMQcrcnAb>0ZXQFL zdd{<}#3SJiqbypW?;)!^ROjPWzD)WSuHN4u*qz!RBK&5Bny_3D2YT`1^ws0JS2;cR z1nsE*a+h$Wf@wVd+}_O~O?T~p#H9L}_PtVqRaXw+SPHUczU)YBtrpwz(cj!y8qGBx zxE!ky8}koJliF!IqGH9<`FL;u+*!o-!~lB4Cvy9Kxpd2Bspx<;#Jv_9nE)+O(x?>hxy9nw>Og6E#%tY0zoh|NqMff>swu+jR{OUrzY#`s#Ogz3-DMfBQj@@wMkr{*>e2e(tj^ zewI@O#O@*HdS_Y9{!TXj5!taxNu7T|p4Nmy1~tR9oVd=!=Qi?0<2GQ|Do^zT_<&Dq zS<`9hzf<|;Mx^hlf5Lc^cpBNxQ6-gfo|C1J(h9=Bxc;$TS-+8I-yQbA-8OlOaqX2> zS6HGz7}dKLJq&x`z+|Re+`qF|B^pL+fDv@1D+5MQA!UCdh0UFWY~H*50yKFWp!rzh zn`zD5Zo$m$sy)IXa>M5CD}eZJe(hDZFV*kO)hA=&Mq<=ZA6_>79q`FDd~;PA2VW9WVvlNhJ$D5#Kr9k&8#CfkbbjN>nEvB@p&9*S)Ra2RH|v}ZV*_BhpyC!X^bRcT*x zUpC#U=;mIO`XgJX&roF~_0tf61*C1S{qP8~q75&O^b6L5?^4rsZ~AutV0(fWsB2~K z=tc{+uijGcSIpL_h3WJBI2x1z5n^&OG+^HX98hj&lQ@B8m@$Zhdd*~|2sh;tNYKoX z8T2MK4Xmt_Z1J`J@5Ys75ort2{LpmTdGIt9vMjlOZgA(K<@ZY(fa3YSbUO#+rxg!U%n8e zia%|s;d&{3=f4WqJ34OuQ@CDCM%wr1+#3pD0ZZ}&>u+xuuCR1VVYi?26aMZAFwZnn?TSkdHMs=K<`+l|fA;y?uCxPP`}g6$X622=?|SybW!X`UNw@YUFV&E!9DSD1 z_GD`EBQ=3fyLu^^Ykd0@V@S4!1Ct@=ty+NXTYzps>Hzq66q@^&`eovj`PdJ*>ez$Y zy+p{AFxTH-NbM#CL`a~{0%K`ENWj7ibp?&QIi%+>x!B@c@SFK|z*ABaPM9p1yfi#; zdo+=YS^@I@62qzFht!5!Ei@k_n6jYbHv9}fX541%zx;@S|9-iJP0-mmWJm7Sc=rB? zhmBMwxOY7t(AUmw#KVH$3BBW9b}zgaRDu*JuXVE4;d@0FC=-bb3gdr5d$-lS9BUl+ z`tABb;J~al=pRzZq}Ki-HWyg7lZuwTO4@BoPk|(e{KufB$6w%mFvw4RNYM`Ui#>ai z#1|>7i?uU33%y*Icw0fMx!}mra%_xw33Lk-rRUyTs2cxkTilP6sKM%%RoI@R+&2!& zgQKzGmDu2iDIh5WFvN(<%@Wv}Px}P~8eOE$5{@H@onuve!EU0z>+D6Bw^vvCX{!k6 zva-ATQI$SR)-ylq{WXJc{Y~@gQ!>-S9bwNKHr#dzhP6Fw-I>ve%dWx_6L=YovTY4d~3M~#4!To6jB0ImAb^UZVQ7) zl)zo_BVea({lFCm5nIQ^lU%&sh{KgH1!}naLB#W*% zh+goe)>J#CFaz*8_$~b3!bqm}LvIWnf#i_I?SnPTJ2ba*$}{!U}BB z(({oMvC)uI4c-iV5Xhy3Xck?RAdHC>0->wgt%-S(^pm>RB{On_fu7%zW6AgBcH-W^ zxac3Z_xj*Jg8ub>m;VXu-==NpN>XT-;dMGLJMLZjFVL@c!*~77zsYvU10h>Q z7A{jrxlPjoIKIlJH#5AM<}~IVPD5##<>w?ZhdZHTud9aD_XClecxEE#Hb4T&cKdD> zQtfTAOm1ngT50sVy|DuEiz zidY^dL+D!qjLE^6B6yfD^<%{GdJn*2z%H7La)>CeWR%f+5cvrEv$FFKMNF++jr4># zobn5A_9DH?&$mOYLyqE%CGftk>0sQ3N?oEot~pF|9BTJw%Np$Q=l~4N=eG^mtbQQ> zfr6aRiO`M@VbXW&jtr&Sgn*8=t_LG-l$It7LFL)QgH*b7W=M57j5-gse6wyHIdEX5 z?pJw65evA9n7|L&orfX^o-|K!`XL2Zt3z`qAI6nPmtu7H`m7#hQIk& zgjyWWULX1SVWOZ<5kKvTC4S4~y)`vTi{Bm??%R1n@nUjd^UsvoP}&$rW{Bcq?*ppqUF zfF`6iR`CVU!dd^(R#MM-(4#x6Bj(q z8PS6XljR$x8qkIp6-7m+zWf1Ev$r4k59~iTbG0jy8g2$ONdfY70BMq)y~+zL&_ljCaAV@K*n z7e6fJv9k}!Ye`8`YNrrP1A5zIep2&a$|eQa#6dA%Oy6ZJ8k3+F;L_x)U`boUWU=X0 zlI!p9fnq#{9ZPp7>41B9m0D#6`WN$uV>45E>fJR-rxHp`F-jEl^U2F0<#_rd+| z$xe_%)(Tb}9}n1z5>|X!-?U$eooxC5de418re0rL3AyrTY&~~T>l3;>^a=D4c97*n z%{8&Q1LSI*o9e{OZIayKUXnnU^HSSx)<{zNJ2I_-w~XURmi$XqT{Qijy3M?B*fo8K z731izNktFga;M)>jg1mqQ_zrH`-M)xJ9V*L*F+@Os?1*587JM-eO`fSwd&XH%`($|=l}H@BC={|{hwV`$--2HDVrd+R zf#3Pa<}w;E{0+pd#VD?m2^HaKqS!GBcM_&BL2W$2*^s$xE^m|mY{Xn+3NTDs%bURE=sCM6^m#q$IQbVmA0e<>tv@^&uN!7_n@EvT`#SgG$a7n zfbsr&|K@)eRR0nsy|yc?t*BWjX}^wtVjWr4%5~?G?@}#2=#BVIZhUvbQ@3TdJi$fD zwT@VZ3vrECv)W+`L=!01eZW{gTN;V$zheD6Xet7p>hIL)F@Wr&ey~XbsEV)t4;-t` zRI?myc-|qJf%Dp!d~rzZoP1K(Ds1%;6L3*E_i{@Z_(A7R#}+`W2&j#`ZSmjKc)!pj z=?^u|scQ3|?q5FQzA?Gps{XAfw`0E+HaV(Ovc=yNXw=G zL^8GH(jE160eepV0MtaOg+CyjN0|m`!X^JS%YC&~FoqHdv-`!V(qR4xgd$C+(#xT( zRgo@xe$Py@GlSYSucdHsMlAnQrSApV?>y5raO|WK0GuN(AudkyLO@Hb)k6HlkELq- zl65fh^C#9vNv;DI$zLUwkKAN2F%`0@GcA`%0ei=W{o(;Tvi1V83mW>}VFL&H@+?w$ zGF^UABV;hZllEJlg{Cs25NE!|qGn5Mx$@(=rV`d*W?r7n8T|vwFEkC-_S=EXh^Zxh z-vA^(hhxt$)N#r>KF!W=H8&}?{W(mVo+{F=t;hZ%c-J6JdmPem;3w53u1+DS z(r|86&rK3<-7QSDt3NlU1+L9%T`N#hkuOuzFs}HM=o+!YWK!NudC$Y%VI<^;kgNwQ zxu(vM-=@=CYs{wpwCrbaF^L(=S5FgpAoaK4`=k7Sx9HXDRw5OzONiU6OlOe7lFUI{ z{&`>L;@1aJ9XdN4vFXiH>k#_w0}-GQ=!dH(QG<{cuxAUh&xiJ=L)f-nO~^==V?b;w>X_#0G&2U8K3T#ELiwd)t*pS4FJN4#PgzW6sPcswNaXw^@W{ zKKLMl@)!+fRo6y+sffMP!NH@{QjFJfKp(F0lwhi59`7i7GG~<-5A`cL`BV)X#WV)9m4~bIn)uq?ZVO_U=^P2H zYO5&^7e`;;Ja;mf;^pYGxvbG{+qf%Pi@ls1u=nQpy=0i)am3T!WrWl4b`QQUL6H!=Lvj^|ELW&)9?px9TCI6MA*01-jT5}` z%TCWhNFMnVzLPY=Oo_?NW)@Y2*gT)oTGgt3{7Wia2_*V7O^QKacauIi9x>i^4B-{~RwEH@^K-)v1glQ=@VXnNCG0Nmp(`1>> zIH`|PJR=^2r@SSkGSTyi@+G9(`4sDHL2}r{MI;EaLP!FYRS!K2S`3 znxV{GmsrZ55N6gmSW7Fnn-GmmvZrC_!4P%vLeDATb_@?fac-q{8+30qDBnZKX{cXN zOJCnQ@5xt!(G(H6}xKe1$M5*qAgeKIcw& zPA&{3S8|e&Gr{94Uss(RZSk`AI3Ia`#rw4+y})6R;*_nbZXd@dSYx*W~gtgvRTWO5uYr>ng31;(lo z?pt2&1`7zi(d^wO^x-6o@)gr|vCCbX9|xZ;z6l%$jT)(&L)x78SX8eG*U!y(cw2C5 z4`uc$1sAo2jS472qaTPM5pZaJ)lrAbQc@FveTZ1fkxXyR~7 zh_-MJlhWqGhb6};;|Pf{zEH1>m7{?2t>c#2Ul$cuN_+1ku$;0uAsiM1?5)a;K)!F& z%SS@x@BiKa{=X1Mt0*RE8<0x(c9^R>#<%t+KOzkZ_fdOXncwLX9)b|nqj0yoNuBh8 zS_sdxq6SqiN~>LBYd4qeGctPi+KUyn?J`6nL6S;3WEY?iiQ`oQe4J(WDP{tlnz2#4 z+pFeHk0n-%n_kW=rCWo2Rebl%)C-*YP7(ON33FMGxUmU*Tme5{^5erO@SSwwz->~m zGdJg^;+(>+eD>p=%OC+vnVlRKh`Vb8yBfc|d5kWC*B7JF>(KRb>{;9Q2TFR#m2y(z zm#2%<*b2`A9-Q5d+^gB$HF0Z#ky0~u!{tIT7f+*gmuk3D{fgj0zN5;?h>7@Ydj68H zdurGdCcV!=zg?bq75^R7?z8>>|^mRY$IeRS~0lv6gw*PVh{a+?4&5o zKH2+2*1U-I_T)x`$WWbTcI$oqeO(O04(WK>Qxmv%dP=U(VboR0Jc>xU^lV|iX?$e; zV!pNkE+TB>lWgt#Z4#Ducg8kt)NKJDGOo0dJkWKodH2noF0n53&xOf8R^<=dZoFh% zw+5%n>lsTU@S$+BWDCL$9nWsHZJN)o&$>@`!eMrcMphl-`U-kR>u;(iuZZua&W(?* zFO7%GOds!V{b-p+s=`vt30`q&_GL&V=d8`u80Ly+1sA4W9$}BqB)a+XW1nxXG5hij z$KFvCw5}}XslT>)2^TtZyf6u2v#?Uu9+Et4ZFLc~)45iwaq&3&hfuv{Q5;gN-sM68 z*bO{yoA$1Aw-&u+H`d7hI`mGnFfMup6Fn)%9+o$Iv5({;--@q!6^WhkuT zcsIkaT^_`Fb`9m}M*56>t+w>ia)&*F?)7A!UGiGr)iF|S&5qOj40kkM`zb~Um)}hC zQ%eo#YE3_h-}yc{<2xO1+xu?3y_! z#~kvSW!|X`_d5!LQS_X4?h7nyPlAHB1&*@kzEm39`?eQQ`;Wc2Rxpt!X8%dZzU;n* z)@JrQafTEB$#1^?BUSQmejxUHa5B4!d{W6a5Lqg%y|mYq+}VO6 z{_+i(XV+VdthyW&$z=o@$d9ycf!L6cNt0^T5#OD~B+zIw=a5m3!)+7hbLA>mHhcRH zLHtl3=pstIZF@ht6(^{ELc`0d4_#p5M0IFQySIy0W(6YIFsLAt6d$TQO7@(~9x`#c zARA|K5Yt`DY90J&3>pc{gvMt7xtA@?g7`6)knKYpplawU#+%|2K$4rvm&yOpu ziI$ERFvr7DF5*2rB=o^d9yP|+YT}4Y9m`=Uytg$M3}cc~tLqKw zn0k1S-7eeN78~3RP;DJ%n;wi2c3RAppAqgS)WR&=b@#mCT#dRq7|Q+xs8 zYY)3Q=g`cQ(d%Yc9*FUuo&xrUFxeBsZ1_$$O)@yKA^6wZsfe{F?py*ql)=D$NcYxk zaPP3+r>c*G_`~+8fceAD0^rwFmQdS%kfkj$u&*pH$p6o>I4k*S+8kfhM+`^};@S#)|Nr z_lj~)4ea#BVqnHbTX$eQX98Lzr?3xS(o^bK+5Pt+O%P7E!nVilIHoUsK5f|>4Nu^7 zvrTY7dxW0vsFtJ5kbc-or+M#haNvsUKsLh|0b7SO+%B(~uFboNPG;4i> zKC*Mji_x{XJLK6W%dV6WMCF2|`rEMEGS|AFw6G1IPK?382|2I2L#}MH2-@&)y;Q9` zPYaVd+}=(9ZcM+}>A}@qy+wSDbVHD`9qHv}E~41&ypNhHujJU>oCaBSS-iK- z!L4sSq#HXSP9(I`30`-+f+6ue-46l9XP0n#<3^#?6VubkE``G3K7{S!aAfzZ03?#v zeeU}fdh4qO1K;N)gb#eHIEh!7{F6A|N<;g@=IqepV8Z4;x8sVTF4}pG!9OnYSxYnU z;z?oSVq#meG49O!RSpGq>dJJpp%B(NP9517wa6hvKpEbZ8zBlB>1l! z0vlo?!t^^BzuTqBm_5Q2`J@eYRI#j)&h3g{D~pQ6+g`Z$m7|;mp}ms@m=FZHaY|~` z*ubSL=d{|(z1I*3tX(^7b8sws7M3yr3|&gC$vTSHVC=DFhL%<1yT`Zc7E0!b%)4#& zWs)}_JM}29M}(ciF@zowQ5fR->;CpneC?LabAfjlcES_%Hf;BHnPfXRGS_!qBWD~x zN>o`XEk4Y6Q;3Fsd(L}eX$~t`osd6baP5lp*c7bk5W~^WrvqB5=-mQz8LV)d7z<1; zoLR{?{ZnbgYw=OUEvp)5jJjG&P)to$1mY)gWIwc71ELBiQn2&dA_dqa_uX$~x80-4 zQtHq5A-6qRhq@hiN~hLh8*r@rW}0i-Vf&DeO+M1n+zjgWGrc0@Gp5=sgzJ~D3t;ZV zRYrP`@xQ}}U(jYR99TKyZOy|Qdv+fSd*O5Z6(0<;@elp2gP4@AEb3!^|nHf41}1tH9P@uzE3@i45a5 zZDJ%9iJ literal 6485 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 diff --git a/maplestation_modules/code/datums/components/limbless_aid.dm b/maplestation_modules/code/datums/components/limbless_aid.dm index fcd0be2f8ff0..6464bd59503b 100644 --- a/maplestation_modules/code/datums/components/limbless_aid.dm +++ b/maplestation_modules/code/datums/components/limbless_aid.dm @@ -26,9 +26,7 @@ var/obj/item/item_parent = parent if(isliving(item_parent.loc)) - var/mob/living/wearer = item_parent.loc - UnregisterSignal(wearer, COMSIG_LIVING_LIMBLESS_MOVESPEED_UPDATE) - wearer.update_limbless_movespeed_mod() + on_drop(item_parent, item_parent.loc) /datum/component/limbless_aid/proc/on_equip(obj/item/source, mob/living/user, slot) SIGNAL_HANDLER @@ -36,16 +34,45 @@ if(!(slot & required_slot)) return + ADD_TRAIT(user, TRAIT_NO_LEG_AID, REF(src)) RegisterSignal(user, COMSIG_LIVING_LIMBLESS_MOVESPEED_UPDATE, PROC_REF(modify_movespeed), override = TRUE) + RegisterSignal(user, COMSIG_CARBON_LIMPING, PROC_REF(limp_check), override = TRUE) + user.update_limbless_locomotion() user.update_limbless_movespeed_mod() /datum/component/limbless_aid/proc/on_drop(obj/item/source, mob/living/user) SIGNAL_HANDLER + REMOVE_TRAIT(user, TRAIT_NO_LEG_AID, REF(src)) UnregisterSignal(user, COMSIG_LIVING_LIMBLESS_MOVESPEED_UPDATE) + UnregisterSignal(user, COMSIG_CARBON_LIMPING) + user.update_limbless_locomotion() user.update_limbless_movespeed_mod() /datum/component/limbless_aid/proc/modify_movespeed(mob/living/source, list/modifiers) SIGNAL_HANDLER - modifiers += movespeed_mod + var/obj/item/bodypart/leg = get_braced_leg(source) + if(isnull(leg) || leg.bodypart_disabled) + modifiers += movespeed_mod + +/datum/component/limbless_aid/proc/limp_check(mob/living/source, obj/item/bodypart/next_leg) + SIGNAL_HANDLER + + var/obj/item/bodypart/leg = get_braced_leg(source) + if(isnull(leg) || leg == next_leg) + return COMPONENT_CANCEL_LIMP + +#define IS_RIGHT_ARM(index) (index % 2 == 0) + +/// Checks what side the item is equipped on +/datum/component/limbless_aid/proc/get_braced_leg(mob/living/who) + if(required_slot & ITEM_SLOT_HANDS) + // note this is backwards intentionally: + // right arm braces the left leg, and left arm braces right leg + var/side = IS_RIGHT_ARM(who.get_held_index_of_item(parent)) ? BODY_ZONE_L_LEG : BODY_ZONE_R_LEG + return who.get_bodypart(side) + + return null // unimplemented + +#undef IS_RIGHT_ARM