From 8063f6dd06cce4e2d65359d283b7a78bf6cd0000 Mon Sep 17 00:00:00 2001 From: "johnsonmt88@gmail.com" Date: Wed, 18 Jul 2012 04:53:18 +0000 Subject: [PATCH] Bugfixes: Projectiles now last 50 ticks then dissipate. - This is to prevent people from firing these into space causing large amounts of projectiles to be processed needlessly. Re-coded the cremator's cremate(), it should not lock up any more. Removed a duplicate attackby() in pill bottles. They should now be able to pick up all pills on a tile properly. - Fixes Issue 490 - Thanks to Zelacks for pointing this out. Handcuffed mobs who are being dragged by another player can now move when the puller is stunned or paralysed. Ashes are now decal/cleanable and can be mopped up by janitors git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4103 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/decal.dm | 16 ++--- code/defines/obj/toy.dm | 4 +- code/game/machinery/morgue.dm | 65 ++++++++----------- .../objects/items/weapons/cigs_lighters.dm | 2 +- code/modules/chemical/Chemistry-Tools.dm | 4 -- code/modules/mob/death.dm | 2 +- .../modules/mob/living/carbon/monkey/death.dm | 2 +- code/modules/mob/mob_movement.dm | 2 +- code/modules/projectiles/projectile.dm | 4 ++ 9 files changed, 46 insertions(+), 55 deletions(-) diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 2bf96c3a30..506c46ddd2 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -1,11 +1,3 @@ -/obj/effect/decal/ash - name = "ashes" - desc = "Ashes to ashes, dust to dust, and into space." - gender = PLURAL - icon = 'objects.dmi' - icon_state = "ash" - anchored = 1 - /obj/effect/decal/remains/human name = "remains" desc = "They look like human remains. They have a strange aura about them." @@ -43,6 +35,14 @@ //HUMANS +/obj/effect/decal/cleanable/ash + name = "ashes" + desc = "Ashes to ashes, dust to dust, and into space." + gender = PLURAL + icon = 'objects.dmi' + icon_state = "ash" + anchored = 1 + /obj/effect/decal/cleanable/blood name = "blood" desc = "It's red and gooey. Perhaps it's the chef's cooking?" diff --git a/code/defines/obj/toy.dm b/code/defines/obj/toy.dm index 6ca899f802..7797812474 100644 --- a/code/defines/obj/toy.dm +++ b/code/defines/obj/toy.dm @@ -336,7 +336,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - new /obj/effect/decal/ash(src.loc) + new /obj/effect/decal/cleanable/ash(src.loc) src.visible_message("\red The [src.name] explodes!","\red You hear a snap!") playsound(src, 'snap.ogg', 50, 1) del(src) @@ -350,7 +350,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(2, 0, src) s.start() - new /obj/effect/decal/ash(src.loc) + new /obj/effect/decal/cleanable/ash(src.loc) src.visible_message("\red The [src.name] explodes!","\red You hear a snap!") playsound(src, 'snap.ogg', 50, 1) del(src) diff --git a/code/game/machinery/morgue.dm b/code/game/machinery/morgue.dm index dfe83add05..7262f036c0 100644 --- a/code/game/machinery/morgue.dm +++ b/code/game/machinery/morgue.dm @@ -250,50 +250,41 @@ if(cremating) return //don't let you cremate something twice or w/e - if(length(contents) == 0) + if(contents.len <= 0) for (var/mob/M in viewers(src)) M.show_message("\red You hear a hollow crackle.", 1) return - else if(contents) + + else + if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear))) + usr << "You get the feeling that you shouldn't cremate one of the items in the cremator." + return + for (var/mob/M in viewers(src)) M.show_message("\red You hear a roar as the crematorium activates.", 1) + cremating = 1 locked = 1 - if(locate(/mob/living/, src)) - for (var/obj/item/I in contents) - del(I) - for (var/mob/living/M in contents) - M.Stun(100) //You really dont want to place this inside the loop. - spawn(1) - for(var/i=1 to 10) - sleep(10) - if(M) - M.take_overall_damage(0,30) - if (M.stat!=2 && prob(30)) - M.emote("scream") - new /obj/effect/decal/ash(src) - for (var/obj/item/W in M) - if (prob(10)) - W.loc = src - //Logging for this runtimes and causes the cremator to lock up - //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point when the mob's about to be deleted - //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" - //log_attack("\[[time_stamp()]\] [user]/[user.ckey] gibbed [M]/[M.ckey]") - M.death(1) - M.ghostize() - del(M) - cremating = 0 - locked = 0 - playsound(src.loc, 'ding.ogg', 50, 1) - else - for(var/obj/item/I in contents) - if(!istype(I, /obj/item/weapon/disk/nuclear)) - del(I) - new /obj/effect/decal/ash(src) - sleep(30) - cremating = 0 - locked = 0 - playsound(src.loc, 'ding.ogg', 50, 1) + + for(var/mob/living/M in contents) + if (M.stat!=2) + M.emote("scream") + //Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out. + //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point in this when the mob's about to be deleted + //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" + //log_attack("\[[time_stamp()]\] [user]/[user.ckey] cremated [M]/[M.ckey]") + M.death(1) + M.ghostize() + del(M) + + for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up + del(O) + + new /obj/effect/decal/cleanable/ash(src) + sleep(30) + cremating = 0 + locked = 0 + playsound(src.loc, 'ding.ogg', 50, 1) return /obj/structure/c_tray/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index f0dfcf80c3..8c37ab76e0 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -342,7 +342,7 @@ ZIPPO var/turf/location = get_turf(src) src.smoketime-- if(src.smoketime < 1) - new /obj/effect/decal/ash(location) + new /obj/effect/decal/cleanable/ash(location) if(ismob(src.loc)) var/mob/living/M = src.loc M << "\red Your [src.name] goes out, and you empty the ash." diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index c16132329f..dd06771631 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -1703,10 +1703,6 @@ return 0 - attackby(obj/item/I as obj, mob/user as mob) - - return - afterattack(obj/target, mob/user , flag) if(target.is_open_container() == 1 && target.reagents) diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 9a3e164ff1..11bd835059 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -38,7 +38,7 @@ animation.master = src // flick("dust-m", animation) - new /obj/effect/decal/ash(loc) + new /obj/effect/decal/cleanable/ash(loc) spawn(15) if(animation) del(animation) diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm index 884ec840df..99337c7fc9 100644 --- a/code/modules/mob/living/carbon/monkey/death.dm +++ b/code/modules/mob/living/carbon/monkey/death.dm @@ -32,7 +32,7 @@ animation.master = src flick("dust-m", animation) - new /obj/effect/decal/ash(loc) + new /obj/effect/decal/cleanable/ash(loc) spawn(15) if(animation) del(animation) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 02cf5a6a8d..d2be5fb244 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -306,7 +306,7 @@ if(mob.restrained())//Why being pulled while cuffed prevents you from moving for(var/mob/M in range(mob, 1)) - if(((M.pulling == mob && (!( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, mob.grabbed_by.len))) + if(M.pulling == mob && !M.restrained() && M.stat == 0 && M.canmove) src << "\blue You're restrained! You can't move!" return 0 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 61e4ced3c9..3d1b000fd5 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -38,6 +38,7 @@ var/nodamage = 0 //Determines if the projectile will skip any damage inflictions var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb var/projectile_type = "/obj/item/projectile" + var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile. //Effects var/stun = 0 var/weaken = 0 @@ -127,6 +128,9 @@ process() + if(kill_count < 1) + del(src) + kill_count-- spawn while(src) if((!( current ) || loc == current)) current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)