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
This commit is contained in:
kortgstation@gmail.com
2011-12-23 08:02:09 +00:00
parent af26ab1c2e
commit 96395618d7
5 changed files with 104 additions and 2 deletions
+80
View File
@@ -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()]\] <font color='orange'>Has had their soul captured with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
transfer_soul("VICTIM", M, user)
return
attack_self(mob/user)
if (!in_range(src, user))
return
user.machine = src
var/dat = "<TT><B>Soul Stone</B><BR>"
for(var/mob/living/carbon/human/A in src)
dat += "Captured Soul: [A.name]<br>"
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 <b>Capture failed!</b>: \black Kill or maim the victim first!"
else
if(T.ckey == null)
U << "\red <b>Capture failed!</b>: \black The soul has already fled it's mortal frame."
else
if(C.contents.len)
U << "\red <b>Capture failed!</b>: \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 <b>Capture successful!</b>: \black [T.name]'s soul has been ripped from their body and stored within the soul stone."
return
+20 -1
View File
@@ -115,4 +115,23 @@
"/obj/item/ammo_magazine",
"/obj/item/weapon/reagent_containers/food/snacks/donut",
"/obj/item/weapon/reagent_containers/food/snacks/jellydonut"
)
)
/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)
+3 -1
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

+1
View File
@@ -396,6 +396,7 @@
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
#include "code\game\gamemodes\sandbox\sandbox.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
#include "code\game\gamemodes\wizard\soulstone.dm"
#include "code\game\gamemodes\wizard\spellbook.dm"
#include "code\game\gamemodes\wizard\spells.dm"
#include "code\game\gamemodes\wizard\wizard.dm"