diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index e880379b557f..cb404e75fc71 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -230,7 +230,7 @@
if (!mob_spawn_list)
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 1, /mob/living/simple_animal/hostile/asteroid/goliath = 5, /mob/living/simple_animal/hostile/asteroid/basilisk = 4, /mob/living/simple_animal/hostile/asteroid/hivelord = 3)
if (!megafauna_spawn_list)
- megafauna_spawn_list = list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM)
+ megafauna_spawn_list = list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/stalwart = 3, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM)
if (!flora_spawn_list)
flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2)
if(!terrain_spawn_list)
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 5e9c6b33c361..c0139b1ccad5 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -1392,6 +1392,21 @@
/obj/item/hierophant_club/station
z_level_check = FALSE
+//Stalwart
+/obj/structure/closet/crate/sphere/stalwart
+ name = "silvery capsule"
+ desc = "It feels cold to the touch..."
+
+/obj/structure/closet/crate/sphere/stalwart/PopulateContents()
+ new /obj/item/gun/energy/plasmacutter/adv/robocutter
+
+/obj/item/gun/energy/plasmacutter/adv/robocutter
+ name = "energized powercutter"
+ desc = "Ripped out of an ancient machine, this self-recharging cutter is unmatched."
+ fire_delay = 4
+ icon = 'icons/obj/guns/energy.dmi'
+ icon_state = "robocutter"
+ selfcharge = 1
//Just some minor stuff
/obj/structure/closet/crate/necropolis/puzzle
name = "puzzling chest"
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm
new file mode 100644
index 000000000000..a96e1c9c71db
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm
@@ -0,0 +1,177 @@
+/mob/living/simple_animal/hostile/megafauna/stalwart
+ name = "stalwart"
+ desc = "A graceful, floating automaton. It emits a soft hum."
+ health = 3000
+ maxHealth = 3000
+ attacktext = "zaps"
+ attack_sound = 'sound/effects/empulse.ogg'
+ icon_state = "stalwart"
+ icon_living = "stalwart"
+ icon_dead = ""
+ friendly = "scans"
+ icon = 'icons/mob/lavaland/64x64megafauna.dmi'
+ speak_emote = list("screeches")
+ armour_penetration = 40
+ melee_damage_lower = 40
+ melee_damage_upper = 40
+ speed = 5
+ move_to_delay = 5
+ ranged = TRUE
+ del_on_death = TRUE
+ pixel_x = -16
+ internal_type = /obj/item/gps/internal/stalwart
+ loot = list(/obj/structure/closet/crate/sphere/stalwart)
+ deathmessage = "erupts into blue flame, and screeches before violently shattering."
+ deathsound = 'sound/voice/borg_deathsound.ogg'
+ internal_type = /obj/item/gps/internal/stalwart
+ var/charging = FALSE
+ var/revving_charge = FALSE
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/OpenFire()
+ ranged_cooldown = world.time + 50
+ anger_modifier = clamp(((maxHealth - health)/50),0,20)
+ if(prob(20+anger_modifier)) //Major attack
+ stalnade()
+ else if(prob(20))
+ charge()
+ else
+ if(prob(70))
+ backup()
+ else
+ energy_pike()
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/telegraph()
+ for(var/mob/M in range(10,src))
+ flash_color(M.client, "#6CA4E3", 1)
+ shake_camera(M, 4, 3)
+ playsound(src, 'sound/voice/borg_deathsound.ogg', 200, 1)
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/shoot_projectile(turf/marker, set_angle)
+ if(!isnum(set_angle) && (!marker || marker == loc))
+ return
+ var/turf/startloc = get_turf(src)
+ var/obj/item/projectile/P = new /obj/item/projectile/stalpike(startloc)
+ P.preparePixelProjectile(marker, startloc)
+ P.firer = src
+ if(target)
+ P.original = target
+ P.fire(set_angle)
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/bombsaway(turf/marker)
+ if(!marker || marker == loc)
+ return
+ var/turf/startloc = get_turf(src)
+ var/obj/item/projectile/P = new /obj/item/projectile/stalnade(startloc)
+ P.preparePixelProjectile(marker, startloc)
+ P.firer = src
+ if(target)
+ P.original = target
+ P.fire()
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/stalnade(turf/marker)
+ for(var/d in dir)
+ var/turf/E = get_step(src, d)
+ bombsaway(E)
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/backup()
+ visible_message("[src] constructs a flock of mini mechanoid!")
+ for(var/turf/open/H in range(src, 2))
+ if(prob(25))
+ new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone(H.loc)
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/energy_pike()
+ ranged_cooldown = world.time + 40
+ dir_shots(GLOB.diagonals)
+ dir_shots(GLOB.cardinals)
+ SLEEP_CHECK_DEATH(10)
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/dir_shots(list/dirs)
+ if(!islist(dirs))
+ dirs = GLOB.alldirs.Copy()
+ playsound(src, 'sound/effects/pop_expl.ogg', 200, 1, 2)
+ for(var/d in dirs)
+ var/turf/E = get_step(src, d)
+ shoot_projectile(E)
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/proc/charge(var/atom/chargeat = target, var/delay = 5)
+ if(!chargeat)
+ return
+ var/chargeturf = get_turf(chargeat)
+ if(!chargeturf)
+ return
+ var/dir = get_dir(src, chargeturf)
+ var/turf/T = get_ranged_target_turf(chargeturf, dir, 2)
+ if(!T)
+ return
+ charging = TRUE
+ revving_charge = TRUE
+ telegraph(src)
+ walk(src, 0)
+ setDir(dir)
+ SLEEP_CHECK_DEATH(delay)
+ revving_charge = FALSE
+ var/movespeed = 1
+ walk_towards(src, T, movespeed)
+ SLEEP_CHECK_DEATH(get_dist(src, T) * movespeed)
+ walk(src, 0) // cancel the movement
+ charging = FALSE
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/Move()
+ if(revving_charge)
+ return FALSE
+ if(charging)
+ DestroySurroundings() // code stolen from chester stolen from bubblegum i am the ultimate shitcoder
+ ..()
+
+//Projectiles and such
+
+/mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone
+ name = "mini mechanoid"
+ desc = "It's staring at you intently. Do not taunt."
+ icon_state = "drone_gem"
+ faction = list("mining")
+ weather_immunities = list("lava","ash")
+
+/obj/item/gps/internal/stalwart
+ icon_state = null
+ gpstag = "Ancient Signal"
+ desc = "Bzz bizzop boop blip beep"
+ invisibility = 100
+
+/obj/item/projectile/stalpike
+ name = "energy pike"
+ icon_state = "arcane_barrage"
+ damage = 20
+ armour_penetration = 100
+ speed = 5
+ eyeblur = 0
+ damage_type = BURN
+ pass_flags = PASSTABLE
+ color = "#6CA4E3"
+
+/obj/item/projectile/stalnade
+ name = "volatile orb"
+ icon_state = "wipe"
+ damage = 300
+ armour_penetration = 100
+ speed = 1
+ eyeblur = 0
+ pass_flags = PASSTABLE
+
+/obj/item/projectile/stalnade/Move()
+ . = ..()
+ var/turf/location = get_turf(src)
+ if(location)
+ new /obj/effect/temp_visual/hierophant/wall/stalwart(location)
+
+/obj/effect/temp_visual/hierophant/wall/stalwart
+ name = "azure barrier"
+ icon = 'icons/effects/fire.dmi'
+ icon_state = "3"
+ duration = 100
+ smooth = SMOOTH_FALSE
+ color = "#6CA4E3"
+
+/mob/living/simple_animal/hostile/megafauna/stalwart/devour(mob/living/L)
+ visible_message("[src] melts [L]!")
+ L.dust()
diff --git a/icons/mob/lavaland/64x64megafauna.dmi b/icons/mob/lavaland/64x64megafauna.dmi
index 1794c789ded4..c8869352be75 100644
Binary files a/icons/mob/lavaland/64x64megafauna.dmi and b/icons/mob/lavaland/64x64megafauna.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index a8d7d283b189..f80b02ff16fa 100644
Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ
diff --git a/yogstation.dme b/yogstation.dme
index 0258406eec99..3bfc2697aa7d 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -2390,6 +2390,7 @@
#include "code\modules\mob\living\simple_animal\hostile\megafauna\hierophant.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\megafauna.dm"
+#include "code\modules\mob\living\simple_animal\hostile\megafauna\stalwart.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\swarmer.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\basilisk.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\curse_blob.dm"