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"