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 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 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"