diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm
index dd15a13dfb9..fe0748e9a07 100644
--- a/code/game/objects/items/weapons/traps.dm
+++ b/code/game/objects/items/weapons/traps.dm
@@ -152,6 +152,27 @@
health = 100
var/datum/weakref/captured = null
+/obj/item/weapon/trap/animal/process()
+ update_icon()
+
+/obj/item/weapon/trap/animal/update_icon()
+ icon = initial(icon)
+ icon_state = "[icon_base][deployed]"
+ var/datum/L = captured ? captured.resolve() : null
+ if (!L)
+ deployed = FALSE
+ captured = null
+ release_time = world.time
+ underlays.Cut()
+ STOP_PROCESSING(SSprocessing, src)
+ return
+ if(isliving(L))
+ var/mutable_appearance/MA = new(L)
+ MA.layer = FLOAT_LAYER
+ MA.plane = FLOAT_PLANE
+ underlays.Cut()
+ underlays += MA
+
/obj/item/weapon/trap/animal/examine(mob/user)
..()
if(captured)
@@ -171,9 +192,11 @@
message += "wounded"
message += "."
to_chat(user, message)
+ ll.examine(user)
else if (istype(L, /obj/effect/spider/spiderling))
var/obj/effect/spider/spiderling/S = L
to_chat(user, "\The [src] has [S] and it is alive.")
+
else
to_chat(user, "\The [src] is empty.")
@@ -201,6 +224,7 @@
deployed = 1
update_icon()
src.animate_shake()
+ START_PROCESSING(SSprocessing, src)
else if(istype(AM, /obj/effect/spider/spiderling) && spider) // for spiderlings
var/obj/effect/spider/spiderling/S = AM
@@ -289,6 +313,11 @@
if(!can_use(usr))
to_chat(usr, "You cannot use \the [src].")
return
+
+ if(usr in contents)
+ to_chat(usr, "You cannot open lock \the [src] from the inside. You would have to forcefully open it.")
+ return
+
if(!contents.len)
return
@@ -349,6 +378,7 @@
captured = null
release_time = world.time
update_icon()
+ STOP_PROCESSING(SSprocessing, src)
return
var/msg
@@ -356,6 +386,7 @@
var/mob/living/ll = L
ll.forceMove(target)
msg = "[ll] runs out of \the [src]."
+ STOP_PROCESSING(SSprocessing, src)
else if (istype(L, /obj/effect/spider/spiderling))
var/obj/effect/spider/spiderling/S = L
S.forceMove(target)
@@ -386,6 +417,7 @@
new /obj/item/stack/rods(src.loc, resources["rods"])
if(resources.len == 2)
new /obj/item/stack/material/steel(src.loc, resources["metal"])
+ release()
qdel(src)
else if(W.isscrewdriver())
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 4b611b94284..350b2de9034 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -51,10 +51,6 @@
pixel_x = 0
pixel_y = 0
- // This now does just the animation of all balls shooting main ball
- for (var/obj/singularity/energy_ball/ball in orbiting_balls)
- ball.Beam(src, icon_state="lightning[rand(1,12)]", icon = 'icons/effects/effects.dmi', time=2)
-
// Instead of miniballs shooting stuff, decided to make it just count the power produced.
dir = tesla_zap(src, 10, TESLA_DEFAULT_POWER + orbiting_balls.len * TESLA_MINI_POWER, TRUE)
@@ -66,6 +62,12 @@
if(energy < 0)
qdel(src)
+/obj/singularity/energy_ball/admin_investigate_setup()
+ if(orbiting)
+ return
+ else
+ ..()
+
/obj/singularity/energy_ball/examine(mob/user)
..()
if(orbiting_balls.len)
@@ -338,7 +340,7 @@
var/obj/singularity/energy_ball/E = source
if(E.energy && (E.orbiting_balls.len > rods_count * 4)) // so that miniballs don't fry stuff.
melt = TRUE// 1 grounding rod can handle max 4 balls
- E.visible_message(span("danger", "All [E.orbiting_balls.len] energize for a second, sending their energy to the main ball, which redirects it at the nearest object! Sacraficing one of its miniballs!"))
+ E.visible_message(span("danger", "All [E.orbiting_balls.len] energize for a second, sending their energy to the main ball, which redirects it at the nearest object! Sacrificing one of its miniballs!"))
for(var/obj/singularity/energy_ball/mini in E.orbiting_balls)
mini.Beam(source, icon_state="lightning[rand(1,12)]", icon = 'icons/effects/effects.dmi', time=2)
playsound(source.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 30)
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index f8a9015734c..a9feb8b22c4 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -7464,7 +7464,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Added Kinetic accelerator to mechs. RND can now research and make these
Kinetc accelerators. There is a regular and a burst(3 shots) version. It will
be better than average-decent man-held KA.
- - rscdel: Added flamethrower for mechs. RND can now research and make this flamethrower.
+ - rscadd: Added flamethrower for mechs. RND can now research and make this flamethrower.
Works like man-held flamethrower.
- soundadd: Added flamethrower sound.
- tweak: The LBX AC 10 "Scattershot" now uses shotgun sound effect.
diff --git a/html/changelogs/Sindorman-animaltrap.yml b/html/changelogs/Sindorman-animaltrap.yml
new file mode 100644
index 00000000000..bf8e6677bf5
--- /dev/null
+++ b/html/changelogs/Sindorman-animaltrap.yml
@@ -0,0 +1,44 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: PoZe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Disassembling trap with things inside of it will release whatever is inside."
+ - rscadd: "Animal traps now display visually what prey is inside of them. And updates their sprite regularly, meaning if they fall down, loose limb, etc it will all be displayed visually."
+ - tweak: "Examining animal trap with prey inside will also give user examine message of the mob too."
+ - backend: "Tesla no longer logs spawn of new miniballs."