diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 5b7420fdcd2..6bee2b9c542 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -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() diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index 69c99ee19d7..ad73c887926 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -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, iHas 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/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 0af6f4748cd..1927ad10257 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -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." diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm index ad92064c6c5..2626bfb4f13 100644 --- a/code/game/objects/storage/belt.dm +++ b/code/game/objects/storage/belt.dm @@ -142,4 +142,23 @@ "/obj/item/weapon/zippo", "/obj/item/device/taperecorder", "/obj/item/weapon/evidencebag" - ) \ 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 = "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) \ No newline at end of file diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 495bd5e9357..5e6bb783ba4 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0d7b4ed0ed1..bf14fcf3de3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -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() diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 9704c9e7e45..e7ba23c39e4 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -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 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 99256ab7f5f..1de7f7d96ce 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -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() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f23faf6abbe..4b6bef3f3b1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -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)) diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index dd5fe1f1b16..98f87ef39ed 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 420ae5ea9b1..7e3703b64c3 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index d34d0d0050d..df61c317a76 100644 Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ