diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index d8b5ab0b..36966d0a 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -80,6 +80,7 @@
#define ADMIN_PUNISHMENT_NUGGET "Nugget"
#define ADMIN_PUNISHMENT_BREADIFY ":b:read"
#define ADMIN_PUNISHMENT_BOOKIFY "Bookify"
+#define ADMIN_PUNISHMENT_BONK "Bonk"
#define AHELP_ACTIVE 1
#define AHELP_CLOSED 2
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 1f780448..01d1902f 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1274,7 +1274,8 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
ADMIN_PUNISHMENT_FAKEBWOINK,
ADMIN_PUNISHMENT_NUGGET,
ADMIN_PUNISHMENT_BREADIFY,
- ADMIN_PUNISHMENT_BOOKIFY)
+ ADMIN_PUNISHMENT_BOOKIFY,
+ ADMIN_PUNISHMENT_BONK)
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
@@ -1393,6 +1394,10 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
addtimer(CALLBACK(GLOBAL_PROC, .proc/bookify, target), BOOKIFY_TIME)
playsound(target, 'hyperstation/sound/misc/bookify.ogg', 60, 1)
#undef BOOKIFY_TIME
+ if(ADMIN_PUNISHMENT_BONK)
+ playsound(target, 'hyperstation/sound/misc/bonk.ogg', 100, 1)
+ target.AddElement(/datum/element/squish, 60 SECONDS)
+ to_chat(target, "Bonk.")
punish_log(target, punishment)
diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm
index a98282da..c89e973c 100644
--- a/hyperstation/code/mobs/mimic.dm
+++ b/hyperstation/code/mobs/mimic.dm
@@ -243,6 +243,48 @@
/mob/living/simple_animal/hostile/hs13mimic/proc/allowed(atom/movable/A)
return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A) || isanimal(A))
+//One leader mimic spawns per mimic event spawn, they are able to consume and transform themselves into the station's dead pets. Buckle up.
+/mob/living/simple_animal/hostile/hs13mimic/leader
+ var/mob/living/consumptionTarget = null
+ var/consuming = FALSE
+ health = 38 //They have a teeeny tiny more health.
+ maxHealth = 38
+
+/mob/living/simple_animal/hostile/hs13mimic/leader/Life()
+ . = ..()
+ if(!consuming)
+ if(!consumptionTarget)
+ for(var/mob/living/simple_animal/pet/A in oview(5, src))
+ if(A.stat == DEAD)
+ consumptionTarget = A
+ break
+ if(!target && consumptionTarget) //Don't try to consume anything if we're currently attacking something.
+ var/target_distance = get_dist(targets_from, consumptionTarget)
+ if(target_distance > minimum_distance)
+ Goto(consumptionTarget,move_to_delay,minimum_distance)
+ else
+ tryConsume(consumptionTarget)
+
+/mob/living/simple_animal/hostile/hs13mimic/leader/proc/tryConsume(var/mob/living/simple_animal/pet/A)
+ src.visible_message("[A] is being consumed...",
+ "You start to consume the dead [A]...", "You hear strange fleshy sounds.")
+ consuming = TRUE
+ if(do_after(src, 100, target = A))
+ stealthed = TRUE
+ speed = 5
+ wander = TRUE
+ name = A.name
+ desc = A.desc
+ icon = A.icon
+ icon_state = A.icon_living
+ desc += " But something about it seems wrong..."
+ qdel(A)
+ consuming = FALSE
+ consumptionTarget = FALSE
+ return TRUE
+ consuming = FALSE
+ return FALSE
+
//Player control code
/mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A)
@@ -298,6 +340,7 @@
/area/asteroid/nearstation,
/area/science/server,
/area/science/explab,
+ /area/science/xenobiology,
/area/security/processing)
var/spawncount = 1
fakeable = FALSE
@@ -360,8 +403,12 @@
notify_ghosts("A group of mimics has spawned in [pickedArea]!", source=pickedArea, action=NOTIFY_ATTACK, flashwindow = FALSE)
while(spawncount > 0 && validTurfs.len)
- var/turf/pickedTurf = pick_n_take(validTurfs)
- var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic
- spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE)
spawncount--
+ var/turf/pickedTurf = pick_n_take(validTurfs)
+ if(spawncount != 0)
+ var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic
+ spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE)
+ else
+ var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic/leader
+ spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE)
return SUCCESSFUL_SPAWN
diff --git a/hyperstation/icons/obj/plushes.dmi b/hyperstation/icons/obj/plushes.dmi
index 55bd43a5..1f67aedf 100644
Binary files a/hyperstation/icons/obj/plushes.dmi and b/hyperstation/icons/obj/plushes.dmi differ
diff --git a/hyperstation/sound/misc/bonk.ogg b/hyperstation/sound/misc/bonk.ogg
new file mode 100644
index 00000000..8f03c8ec
Binary files /dev/null and b/hyperstation/sound/misc/bonk.ogg differ
diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi
deleted file mode 100644
index 88c30722..00000000
Binary files a/icons/mob/suit_digi.dmi and /dev/null differ