From 96395618d7f7a50c89fe70e954b650c8c1c19f84 Mon Sep 17 00:00:00 2001 From: "kortgstation@gmail.com" Date: Fri, 23 Dec 2011 08:02:09 +0000 Subject: [PATCH] Added the Soul Stone Shard. tl;dr it functions like an intellicard for dead or dying humans. It will only work on a human if they are in crit/dead, if they actually have a player in them (so corpses where people have ghosted are immune) and if the soul stone shard is empty. Right now you can't do anything them other than capture people (and talk to them if you're near the stone) Added a new belt variety that can only hold shards. Still needs its own sprites. They currently do not spawn anywhere/are admin only. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2777 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/gamemodes/wizard/soulstone.dm | 80 ++++++++++++++++++++++++ code/game/objects/storage/belt.dm | 21 ++++++- code/game/verbs/suicide.dm | 4 +- icons/obj/wizard.dmi | Bin 6641 -> 7241 bytes tgstation.dme | 1 + 5 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 code/game/gamemodes/wizard/soulstone.dm diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm new file mode 100644 index 00000000000..0045fefb4fb --- /dev/null +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -0,0 +1,80 @@ +/obj/item/device/soulstone + name = "Soul Stone Shard" + icon = 'wizard.dmi' + icon_state = "soulstone" + item_state = "electronic" + desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power." + w_class = 1.0 + flags = FPRINT | TABLEPASS | ONBELT + var/flush = null + origin_tech = "bluespace=4;materials=4" + + + + attack(mob/living/carbon/human/M as mob, mob/user as mob) + if(!istype(M, /mob/living/carbon/human))//If target is not a human. + return ..() + M.attack_log += text("\[[time_stamp()]\] Has had their soul captured with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to capture the soul of [M.name] ([M.ckey])") + + transfer_soul("VICTIM", M, user) + return + + + attack_self(mob/user) + if (!in_range(src, user)) + return + user.machine = src + var/dat = "Soul Stone
" + for(var/mob/living/carbon/human/A in src) + dat += "Captured Soul: [A.name]
" + user << browse(dat, "window=aicard") + onclose(user, "aicard") + return + + + + +/obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob). + switch(choice) + if("VICTIM") + var/mob/living/carbon/human/T = target + var/obj/item/device/soulstone/C = src + if (T.stat == 0) + U << "\red Capture failed!: \black Kill or maim the victim first!" + else + if(T.ckey == null) + U << "\red Capture failed!: \black The soul has already fled it's mortal frame." + else + if(C.contents.len) + U << "\red Capture failed!: \black The soul stone is full! Use or free an existing soul to make room." + else + for(var/obj/item/W in T) + T.drop_from_slot(W) + new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton + T.invisibility = 101 + var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc ) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = T + flick("dust-h", animation) + del(animation) + T.nodamage = 1 //So they won't suffocate inside the stone + T.canmove = 0//Can't move out of the soul stone + T.loc = C//Throw "soul" into the stone. + T.stat = 0//Revive the victim as a "soul" + T.mutantrace = "trappedsoul" //To prevent suicide/maybe some other special effects later on + T.setToxLoss(0) + T.setOxyLoss(0) + T.setCloneLoss(0) + T.SetParalysis(0) + T.SetStunned(0) + T.SetWeakened(0) + T.radiation = 0 + T.heal_overall_damage(T.getBruteLoss(), T.getFireLoss()) + T.cancel_camera() + T.nodamage = 1 //So they won't suffocate inside the stone + C.icon_state = "soulstone2" + T << "Your soul has been captured!" + U << "\blue Capture successful!: \black [T.name]'s soul has been ripped from their body and stored within the soul stone." + return \ No newline at end of file diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm index 92dae7a1f57..db2fb596e9a 100644 --- a/code/game/objects/storage/belt.dm +++ b/code/game/objects/storage/belt.dm @@ -115,4 +115,23 @@ "/obj/item/ammo_magazine", "/obj/item/weapon/reagent_containers/food/snacks/donut", "/obj/item/weapon/reagent_containers/food/snacks/jellydonut" - ) \ No newline at end of file + ) + +/obj/item/weapon/storage/belt/soulstone + name = "soul stone belt" + desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away" + icon_state = "utilitybelt" + item_state = "utility"//Could likely use a better one. + storage_slots = 6 + can_hold = list( + "/obj/item/device/soulstone" + ) + +/obj/item/weapon/storage/belt/utility/full/New() + ..() + new /obj/item/device/soulstone(src) + new /obj/item/device/soulstone(src) + new /obj/item/device/soulstone(src) + new /obj/item/device/soulstone(src) + new /obj/item/device/soulstone(src) + new /obj/item/device/soulstone(src) \ No newline at end of file diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 9de662a62d6..7ee53d48538 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -20,7 +20,9 @@ if(alien_egg_flag) src << "The alien inside you forces you to breathe, preventing you from suiciding." return - + if(mutantrace == "trappedsoul") + src << "You are already dead, your soul trapped and contained!" + return if(confirm == "Yes") suiciding = 1 //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index d34d0d0050d45afd2ac49236a5e29114afbc209b..bf62f5798084280cbaf1a81c69832e6f8f5dfcb9 100644 GIT binary patch literal 7241 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 literal 6641 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