diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index 6cb8e05dd81..99d3b135a08 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -176,7 +176,7 @@ var/const/SAFETY_COOLDOWN = 100
// Remove and recycle the equipped items
if(eat_victim_items)
- for(var/obj/item/I in L.get_equipped_items())
+ for(var/obj/item/I in L.get_equipped_items(TRUE))
if(L.unEquip(I))
eat(I, sound = 0)
diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm
index ead8ba4345c..29cea103e29 100644
--- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm
+++ b/code/game/objects/items/weapons/storage/artistic_toolbox.dm
@@ -19,7 +19,6 @@
var/hunger_message_level = 0
var/mob/living/carbon/human/original_owner = null
var/activated = FALSE
- var/mindless_override = FALSE
/obj/item/storage/toolbox/green/memetic/ui_action_click(mob/user)
if(user.HasDisease(new /datum/disease/memetic_madness(0)))
@@ -32,49 +31,56 @@
/obj/item/storage/toolbox/green/memetic/attack_hand(mob/living/carbon/user)
- if(!activated)
- if(ishuman(user) && !user.HasDisease(new /datum/disease/memetic_madness(0)))
- activated = TRUE
- user.ForceContractDisease(new /datum/disease/memetic_madness(0))
- for(var/datum/disease/memetic_madness/DD in user.viruses)
- DD.progenitor = src
- servantlinks.Add(DD)
- break
- force += 4
- throwforce += 4
- user << 'sound/goonstation/effects/screech.ogg'
- shake_camera(user, 20, 1)
- to_chat(user, "His Grace accepts thee, spread His will! All who look close to the Enlightened may share His gifts.")
- original_owner = user
- return
+ if(loc == user)
+ if(!activated)
+ if(ishuman(user) && !user.HasDisease(new /datum/disease/memetic_madness(0)))
+ activated = TRUE
+ user.ForceContractDisease(new /datum/disease/memetic_madness(0))
+ for(var/datum/disease/memetic_madness/DD in user.viruses)
+ DD.progenitor = src
+ servantlinks.Add(DD)
+ break
+ force += 4
+ throwforce += 4
+ SEND_SOUND(user, 'sound/goonstation/effects/screech.ogg')
+ shake_camera(user, 20, 1)
+ var/acount = 0
+ var/amax = rand(10, 15)
+ var/up_and_down
+ var/asize = 1
+ while(acount <= amax)
+ up_and_down += "a"
+ if(acount > (amax * 0.5))
+ asize--
+ else
+ asize++
+ acount++
+ to_chat(user, "[up_and_down]")
+ to_chat(user, "His Grace accepts thee, spread His will! All who look close to the Enlightened may share His gifts.")
+ original_owner = user
+ return
..()
/obj/item/storage/toolbox/green/memetic/attackby(obj/item/I, mob/user)
if(activated)
if(istype(I, /obj/item/grab))
var/obj/item/grab/G = I
- if(!G.affecting)
- return
+ var/mob/living/victim = G.affecting
if(!user.HasDisease(new /datum/disease/memetic_madness(0)))
to_chat(user, "You can't seem to find the latch to open this.")
return
- if(!ishuman(G.affecting) || issmall(G.affecting))
- to_chat(user, "His Grace will not accept such a meager offering!")
+ if(!victim)
return
- if(!mindless_override)
- if(G.affecting.mind == null && G.affecting.ckey == null)
- to_chat(user, "His Grace will not accept a soulless shell for an offering!")
- return
- if(!G.affecting.stat && !G.affecting.restrained() && !G.affecting.weakened)
+ if(!victim.stat && !victim.restrained() && !victim.weakened)
to_chat(user, "They're moving too much to feed to His Grace!")
return
- user.visible_message("[user] is trying to feed [G.affecting] to [src]!")
- if(!do_mob(user, G.affecting, 30))
+ user.visible_message("[user] is trying to feed [victim] to [src]!")
+ if(!do_mob(user, victim, 30))
return
- G.affecting.forceMove(src)
- user.visible_message("[user] has fed [G.affecting] to [src]!")
- consume(G.affecting)
+ user.visible_message("[user] has fed [victim] to [src]!")
+
+ consume(victim)
qdel(G)
to_chat(user, "You have done well...")
@@ -84,29 +90,42 @@
return ..()
-/obj/item/storage/toolbox/green/memetic/proc/consume(mob/living/carbon/human/H)
- if(!H)
+/obj/item/storage/toolbox/green/memetic/proc/consume(mob/living/L)
+ if(!L)
return
hunger = 0
hunger_message_level = 0
- playsound(src.loc, 'sound/goonstation/misc/burp_alien.ogg', 50, 0)
- H.emote("scream")
- if(ismachine(H))
- H.adjustFireLoss(1000) // Damn snowflakes
- H.death()
- H.ghostize()
- if(H == original_owner)
- H.unEquip(src, TRUE)
- qdel(H)
+ playsound(loc, 'sound/goonstation/misc/burp_alien.ogg', 50, 0)
+
+ if(L != original_owner)
+ var/list/equipped_items = L.get_equipped_items(TRUE)
+ if(L.l_hand)
+ equipped_items += L.l_hand
+ if(L.r_hand)
+ equipped_items += L.r_hand
+ if(equipped_items.len)
+ var/obj/item/storage/box/B = new(src)
+ B.name = "Box-'[L.real_name]'"
+ for(var/obj/item/SI in equipped_items)
+ L.unEquip(SI, TRUE)
+ SI.forceMove(B)
+ equipped_items.Cut()
+
+ L.forceMove(src)
+
+ L.emote("scream")
+ L.death()
+ L.ghostize()
+ if(L == original_owner)
+ L.unEquip(src, TRUE)
+ qdel(L)
var/obj/item/storage/toolbox/green/fake_toolbox = new(get_turf(src))
fake_toolbox.desc = "It looks a lot duller than it used to."
qdel(src)
+ else
+ qdel(L)
/obj/item/storage/toolbox/green/memetic/Destroy()
- for(var/mob/living/carbon/human/H in src)
- H.forceMove(get_turf(src))
- visible_message("[H] bursts out of [src]!")
-
for(var/datum/disease/memetic_madness/D in servantlinks)
D.cure()
@@ -114,7 +133,7 @@
servantlinks = null
original_owner = null
visible_message("[src] screams!")
- playsound(src.loc, 'sound/goonstation/effects/screech.ogg', 100, 1)
+ playsound(loc, 'sound/goonstation/effects/screech.ogg', 100, 1)
return ..()
/datum/disease/memetic_madness
@@ -132,6 +151,8 @@
var/obj/item/storage/toolbox/green/memetic/progenitor = null
/datum/disease/memetic_madness/Destroy()
+ if(progenitor)
+ progenitor.servantlinks.Remove(src)
progenitor = null
if(affected_mob)
affected_mob.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 5ff0ea8e28b..e53e3c9fd4d 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -153,26 +153,50 @@
//Outdated but still in use apparently. This should at least be a human proc.
-/mob/proc/get_equipped_items()
- var/list/items = new/list()
+//Daily reminder to murder this - Remie.
+/mob/proc/get_equipped_items(include_pockets = FALSE)
+ var/list/items = list()
+ if(back)
+ items += back
+ if(wear_mask)
+ items += wear_mask
+ return items
- if(hasvar(src,"back")) if(src:back) items += src:back
- if(hasvar(src,"belt")) if(src:belt) items += src:belt
- if(hasvar(src,"l_ear")) if(src:l_ear) items += src:l_ear
- if(hasvar(src,"r_ear")) if(src:r_ear) items += src:r_ear
- if(hasvar(src,"glasses")) if(src:glasses) items += src:glasses
- if(hasvar(src,"gloves")) if(src:gloves) items += src:gloves
- if(hasvar(src,"head")) if(src:head) items += src:head
- if(hasvar(src,"shoes")) if(src:shoes) items += src:shoes
- if(hasvar(src,"wear_id")) if(src:wear_id) items += src:wear_id
- if(hasvar(src,"wear_mask")) if(src:wear_mask) items += src:wear_mask
- if(hasvar(src,"wear_suit")) if(src:wear_suit) items += src:wear_suit
-// if(hasvar(src,"w_radio")) if(src:w_radio) items += src:w_radio commenting this out since headsets go on your ears now PLEASE DON'T BE MAD KEELIN
- if(hasvar(src,"w_uniform")) if(src:w_uniform) items += src:w_uniform
-
- //if(hasvar(src,"l_hand")) if(src:l_hand) items += src:l_hand
- //if(hasvar(src,"r_hand")) if(src:r_hand) items += src:r_hand
+/mob/living/carbon/get_equipped_items(include_pockets = FALSE)
+ var/list/items = ..()
+ if(wear_suit)
+ items += wear_suit
+ if(head)
+ items += head
+ return items
+/mob/living/carbon/human/get_equipped_items(include_pockets = FALSE)
+ var/list/items = ..()
+ if(belt)
+ items += belt
+ if(l_ear)
+ items += l_ear
+ if(r_ear)
+ items += r_ear
+ if(glasses)
+ items += glasses
+ if(gloves)
+ items += gloves
+ if(shoes)
+ items += shoes
+ if(wear_id)
+ items += wear_id
+ if(wear_pda)
+ items += wear_pda
+ if(w_uniform)
+ items += w_uniform
+ if(include_pockets)
+ if(l_store)
+ items += l_store
+ if(r_store)
+ items += r_store
+ if(s_store)
+ items += s_store
return items
/obj/item/proc/equip_to_best_slot(mob/M)