Removed old cult/wizard files (#19850)

This commit is contained in:
DamianX
2018-09-28 20:53:24 +02:00
committed by jknpj
parent 5e5856b002
commit 328a21156e
3 changed files with 0 additions and 757 deletions

View File

@@ -1,264 +0,0 @@
/obj/item/weapon/paper/talisman
icon_state = "paper_talisman"
var/imbue = null
var/uses = 1
var/nullblock = 0
/obj/item/weapon/paper/talisman/update_icon()
var/suffix = ""
if(imbue)
suffix = imbue
if(imbue in list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri"))
suffix = "travel" // if the imbue is one of the words, it means it's a travel rune. a single "travel" sprite is used, instead of one per-word.
if(suffix)
icon_state = "[initial(icon_state)]_[suffix]"
else
icon_state = "[initial(icon_state)]"
/obj/item/weapon/paper/talisman/examine(mob/user)
..()
if(iscultist(user) || isobserver(user))
switch(imbue)
if("newtome")
to_chat(user, "This talisman has been imbued with the power of spawning a new Arcane Tome.")
if("armor")
to_chat(user, "This talisman has been imbued with the power of clothing yourself in cult fighting gear.")
if("emp")
to_chat(user, "This talisman has been imbued with the power of disabling technology in a small radius around you.")
if("conceal")
to_chat(user, "This talisman has been imbued with the power of concealing nearby runes.")
if("revealrunes")
to_chat(user, "This talisman has been imbued with the power of revealing hidden nearby runes.")
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
to_chat(user, "This talisman has been imbued with the power of taking you to someplace else. You can read <i>[imbue]</i> on it.")
if("communicate")
to_chat(user, "This talisman has been imbued with the power of communicating your whispers to your allies.")
if("deafen")
to_chat(user, "This talisman has been imbued with the power of temporarily deafening visible enemies. Does not work on silicons.")
if("blind")
to_chat(user, "This talisman has been imbued with the power of temporarily blinding all enemies within three tiles. Does not work on silicons.")
if("runestun")
to_chat(user, "This talisman has been imbued with the power of paralyzing the beings you touch with it. The effect works on silicons as well, but humans will also be muted for a short time.")
if("supply")
to_chat(user, "This talisman has been imbued with the power of providing you and your allies with some supplies to start your cult.")
else
to_chat(user, "This talisman.....has no particular power. Is this some kind of joke?")
to_chat(user, "Uses left: [src.uses]")
else
to_chat(user, "Something about the blood stains on this paper fills you with uneasiness.")
/obj/item/weapon/paper/talisman/proc/findNullRod(var/atom/target)
if(istype(target,/obj/item/weapon/nullrod))
var/turf/T = get_turf(target)
nullblock = 1
T.turf_animation('icons/effects/96x96.dmi',"nullding",-WORLD_ICON_SIZE,-WORLD_ICON_SIZE,MOB_LAYER+1,'sound/instruments/piano/Ab7.ogg',anim_plane = EFFECTS_PLANE)
return 1
else if(target.contents)
for(var/atom/A in target.contents)
findNullRod(A)
return 0
/obj/item/weapon/paper/talisman/New()
..()
pixel_x=0
pixel_y=0
/obj/item/weapon/paper/talisman/attack_self(mob/living/user as mob)
if(iscultist(user))
var/use_charge = 1
switch(imbue)
if("newtome")
call(/obj/effect/rune/proc/tomesummon)()
if("armor") //Fuck off with your shit /tg/. This isn't Edgy Rev+
user.drop_from_inventory(src) //So that the blade goes straight to your active hand.
call(/obj/effect/rune/proc/armor)()
if("emp")
call(/obj/effect/rune/proc/emp)(usr.loc,3)
if("conceal")
call(/obj/effect/rune/proc/obscure)(2)
if("revealrunes")
call(/obj/effect/rune/proc/revealrunes)(src)
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
var/turf/T1 = get_turf(user)
call(/obj/effect/rune/proc/teleport)(imbue)
var/turf/T2 = get_turf(user)
if(T1!=T2)
T1.turf_animation('icons/effects/effects.dmi',"rune_teleport")
if("communicate")
//If the user cancels the talisman this var will be set to 0
use_charge = call(/obj/effect/rune/proc/communicate)()
if("deafen")
deafen()
qdel(src)
if("blind")
blind()
qdel(src)
if("runestun")
to_chat(user, "<span class='warning'>To use this talisman, attack your target directly.</span>")
return
if("supply")
supply()
user.take_organ_damage(5, 0)
if(src && src.imbue!="supply" && src.imbue!="runestun")
if(use_charge)
uses--
if(!src.uses)
qdel(src)
return
else
to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?")
return
/obj/item/weapon/paper/talisman/attack(mob/living/carbon/T as mob, mob/living/user as mob)
if(iscultist(user))
if(imbue == "runestun")
user.take_organ_damage(5, 0)
runestun(T)
qdel(src)
else
..() ///If its some other talisman, use the generic attack code, is this supposed to work this way?
else
..()
/obj/item/weapon/paper/talisman/attack_animal(var/mob/living/simple_animal/M as mob)
if(istype(M, /mob/living/simple_animal/construct/harvester))
attack_self(M)
/obj/item/weapon/paper/talisman/proc/supply(var/key)
if (!src.uses)
qdel(src)
return
var/dat = {"<B>There are [src.uses] bloody runes on the parchment.</B>
<BR>Please choose the chant to be imbued into the fabric of reality.<BR>
<HR>
<A href='?src=\ref[src];rune=newtome'>N'ath reth sh'yro eth d'raggathnor!</A> - Allows you to summon a new arcane tome.<BR>
<A href='?src=\ref[src];rune=teleport'>Sas'so c'arta forbici!</A> - Allows you to move to a rune with the same last word.<BR>
<A href='?src=\ref[src];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>
<A href='?src=\ref[src];rune=conceal'>Kla'atu barada nikt'o!</A> - Allows you to conceal the runes you placed on the floor.<BR>
<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>
<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>
<A href='?src=\ref[src];rune=soulstone'>Kal om neth</A> - Summons a soul stone<BR>
<A href='?src=\ref[src];rune=construct'>Da A'ig Osk</A> - Summons a construct shell for use with captured souls. It is too large to carry on your person.<BR>"}
//<A href='?src=\ref[src];rune=armor'>Sa tatha najin</A> - Allows you to summon armored robes and an unholy blade<BR> //Kept for reference
usr << browse(dat, "window=id_com;size=350x200")
return
/obj/item/weapon/paper/talisman/Topic(href, href_list)
if(!src)
return
if (usr.stat || usr.restrained() || !in_range(src, usr))
return
if (href_list["rune"])
var/obj/item/weapon/paper/talisman/T
switch(href_list["rune"])
if("newtome")
T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "newtome"
if("teleport")
T = new /obj/item/weapon/paper/talisman(get_turf(usr))
var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri")
T.imbue = input("Write your teleport destination rune:", "Rune Scribing") in words
if("emp")
T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "emp"
if("conceal")
T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "conceal"
if("communicate")
T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "communicate"
if("runestun")
T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "runestun"
//if("armor")
//T = new /obj/item/weapon/paper/talisman(get_turf(usr))
//T.imbue = "armor"
if("soulstone")
new /obj/item/device/soulstone(get_turf(usr))
if("construct")
new /obj/structure/constructshell/cult(get_turf(usr))
if(T)
T.uses = talisman_charges(T.imbue)
src.uses--
supply()
return
/obj/item/weapon/paper/talisman/supply
imbue = "supply"
uses = 5
//imbued talismans invocation for a few runes, since calling the proc causes a runtime error due to src = null
/obj/item/weapon/paper/talisman/proc/runestun(var/mob/living/T as mob)//When invoked as talisman, stun and mute the target mob.
usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!")
nullblock = 0
for(var/turf/TU in range(T,1))
findNullRod(TU)
if(nullblock)
usr.visible_message("<span class='danger'>[usr] invokes a talisman at [T], but they are unaffected!</span>")
else
usr.visible_message("<span class='danger'>[usr] invokes a talisman at [T]</span>")
if(issilicon(T))
T.Knockdown(15)
else if(iscarbon(T))
var/mob/living/carbon/C = T
C.flash_eyes(visual = 1)
if (!(M_HULK in C.mutations))
C.silent += 15
C.Knockdown(25)
C.Stun(25)
return
/obj/item/weapon/paper/talisman/proc/blind()
var/affected = 0
for(var/mob/living/carbon/C in view(3,usr))
if (iscultist(C))
continue
nullblock = 0
for(var/turf/T in range(C,1))
findNullRod(T)
if(nullblock)
continue
C.eye_blurry += 30
C.eye_blind += 10
//talismans is weaker.
affected++
to_chat(C, "<span class='warning'>You feel a sharp pain in your eyes, and the world disappears into darkness..</span>")
if(affected)
usr.whisper("Sti[pick("'","`")] kaliesin!")
to_chat(usr, "<span class='warning'>Your talisman turns into gray dust, blinding those who not follow the Nar-Sie.</span>")
/obj/item/weapon/paper/talisman/proc/deafen()
var/affected = 0
for(var/mob/living/carbon/C in range(7,usr))
if (iscultist(C))
continue
nullblock = 0
for(var/turf/T in range(C,1))
findNullRod(T)
if(nullblock)
continue
C.ear_deaf += 30
//talismans is weaker.
C.show_message("<span class='notice'>The world around you suddenly becomes quiet.</span>")
affected++
if(affected)
usr.whisper("Sti[pick("'","`")] kaliedir!")
to_chat(usr, "<span class='warning'>Your talisman turns into gray dust, deafening everyone around.</span>")
for (var/mob/V in orange(1,src))
if(!(iscultist(V)))
V.show_message("<span class='warning'>Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..</span>")
/obj/item/weapon/paper/talisman/show_text()
return

View File

@@ -1,93 +0,0 @@
//Machinery that gets deleted by Nar-Sie and isn't replaced with cult structures
/obj/machinery/camera/cultify()
qdel(src)
/obj/machinery/power/cultify()
qdel(src)
/obj/machinery/light_switch/cultify()
qdel(src)
/obj/machinery/firealarm/cultify()
qdel(src)
/obj/machinery/alarm/cultify()
qdel(src)
/obj/machinery/atm/cultify()
qdel(src)
/obj/machinery/hologram/cultify()
qdel(src)
/obj/machinery/status_display/cultify()
qdel(src)
/obj/machinery/newscaster/cultify()
qdel(src)
/obj/machinery/media/cultify()
qdel(src)
/obj/machinery/door_control/cultify()
qdel(src)
/obj/machinery/access_button/cultify()
qdel(src)
/obj/machinery/embedded_controller/cultify()
qdel(src)
/obj/machinery/navbeacon/cultify()
qdel(src)
/obj/machinery/gateway/cultify()
qdel(src)
/obj/machinery/space_heater/cultify()
qdel(src)
/obj/machinery/crema_switch/cultify()
qdel(src)
/obj/machinery/portable_atmospherics/cultify()
qdel(src)
/obj/machinery/pos/cultify()
qdel(src)
/obj/machinery/requests_console/cultify()
qdel(src)
/obj/machinery/computer/security/telescreen/cultify()
qdel(src)
/obj/machinery/conveyor_switch/cultify()
qdel(src)
/obj/machinery/conveyor/cultify()
qdel(src)
/obj/machinery/vending/wallmed1/cultify()
qdel(src)
/obj/machinery/flasher/cultify()
qdel(src)
/obj/machinery/flasher_button/cultify()
qdel(src)
/obj/machinery/cell_charger/cultify()
qdel(src)
/obj/machinery/meter/cultify()
qdel(src)
/obj/machinery/keycard_auth/cultify()
qdel(src)
/obj/machinery/airlock_sensor/cultify()
qdel(src)
/obj/machinery/turretid/cultify()
qdel(src)

View File

@@ -1,400 +0,0 @@
/obj/item/device/soulstone
name = "Soul Stone Shard"
icon = 'icons/obj/wizard.dmi'
icon_state = "soulstone"
item_state = "shard-soulstone"
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/shards.dmi', "right_hand" = 'icons/mob/in-hand/right/shards.dmi')
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 = W_CLASS_TINY
flags = FPRINT
slot_flags = SLOT_BELT
origin_tech = Tc_BLUESPACE + "=4;" + Tc_MATERIALS + "=4"
/obj/item/device/soulstone/Destroy()
eject_shade()
..()
/obj/item/device/soulstone/examine(mob/user)
..()
for(var/mob/living/simple_animal/shade/A in src)
if(!A.client)
to_chat(user, "<span class='warning'>The spirit within seems to be dormant.</span>")
//////////////////////////////Capturing////////////////////////////////////////////////////////
/obj/item/device/soulstone/attack(var/mob/living/M, mob/user as mob)
if(!istype(M, /mob/living/carbon) && !istype(M, /mob/living/simple_animal))
return ..()
if(istype(M, /mob/living/carbon/human/manifested))
to_chat(user, "The soul stone shard seems unable to pull the soul out of that poor manifested ghost back onto our plane.")
return
add_logs(user, M, "captured [M.name]'s soul", object=src)
transfer_soul("VICTIM", M, user)
return
/*attack(mob/living/simple_animal/shade/M as mob, mob/user as mob)//APPARENTLY THEY NEED THEIR OWN SPECIAL SNOWFLAKE CODE IN THE LIVING ANIMAL DEFINES
if(!istype(M, /mob/living/simple_animal/shade))//If target is not a shade
return ..()
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("SHADE", M, user)
return*/
///////////////////Options for using captured souls///////////////////////////////////////
/obj/item/device/soulstone/attack_self(mob/user)
if (!in_range(src, user))
return
user.set_machine(src)
var/dat = "<TT><B>Soul Stone</B><BR>"
for(var/mob/living/simple_animal/shade/A in src)
dat += "Captured Soul: [A.name]<br>"
dat += {"<A href='byond://?src=\ref[src];choice=Summon'>Summon Shade</A>"}
dat += "<br>"
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
user << browse(dat, "window=aicard")
onclose(user, "aicard")
return
/obj/item/device/soulstone/Topic(href, href_list)
var/mob/living/carbon/U = usr
if (!in_range(src, U)||U.machine!=src)
U << browse(null, "window=aicard")
U.unset_machine()
return
add_fingerprint(U)
U.set_machine(src)
switch(href_list["choice"])//Now we switch based on choice.
if ("Close")
U << browse(null, "window=aicard")
U.unset_machine()
return
if ("Summon")
for(var/mob/living/simple_animal/shade/A in src)
eject_shade(U)
src.icon_state = "soulstone"
src.item_state = "shard-soulstone"
U.update_inv_hands()
src.name = "Soul Stone Shard"
attack_self(U)
/obj/item/device/soulstone/cultify()
return
///////////////////////////Transferring to constructs/////////////////////////////////////////////////////
/obj/structure/constructshell
name = "empty shell"
icon = 'icons/obj/wizard.dmi'
icon_state = "construct"
desc = "A wicked machine used by those skilled in magical arts. It is inactive."
flags = FPRINT
/obj/structure/constructshell/cultify()
return
/obj/structure/constructshell/cult
icon_state = "construct-cult"
desc = "This eerie contraption looks like it would come alive if supplied with a missing ingredient."
/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/device/soulstone))
O.transfer_soul("CONSTRUCT",src,user)
////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
/obj/item/device/soulstone/proc/eject_shade(var/mob/user=null)
for(var/mob/living/L in src)
L.forceMove(get_turf(src))
L.status_flags &= ~GODMODE
if(user)
to_chat(L, "<b>You have been released from your prison, but you are still bound to [user.name]'s will. Help them succeed in their goals at all costs.<br>\
Be warned, you are as fragile as glass and your attacks are not terribly strong. On the plus side, you fly and have no need for air.<br>\
You also cannot be stunned. If need be, your master can recapture you in the stone to heal you.</b>")
L.canmove = 1
L.cancel_camera()
/obj/item/proc/capture_soul(var/target, var/mob/user as mob)
if(istype(target, /mob/living/carbon))//humans, monkeys, aliens
var/mob/living/carbon/carbonMob = target
//first of all, let's check that our target has a soul, somewhere
if(!carbonMob.client)
//no client? the target could be either braindead, decapitated, or catatonic, let's check which
var/mob/living/carbon/human/humanTarget = null
var/datum/organ/internal/brain/humanBrain = null
if(ishuman(target))
humanTarget = target
humanBrain = humanTarget.internal_organs_by_name["brain"]
if(!humanTarget || (humanTarget && humanBrain))
//our target either is a monkey or alien, or is a human with their head. Did they have a soul in the first place? if so, where is it right now
if(!carbonMob.mind)
//if a mob doesn't have a mind, that means it never had a player controlling him
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like this target doesn't have much of a soul.</span>")
return
else
//otherwise, that means the player either disconnected or ghosted. we can track their key from their mind,
//but first let's make sure that they are dead or in crit
var/mob/new_target = null
for(var/mob/M in player_list)
if(M.key == carbonMob.mind.key)
new_target = M
if(!new_target)
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like this target's soul went far, far away.</span>")
return
else if(!istype(new_target,/mob/dead/observer))
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like this target's soul already reincarnated.</span>")
return
else
//if the player ghosted, you don't need to put his body into crit to successfully soulstone them.
to_chat(new_target, "<span class='danger'>You feel your soul getting sucked into the soul stone.</span>")
to_chat(user, "<span class='rose'>The soul stone reacts to the corpse and starts glowing.</span>")
capture_soul_process(user,new_target.client,carbonMob)
else if(humanTarget)
//aw shit, our target is a brain/headless human, let's try and locate the head.
if(!humanTarget.decapitated || (humanTarget.decapitated.loc == null))
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like their brain has been removed or head has been destroyed.</span>")
return
else if(istype(humanTarget.decapitated.loc,/mob/living/carbon/human))
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like their head has been grafted on another body.</span>")
return
else
var/obj/item/organ/external/head/humanHead = humanTarget.decapitated
if((humanHead.z != humanTarget.z) || (get_dist(humanTarget,humanHead) > 5))//F I V E T I L E S
to_chat(user, "<span class='warning'>The soul stone isn't reacting, the head needs to be closer from the body.</span>")
return
else
capture_soul_head(humanHead, user)
return
else
//if the body still has a client, then all we have to make sure of is that he's dead or in crit
if (carbonMob.stat == CONSCIOUS)
to_chat(user, "<span class='warning'>Kill or maim the victim first!</span>")
else if(!carbonMob.isInCrit() && carbonMob.stat != DEAD)
to_chat(user, "<span class='warning'>The victim is holding on, weaken them further!</span>")
else
to_chat(carbonMob, "<span class='danger'>You feel your soul getting sucked into the soul stone.</span>")
to_chat(user, "<span class='rose'>The soul stone reacts to the corpse and starts glowing.</span>")
capture_soul_process(user,carbonMob.client,carbonMob)
else
to_chat(user, "<span class='warning'>The soul stone doesn't seem compatible with that creature's soul.</span>")
//TODO: add a few snowflake checks to specific simple_animals that could be soulstoned.
/obj/item/proc/capture_soul_head(var/target, var/mob/user as mob)//called either when using a soulstone on a head, or on a decapitated body
if(istype(target, /obj/item/organ/external/head))
var/obj/item/organ/external/head/humanHead = target
if(!humanHead.organ_data)
to_chat(user, "<span class='rose'>The soul stone isn't reacting, looks like their brain was separated from their head.</span>")
return
var/mob/living/carbon/brain/humanBrainMob = humanHead.brainmob
if(!humanBrainMob.client)
if(!humanBrainMob.mind)
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like this target doesn't have much of a soul.</span>")
return
else
var/mob/new_target = null
for(var/mob/M in player_list)
if(M.key == humanBrainMob.mind.key)
new_target = M
if(!new_target)
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like this target's soul went far, far away.</span>")
return
else if(!istype(new_target,/mob/dead/observer))
to_chat(user, "<span class='warning'>The soul stone isn't reacting, looks like this target's soul already reincarnated.</span>")
return
else
to_chat(new_target, "<span class='danger'>You feel your soul getting sucked into the soulstone.</span>")
to_chat(user, "<span class='rose'>The soul stone reacts to the corpse and starts glowing.</span>")
capture_soul_process(user,new_target.client,humanHead,humanHead.origin_body)
else
to_chat(humanBrainMob, "<span class='danger'>You feel your soul getting sucked into the soul stone.</span>")
to_chat(user, "<span class='rose'>The soul stone reacts to the corpse and starts glowing.</span>")
capture_soul_process(user,humanBrainMob.client,humanHead,humanHead.origin_body)
/obj/item/proc/capture_soul_process(var/mob/living/carbon/user, var/client/targetClient, var/atom/movable/target, var/atom/movable/add_target = null)
//user is the guy using the soulstone
//C is the client of the guy we're soulstoning, so we don't lose track of him between the beginning and the end of the soulstoning.
//target is the source of the guy's soul (his body, or his head if decapitated)
//add_target is his body if he has been decapitated, for cosmetic purposes (and so it dusts)
if(!targetClient)
return
var/mob/living/carbon/human/body = null
if(istype(target,/mob/living/carbon/human))
body = target
else if(istype(add_target,/mob/living/carbon/human))
body = add_target
var/true_name = "Unknown"
if(body)
true_name = body.real_name
for(var/obj/item/W in body)
body.drop_from_inventory(W)
body.dropBorers(1)
var/turf/T = get_turf(body)
body.invisibility = 101
var/datum/organ/external/head_organ = body.get_organ(LIMB_HEAD)
if(head_organ.status & ORGAN_DESTROYED)
new /obj/effect/decal/remains/human/noskull(T)
anim(target = T, a_icon = 'icons/mob/mob.dmi', flick_anim = "dust-h2-nohead", sleeptime = 26)
else
new /obj/effect/decal/remains/human(T)
if(body.lying)
anim(target = T, a_icon = 'icons/mob/mob.dmi', flick_anim = "dust-h2", sleeptime = 26)
else
anim(target = T, a_icon = 'icons/mob/mob.dmi', flick_anim = "dust-h", sleeptime = 26)
if(body.decapitated && (body.decapitated == target))//just making sure we're dealing with the right head
target.invisibility = 101
new /obj/item/weapon/skull(get_turf(target))
else
target.invisibility = 101
if(ismob(target))
var/mob/M = target
true_name = M.real_name
for(var/obj/item/W in M)
M.drop_from_inventory(W)
if(iscarbon(M))
var/mob/living/carbon/C = M
C.dropBorers(1)
new /obj/effect/decal/cleanable/ash(get_turf(target))
else if(istype(target,/obj/item/organ/external/head))
var/obj/item/organ/external/head/H = target
var/mob/living/carbon/brain/BM = H.brainmob
true_name = BM.real_name
new /obj/item/weapon/skull(get_turf(target))
//Scary sound
playsound(src, get_sfx("soulstone"), 50,1)
//Creating a shade inside the stone and putting the victim in control
var/mob/living/simple_animal/shade/shadeMob = new(src)//put shade in stone
shadeMob.status_flags |= GODMODE //So they won't die inside the stone somehow
shadeMob.canmove = 0//Can't move out of the soul stone
shadeMob.name = "Shade of [true_name]"
shadeMob.real_name = "Shade of [true_name]"
shadeMob.ckey = targetClient.ckey
shadeMob.cancel_camera()
//Changing the soulstone's icon and description
icon_state = "soulstone2"
item_state = "shard-soulstone2"
user.update_inv_hands()
name = "Soul Stone: [true_name]"
to_chat(shadeMob, "Your soul has been captured! You are now bound to [user.name]'s will, help them suceed in their goals at all costs.")
to_chat(user, "<span class='notice'>[true_name]'s soul has been ripped from their body and stored within the soul stone.</span>")
//Pretty particles
var/turf/T1 = get_turf(target)
var/turf/T2 = null
if(add_target && add_target.loc)
T2 = get_turf(add_target)
make_tracker_effects(T1, user)
if(T2)
make_tracker_effects(T2, user)
//Cleaning up the corpse
qdel(target)
if(add_target)
qdel(add_target)
/obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/living/carbon/U as mob)
var/deleteafter = 0
switch(choice)
if("VICTIM")
if(src.contents.len)
to_chat(U, "<span class='warning'>The soul stone is full! Use or free an existing soul to make room.</span>")
return
var/mob/living/T = target
for(var/datum/faction/cult/narsie/C in ticker.mode.factions)
if(C.is_sacrifice_target(T.mind))
to_chat(U, "<span class='warning'>The soul stone is unable to rip this soul. Such a powerful soul, it must be coveted by some powerful being.</span>")
return
capture_soul(T,U)
if("SHADE")
var/mob/living/simple_animal/shade/T = target
var/obj/item/device/soulstone/C = src
if (T.stat == DEAD)
to_chat(U, "<span class='danger'>Capture failed!: </span>The shade has already been banished!")
else
if(C.contents.len)
to_chat(U, "<span class='danger'>Capture failed!: </span>The soul stone is full! Use or free an existing soul to make room.")
else
T.forceMove(C) //put shade in stone
T.status_flags |= GODMODE
T.canmove = 0
T.health = T.maxHealth
C.icon_state = "soulstone2"
C.item_state = "shard-soulstone2"
U.update_inv_hands()
C.name = "Soul Stone: [T.real_name]"
to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form")
to_chat(U, "<span class='notice'><b>Capture successful!</b>: </span>[T.name]'s has been recaptured and stored within the soul stone.")
if("CONSTRUCT")
var/obj/structure/constructshell/T = target
var/obj/item/device/soulstone/C = src
var/mob/living/simple_animal/shade/A = locate() in C
var/mob/living/simple_animal/construct/Z
if(A)
var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
switch(construct_class)
if("Juggernaut")
Z = new /mob/living/simple_animal/construct/armoured (get_turf(T.loc))
Z.key = A.key
qdel(T)
to_chat(Z, "<B>You are a Juggernaut. Though slow, your shell can withstand extreme punishment, your body can reflect energy and laser weapons, and you can create temporary shields that block pathing and projectiles. Your fists can punch people and regular walls apart.</B>")
to_chat(Z, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
Z.cancel_camera()
deleteafter = 1
if("Wraith")
Z = new /mob/living/simple_animal/construct/wraith (get_turf(T.loc))
Z.key = A.key
qdel(T)
to_chat(Z, "<B>You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls for a few seconds. Use it both for surprise attacks and strategic retreats.</B>")
to_chat(Z, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
Z.cancel_camera()
deleteafter = 1
if("Artificer")
Z = new /mob/living/simple_animal/construct/builder (get_turf(T.loc))
Z.key = A.key
qdel(T)
to_chat(Z, "<B>You are an Artificer. You are incredibly weak and fragile, but you can heal both yourself and other constructs (by clicking on yourself/them). You can build (and deconstruct) new walls and floors, or replace existing ones by clicking on them, as well as place pylons that act as light source (these block paths but can be easily broken),</B><I>and most important of all you can produce the tools to create new constructs</I><B> (remember to periodically produce new soulstones for your master, and place empty shells in your hideout or when asked.).</B>")
to_chat(Z, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
Z.cancel_camera()
deleteafter = 1
if(islegacycultist(U))
var/datum/faction/cult/narsie/cult_round = find_active_faction(LEGACY_CULT)
if(cult_round)
cult_round.HandleRecruitedMind(Z.mind)
name = "Soul Stone Shard"
else
to_chat(U, "<span class='warning'><b>Creation failed!</b>: The soul stone is empty! Go kill someone!</span>")
if(deleteafter)
for(var/atom/A in src)//we get rid of the empty shade once we've transferred its mind to the construct, so it isn't dropped on the floor when the soulstone is destroyed.
qdel(A)
qdel(src)
return