diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm
index 9766d356232..b04969d2d98 100644
--- a/code/datums/spells/horsemask.dm
+++ b/code/datums/spells/horsemask.dm
@@ -22,11 +22,11 @@
return
var/mob/living/carbon/target = targets[1]
-
+
if(!target)
return
- if(!(target.type in compatible_mobs))
+ if(target.type in compatible_mobs || ishuman(target))
user << "It'd be stupid to curse [target] with a horse's head!"
return
diff --git a/code/game/gamemodes/wizard/summonitem.dm b/code/game/gamemodes/wizard/summonitem.dm
index 1bfbb4ff6a5..cca82c3c0c0 100644
--- a/code/game/gamemodes/wizard/summonitem.dm
+++ b/code/game/gamemodes/wizard/summonitem.dm
@@ -22,6 +22,8 @@
if(!marked_item) //linking item to the spell
message = ""
for(var/obj/item in hand_items)
+ if(istype(item, /obj/item/brain)) //Yeah, sadly this doesn't work due to the organ system.
+ break
marked_item = item
message += "You mark [item] for recall."
name = "Recall [item]"
@@ -32,7 +34,6 @@
message = "You aren't holding anything that can be marked for recall."
else
message = "You must hold the desired item in your hands to mark it for recall."
-
else if(marked_item && marked_item in hand_items) //unlinking item to the spell
message = "You remove the mark on [marked_item] to use elsewhere."
name = "Instant Summons"
@@ -60,14 +61,15 @@
M.u_equip(item_to_retrive)
- if(iscarbon(M)) //Edge case housekeeping
- var/mob/living/carbon/C = M
- if(C.internal_organs && item_to_retrive in C.internal_organs) //KALIMA!
- C.internal_organs -= item_to_retrive
- if(istype(marked_item,/obj/item/brain)) //If this code ever runs I will be happy
- var/obj/item/brain/B
+ if(ishuman(M)) //Edge case housekeeping
+ var/mob/living/carbon/human/C = M
+ /*if(C.internal_organs_by_name && item_to_retrive in C.internal_organs_by_name ) //This won't work, as we use organ datums instead of objects. --DZD
+ C.internal_organs_by_name -= item_to_retrive
+ if(istype(marked_item, /obj/item/brain)) //If this code ever runs I will be happy
+ var/obj/item/brain/B = new /obj/item/brain(user.loc)
B.transfer_identity(C)
- add_logs(user, C, "magically debrained", addition="INTENT: [uppertext(user.a_intent)]")
+ C.death()
+ add_logs(user, C, "magically debrained", addition="INTENT: [uppertext(user.a_intent)]")*/
if(C.stomach_contents && item_to_retrive in C.stomach_contents)
C.stomach_contents -= item_to_retrive
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index c9ff9a4e110..e089c4448f0 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -62,6 +62,17 @@
/obj/structure/closet/statue/dump_contents()
+ if(istype(src.loc, /mob/living/simple_animal/hostile/statue))
+ var/mob/living/simple_animal/hostile/statue/S = src.loc
+ src.loc = S.loc
+ if(S.mind)
+ for(var/mob/M in contents)
+ S.mind.transfer_to(M)
+ M << "As the animating magic wears off you feel yourself coming back to your senses. You are yourself again!"
+ break
+ qdel(S)
+
+
for(var/obj/O in src)
O.loc = src.loc
@@ -74,7 +85,6 @@
M.client.perspective = MOB_PERSPECTIVE
-
/obj/structure/closet/statue/open()
return
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 5cc2d33eee1..30115ec7957 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -48,11 +48,12 @@
sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS
anchored = 1
// status_flags = GODMODE // Cannot push also
+ var/mob/living/creator = null
// No movement while seen code.
-/mob/living/simple_animal/hostile/statue/New()
+/mob/living/simple_animal/hostile/statue/New(loc, var/mob/living/creator)
..()
// Give spells
spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/flicker_lights(src)
@@ -62,6 +63,10 @@
// Give nightvision
see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING
+ // Set creator
+ if(creator)
+ src.creator = creator
+
/mob/living/simple_animal/hostile/statue/Move(var/turf/NewLoc)
if(can_be_seen(NewLoc))
icon_state = "angelseen"
@@ -173,12 +178,17 @@
// Stop attacking clientless mobs
/mob/living/simple_animal/hostile/statue/CanAttack(var/atom/the_target)
+ if(mind && mind.key && !ckey)
+ return 0
if(isliving(the_target))
var/mob/living/L = the_target
if(!L.client && !L.ckey)
return 0
return ..()
+/mob/living/simple_animal/hostile/statue/ListTargets()
+ . = ..()
+ return . - creator
// Statue powers
diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm
index 3b217028900..c9d7ec064f0 100644
--- a/code/modules/projectiles/guns/magic/staff.dm
+++ b/code/modules/projectiles/guns/magic/staff.dm
@@ -32,6 +32,8 @@ obj/item/weapon/gun/magic/staff/chaos
max_charges = 10
recharge_rate = 2
+ no_den_usage = 1
+
/obj/item/weapon/gun/magic/staff/chaos/process_chambered() //Snowflake proc, because this uses projectile_type instead of ammo_casing for whatever reason.
projectile_type = pick(typesof(/obj/item/projectile/magic))
if(in_chamber) return 1