diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index bd51e930..c91ec665 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -73,6 +73,15 @@ L.put_in_hands(holder) return +//shoehorned (get it?) and lazy way to do instant foot pickups cause haha funny. +/mob/living/proc/mob_pickupfeet(mob/living/L) + var/obj/item/clothing/head/mob_holder/holder = generate_mob_holder() + if(!holder) + return + drop_all_held_items() + L.equip_to_slot(holder, SLOT_SHOES) + return + /mob/living/proc/mob_try_pickup(mob/living/user) if(!ishuman(user) || !src.Adjacent(user) || user.incapacitated() || !can_be_held) return FALSE diff --git a/hyperstation/code/modules/resize/resizing.dm b/hyperstation/code/modules/resize/resizing.dm index a8588c58..2d161a5c 100644 --- a/hyperstation/code/modules/resize/resizing.dm +++ b/hyperstation/code/modules/resize/resizing.dm @@ -67,68 +67,86 @@ mob/living/get_effective_size() now_pushing = 0 return 1 -//Stepping on disarm intent +//Stepping on disarm intent -- TO DO, OPTIMIZE ALL OF THIS SHIT /mob/living/proc/handle_micro_bump_other(var/mob/living/tmob) ASSERT(isliving(tmob)) + if(ishuman(src)) + var/mob/living/carbon/human/H = src //Both small - if(src.get_effective_size() <= RESIZE_A_SMALLTINY && tmob.get_effective_size() <= RESIZE_A_SMALLTINY) - now_pushing = 0 - src.forceMove(tmob.loc) - return 1 - - if(abs(get_effective_size()/tmob.get_effective_size()) >= 2) - if(src.a_intent == "disarm" && src.canmove && !src.buckled) + if(H.get_effective_size() <= RESIZE_A_SMALLTINY && tmob.get_effective_size() <= RESIZE_A_SMALLTINY) now_pushing = 0 - src.forceMove(tmob.loc) - if(get_effective_size() > tmob.get_effective_size() && iscarbon(src)) - if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) - to_chat(src,"You carefully roll over [tmob] with your tail!") - to_chat(tmob,"[src]'s huge tail rolls over you!") - sizediffStamLoss(tmob) - else - to_chat(src,"You painfully but harmlessly step on [tmob]!") - to_chat(tmob,"[src] steps onto you with force!") - sizediffStamLoss(tmob) - return 1 + H.forceMove(tmob.loc) + return 1 - if(src.a_intent == "harm" && src.canmove && !src.buckled) + if(abs(get_effective_size()/tmob.get_effective_size()) >= 2) + if(H.a_intent == "disarm" && H.canmove && !H.buckled) + now_pushing = 0 + H.forceMove(tmob.loc) + if(get_effective_size() > tmob.get_effective_size() && iscarbon(H)) + if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) + to_chat(H,"You carefully roll over [tmob] with your tail!") + to_chat(tmob,"[H]'s huge tail rolls over you!") + sizediffStamLoss(tmob) + else + to_chat(H,"You painfully but harmlessly step on [tmob]!") + to_chat(tmob,"[H] steps onto you with force!") + sizediffStamLoss(tmob) + return 1 + + if(H.a_intent == "harm" && H.canmove && !H.buckled) + now_pushing = 0 + H.forceMove(tmob.loc) + if(get_effective_size() > tmob.get_effective_size() && iscarbon(H)) + if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) + to_chat(H,"You grind [tmob] into the floor with your tail!") + to_chat(tmob,"[H]'s massive tail plows you into the floor!") + sizediffStamLoss(tmob) + sizediffBruteloss(tmob) + else + to_chat(H,"You pound [tmob] into the floor underfoot!") + to_chat(tmob,"[H] slams you into the ground, crushing you!") + sizediffStamLoss(tmob) + sizediffBruteloss(tmob) + return 1 + + if(H.a_intent == "grab" && H.canmove && !H.buckled) + now_pushing = 0 + H.forceMove(tmob.loc) + if(get_effective_size() > tmob.get_effective_size() && iscarbon(H)) + var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET) || (H.shoes && (H.shoes.body_parts_covered & FEET))) + if(feetCover) + if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) + to_chat(H,"You pin [tmob] underneath your tail!") + to_chat(tmob,"[H]'s plows you into the ground, pinning you helplessly!") + sizediffStamLoss(tmob) + sizediffStun(tmob) + else + to_chat(H,"You pin [tmob] helplessly to the floor with your foot!") + to_chat(tmob,"[H] weightfully pins you to the ground!") + sizediffStamLoss(tmob) + sizediffStun(tmob) + return 1 + else + if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) + to_chat(H,"You curl [tmob] up in the coils of your tail!") + to_chat(tmob,"[H]'s tail winds around you and snatches you in its coils!") + sizediffStamLoss(tmob) + sizediffStun(tmob) + tmob.mob_pickupfeet(H) + else + to_chat(H,"You stomp your foot into [tmob], curling your toes and picking them up!") + to_chat(tmob,"span class='danger'>[H]'s toes pin you down and curl around you, picking you up!'") + sizediffStamLoss(tmob) + sizediffStun(tmob) + tmob.mob_pickupfeet(H) + return 1 + + if(tmob.get_effective_size() > get_effective_size()) + micro_step_under(tmob) + H.forceMove(tmob.loc) now_pushing = 0 - src.forceMove(tmob.loc) - if(get_effective_size() > tmob.get_effective_size() && iscarbon(src)) - if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) - to_chat(src,"You grind [tmob] into the floor with your tail!") - to_chat(tmob,"[src]'s massive tail plows you into the floor!") - sizediffStamLoss(tmob) - sizediffBruteloss(tmob) - else - to_chat(src,"You pound [tmob] into the floor underfoot!") - to_chat(tmob,"[src] slams you into the ground, crushing you!") - sizediffStamLoss(tmob) - sizediffBruteloss(tmob) - return 1 - - if(src.a_intent == "grab" && src.canmove && !src.buckled) - now_pushing = 0 - src.forceMove(tmob.loc) - if(get_effective_size() > tmob.get_effective_size() && iscarbon(src)) - if(istype(tmob) && istype(tmob, /datum/sprite_accessory/taur/naga)) - to_chat(src,"You curl [tmob] up into your tail!") - to_chat(tmob,"[src]'s massive tail catches you and wraps around you!") - sizediffStamLoss(tmob) - sizediffStun(tmob) - else - to_chat(src,"You pin [tmob] helplessly to the floor with your foot!") - to_chat(tmob,"[src] weightfully pins you to the ground!") - sizediffStamLoss(tmob) - sizediffStun(tmob) - return 1 - - if(tmob.get_effective_size() > get_effective_size()) - micro_step_under(tmob) - src.forceMove(tmob.loc) - now_pushing = 0 - return 1 + return 1 //smaller person stepping under another person /mob/living/proc/micro_step_under(var/mob/living/tmob)