From e3d69de1f29e6b14c5994f2f8a7925f053dd540b Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Wed, 27 Dec 2017 13:47:09 -0800
Subject: [PATCH] [READY]Adds picking up corgis and pAIs! (#33442)
Some pAI holochassis types can now be picked up by dragging them to yourself, and can be worn on the head!
Refactors how drone pickups work so it works for all mobs.
Same for corgis.
:cl:
add: you can now pick up corgi's and pAIs, how disgustingly cute
/:cl:
---
code/modules/mob/living/inhand_holder.dm | 84 ++++++++++++++++++
code/modules/mob/living/living.dm | 30 ++++++-
code/modules/mob/living/living_defines.dm | 3 +-
code/modules/mob/living/silicon/pai/pai.dm | 6 +-
.../mob/living/silicon/pai/pai_shell.dm | 18 +++-
.../mob/living/simple_animal/friendly/dog.dm | 8 +-
.../simple_animal/friendly/drone/_drone.dm | 2 +-
.../friendly/drone/drones_as_items.dm | 44 ---------
.../friendly/drone/interaction.dm | 6 +-
icons/mob/monkey_held.dmi | Bin 0 -> 988 bytes
icons/mob/mouse_held.dmi | Bin 0 -> 1240 bytes
icons/mob/pai_item_head.dmi | Bin 0 -> 1297 bytes
icons/mob/pai_item_lh.dmi | Bin 0 -> 1186 bytes
icons/mob/pai_item_rh.dmi | Bin 0 -> 1209 bytes
icons/mob/pets_held_lh.dmi | Bin 0 -> 401 bytes
icons/mob/pets_held_rh.dmi | Bin 0 -> 399 bytes
tgstation.dme | 1 +
17 files changed, 147 insertions(+), 55 deletions(-)
create mode 100644 code/modules/mob/living/inhand_holder.dm
create mode 100644 icons/mob/monkey_held.dmi
create mode 100644 icons/mob/mouse_held.dmi
create mode 100644 icons/mob/pai_item_head.dmi
create mode 100644 icons/mob/pai_item_lh.dmi
create mode 100644 icons/mob/pai_item_rh.dmi
create mode 100644 icons/mob/pets_held_lh.dmi
create mode 100644 icons/mob/pets_held_rh.dmi
diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm
new file mode 100644
index 00000000000..6a2308b6217
--- /dev/null
+++ b/code/modules/mob/living/inhand_holder.dm
@@ -0,0 +1,84 @@
+//Generic system for picking up mobs.
+//Currently works for head and hands.
+/obj/item/clothing/head/mob_holder
+ name = "bugged mob"
+ desc = "Yell at coderbrush."
+ icon = null
+ icon_state = ""
+ flags_1 = DROPDEL_1
+ var/mob/living/held_mob
+ var/can_head = TRUE
+ var/destroying = FALSE
+
+/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, head_icon, lh_icon, rh_icon, _can_head = TRUE)
+ . = ..()
+ can_head = _can_head
+ if(head_icon)
+ alternate_worn_icon = head_icon
+ if(_worn_state)
+ item_state = _worn_state
+ if(lh_icon)
+ lefthand_file = lh_icon
+ if(rh_icon)
+ righthand_file = rh_icon
+ if(!can_head)
+ slot_flags = NONE
+ deposit(M)
+
+/obj/item/clothing/head/mob_holder/Destroy()
+ destroying = TRUE
+ if(held_mob)
+ release(FALSE)
+ return ..()
+
+/obj/item/clothing/head/mob_holder/proc/deposit(mob/living/L)
+ if(!istype(L))
+ return FALSE
+ L.setDir(SOUTH)
+ update_visuals(L)
+ held_mob = L
+ L.forceMove(src)
+ name = L.name
+ desc = L.desc
+ return TRUE
+
+/obj/item/clothing/head/mob_holder/proc/update_visuals(mob/living/L)
+ appearance = L.appearance
+
+/obj/item/clothing/head/mob_holder/proc/release(del_on_release = TRUE)
+ if(!held_mob)
+ if(del_on_release && !destroying)
+ qdel(src)
+ return FALSE
+ if(isliving(loc))
+ var/mob/living/L = loc
+ to_chat(L, "[held_mob] wriggles free!")
+ L.dropItemToGround(src)
+ held_mob.forceMove(get_turf(src))
+ held_mob.reset_perspective()
+ held_mob.setDir(SOUTH)
+ held_mob.visible_message("[held_mob] uncurls!")
+ held_mob = null
+ if(del_on_release && !destroying)
+ qdel(src)
+ return TRUE
+
+/obj/item/clothing/head/mob_holder/relaymove()
+ release()
+
+/obj/item/clothing/head/mob_holder/container_resist()
+ release()
+
+/obj/item/clothing/head/mob_holder/drone/deposit(mob/living/L)
+ . = ..()
+ if(!isdrone(L))
+ qdel(src)
+ name = "drone (hiding)"
+ desc = "This drone is scared and has curled up into a ball!"
+
+/obj/item/clothing/head/mob_holder/drone/update_visuals(mob/living/L)
+ var/mob/living/simple_animal/drone/D = L
+ if(!D)
+ return ..()
+ icon = 'icons/mob/drone.dmi'
+ icon_state = "[D.visualAppearence]_hat"
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index f2fb61977b3..1c5109ef40a 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1057,4 +1057,32 @@
/mob/living/onTransitZ(old_z,new_z)
..()
- update_z(new_z)
\ No newline at end of file
+ update_z(new_z)
+
+/mob/living/MouseDrop(mob/over)
+ . = ..()
+ var/mob/living/user = usr
+ if(!istype(over) || !istype(user))
+ return
+ if(!over.Adjacent(src) || (user != src) || !canUseTopic(over))
+ return
+ if(can_be_held)
+ mob_try_pickup(over)
+
+/mob/living/proc/mob_pickup(mob/living/L)
+ return
+
+/mob/living/proc/mob_try_pickup(mob/living/user)
+ if(!ishuman(user))
+ return
+ if(user.get_active_held_item())
+ to_chat(user, "Your hands are full!")
+ return FALSE
+ if(buckled)
+ to_chat(user, "[src] is buckled to something!")
+ return FALSE
+ user.visible_message("[user] starts trying to scoop up [src]!")
+ if(!do_after(user, 20, target = src))
+ return FALSE
+ mob_pickup(user)
+ return TRUE
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 69902624098..904e9b9c212 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -81,4 +81,5 @@
var/list/obj/effect/proc_holder/abilities = list()
- var/registered_z
\ No newline at end of file
+ var/registered_z
+ var/can_be_held = FALSE //whether this can be picked up and held.
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 20849eeda6c..50b7dee271f 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -11,6 +11,7 @@
health = 500
maxHealth = 500
layer = BELOW_MOB_LAYER
+ can_be_held = TRUE
var/network = "SS13"
var/obj/machinery/camera/current = null
@@ -57,7 +58,10 @@
var/canholo = TRUE
var/obj/item/card/id/access_card = null
var/chassis = "repairbot"
- var/list/possible_chassis = list("cat", "mouse", "monkey", "corgi", "fox", "repairbot", "rabbit")
+ var/list/possible_chassis = list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE, "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE) //assoc value is whether it can be picked up.
+ var/static/item_head_icon = 'icons/mob/pai_item_head.dmi'
+ var/static/item_lh_icon = 'icons/mob/pai_item_lh.dmi'
+ var/static/item_rh_icon = 'icons/mob/pai_item_rh.dmi'
var/emitterhealth = 20
var/emittermaxhealth = 20
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index 8a3121166ef..dad7d710e7f 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -68,9 +68,12 @@
lay_down()
/mob/living/silicon/pai/proc/choose_chassis()
+ if(!isturf(loc) && loc != card)
+ to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!")
+ return FALSE
var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in possible_chassis
if(!choice)
- return 0
+ return FALSE
chassis = choice
icon_state = "[chassis]"
if(resting)
@@ -103,3 +106,16 @@
/mob/living/silicon/pai/movement_delay()
. = ..()
. += 1 //A bit slower than humans, so they're easier to smash
+
+/mob/living/silicon/pai/mob_pickup(mob/living/L)
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, chassis, item_head_icon, item_lh_icon, item_rh_icon)
+ if(!L.put_in_hands(holder))
+ qdel(holder)
+ else
+ L.visible_message("[L] scoops up [src]!")
+
+/mob/living/silicon/pai/mob_try_pickup(mob/living/user)
+ if(!possible_chassis[chassis])
+ to_chat(user, "[src]'s current form isn't able to be carried!")
+ return FALSE
+ return ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 96599be846c..9d5acb2c4e1 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -30,6 +30,7 @@
var/obj/item/inventory_back
var/nofur = 0 //Corgis that have risen past the material plane of existence.
gold_core_spawnable = FRIENDLY_SPAWN
+ can_be_held = TRUE
/mob/living/simple_animal/pet/dog/pug
name = "\improper pug"
@@ -119,7 +120,12 @@
..()
update_corgi_fluff()
-
+/mob/living/simple_animal/pet/dog/corgi/mob_pickup(mob/living/L)
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "corgi", null, 'icons/mob/pets_held_lh.dmi', 'icons/mob/pets_held_rh.dmi', FALSE)
+ if(!L.put_in_hands(holder))
+ qdel(holder)
+ else
+ L.visible_message("[L] scoops up [src]!")
/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list)
if(usr.stat)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 4d45716983f..0f265bdb071 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -49,6 +49,7 @@
dextrous = TRUE
dextrous_hud_type = /datum/hud/dextrous/drone
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
+ can_be_held = TRUE
var/staticChoice = "static"
var/list/staticChoices = list("static", "blank", "letter", "animal")
var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable)
@@ -67,7 +68,6 @@
var/seeStatic = 1 //Whether we see static instead of mobs
var/visualAppearence = MAINTDRONE //What we appear as
var/hacked = FALSE //If we have laws to destroy the station
- var/can_be_held = TRUE //if assholes can pick us up
var/flavortext = \
"\nDO NOT INTERFERE WITH THE ROUND AS A DRONE OR YOU WILL BE DRONE BANNED\n"+\
"Drones are a ghost role that are allowed to fix the station and build things. Interfering with the round as a drone is against the rules.\n"+\
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
index a85e421bdc0..162b216117e 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
@@ -4,8 +4,6 @@
//DRONES AS ITEMS//
///////////////////
//Drone shells
-//Drones as hats
-
//DRONE SHELL
/obj/item/drone_shell
@@ -62,45 +60,3 @@
D.admin_spawned = admin_spawned
D.key = user.key
qdel(src)
-
-
-//DRONE HOLDER
-/obj/item/clothing/head/drone_holder//Only exists in someones hand.or on their head
- name = "drone (hiding)"
- desc = "This drone is scared and has curled up into a ball."
- icon = 'icons/mob/drone.dmi'
- icon_state = "drone_maint_hat"
- var/mob/living/simple_animal/drone/drone //stored drone
-
-/obj/item/clothing/head/drone_holder/proc/uncurl()
- if(!drone)
- return
-
- if(isliving(loc))
- var/mob/living/L = loc
- to_chat(L, "[drone] is trying to escape!")
- if(!do_after(drone, 50, target = L))
- return
- L.dropItemToGround(src)
-
- contents -= drone
- drone.forceMove(drop_location())
- drone.reset_perspective()
- drone.setDir(SOUTH )//Looks better
- drone.visible_message("[drone] uncurls!")
- drone = null
- qdel(src)
-
-
-/obj/item/clothing/head/drone_holder/relaymove()
- uncurl()
-
-/obj/item/clothing/head/drone_holder/container_resist(mob/living/user)
- uncurl()
-
-
-/obj/item/clothing/head/drone_holder/proc/updateVisualAppearence(mob/living/simple_animal/drone/D)
- if(!D)
- return
- icon_state = "[D.visualAppearence]_hat"
- . = icon_state
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
index df67c720b48..6d87563ae90 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -29,7 +29,6 @@
if("Nothing")
return
-
/mob/living/simple_animal/drone/attack_hand(mob/user)
if(ishuman(user))
if(stat == DEAD || status_flags & GODMODE || !can_be_held)
@@ -49,11 +48,8 @@
return
to_chat(user, "You pick [src] up.")
drop_all_held_items()
- var/obj/item/clothing/head/drone_holder/DH = new /obj/item/clothing/head/drone_holder(src)
- DH.updateVisualAppearence(src)
- DH.drone = src
+ var/obj/item/clothing/head/mob_holder/drone/DH = new(get_turf(src), src)
user.put_in_hands(DH)
- forceMove(DH)
/mob/living/simple_animal/drone/proc/try_reactivate(mob/living/user)
var/mob/dead/observer/G = get_ghost()
diff --git a/icons/mob/monkey_held.dmi b/icons/mob/monkey_held.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..6a9eb8aac78341c1507dd4648f7bc8041b4a07b4
GIT binary patch
literal 988
zcmV<210(#2P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+
z(=$pSoZ^zil2jm5DK|eaJGC-CBUOouGbOXA7^IPlGp#5wHxV_Y&IJH+sWhQ%1u0$t00QhuL_t(oh3#0uj@uvxbpIcRxdhcQL*)=%E4<63$t!m|oW9PvzJg{XZ5aK|KfRk{k
z1>!fn3fN9_FJTLQcnBz5sT`6ISl~k-nhhU_OlcUF{nuDv(>EYum+yodVvaW;E*hLc
z3FoC2<99;GTf-k`a;u@dgD@=+jWeK1DG5SZKzY}qD>%w3P>?~Sc+8N&G-H9b38EvW
zWN-*1cgKvo^D~Iwo}aP6uk$w$DZ+&E!&K_-HxyuL0XQw3u-s4MaFsv4gIe*kz_+pZ
z0;ZkyqV9$?E|IVYs2!fG#3UZcOk&C&ORzoR+h{XeY!VAZDP6LBwE$U2ZaL=_D^{#n
z@h>A~;w->|xI}SCnK;)-dm~4yJ*N1Ql!CmsI4an5C{1q@!VR9W2))1tQY^aRIZAAuj9koVng8+VepPus)}8
zUQCY6p*VIUiCI+xH(?A|n*D-507N$j3+1>yCMs|asH;Et-|+|D)Lbnd2%EA>9p
literal 0
HcmV?d00001
diff --git a/icons/mob/mouse_held.dmi b/icons/mob/mouse_held.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..92a8c03bfb2d5f36c673596007c1934614baf3bf
GIT binary patch
literal 1240
zcmV;}1Sk86P)G_P|?xRfB*oIc3YEXIe;)Qp=~*tWmjNA
zBV%J@larHrdU~m;sldR%Ad;xa00001bW%=J06^y0W&i*HsCrabbVOxyV{&P5bZKvH
z004NLQ&wgO{>!i&x3`11Uc!9Vt?d_1hptNB`9i8;R7(Z2`JsSoibv{!Xx
zm_V98)IPrd!aTHb7yXoZ#Gu~S2g3^egSZ2HZFzePv6VPJp0mZMl{-B}HU&|)sA+uX
zQtzVr0a_7X-OFn}$DjL&yGpy-cq_KXU)#I9?;RZg00000004lGLOjBn-`&bf_8yKHUeGeyFS&H4D@Jvp~`0*`Gxmd#xokKNJT97Kqt
z4EvAZLI_PN^JCK;<4bCv><#YPV|=4pX@%Oj|CkbMTQWbN=kOrx&}k19xPepbPL9*Y
zbGgeidGPRLoQ1TMX^Yw}cgI9W`2)T#zGlVEUG5=qS7}%0Z-rsR4ZbX`SLClP00000
z0002szoCBp@9yI}XEl-6z9;8?J1vjb#{1fKsm#xBp(Wtv6I(JrKaQHJ%;dq_NIVt78vZt_zV0hqSFb$keQNFXr^VO(rim4E
zuFtlP{_Mq`bL+XjD3@KV@o(kj@?!1jl%6k6JM(s$2bco@00000004j=<5Ugi{M{h7
z&PCdr^LMA})ja;I*gB@isQSj5zYF4{)`Oc`d;KZwO)`I1^__M6QT(ad=%&_Qf7-*)
z$Twyo3_5!&aKx@8{f4T>koO<-$7-bc+w_Uc>D1I00000
z00000zLYgRr+h6Oz`C|pf8~k*>+}khRA%l!IbW>#
zIjt1%?9av(=86DwapY9y5QfZ?z}wLvt?O?rh&DPY%G=anb|oRgT{-WBGG0CRabxfJj^
zUXAn8ivZt}nASL&Az1`ysL|V*zZ>_C4*&pgAN~N$vKSOJa=uFd0000004jp0{{R3ySYS9
zQ%_G%d3kvNt|NMSdNTk3VPRo7I5-#>7%(s}C$Rt=92}D>bS3}*00DGTPE!Ct=GbNc
z004-3R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;Zh
zDainGjE%TBGg33tGfE(w;*!LYR3KBSD77FlvnVOQM2U+tC9|j)q>+m=ttc@!6~s0~
zs7y{ItR^?Vv^bRrRe9N|l?0U)B_<_h;}3G45Jtj(r1|au00YrUL_t(|
zob8+eQ{pfXg^O*PU_ur#h=<<)|C{#`kWuVz7-*q$vmetkx-ofdk~)2EZJO^ankO7Q
zi>8(1UDq|}g8>0FkUB7U@wAIRvuN3Pw7@x?khT|(or2#K6
z__YtBzyd3WzSA;(RzqZc&5Cty0j3q?0J0<*lfB@x8w&{
zBD`sMfjN6Y+9sRh!RafTNKlA<`Xuk-+<=|o3)l$yAh0{gykUT8c`4`l>bnz0T7-|s
z7{3;-G!F+?!Z2rjP&jXSilQirq9}@@OiE~Kw*;btC);~mRFb}MM+@eSYzoZ(0jq3Gv2R}LY$cR
z+9QE$FBoW6PLQ*XHxG~c1cl|E-*{R&!W`d9
z*!rz7#g~~Tfm;G2Aa9a62oy6Ig5+?YTKNg>6=X03wtrkB`QTR@Fr9sduJbNo^923U
zWvDq^2PU-lia94G>9P!ttm=F3NY6#<>|uoCp(u)?D2k#e%KwOa!%1{^a`26}Pj(q;
zfQ%Ha>7$e=3JPt^Em(yKQ5@`#r(`W_5GF^dV!q|_v|K^Qj*xQg9b4Rn1X4_q_!Q>y
zMz(qo`eLe!rWCK?k>z$*a@1w#`(^!q9}@@D9X4
LJ@
zcl-VRhH#me-
zB&$$agO}{l3!2^F)KvtI1WEf?1_D3kEHKv}{`Kpz1)Z_m004jp0{{R3yS^dQ&T!RIu;fd85tQuLQ=rMz$Ygs0GTrY|1)D@VLd%PNl8gnQ&TG|
zH2|(7d3kwbV`DP_03RP8EiElLI5-#>7$_(xCv^bGJ>_Wt0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#
za*U0*I5Sc+(=$pSoZ^zil2jm5sVKD|F|#NszeI_PGbOXA7^IPlGp#5wHxVxe7-lKr*#arb
z%^PlB@E&$W1;-}X6)&DjwcGFPLF(b<@lsQjdcaYsprD2-il98a%2*vqy@3ZJSXXV=
zR{Ob1y|196+Si2s4@!2CD*1Y_?t5&r2n~;THE6VL3p#FTWe7+V*w!j2C
z-Qj|k+AFS!eua^-@mr~E16)v-*bEl+5w_sb^RqjXW_XC!NNKE~!2}y21hxr_<9IlN
z@VqBZA#y5w%Hx6>9%%nZ&kqdk^RJ{^f>9mw8$L(=%TE%9VHk#C7=~eRk~aeQoy@&W
z$)LCMcF@GV)_qOs5CqA6PJ)sU}AdcY$CN4oyJu*d~u)L+-Tc
zLQB}_4is%gYCGRUqcwTsXkCT`ODNaBZG$X=^qmcU0RsVsqAZ7BL;l~Tfp?F0JE;}H
z84^Nh>sOSRVc)C150v8(rDWKUbeU
zu{fBmORm>&S-B|JsB
z7>3yn8;j?8xBCUtNP@Wl*2iof@G-6&&*?`M*r
zAK;tw27=K!AW=r%;MWA=qF#V+&f7UG_>s_hVE*ChgogCO-~U~be|QP!A71GBhXy&1
z!{7gXRQ{oUfZ#=6LV|1NAD+}Kz~^)nOypZH|8T$w@HqnozyG^l{$b$-_`F_1i@9R{
zp%>uux(TKIub6-M#kS*3s|W0s!tpwWVSWbx02VR
literal 0
HcmV?d00001
diff --git a/icons/mob/pai_item_rh.dmi b/icons/mob/pai_item_rh.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..7e0919afbd0aed742c549604a310a3057be6c98e
GIT binary patch
literal 1209
zcmV;q1V;ObP)004jp0{{R3yS^dQ&T!RIu;fd85tSCz`#O6QYR-T0GTrY|1)D@VLd%PNl8gnQ&TG|
zH2|(7d3kv=003iSV;>(MI5;>hEiEW0C>R(RCv^ZGLf7s90004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#
za*U0*I5Sc+(=$pSoZ^zil2jm5sVKD|F|#NszeI_PGbOXA7^IPlGp#5wHx>Hor1K(tkwjPK`TbiKSggYah8sc*=JO^&f%agV$
z+paC$X=m!HG+|{`-|yH})?)wZvgm}|yN}D2d3n;7W!ttUby%>pf{&3x4qx|DbdHwo
z7~vA^ROc78gawDt8VVFr58tF{9Sw!hK0#IZdXUuzGXxJ&es;71J*aJdE!+dmbB0;N
zIrj}hcDTO7g4L+`C>WCPUd4?vFK^~UlpkY1>{p<#MTCY2{+<3UAqavX2!bF8!Us4x
z@Xu&cLz4if_@OyhT4)+u1zC2%VxwU0a|{adqM4FA(l0h=p5gihc>^y|EH~#CY@h^O
zSq(IXb2d?+-8%B>7+-&
zrWilRC=}=55L<2q{=UAKeIIGyTPbF)rNpU&c+Bkv66|yrDJXj1Qmj>g1h3nmeUHJw
zHmUt-XN2@F#SZri2Hi-eO^ve$-FvQi!*XL}=o}LSK@bE%5X66n@RTaVgd^Ky>4ok!
zB7+I<#bOGDZI8wrzw0rAQm%xs?ePdLW%Q(I@RREf!?jO92w%NSF#L#Yk7noqGne&G
zXJ>}URTmy{?ePr9HLtsJRW+;Z}wIHT_lAy%hCDtv*-;T%U
zn=KOHPLG!Ng4s@QT7o1&8}D0za_-Z^T>|4bI4#NvZF?Cy!@^$Wo!d~lN-M`vj~U`N
zcqtgw-rgy-cC9k@+I0kNSIiJMiRlW~*!IG|`YL`o1=(DI86|if5H~?wdo0NZUJ2$z
zr{q{PN@|ZwmLjO(p9z8>2!bGpm-FtQ$Y)(jdRY8*Pin!)OMblf`(u0
zPpZ_ClgsdY3O%EJTfcw=&qnaPMQr}TA@~)1hTOjhYXncRfL*JZfeAHAnvEGSi=H
zJ%GZWK7G1zSi#p~Mrm#a3ri^_E)4#;1T2!xgdLH8ZhJ*bv#gC
rp#6Yl*0B~9E5=wxpNkp`L*JZfeAHAnvET92R0
zOo76mK7G1zSi#p~Mrm#a3ri^_5Umbd$-k5O6zXb0|VoLW#$~%{;cDG4OmS%7vBX(9H)gi9ais8aGScX~|4rJ;UMNDPgc-h0n>B&z8XsD%?(u6BrHJ)feoZ#ksJ-mvKcl
o(=H}67U5taoi5)3kqNvE{*8QpZ{1Y;26Qxor>mdKI;Vst0G(ZrPyhe`
literal 0
HcmV?d00001
diff --git a/tgstation.dme b/tgstation.dme
index 79b40f67de2..2d78c2f0763 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1680,6 +1680,7 @@
#include "code\modules\mob\living\damage_procs.dm"
#include "code\modules\mob\living\death.dm"
#include "code\modules\mob\living\emote.dm"
+#include "code\modules\mob\living\inhand_holder.dm"
#include "code\modules\mob\living\life.dm"
#include "code\modules\mob\living\living.dm"
#include "code\modules\mob\living\living_defense.dm"