From 475ca3f66643e572fedf42a6578eaa76292429db Mon Sep 17 00:00:00 2001 From: DZD Date: Fri, 16 Jan 2015 16:39:12 -0500 Subject: [PATCH] Wizard Update Part 8 - Fixes horsemask spell to work on non-human races. - Removes ability of Summon Item to mark and recall brains due to problems with organ system. - Makes weeping angels turn back to their human form after Flesh to Stone wears off if they were created via F to S and the Staff of Animation. (/tg/ port) --- code/datums/spells/horsemask.dm | 4 ++-- code/game/gamemodes/wizard/summonitem.dm | 18 ++++++++++-------- .../crates_lockers/closets/statue.dm | 12 +++++++++++- .../mob/living/simple_animal/hostile/statue.dm | 12 +++++++++++- code/modules/projectiles/guns/magic/staff.dm | 2 ++ 5 files changed, 36 insertions(+), 12 deletions(-) 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