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