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"