diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 3e8592e9d0c..d5f65385bf2 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -27,16 +27,20 @@ var/list/holder_mob_icon_cache = list() ..() /obj/item/weapon/holder/process() + update_state() +/obj/item/weapon/holder/dropped() + ..() + spawn(1) + update_state() + +/obj/item/weapon/proc/update_state() if(istype(loc,/turf) || !(contents.len)) - for(var/mob/M in contents) - var/atom/movable/mob_container mob_container = M mob_container.forceMove(get_turf(src)) M.reset_view() - qdel(src) /obj/item/weapon/holder/proc/sync(var/mob/living/M) @@ -79,17 +83,23 @@ var/list/holder_mob_icon_cache = list() //Mob procs and vars for scooping up /mob/living/var/holder_type -/mob/living/proc/get_scooped(var/mob/living/carbon/grabber) +/mob/living/proc/get_scooped(var/mob/living/carbon/grabber, var/self_grab) + if(!holder_type || buckled || pinned.len) return - var/obj/item/weapon/holder/H = new holder_type(loc) - src.loc = H - H.name = loc.name - H.attack_hand(grabber) + var/obj/item/weapon/holder/H = new holder_type(get_turf(src)) + src.forceMove(H) + grabber.put_in_hands(H) + + if(self_grab) + grabber << "\The [src] clambers onto you!" + src << "You climb up onto \the [grabber]!" + grabber.equip_to_slot_if_possible(H, slot_back, 0, 1) + else + grabber << "You scoop up \the [src]!" + src << "\The [grabber] scoops you up!" - grabber << "You scoop up [src]." - src << "[grabber] scoops you up." grabber.status_flags |= PASSEMOTES H.sync(src) return H diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4495ed41756..17fe2df713d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1372,8 +1372,8 @@ /mob/living/carbon/human/MouseDrop(var/atom/over_object) var/mob/living/carbon/human/H = over_object - if(holder_type && a_intent == "help" && istype(H) && H.a_intent == "help" && !issmall(H) && Adjacent(H)) - get_scooped(H) + if(holder_type && istype(H) && !H.lying && !issmall(H) && Adjacent(H)) + get_scooped(H, (usr == src)) return return ..() diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e19795b6413..5b79cde5de6 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -274,9 +274,6 @@ O.owner = H /datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target) - if (target.holder_type && target.a_intent == "help" && H.a_intent == "help") - target.get_scooped(H) - return var/t_him = "them" switch(target.gender) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 579ec2e6d61..f2974d8a161 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -413,8 +413,8 @@ return 0 // Handle being picked up. -/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber) - var/obj/item/weapon/holder/H = ..() +/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber, var/self_drop) + var/obj/item/weapon/holder/H = ..(grabber, self_drop) if(!istype(H)) return H.icon_state = "pai-[icon_state]" diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 7c25296a5ef..c55939e6aee 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -135,11 +135,6 @@ else return ..() -/mob/living/simple_animal/cat/get_scooped(var/mob/living/carbon/grabber) - if (stat >= DEAD) - return //since the holder icon looks like a living cat - ..() - //Basic friend AI /mob/living/simple_animal/cat/fluff var/mob/living/carbon/human/friend diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 0ea2a05dd42..37630abdb6d 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -89,11 +89,6 @@ else return ..() -/mob/living/simple_animal/mouse/get_scooped(var/mob/living/carbon/grabber) - if (stat >= DEAD) - return - ..() - /mob/living/simple_animal/mouse/start_pulling(var/atom/movable/AM)//Prevents mouse from pulling things src << "You are too small to pull anything." return