diff --git a/code/modules/awaymissions/mission_code/spacehotel_npcs.dm b/code/modules/awaymissions/mission_code/spacehotel_npcs.dm index 91eb76c6c4c..6d716cdf387 100644 --- a/code/modules/awaymissions/mission_code/spacehotel_npcs.dm +++ b/code/modules/awaymissions/mission_code/spacehotel_npcs.dm @@ -17,6 +17,26 @@ /mob/living/carbon/human/interactive/away/hotel/guard/doSetup() ..("Guard") + // anti-pinata cheese + var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(src) + D.implant(src) + + for(var/obj/item/I in get_all_slots()) + I.flags |= NODROP + + // FIXME(crazylemon) a hack to prevent guards from running around with an + // extra security jumpsuit like a goof + for(var/obj/item/clothing/under/U in get_all_slots()) + if(w_uniform != U) + qdel(U) + +/mob/living/carbon/human/interactive/away/hotel/guard/KnockOut() + // you'll never take me alive (this triggers the implant) + emote("deathgasp") + if(stat != DEAD) + // mission failed. we'll get em next time + ..() + /mob/living/carbon/human/interactive/away/hotel/chef default_job = /datum/job/chef away_area = /area/awaymission/spacehotel/kitchen diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1fa4b57356f..9ad17eb844f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -3,6 +3,10 @@ var/datum/middleClickOverride/middleClickOverride = null /mob/living/carbon/Destroy() + // This clause is here due to items falling off from limb deletion + for(var/obj/item in get_all_slots()) + unEquip(item) + qdel(item) QDEL_LIST(internal_organs) QDEL_LIST(stomach_contents) var/mob/living/simple_animal/borer/B = has_brain_worms() diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm index 46706c45363..d48c7a6eecf 100644 --- a/code/modules/mob/living/carbon/human/interactive/functions.dm +++ b/code/modules/mob/living/carbon/human/interactive/functions.dm @@ -237,10 +237,15 @@ /mob/living/carbon/human/interactive/proc/shitcurity(obj) var/list/allContents = getAllContents() - if(retal && TARGET && Adjacent(TARGET)) - var/obj/item/weapon/restraints/R = locate() in allContents - if(R) - R.attack(TARGET, src) // go go bluespace restraint launcher! + if(retal && TARGET) + if(Adjacent(TARGET)) + var/obj/item/weapon/restraints/R = locate() in allContents + if(R) + R.attack(TARGET, src) // go go bluespace restraint launcher! + else if(TARGET in oview(7, src)) + var/obj/item/weapon/gun/G = locate() in allContents + if(G) + G.afterattack(TARGET, src) /mob/living/carbon/human/interactive/proc/clowning(obj) if(shouldModulePass()) diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index 442bb19ca9a..b4ae144bcf7 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -556,8 +556,12 @@ var/obj/item/I = get_item_by_slot(pick(slots)) var/obj/item/weapon/storage/BP = get_item_by_slot(slot_back) if(back && BP && I) + // hack to allow SNPCs to "sticky grab" items without losing their inventorying + var/oldnodrop = I.flags | NODROP + I.flags &= ~NODROP if(BP.can_be_inserted(I)) BP.handle_item_insertion(I) + I.flags |= oldnodrop else unEquip(I,TRUE) update_hands = 1