mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-25 21:19:00 +01:00
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:
@@ -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
|
||||
@@ -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)
|
||||
@@ -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 |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user