From 0efb30434a8491d381002f713076f2edf586eb9a Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 8 Oct 2015 00:48:00 +0200 Subject: [PATCH] Fixes not being able to move during jaunting if you are cuffed and pulled. Greenglow decal no longer disappears after 2 minutes. Fixes runtime with explosive implant activation. Fixes stunbaton infinite cell charge, the baton now turns off if you try using it after its cell has been deleted somehow. Fixes bloody pulled mob leaving a blood trail in zero G. Shortens the guardian battlecry message when attacking to lower chat spam. Items in Morph now disperses a bit on death instead of being all on the same tile. After reaching a limit of 50 items, morph swallowing items deletes them instead of putting them inside the morph. Monkeys can no longer modify the hand labeller's text to communicate. Fixes carbon,radium,uranium 's reaction_turf creating multiple decal on a tile, it now checks if there's already a decal of the relevant type and (for radium and uranium) only transfers reagent to it if it finds one. --- code/datums/spells/ethereal_jaunt.dm | 2 + .../objects/effects/decals/Cleanable/misc.dm | 5 -- .../weapons/implants/implant_explosive.dm | 3 +- code/game/objects/items/weapons/stunbaton.dm | 51 +++++++++---------- code/modules/mob/living/living.dm | 2 + .../living/simple_animal/guardian/guardian.dm | 2 +- .../mob/living/simple_animal/morph/morph.dm | 11 +++- code/modules/paperwork/handlabeler.dm | 3 ++ .../Chemistry-Reagents/Other-Reagents.dm | 16 ++++-- 9 files changed, 54 insertions(+), 41 deletions(-) diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm index 664bf001425..9a360ea0bd3 100644 --- a/code/datums/spells/ethereal_jaunt.dm +++ b/code/datums/spells/ethereal_jaunt.dm @@ -32,6 +32,8 @@ target.ExtinguishMob() if(target.buckled) target.buckled.unbuckle_mob() + if(target.pulledby) + target.pulledby.stop_pulling() jaunt_disappear(animation, target) target.loc = holder target.notransform=0 //mob is safely inside holder now, no need for protection. diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index e819145d7c5..935b2791edb 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -26,11 +26,6 @@ /obj/effect/decal/cleanable/greenglow name = "green glow" -/obj/effect/decal/cleanable/greenglow/New() - ..() - spawn(1200)// 2 minutes - qdel(src) - /obj/effect/decal/cleanable/greenglow/ex_act() return diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index 58baba89092..1422eae75aa 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -35,7 +35,8 @@ //If the delay is short, just blow up already jeez if(delay <= 7) explosion(src,heavy,medium,weak,weak, flame_range = weak) - imp_in.gib() + if(imp_in) + imp_in.gib() qdel(src) return timed_explosion() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 31dafa8f0c8..94cbcb56fa2 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -35,16 +35,14 @@ /obj/item/weapon/melee/baton/proc/deductcharge(chrgdeductamt) if(bcell) - if(bcell.charge < (hitcost+chrgdeductamt)) // If after the deduction the baton doesn't have enough charge for a stun hit it turns off. - status = 0 - update_icon() - playsound(loc, "sparks", 75, 1, -1) - if(bcell.use(chrgdeductamt)) - return 1 - else - return 0 - - + . = bcell.use(chrgdeductamt) + if(bcell.charge >= hitcost) // If after the deduction the baton doesn't have enough charge for a stun hit it turns off. + return + if(status) + status = 0 + update_icon() + playsound(loc, "sparks", 75, 1, -1) + return 0 /obj/item/weapon/melee/baton/update_icon() @@ -59,7 +57,7 @@ ..() if(bcell) user <<"The baton is [round(bcell.percent())]% charged." - if(!bcell) + else user <<"The baton does not have a power source installed." /obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user, params) @@ -122,20 +120,26 @@ if(user.a_intent != "harm") if(status) - user.do_attack_animation(L) - baton_stun(L, user) - else - L.visible_message("[user] has prodded [L] with [src]. Luckily it was off.", \ - "[user] has prodded you with [src]. Luckily it was off") - return + if(baton_stun(L, user)) + user.do_attack_animation(L) + return + L.visible_message("[user] has prodded [L] with [src]. Luckily it was off.", \ + "[user] has prodded you with [src]. Luckily it was off") else if(status) baton_stun(L, user) ..() - /obj/item/weapon/melee/baton/proc/baton_stun(mob/living/L, mob/user) + if(isrobot(loc)) + var/mob/living/silicon/robot/R = loc + if(!R || !R.cell || !R.cell.use(hitcost)) + return 0 + else + if(!deductcharge(hitcost)) + return 0 + user.lastattacked = L L.lastattacker = user @@ -147,22 +151,15 @@ "[user] has stunned you with [src]!") playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - if(isrobot(loc)) - var/mob/living/silicon/robot/R = loc - if(R && R.cell) - R.cell.use(hitcost) - else - deductcharge(hitcost) - if(ishuman(L)) var/mob/living/carbon/human/H = L H.forcesay(hit_appends) add_logs(user, L, "stunned") + return 1 /obj/item/weapon/melee/baton/emp_act(severity) - if(bcell) - deductcharge(1000 / severity) + if(deductcharge(1000 / severity)) if(bcell.reliability != 100 && prob(50/severity)) bcell.reliability -= 10 / severity ..() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e52d4b5326c..77c21506462 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -581,6 +581,8 @@ Sorry Giacom. Please don't be mad :( M.UpdateFeed(src) /mob/living/proc/makeTrail(turf/T, mob/living/M) + if(!has_gravity(M)) + return if(ishuman(M)) var/mob/living/carbon/human/H = M if((NOBLOOD in H.dna.species.specflags) || (!H.blood_max) || (H.bleedsuppress)) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index f7daf8177ec..05e332d15de 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -232,7 +232,7 @@ ..() if(istype(target, /mob/living)) src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]\ - [src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]") + [src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]") playsound(loc, src.attack_sound, 50, 1, 1) playsound(loc, src.attack_sound, 50, 1, 1) playsound(loc, src.attack_sound, 50, 1, 1) diff --git a/code/modules/mob/living/simple_animal/morph/morph.dm b/code/modules/mob/living/simple_animal/morph/morph.dm index c815f567578..8ade6d619f2 100644 --- a/code/modules/mob/living/simple_animal/morph/morph.dm +++ b/code/modules/mob/living/simple_animal/morph/morph.dm @@ -131,6 +131,10 @@ //Dump eaten stuff for(var/obj/O in src) O.loc = loc + var/eject_dir = pick(alldirs) + if(step(O, eject_dir)) + if(prob(50)) + step(O, eject_dir) for(var/mob/M in src) M.loc = loc @@ -169,12 +173,15 @@ L.loc = src adjustBruteLoss(-50) return - if(istype(target,/obj/item)) // Eat items just to be annoying + else if(istype(target,/obj/item)) // Eat items just to be annoying var/obj/item/I = target if(!I.anchored) if(do_after(src,20, target = I)) visible_message("[src] swallows [target] whole!") - I.loc = src + if(contents.len<50) + I.loc = src + else + qdel(I) return target.attack_animal(src) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index afbbe58bacb..8e5814eb035 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -38,6 +38,9 @@ /obj/item/weapon/hand_labeler/attack_self(mob/user) + if(!user.IsAdvancedToolUser()) + user << "You don't have the dexterity to use [src]!" + return mode = !mode icon_state = "labeler[mode]" if(mode) diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index 7d068c91fa7..c12c6be1f6d 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -454,7 +454,9 @@ /datum/reagent/carbon/reaction_turf(turf/T, reac_volume) if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/dirt(T) + var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents + if(!D) + new /obj/effect/decal/cleanable/dirt(T) /datum/reagent/chlorine name = "Chlorine" @@ -530,8 +532,10 @@ /datum/reagent/radium/reaction_turf(turf/T, reac_volume) if(reac_volume >= 3) if(!istype(T, /turf/space)) - var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T) - reagentdecal.reagents.add_reagent("radium", reac_volume) + var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents + if(!GG) + GG = new/obj/effect/decal/cleanable/greenglow(T) + GG.reagents.add_reagent("radium", reac_volume) /datum/reagent/sterilizine name = "Sterilizine" @@ -574,8 +578,10 @@ /datum/reagent/uranium/reaction_turf(turf/T, reac_volume) if(reac_volume >= 3) if(!istype(T, /turf/space)) - var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T) - reagentdecal.reagents.add_reagent("uranium", reac_volume) + var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents + if(!GG) + GG = new/obj/effect/decal/cleanable/greenglow(T) + GG.reagents.add_reagent("uranium", reac_volume) /datum/reagent/aluminium name = "Aluminium"