diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index fef3412c6e1..acba5f8d4ef 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -576,4 +576,4 @@
if(href_list["remove_inv"] || href_list["add_inv"])
to_chat(usr, "[src] won't wear that!")
return
- ..()
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 315507a36bd..ed066f6523e 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -94,6 +94,10 @@
emote_hear = list("screams")
emote_see = list("screams")
friendly = "bites"
+ canRegenerate = 1
+ minRegenTime = 30 //It's just a crab, might as well give it quick regen
+ maxRegenTime = 120
+
/mob/living/simple_animal/crab/snowy
name = "Snowy"
diff --git a/code/modules/mob/living/simple_animal/hostile/monster.dm b/code/modules/mob/living/simple_animal/hostile/monster.dm
index 043026a138a..503073cf8d3 100644
--- a/code/modules/mob/living/simple_animal/hostile/monster.dm
+++ b/code/modules/mob/living/simple_animal/hostile/monster.dm
@@ -18,6 +18,9 @@
speed = 4
size = SIZE_BIG
move_to_delay = 4
+ canRegenerate = 1
+ minRegenTime = 300
+ maxRegenTime = 1200
min_oxy = 0
max_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/necro.dm b/code/modules/mob/living/simple_animal/hostile/necro.dm
index b4e911fbe93..18029728baf 100644
--- a/code/modules/mob/living/simple_animal/hostile/necro.dm
+++ b/code/modules/mob/living/simple_animal/hostile/necro.dm
@@ -56,6 +56,10 @@
move_to_delay = 6
maxHealth = 100
health = 100
+ canRegenerate = 1
+ minRegenTime = 300
+ maxRegenTime = 1800
+
harm_intent_damage = 15
melee_damage_lower = 10
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 24c9a6fc9a2..8436d63e3d3 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -82,6 +82,12 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
var/supernatural = 0
var/purge = 0
+ //For those that we want to just pop back up a little while after they're killed
+ var/canRegenerate = 0 //If 1, it qualifies for regeneration
+ var/isRegenerating = 0 //To stop life calling the proc multiple times
+ var/minRegenTime = 0
+ var/maxRegenTime = 0
+
universal_speak = 1
universal_understand = 1
@@ -142,6 +148,8 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
stat = CONSCIOUS
density = 1
update_canmove()
+ if(canRegenerate && !isRegenerating)
+ src.delayedRegen()
return 0
@@ -163,6 +171,8 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
if(purge)
purge -= 1
+ isRegenerating = 0
+
//Movement
if((!client||deny_client_move) && !stop_automated_movement && wander && !anchored && (ckey == null) && !(flags & INVULNERABLE))
if(isturf(src.loc) && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc.
@@ -702,4 +712,12 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
if(!supernatural)
adjustBruteLoss(volume * 0.5)
+/mob/living/simple_animal/proc/delayedRegen()
+ set waitfor = 0
+ isRegenerating = 1
+ sleep(rand(minRegenTime, maxRegenTime)) //Don't want it being predictable
+ src.resurrect()
+ src.revive()
+ visible_message("[src] appears to wake from the dead, having healed all wounds.")
+
/datum/locking_category/simple_animal
\ No newline at end of file
diff --git a/html/changelogs/Skullyton.yml b/html/changelogs/Skullyton.yml
new file mode 100644
index 00000000000..de281c159b7
--- /dev/null
+++ b/html/changelogs/Skullyton.yml
@@ -0,0 +1,36 @@
+################################
+# 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
+# rscdel (general deleting of nice things)
+# rscadd (general adding of nice things)
+# imageadd
+# imagedel
+# spellcheck (typo fixes)
+# experiment
+# tgs (TG-ported fixes?)
+#################################
+
+# Your name.
+author: Skullyton
+
+# 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.
+# There needs to be a space after the - and before the prefix. Don't use tabs anywhere in this file.
+# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
+# If you're using characters such as # ' : - or the like in your changelog, surround the entire change with quotes as shown in the second example. These quotes don't show up on the changelog once it's merged and prevent errors.
+# SCREW ANY OF THIS UP AND IT WON'T WORK.
+changes:
+- rscadd: Adds back-from-the-dead regeneration for simple mobs, and adds it to certain mobs. Said mobs will need to have their bodies destroyed in some way to keep them down.