mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 03:57:48 +01:00
+4
-2
@@ -1119,13 +1119,15 @@
|
||||
origin_tech = "biotech=4"
|
||||
var/POWERFLAG = 0 // sshhhhhhh
|
||||
var/Flush = 30
|
||||
|
||||
var/Uses = 5 // uses before it goes inert
|
||||
|
||||
New()
|
||||
..()
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
POWERFLAG = rand(1,10)
|
||||
Uses = rand(2, 5)
|
||||
//flags |= NOREACT
|
||||
|
||||
spawn()
|
||||
@@ -1133,7 +1135,7 @@
|
||||
|
||||
proc/Life()
|
||||
while(src)
|
||||
sleep(10)
|
||||
sleep(25)
|
||||
Flush--
|
||||
if(Flush <= 0)
|
||||
reagents.clear_reagents()
|
||||
|
||||
@@ -1256,12 +1256,14 @@ proc/listclearnulls(list/list)
|
||||
/proc/do_after(mob/M as mob, time as num)
|
||||
var/turf/T = get_turf(M)
|
||||
var/holding = M.equipped()
|
||||
sleep(time)
|
||||
if(M)
|
||||
if ((M.loc == T && M.equipped() == holding && !( M.stat )))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
for(var/i=0, i<time)
|
||||
if(M)
|
||||
if ((M.loc == T && M.equipped() == holding && !( M.stat )))
|
||||
i++
|
||||
sleep(1)
|
||||
else
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/proc/hasvar(var/datum/A, var/varname)
|
||||
//Takes: Anything that could possibly have variables and a varname to check.
|
||||
@@ -1538,4 +1540,4 @@ proc/get_opposite(var/checkdir)
|
||||
var/a = copytext(text,i,i+1)
|
||||
if(a == character)
|
||||
count++
|
||||
return count
|
||||
return count
|
||||
|
||||
@@ -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
|
||||
@@ -79,7 +79,9 @@ AI MODULES
|
||||
src.transmitInstructions(comp.current, usr)
|
||||
comp.current << "These are your laws now:"
|
||||
comp.current.show_laws()
|
||||
|
||||
for(var/mob/living/silicon/robot/R in world)
|
||||
if(R.lawupdate && (R.connected_ai == comp.current))
|
||||
R << "Your AI has set your 'laws waiting' flag."
|
||||
usr << "Upload complete. The AI's laws have been modified."
|
||||
|
||||
|
||||
|
||||
@@ -142,4 +142,23 @@
|
||||
"/obj/item/weapon/zippo",
|
||||
"/obj/item/device/taperecorder",
|
||||
"/obj/item/weapon/evidencebag"
|
||||
)
|
||||
)
|
||||
|
||||
/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 = "soulstonebelt"
|
||||
item_state = "soulstonebelt"
|
||||
storage_slots = 6
|
||||
can_hold = list(
|
||||
"/obj/item/device/soulstone"
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone/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)
|
||||
@@ -32,7 +32,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")
|
||||
message_admins("[ckey] has suicided.", 1)
|
||||
suiciding = 1
|
||||
|
||||
@@ -765,7 +765,6 @@
|
||||
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
src.moved_recently = 120
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/update_clothing()
|
||||
|
||||
@@ -93,7 +93,6 @@
|
||||
step(src, pick(cardinal))
|
||||
if(prob(1))
|
||||
emote(pick("scratch","jump","roll","tail"))
|
||||
src.moved_recently = max(0, src.moved_recently-1)
|
||||
|
||||
/mob/living/carbon/monkey
|
||||
proc
|
||||
|
||||
@@ -560,7 +560,6 @@
|
||||
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
src.moved_recently = 120
|
||||
return
|
||||
|
||||
/mob/living/carbon/monkey/verb/removeinternal()
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
return // nope.avi
|
||||
|
||||
if(!silenced)
|
||||
visible_message("\red [A.name] has been shot by the [src.name]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
visible_message("\red [A.name] is hit by the [src.name]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
else
|
||||
M << "\red You've been shot!"
|
||||
if(istype(firer, /mob))
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 9.0 KiB |
Reference in New Issue
Block a user