diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index 15c3d93cb826..a4b07632face 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
@@ -608,7 +608,7 @@
dir = 9
},
/obj/effect/decal/cleanable/dirt/dust,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/winter_biodome/living_quarters)
"fs" = (
@@ -896,7 +896,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt/dust,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/winter_biodome/living_quarters)
"lq" = (
@@ -952,7 +952,7 @@
"mD" = (
/obj/effect/turf_decal/solgov/wood/center,
/obj/effect/decal/cleanable/dirt/dust,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/wood,
/area/ruin/unpowered/winter_biodome/living_quarters)
"mX" = (
@@ -1081,7 +1081,7 @@
},
/obj/effect/turf_decal/corner/opaque/solgovgold/diagonal,
/obj/effect/decal/cleanable/dirt/dust,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/winter_biodome/engineering)
"qt" = (
@@ -1467,7 +1467,7 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/blood/gibs/up,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 4
},
@@ -1925,7 +1925,7 @@
/turf/open/floor/wood,
/area/ruin/unpowered/winter_biodome/sauna)
"Lf" = (
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/grass/snow,
/area/ruin/unpowered/winter_biodome)
"Lt" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
index e5756e7dbdf5..b71bfb250aee 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
@@ -542,7 +542,7 @@
/area/ruin/unpowered/buried_shrine)
"nq" = (
/obj/structure/stone_tile/surrounding,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"nz" = (
@@ -664,7 +664,7 @@
dir = 5
},
/obj/structure/chair/wood,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"qT" = (
@@ -931,7 +931,7 @@
/area/ruin/unpowered/buried_shrine)
"wM" = (
/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"wS" = (
@@ -1647,7 +1647,7 @@
/obj/structure/stone_tile/cracked{
dir = 1
},
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"QR" = (
@@ -1864,7 +1864,7 @@
/obj/structure/stone_tile{
dir = 1
},
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/ruin/unpowered/buried_shrine)
"Xr" = (
diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm
index d728c3de53f5..1c1d689c267a 100644
--- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm
+++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm
@@ -1577,7 +1577,7 @@
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"Iv" = (
-/obj/structure/spawner/mining/hivelord,
+/obj/structure/spawner/burrow/asteroid,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"IE" = (
@@ -2036,7 +2036,7 @@
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"TO" = (
-/obj/structure/spawner/mining/goliath,
+/obj/structure/spawner/burrow/asteroid,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"TR" = (
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_unhonorable.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_unhonorable.dmm
index ddbaaf262714..b97069f886ba 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_unhonorable.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_unhonorable.dmm
@@ -137,7 +137,7 @@
/turf/open/floor/plating,
/area/ruin/wasteplanet/wasteplanet_radiation/containment)
"iT" = (
-/obj/structure/spawner/wasteplanet/hivebot/low_threat,
+/obj/structure/spawner/hivebot,
/turf/open/floor/plating/asteroid/wasteplanet,
/area/ruin/wasteplanet/wasteplanet_radiation)
"jh" = (
diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm
index 31dd5523fef9..c55604dcebdd 100644
--- a/code/__DEFINES/achievements.dm
+++ b/code/__DEFINES/achievements.dm
@@ -28,7 +28,6 @@
//Skill medal hub IDs
#define MEDAL_LEGENDARY_MINER "Legendary Miner"
-
//Boss medals
// Medal hub IDs for boss medals (Pre-fixes)
@@ -40,10 +39,8 @@
#define BOSS_MEDAL_DRAKE "Drake Killer"
#define BOSS_MEDAL_HIEROPHANT "Hierophant Killer"
#define BOSS_MEDAL_LEGION "Legion Killer"
-#define BOSS_MEDAL_TENDRIL "Tendril Exterminator"
-#define BOSS_MEDAL_SWARMERS "Swarmer Beacon Killer"
+#define BOSS_MEDAL_NEST "Nest Exterminator"
#define BOSS_MEDAL_WENDIGO "Wendigo Killer"
-#define BOSS_MEDAL_KINGGOAT "King Goat Killer"
#define BOSS_MEDAL_MINER_CRUSHER "Blood-drunk Miner Crusher"
#define BOSS_MEDAL_FROSTMINER_CRUSHER "Demonic-frost Miner Crusher"
@@ -52,9 +49,7 @@
#define BOSS_MEDAL_DRAKE_CRUSHER "Drake Crusher"
#define BOSS_MEDAL_HIEROPHANT_CRUSHER "Hierophant Crusher"
#define BOSS_MEDAL_LEGION_CRUSHER "Legion Crusher"
-#define BOSS_MEDAL_SWARMERS_CRUSHER "Swarmer Beacon Crusher"
#define BOSS_MEDAL_WENDIGO_CRUSHER "Wendigo Crusher"
-#define BOSS_MEDAL_KINGGOAT_CRUSHER "King Goat Crusher"
// Medal hub IDs for boss-kill scores
#define BOSS_SCORE "Bosses Killed"
@@ -65,6 +60,5 @@
#define DRAKE_SCORE "Drakes Killed"
#define HIEROPHANT_SCORE "Hierophants Killed"
#define LEGION_SCORE "Legion Killed"
-#define SWARMER_BEACON_SCORE "Swarmer Beacs Killed"
#define WENDIGO_SCORE "Wendigos Killed"
-#define TENDRIL_CLEAR_SCORE "Tendrils Killed"
+#define NEST_CLEAR_SCORE "Nests Destroyed"
diff --git a/code/datums/achievements/boss_achievements.dm b/code/datums/achievements/boss_achievements.dm
index ca45d5939eec..39b355318f0c 100644
--- a/code/datums/achievements/boss_achievements.dm
+++ b/code/datums/achievements/boss_achievements.dm
@@ -2,10 +2,10 @@
category = "Bosses"
icon = "baseboss"
-/datum/award/achievement/boss/tendril_exterminator
- name = "Tendril Exterminator"
+/datum/award/achievement/boss/nest_exterminator
+ name = "Nest Exterminator"
desc = "Watch your step"
- database_id = BOSS_MEDAL_TENDRIL
+ database_id = BOSS_MEDAL_NEST
icon = "tendril"
/datum/award/achievement/boss/boss_killer
@@ -55,23 +55,11 @@
database_id = BOSS_MEDAL_LEGION
icon = "legion"
-/datum/award/achievement/boss/swarmer_beacon_kill
- name = "Swarm Beacon Killer"
- desc = "GET THEM OFF OF ME!"
- database_id = BOSS_MEDAL_SWARMERS
- icon = "swarmer"
-
/datum/award/achievement/boss/wendigo_kill
name = "Wendigo Killer"
desc = "You've now ruined years of mythical storytelling."
database_id = BOSS_MEDAL_WENDIGO
-/datum/award/achievement/boss/king_goat_kill
- name = "King Goat Killer"
- desc = "The king is dead, long live the king!"
- database_id = BOSS_MEDAL_KINGGOAT
- icon = "goatboss"
-
/datum/award/achievement/boss/blood_miner_crusher
name = "Blood-drunk Miner Crusher"
desc = "I guess he couldn't handle his drink that well."
@@ -112,18 +100,7 @@
desc = "We were many... now we are none."
database_id = BOSS_MEDAL_LEGION_CRUSHER
-/datum/award/achievement/boss/swarmer_beacon_crusher
- name = "Swarm Beacon Crusher"
- desc = "GET THEM OFF OF ME!"
- database_id = BOSS_MEDAL_SWARMERS_CRUSHER
-
/datum/award/achievement/boss/wendigo_crusher
name = "Wendigo Crusher"
desc = "You've now ruined years of mythical storytelling."
database_id = BOSS_MEDAL_WENDIGO_CRUSHER
-
-/datum/award/achievement/boss/king_goat_crusher
- name = "King Goat Crusher"
- desc = "The king is dead, long live the king!"
- database_id = BOSS_MEDAL_KINGGOAT_CRUSHER
- icon = "goatboss"
diff --git a/code/datums/achievements/boss_scores.dm b/code/datums/achievements/boss_scores.dm
index 7cf2fa886183..c0135e6c68a1 100644
--- a/code/datums/achievements/boss_scores.dm
+++ b/code/datums/achievements/boss_scores.dm
@@ -1,7 +1,7 @@
-/datum/award/score/tendril_score
- name = "Tendril Score"
+/datum/award/score/nest_score
+ name = "Nest Score"
desc = "Watch your step"
- database_id = TENDRIL_CLEAR_SCORE
+ database_id = NEST_CLEAR_SCORE
/datum/award/score/boss_score
name = "Bosses Killed"
@@ -43,11 +43,6 @@
desc = "You've killed HOW many?"
database_id = LEGION_SCORE
-/datum/award/score/swarmer_beacon_score
- name = "Swarmer Beacons Killed"
- desc = "You've killed HOW many?"
- database_id = SWARMER_BEACON_SCORE
-
/datum/award/score/wendigo_score
name = "Wendigos Killed"
desc = "You've killed HOW many?"
diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm
index f18002a05bd3..728a3bd44b86 100644
--- a/code/datums/components/chasm.dm
+++ b/code/datums/components/chasm.dm
@@ -18,8 +18,6 @@
/obj/effect/hotspot,
/obj/effect/landmark,
/obj/effect/temp_visual,
- /obj/effect/light_emitter/tendril,
- /obj/effect/collapse,
/obj/effect/particle_effect/ion_trails,
/obj/effect/dummy/phased_mob,
/obj/effect/mapping_helpers,
diff --git a/code/datums/mapgen/planetary/AsteroidGenerator.dm b/code/datums/mapgen/planetary/AsteroidGenerator.dm
index 737194b5ee28..dc5c27ac79e7 100644
--- a/code/datums/mapgen/planetary/AsteroidGenerator.dm
+++ b/code/datums/mapgen/planetary/AsteroidGenerator.dm
@@ -111,10 +111,8 @@
)
feature_spawn_list = list(
+ /obj/structure/spawner/burrow/asteroid = 3,
/obj/structure/geyser/random = 1,
- /obj/structure/spawner/mining/goliath = 1,
- /obj/structure/spawner/mining = 1,
- /obj/structure/spawner/mining/hivelord = 1,
/obj/structure/vein/asteroid = 5,
/obj/structure/vein/classtwo/asteroid = 10,
/obj/structure/vein/classthree/asteroid = 5
@@ -161,7 +159,7 @@
feature_spawn_list = list(
/obj/structure/geyser/random = 5,
- /obj/structure/spawner/mining/carp = 5,
+ /obj/structure/spawner/carp = 5,
/obj/structure/vein/asteroid = 10,
/obj/structure/vein/classtwo/asteroid = 15,
/obj/structure/vein/classthree/asteroid = 12
diff --git a/code/datums/mapgen/planetary/JungleGenerator.dm b/code/datums/mapgen/planetary/JungleGenerator.dm
index 45ae4a7120cc..077065c8e44e 100644
--- a/code/datums/mapgen/planetary/JungleGenerator.dm
+++ b/code/datums/mapgen/planetary/JungleGenerator.dm
@@ -180,7 +180,7 @@
feature_spawn_chance = 0.5
feature_spawn_list = list(
/obj/item/pickaxe/rusted = 1,
- /obj/structure/spawner/ice_moon = 1,
+ /obj/structure/spawner/burrow/jungle_planet = 1,
/obj/effect/spawner/lootdrop/anomaly/jungle = 1
)
diff --git a/code/datums/mapgen/planetary/LavaGenerator.dm b/code/datums/mapgen/planetary/LavaGenerator.dm
index ef66cca1103f..bca54d019397 100644
--- a/code/datums/mapgen/planetary/LavaGenerator.dm
+++ b/code/datums/mapgen/planetary/LavaGenerator.dm
@@ -120,9 +120,7 @@
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/crystal = 1,
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/forgotten = 1,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/crystal = 1,
- /obj/structure/spawner/lavaland/low_threat = 8,
- /obj/structure/spawner/lavaland/medium_threat = 3,
- /obj/structure/spawner/lavaland/high_threat = 1,
+ /obj/structure/spawner/burrow/lava_planet = 10
)
/datum/biome/lavaland/forest
@@ -242,10 +240,7 @@
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30,
/mob/living/simple_animal/hostile/asteroid/goldgrub = 10,
- /obj/structure/spawner/lavaland/low_threat = 8,
- /obj/structure/spawner/lavaland/medium_threat = 3,
- /obj/structure/spawner/lavaland/high_threat = 2,
- /obj/structure/spawner/lavaland/extreme_threat = 1
+ /obj/structure/spawner/burrow/lava_planet = 10
)
flora_spawn_chance = 1
flora_spawn_list = list(
diff --git a/code/datums/mapgen/planetary/RockGenerator.dm b/code/datums/mapgen/planetary/RockGenerator.dm
index c675c87714f5..30349a2ea53b 100644
--- a/code/datums/mapgen/planetary/RockGenerator.dm
+++ b/code/datums/mapgen/planetary/RockGenerator.dm
@@ -160,8 +160,8 @@
/obj/structure/vein/classtwo = 2,
/obj/structure/elite_tumor = 1,
/obj/structure/vein/classthree = 1,
+ /obj/structure/spawner/burrow/rock_plant = 4,
/obj/effect/spawner/minefield = 1,
- /obj/structure/spawner/ice_moon/rockplanet = 4,
/obj/effect/spawner/lootdrop/anomaly/rock/cave = 1,
)
mob_spawn_chance = 6
diff --git a/code/datums/mapgen/planetary/SandGenerator.dm b/code/datums/mapgen/planetary/SandGenerator.dm
index 91fad1430a47..1431ab53c6b9 100644
--- a/code/datums/mapgen/planetary/SandGenerator.dm
+++ b/code/datums/mapgen/planetary/SandGenerator.dm
@@ -217,9 +217,7 @@
/mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30,
/mob/living/simple_animal/hostile/asteroid/goldgrub = 20,
- /obj/structure/spawner/lavaland/sand_world/low_threat = 14,
- /obj/structure/spawner/lavaland/sand_world/medium_threat = 8,
- /obj/structure/spawner/lavaland/sand_world/high_threat = 2,
+ /obj/structure/spawner/burrow/sand_planet = 25
)
/datum/biome/cave/sand/volcanic
diff --git a/code/datums/mapgen/planetary/SnowGenerator.dm b/code/datums/mapgen/planetary/SnowGenerator.dm
index 8489cbb970ba..7fddcd176c66 100644
--- a/code/datums/mapgen/planetary/SnowGenerator.dm
+++ b/code/datums/mapgen/planetary/SnowGenerator.dm
@@ -102,8 +102,7 @@
mob_spawn_chance = 1
mob_spawn_list = list(
/mob/living/simple_animal/hostile/asteroid/wolf/random = 30,
- /obj/structure/spawner/ice_moon = 2,
- /obj/structure/spawner/ice_moon/polarbear = 2,
+ /obj/structure/spawner/burrow/ice_planet = 4,
/mob/living/simple_animal/hostile/asteroid/polarbear/random = 30,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50,
/mob/living/simple_animal/hostile/asteroid/goldgrub = 10,
@@ -115,9 +114,7 @@
feature_spawn_list = list(
/obj/effect/spawner/lootdrop/anomaly/ice = 12,
/obj/effect/spawner/lootdrop/anomaly/big = 1,
- /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 25,
- /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 50,
- /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 13,
+ /obj/structure/spawner/burrow/ice_planet = 80,
/obj/structure/vein/ice = 25,
/obj/effect/spawner/minefield = 2,
/obj/structure/vein/ice/classtwo = 50,
@@ -171,8 +168,7 @@
)
feature_spawn_chance = 0.1
feature_spawn_list = list(
- /obj/structure/spawner/ice_moon = 2,
- /obj/structure/spawner/ice_moon/polarbear = 2,
+ /obj/structure/spawner/burrow/ice_planet = 4,
/obj/structure/statue/snow/snowman = 3,
/obj/structure/statue/snow/snowlegion = 1,
/obj/structure/vein/ice = 3,
@@ -181,8 +177,7 @@
)
mob_spawn_list = list(
/mob/living/simple_animal/hostile/asteroid/wolf/random = 30,
- /obj/structure/spawner/ice_moon = 2,
- /obj/structure/spawner/ice_moon/polarbear = 2,
+ /obj/structure/spawner/burrow/ice_planet = 2,
/mob/living/simple_animal/hostile/asteroid/polarbear/random = 30,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50,
/mob/living/simple_animal/hostile/asteroid/goldgrub = 10,
@@ -219,10 +214,7 @@
feature_spawn_list = list(
/obj/effect/spawner/lootdrop/anomaly/ice = 100,
/obj/effect/spawner/lootdrop/anomaly/big = 1,
- /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 200,
- /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 400,
- /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 40,
- /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 1,
+ /obj/structure/spawner/burrow/ice_planet/hard = 600,
/obj/structure/vein/ice = 300,
/obj/structure/vein/ice/classtwo = 500,
/obj/structure/vein/ice/classthree = 50,
@@ -264,8 +256,7 @@
mob_spawn_chance = 2
mob_spawn_list = list(
/mob/living/simple_animal/hostile/asteroid/wolf/random = 30,
- /obj/structure/spawner/ice_moon = 2,
- /obj/structure/spawner/ice_moon/polarbear = 2,
+ /obj/structure/spawner/burrow/ice_planet = 4,
/mob/living/simple_animal/hostile/asteroid/polarbear/random = 30,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50,
/mob/living/simple_animal/hostile/asteroid/goldgrub = 10,
@@ -275,12 +266,8 @@
)
feature_spawn_chance = 0.2
feature_spawn_list = list(
- /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 20,
- /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 40,
- /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 5,
- /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 1,
- /obj/structure/spawner/ice_moon = 20,
- /obj/structure/spawner/ice_moon/polarbear = 20,
+ /obj/structure/spawner/burrow/ice_planet = 60,
+ /obj/structure/spawner/burrow/ice_planet = 40,
/obj/effect/spawner/lootdrop/anomaly/ice/cave = 10,
/obj/structure/vein/ice = 30,
/obj/structure/vein/ice/classtwo = 50,
diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm
index c6e1244be129..9b100412a391 100644
--- a/code/datums/mapgen/planetary/WasteGenerator.dm
+++ b/code/datums/mapgen/planetary/WasteGenerator.dm
@@ -263,10 +263,7 @@
/mob/living/simple_animal/bot/secbot/ed209/rockplanet = 3,
/mob/living/simple_animal/hostile/abandoned_minebot = 15,
/mob/living/simple_animal/bot/floorbot/rockplanet = 15,
- /obj/structure/spawner/wasteplanet/hivebot/low_threat = 20,
- /obj/structure/spawner/wasteplanet/hivebot/medium_threat = 10,
- /obj/structure/spawner/wasteplanet/hivebot/high_threat = 5,
- /obj/structure/spawner/wasteplanet/hivebot/extreme_threat = 2
+ /obj/structure/spawner/hivebot = 35
)
/datum/biome/waste/metal/rust
@@ -421,10 +418,7 @@
/mob/living/simple_animal/bot/secbot/ed209/rockplanet = 3,
/mob/living/simple_animal/hostile/abandoned_minebot = 15,
/mob/living/simple_animal/bot/floorbot/rockplanet = 15,
- /obj/structure/spawner/wasteplanet/hivebot/low_threat = 20,
- /obj/structure/spawner/wasteplanet/hivebot/medium_threat = 10,
- /obj/structure/spawner/wasteplanet/hivebot/high_threat = 5,
- /obj/structure/spawner/wasteplanet/hivebot/extreme_threat = 2
+ /obj/structure/spawner/hivebot = 20
)
/datum/biome/cave/waste/metal/hivebot
@@ -448,15 +442,11 @@
mob_spawn_list = list( //Whoops! All hivebots!
/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80,
/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged = 50,
- /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid = 50,
-
+ /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid = 50
)
mob_spawn_chance = 30
feature_spawn_list = list(
- /obj/structure/spawner/wasteplanet/hivebot/low_threat = 20,
- /obj/structure/spawner/wasteplanet/hivebot/medium_threat = 10,
- /obj/structure/spawner/wasteplanet/hivebot/high_threat = 5,
- /obj/structure/spawner/wasteplanet/hivebot/extreme_threat = 2,
+ /obj/structure/spawner/hivebot = 1,
/obj/effect/spawner/minefield/manhack = 2
)
feature_spawn_chance = 2 //hivebot biomes should have their dongles
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 865ca17e7d50..a76334a0b7ea 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -737,35 +737,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
return 1
return 0
-/obj/item/legion_staff
- icon_state = "legion_staff"
- lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
- name = "legionnaire staff"
- desc = "The remnants of a legionnaire, reconstructed around a pole of bone. The skulls it produces are loyal to the wielder, seeming to recognize them as their host body."
- icon = 'icons/obj/guns/magic.dmi'
- block_chance = 20
- force = 20
- throwforce = 10
- throw_speed = 4
- attack_verb = list("bit", "gnawed", "chomped")
- w_class = WEIGHT_CLASS_NORMAL
- slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT
- hitsound = 'sound/weapons/bite.ogg'
- var/next_use_time
-
-/obj/item/legion_staff/attack_self(mob/user)
- if(next_use_time > world.time)
- user.visible_message("[src] rattles in [user]'s hands, but nothing happens...")
- to_chat(user, "You need to wait longer to use this again.")
- return
- user.visible_message("[user] raises the [src] and summons a legion skull!")
- for(var/i in 1 to 3)
- var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/staff/LegionSkull = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/staff(user.loc)
- LegionSkull.faction = user.faction.Copy()
- LegionSkull.friends += user
- next_use_time = world.time + 6 SECONDS
-
/obj/item/claymore/bone
name = "Bone Sword"
desc = "Jagged pieces of bone are tied to what looks like a goliaths femur."
diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/geyser.dm
similarity index 100%
rename from code/game/objects/structures/lavaland/geyser.dm
rename to code/game/objects/structures/geyser.dm
diff --git a/code/game/objects/structures/hivebot.dm b/code/game/objects/structures/hivebot.dm
deleted file mode 100644
index 00124d781d80..000000000000
--- a/code/game/objects/structures/hivebot.dm
+++ /dev/null
@@ -1,112 +0,0 @@
-/obj/structure/hivebot_beacon
- name = "beacon"
- desc = "Some odd beacon thing."
- icon = 'icons/mob/hivebot.dmi'
- icon_state = "def_radar-off"
- anchored = TRUE
- density = TRUE
- var/bot_type = "norm"
- var/bot_amt = 10
- var/spawn_time_min
- var/spawn_time_max
-
-/obj/structure/hivebot_beacon/Initialize()
- . = ..()
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(2, loc)
- smoke.start()
- visible_message("[src] warps in!")
- playsound(src.loc, 'sound/effects/empulse.ogg', 25, TRUE)
- addtimer(CALLBACK(src, PROC_REF(warpbots)), rand(spawn_time_min, spawn_time_max))
-
-/obj/structure/hivebot_beacon/proc/warpbots()
- icon_state = "def_radar"
- visible_message("[src] turns on!")
- while(bot_amt > 0)
- bot_amt--
- switch(bot_type)
- if("norm")
- new /mob/living/simple_animal/hostile/hivebot(get_turf(src))
- if("range")
- new /mob/living/simple_animal/hostile/hivebot/range(get_turf(src))
- if("rapid")
- new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src))
-
- sleep(100)
- visible_message("[src] warps out!")
- playsound(src.loc, 'sound/effects/empulse.ogg', 25, TRUE)
- qdel(src)
- return
-
-/obj/structure/spawner/wasteplanet/hivebot
- name = "hivebot fabricator"
- desc = "An active fabricator, creating hivebots out of resources from below the surface."
-
- icon = 'icons/obj/machines/bsm.dmi'
- icon_state = "bsm_on"
-
- faction = list("mining")
- max_mobs = 5
- max_integrity = 250
- mob_types = list(
- /mob/living/simple_animal/hostile/hivebot/wasteplanet = 40,
- /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged = 40,
- /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid = 10,
- /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 5,
- /mob/living/simple_animal/hostile/hivebot/mechanic = 5
- )
- spawn_text = "crawls out of"
- spawn_sound = list('sound/effects/suitstep2.ogg')
- move_resist = INFINITY
- anchored = TRUE
- resistance_flags = FIRE_PROOF | LAVA_PROOF
- var/obj/effect/light_emitter/hivespawner/emitted_light
-
-/obj/structure/spawner/wasteplanet/hivebot/Initialize()
- . = ..()
- emitted_light = new(loc)
-
-/obj/structure/spawner/wasteplanet/hivebot/deconstruct(disassembled)
- destroy_effect()
- drop_loot()
- return ..()
-
-/obj/structure/spawner/wasteplanet/hivebot/Destroy()
- QDEL_NULL(emitted_light)
- return ..()
-
-/obj/structure/spawner/wasteplanet/hivebot/proc/destroy_effect()
- playsound(loc,'sound/effects/explosionfar.ogg', 200, TRUE)
- visible_message("[src] begins to rattle and shake, sparks flying off of it!")
-
-
-/obj/structure/spawner/wasteplanet/hivebot/proc/drop_loot()
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(2, loc)
- smoke.start()
- new /obj/effect/particle_effect/sparks(loc)
- new /obj/effect/spawner/lootdrop/waste/hivebot/beacon(loc)
-
-/obj/effect/light_emitter/hivespawner
- set_luminosity = 4
- set_cap = 2.5
- light_color = COLOR_RED_LIGHT
-
-
-/obj/structure/spawner/wasteplanet/hivebot/low_threat
- max_mobs = 4
- spawn_time = 300
-
-/obj/structure/spawner/wasteplanet/hivebot/medium_threat
- max_mobs = 5
- spawn_time = 250
-
-/obj/structure/spawner/wasteplanet/hivebot/high_threat
- max_mobs = 7
- spawn_time = 200
-
-/obj/structure/spawner/wasteplanet/hivebot/extreme_threat
- max_mobs = 10
- spawn_time = 150
-
-
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
deleted file mode 100644
index 4bb23877462b..000000000000
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ /dev/null
@@ -1,1014 +0,0 @@
-GLOBAL_LIST_INIT(ore_probability, list(
- /obj/item/stack/ore/uranium = 50,
- /obj/item/stack/ore/iron = 50,
- /obj/item/stack/ore/plasma = 75,
- /obj/item/stack/ore/silver = 50,
- /obj/item/stack/ore/gold = 50,
- /obj/item/stack/ore/diamond = 25,
- /obj/item/stack/ore/titanium = 75,
- /obj/item/pickaxe/diamond = 15,
- /obj/item/borg/upgrade/modkit/cooldown = 5,
- /obj/item/borg/upgrade/modkit/damage = 5,
- /obj/item/borg/upgrade/modkit/range = 5,
- /obj/item/t_scanner/adv_mining_scanner/lesser = 15,
- /obj/item/kinetic_crusher = 15,
- /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
- /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
- /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
- /obj/item/tank/jetpack/suit = 10,
- /obj/item/survivalcapsule = 15,
- /obj/item/reagent_containers/hypospray/medipen/survival = 15,
- /obj/item/gps/mining = 10,
- /obj/item/extraction_pack = 10,
- /obj/item/reagent_containers/food/drinks/beer = 15,
- ))
-
-/obj/structure/spawner/ice_moon
- name = "cave entrance"
- desc = "A hole in the ground, filled with monsters ready to defend it."
- faction = list("mining")
- max_mobs = 3
- max_integrity = 250
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/wolf)
- move_resist = INFINITY
- anchored = TRUE
-
-/obj/structure/spawner/ice_moon/Initialize()
- . = ..()
- clear_rock()
-
-/**
- * Clears rocks around the spawner when it is created
- *
- */
-/obj/structure/spawner/ice_moon/proc/clear_rock()
- for(var/turf/F in RANGE_TURFS(2, src))
- if(abs(src.x - F.x) + abs(src.y - F.y) > 3)
- continue
- if(ismineralturf(F))
- var/turf/closed/mineral/M = F
- M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
-
-/obj/structure/spawner/ice_moon/deconstruct(disassembled)
- destroy_effect()
- drop_loot()
- return ..()
-
-/**
- * Effects and messages created when the spawner is destroyed
- *
- */
-/obj/structure/spawner/ice_moon/proc/destroy_effect()
- playsound(loc,'sound/effects/explosionfar.ogg', 200, TRUE)
- visible_message("[src] collapses, sealing everything inside!\nOres fall out of the cave as it is destroyed!")
-
-/**
- * Drops items after the spawner is destroyed
- *
- */
-/obj/structure/spawner/ice_moon/proc/drop_loot()
- for(var/type in GLOB.ore_probability)
- var/chance = GLOB.ore_probability[type]
- if(!prob(chance))
- continue
- new type(loc, rand(5, 10))
-
-/obj/structure/spawner/ice_moon/polarbear
- max_mobs = 1
- spawn_time = 60 SECONDS
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/polarbear)
-
-/obj/structure/spawner/ice_moon/polarbear/clear_rock()
- for(var/turf/F in RANGE_TURFS(1, src))
- if(ismineralturf(F))
- var/turf/closed/mineral/M = F
- M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
-
-/obj/structure/spawner/ice_moon/demonic_portal
- name = "demonic portal"
- desc = "A portal that goes to another world, normal creatures couldn't survive there. When it collapses, who knows where it will go?"
- icon_state = "nether"
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/ice_demon)
- light_range = 1
- light_color = COLOR_SOFT_RED
- spawn_time = 300
-
-/obj/structure/spawner/ice_moon/demonic_portal/clear_rock()
- for(var/turf/F in RANGE_TURFS(3, src))
- if(abs(src.x - F.x) + abs(src.y - F.y) > 5)
- continue
- if(ismineralturf(F))
- var/turf/closed/mineral/M = F
- M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
-
-/obj/structure/spawner/ice_moon/demonic_portal/Initialize()
- . = ..()
-
-/obj/structure/spawner/ice_moon/demonic_portal/destroy_effect()
- new /obj/effect/collapsing_demonic_portal(loc)
-
-/obj/structure/spawner/ice_moon/demonic_portal/drop_loot()
- return
-
-/obj/structure/spawner/ice_moon/rockplanet
- name = "gruboid den"
- desc = "Though gruboid are typically nomadic creatures, they gather in small surface caves to reproduce. They're unlikely to be happy about being disturbed."
- max_mobs = 3
- spawn_time = 60 SECONDS
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/rockplanet, /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/rockplanet)
-
-/obj/structure/spawner/ice_moon/rockplanet/clear_rock()
- for(var/turf/F in RANGE_TURFS(1, src))
- if(ismineralturf(F))
- var/turf/closed/mineral/M = F
- M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
-
-/obj/effect/collapsing_demonic_portal
- name = "collapsing demonic portal"
- desc = "It's slowly fading! Get ready to fight whatever comes through!"
- layer = TABLE_LAYER
- icon = 'icons/mob/nest.dmi'
- icon_state = "nether"
- anchored = TRUE
- density = TRUE
-
-/obj/effect/collapsing_demonic_portal/Initialize()
- . = ..()
- playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, FALSE, 50, TRUE, TRUE)
- visible_message("[src] begins to collapse! As it fails, it connects to a random dimensional point and pulls through what it finds!")
- animate(src, transform = matrix().Scale(0, 1), alpha = 50, time = 5 SECONDS)
- addtimer(CALLBACK(src, PROC_REF(collapse)), 5 SECONDS)
-
-/**
- * Handles portal deletion
- *
- */
-/obj/effect/collapsing_demonic_portal/proc/collapse()
- drop_loot()
- qdel(src)
-
-//portal types go here
-
-/obj/structure/spawner/ice_moon/demonic_portal/brimdemon
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/brimdemon)
-
-/obj/structure/spawner/ice_moon/demonic_portal/ice_whelp
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/ice_whelp)
-
-/obj/structure/spawner/ice_moon/demonic_portal/snowlegion
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril)
-
-/obj/structure/spawner/ice_moon/demonic_portal/low_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 35,
- /mob/living/simple_animal/hostile/asteroid/ice_whelp = 15,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril = 35,
- /mob/living/simple_animal/hostile/asteroid/ice_demon = 15
- )
- max_mobs = 5
- spawn_time = 300
-
-/obj/structure/spawner/ice_moon/demonic_portal/medium_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 25,
- /mob/living/simple_animal/hostile/asteroid/ice_whelp = 25,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril = 25,
- /mob/living/simple_animal/hostile/asteroid/ice_demon = 25
- )
- max_mobs = 7
- spawn_time = 300
-/obj/structure/spawner/ice_moon/demonic_portal/high_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 15,
- /mob/living/simple_animal/hostile/asteroid/ice_whelp = 35,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril = 15,
- /mob/living/simple_animal/hostile/asteroid/ice_demon = 35
- )
- max_mobs = 7
- spawn_time = 200
-
-/obj/structure/spawner/ice_moon/demonic_portal/extreme_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 10,
- /mob/living/simple_animal/hostile/asteroid/ice_whelp = 25,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril = 15,
- /mob/living/simple_animal/hostile/asteroid/ice_demon = 50
- )
- max_mobs = 10
- spawn_time = 200
-
-//I think there's room to make portal types drop loot/spawn monsters based on the loot list but that's out of scope for what I'm doing
-
-/**
- * Drops loot from the portal. Uses variable difficulty based on drops- more valulable rewards will also add additional enemies to the attack wave.
- * If you manage to win big and get a bunch of major rich loot, you will also be faced with a big mob of angries.
- * Absolutely deranged use of probability code below, trigger warning
- */
-/obj/effect/collapsing_demonic_portal/proc/drop_loot()
- visible_message("Something slips out of [src]!")
- var/loot = rand(1, 21)
- switch(loot)
- if(1)//Clown hell. God help you if you roll this.
- visible_message("You can hear screaming and joyful honking.")//now THIS is what we call a critical failure
- playsound(loc,'sound/spookoween/ghosty_wind.ogg', 100, FALSE, 50, TRUE, TRUE)
- playsound(loc,'sound/spookoween/scary_horn3.ogg', 100, FALSE, 50, TRUE, TRUE)
- if(prob(15))
- new /mob/living/simple_animal/hostile/clown/clownhulk(loc)
- new /mob/living/simple_animal/hostile/clown/longface(loc)
- new /mob/living/simple_animal/hostile/clown/clownhulk/chlown(loc)
- new /obj/item/shield/energy/bananium(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/clown/banana(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- new /mob/living/simple_animal/hostile/clown/clownhulk/chlown
- new /mob/living/simple_animal/hostile/clown/honkling(loc)
- if(prob(25))
- new /obj/item/grenade/spawnergrenade/clown(loc)
- new /obj/item/grenade/spawnergrenade/clown(loc)
- new /mob/living/simple_animal/hostile/clown/clownhulk(loc)
- if(prob(10))
- new /mob/living/simple_animal/hostile/clown/mutant/blob(loc)//oh god oh fuck
- new /obj/machinery/syndicatebomb/badmin/clown(loc)
- if(prob(35))
- new /obj/item/storage/backpack/duffelbag/clown/syndie(loc)
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- new /mob/living/simple_animal/hostile/clown/honkling(loc)
- else
- new /obj/item/storage/backpack/duffelbag/clown/cream_pie(loc)
- new /mob/living/simple_animal/hostile/clown/honkling(loc)
- if(prob(25))
- new /obj/item/borg/upgrade/transform/clown(loc)
- new /mob/living/simple_animal/hostile/clown/stacked(loc)
- if(prob(35))
- new /obj/item/megaphone/clown(loc)
- new /mob/living/simple_animal/hostile/clown/stacked(loc)
- if(prob(25))
- new /obj/item/reagent_containers/spray/waterflower/lube(loc)
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- if(prob(35))
- new /obj/item/clothing/suit/space/hardsuit/clown(loc)
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- if(prob(25))
- new /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat(loc)
- new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
- if(prob(25))//you lost
- new /obj/item/circlegame(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone(loc)
- if(2)//basic demonic incursion
- visible_message("You glimpse an indescribable abyss in the portal. Horrifying monsters appear in a gout of flame.")
- playsound(loc,'sound/hallucinations/wail.ogg', 200, FALSE, 50, TRUE, TRUE)
- if(prob(35))
- new /obj/item/clothing/glasses/godeye(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- if(prob(45))
- new /obj/item/pickaxe/drill/jackhammer/demonic(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- if(prob(45))
- new /obj/item/wisp_lantern(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- new /mob/living/simple_animal/hostile/netherworld(loc)
- if(prob(25))
- new /mob/living/simple_animal/hostile/netherworld(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- if(prob(5))
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- if(prob(45))
- new /obj/item/nullrod/staff(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- if(prob(30))
- new /obj/item/clothing/suit/space/hardsuit/quixote/dimensional(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- else
- new /obj/item/immortality_talisman(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- if(prob(30))
- new /obj/item/shared_storage/red(loc)
- new /mob/living/simple_animal/hostile/netherworld(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- if(prob(30))
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- if(prob(30))
- new /obj/item/book/granter/spell/traps(loc)
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- if(prob(30))
- new /mob/living/simple_animal/hostile/netherworld/blankbody(loc)
- new /mob/living/simple_animal/hostile/netherworld(loc)
- new /mob/living/simple_animal/hostile/netherworld/migo(loc)
- new /mob/living/simple_animal/hostile/netherworld(loc)
- new /turf/open/indestructible/necropolis(loc)
- if(3)//skeleton/religion association, now accepting YOUR BONES
- visible_message("Bones rattle and strained voices chant a forgotten god's name.")
- playsound(loc,'sound/ambience/ambiholy.ogg', 100, FALSE, 50, TRUE, TRUE)
- if(prob(30))
- new /obj/item/reagent_containers/glass/bottle/potion/flight(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- else
- new /obj/item/clothing/neck/memento_mori(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- if(prob(35))
- new /obj/item/storage/box/holy_grenades(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- if(prob(40))
- new /obj/item/claymore(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- if(prob(45))
- new /obj/item/gun/ballistic/bow(loc)
- new /obj/item/storage/bag/quiver(loc)
- new /obj/item/ammo_casing/caseless/arrow/bronze(loc)
- new /obj/item/ammo_casing/caseless/arrow/bronze(loc)
- new /obj/item/ammo_casing/caseless/arrow/bronze(loc)
- new /obj/item/ammo_casing/caseless/arrow/bronze(loc)
- new /obj/item/ammo_casing/caseless/arrow/bronze(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- if(prob(30))
- new /obj/item/stack/sheet/mineral/wood/fifty(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- if(prob(35))
- new /obj/item/staff/bostaff(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- if(prob(25))
- new /obj/item/shield/riot/roman(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- if(prob(55))
- new /obj/item/clothing/suit/armor/riot/knight/blue(loc)
- new /obj/item/clothing/head/helmet/knight/blue(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- new /mob/living/simple_animal/hostile/human/skeleton(loc)
- new /obj/item/instrument/trombone(loc)
- new /obj/item/stack/sheet/bone(loc)
- new /obj/item/stack/sheet/bone(loc)
- new /obj/item/stack/sheet/bone(loc)
- new /obj/item/stack/sheet/bone(loc)
- new /mob/living/simple_animal/hostile/human/skeleton/templar(loc)
- new /turf/open/floor/mineral/silver(loc)
- if(4)//syndicate incursion. Again, high-quality loot at low chances, this time with excessive levels of danger
- visible_message("Radio chatter echoes out from the portal. Red-garbed figures step through, weapons raised.")
- playsound(loc,'sound/effects/radiohiss.ogg', 200, FALSE, 50, TRUE, TRUE)
- playsound(loc,'sound/ambience/antag/tatoralert.ogg', 75, FALSE, 50, TRUE, TRUE)
- if(prob(35))
- if(prob(15))
- new /obj/item/clothing/suit/space/hardsuit/syndi/elite(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- else
- if(prob(50))
- new /obj/item/clothing/suit/space/hardsuit/syndi(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- else
- new /obj/item/clothing/suit/space/hardsuit/syndi(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- if(prob(25))//the real prize
- new /obj/effect/spawner/lootdrop/donkpockets(loc)
- new /obj/effect/spawner/lootdrop/donkpockets(loc)
- new /obj/effect/spawner/lootdrop/donkpockets(loc)
- if(prob(35))
- new /obj/item/clothing/shoes/magboots/syndie(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- if(prob(25))
- new /obj/item/gun/ballistic/automatic/pistol/syndicate(loc)
- new /obj/item/ammo_box/magazine/
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc)
- if(prob(25))
- new /obj/item/gun/ballistic/automatic/pistol/tec9(loc)
- new /obj/item/ammo_box/magazine/tec9(loc)
- new /obj/item/ammo_box/magazine/tec9(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc)
- if(prob(35))
- new /obj/item/clothing/gloves/rapid(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- if(prob(35))
- new /obj/item/wrench/combat(loc)
- new /obj/item/storage/toolbox/syndicate(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc)
- if(prob(35))
- new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(loc)
- if(prob(35))
- new /obj/item/borg/upgrade/transform/assault(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc)
- if(prob(25))
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- if(prob(25))
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- if(prob(25))
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc)
- new /obj/item/storage/backpack/duffelbag/syndie/c4(loc)
- if(prob(35))
- new /obj/item/storage/belt/military(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc)
- if(prob(35))
- new /obj/item/kinetic_crusher/syndie_crusher(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- if(prob(25))
- new /obj/item/card/id/syndicate/anyone(loc)
- if(prob(35))
- new /obj/item/clothing/glasses/thermal/syndi(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc)
- if(prob(35))
- new /obj/item/reagent_containers/hypospray(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc)
- if(prob(25))
- new /obj/item/card/emag(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc)
- new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc)
- new /turf/open/floor/mineral/plastitanium/red(loc)
- if(5)//;HELP BLOB IN MEDICAL
- visible_message("You hear a robotic voice saying something about a \"Delta-level biohazard\".")
- playsound(loc,'sound/ai/outbreak5.ogg', 100, FALSE, 50, TRUE, TRUE)
- playsound(loc,'sound/misc/bloblarm.ogg', 50, FALSE, 50, TRUE, TRUE)
- if(prob(35))
- new /obj/item/circuitboard/machine/chem_dispenser(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(35))
- new /obj/item/storage/box/hypospray/CMO(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(15))
- new /mob/living/simple_animal/hostile/blob/blobbernaut/independent(loc)
- if(prob(45))
- new /obj/item/defibrillator(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(45))
- new /obj/item/circuitboard/machine/stasis(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(45))
- new /obj/item/stack/medical/suture/medicated(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(45))
- new /obj/item/stack/medical/mesh/advanced(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(35))
- new /obj/item/gun/syringe/syndicate(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(25))
- new /obj/item/healthanalyzer/advanced(loc)
- if(prob(35))
- new /obj/item/storage/firstaid/advanced(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(35))
- new /obj/item/storage/firstaid/tactical(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- new /mob/living/simple_animal/hostile/blob/blobbernaut/independent(loc)
- else
- new /obj/item/storage/firstaid/regular(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(prob(35))
- new /obj/effect/mob_spawn/human/corpse/solgov/sonnensoldner(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- else
- new /obj/effect/mob_spawn/human/doctor(loc)
- if(prob(35))
- new /obj/effect/mob_spawn/human/corpse/solgov/sonnensoldner(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- else
- new /obj/effect/mob_spawn/human/doctor(loc)
- if(prob(35))
- new /obj/effect/mob_spawn/human/corpse/solgov/sonnensoldner(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- else
- new /obj/effect/mob_spawn/human/doctor(loc)
- new /obj/item/healthanalyzer(loc)
- new /turf/open/floor/carpet/nanoweave/beige(loc)
- new /mob/living/simple_animal/hostile/blob/blobbernaut/independent(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- new /mob/living/simple_animal/hostile/blob/blobspore/weak(loc)
- if(6)//teleporty ice world. Incomplete.
- visible_message("You glimpse a frozen, empty plane. Something stirs in the fractal abyss.")
- playsound(loc,'sound/ambience/ambisin3.ogg', 150, FALSE, 50, TRUE, TRUE)
- if(prob(45))
- new /obj/item/warp_cube/red(loc)
- new /mob/living/simple_animal/hostile/asteroid/ice_demon(loc)
- if(prob(45))
- new /obj/item/clothing/suit/drfreeze_coat(loc)
- new /obj/item/clothing/under/costume/drfreeze(loc)
- new /mob/living/simple_animal/hostile/asteroid/ice_demon(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/asteroid/ice_demon(loc)
- new /mob/living/simple_animal/hostile/bear/snow(loc)
- if(prob(45))
- new /obj/item/freeze_cube(loc)
- new /mob/living/simple_animal/hostile/asteroid/ice_demon(loc)
- if(prob(55))
- new /obj/item/clothing/shoes/winterboots/ice_boots(loc)
- new /mob/living/simple_animal/hostile/bear/snow(loc)
- new /obj/effect/decal/remains/human(loc)
- new /mob/living/simple_animal/hostile/asteroid/ice_demon(loc)
- new /turf/open/floor/plating/ice/smooth(loc)
- if(7)//FUCK FUCK HELP SWARMERS IN VAULT
- visible_message("Something beeps. Small, glowing forms spill out of the portal en masse!")
- playsound(loc,'sound/ambience/ambitech.ogg', 150, FALSE, 50, TRUE, TRUE)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(45))
- new /obj/item/construction/rcd/loaded(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(35))
- new /obj/item/holosign_creator/atmos(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/vendor(loc)
- new /obj/item/vending_refill/engivend(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(45))
- new /obj/item/tank/jetpack/oxygen(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(25))
- new /obj/item/stack/sheet/metal/fifty(loc)
- new /obj/item/grenade/chem_grenade/smart_metal_foam(loc)
- new /obj/item/grenade/chem_grenade/smart_metal_foam(loc)
- new /obj/item/grenade/chem_grenade/smart_metal_foam(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(35))
- new /obj/item/stack/sheet/metal/fifty(loc)
- new /obj/item/clothing/glasses/meson/engine(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(25))
- new /obj/item/stack/sheet/metal/twenty(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(25))
- new /obj/item/storage/toolbox/infiltrator(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(25))
- new /obj/machinery/portable_atmospherics/canister/oxygen(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /obj/item/clothing/gloves/color/latex/engineering(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/swarmer/ai(loc)
- new /obj/item/clothing/gloves/color/latex/engineering(loc)
- new /obj/effect/mob_spawn/human/engineer(loc)
- new /turf/open/floor/circuit/telecomms(loc)
- if(8)//Literally blood-drunk.
- visible_message("Blood sprays from the portal. An ichor-drenched figure steps through!")
- playsound(loc,'sound/magic/enter_blood.ogg', 150, FALSE, 50, TRUE, TRUE)
- new /obj/effect/gibspawner/human(loc)
- new /obj/effect/gibspawner/human(loc)
- new /obj/effect/gibspawner/human(loc)
- new /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom(loc)
- if(prob(50))
- new /obj/item/gem/bloodstone(loc)
- if(prob(25))
- new /obj/item/seeds/tomato/blood(loc)
- new /turf/open/floor/plating/asteroid/basalt(loc)
- if(9)//Now's your chance to be a [[BIG SHOT]]
- visible_message("You hear the sound of big money and bigger avarice.")
- playsound(loc,'sound/lavaland/cursed_slot_machine_jackpot.ogg', 150, FALSE, 50, TRUE, TRUE)
- new /obj/structure/cursed_slot_machine(loc)
- if(prob(35))
- new /obj/item/spacecash/bundle/mediumrand(loc)
- new /obj/item/spacecash/bundle/mediumrand(loc)
- new /obj/item/coin/gold(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- if(prob(35))
- new /obj/item/clothing/mask/spamton(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- if(prob(35))
- new /obj/item/gem/fdiamond(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- else
- new /obj/item/gem/rupee(loc)
- if(prob(35))
- new /obj/item/coin/gold(loc)
- new /obj/item/coin/gold(loc)
- new /obj/item/stack/sheet/mineral/gold/twenty(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- if(prob(35))
- new /obj/item/storage/fancy/cigarettes/cigpack_robustgold(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- if(prob(35))
- new /obj/item/clothing/head/collectable/petehat(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- new /mob/living/simple_animal/hostile/faithless(loc)
- new /turf/open/floor/mineral/gold(loc)
- if(10)//hivebot factory
- visible_message("You catch a brief glimpse of a vast production complex. One of the assembly lines outputs through the portal!")
- playsound(loc,'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, 50, TRUE, TRUE)
- if(prob(45))
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /mob/living/simple_animal/hostile/hivebot(loc)
- if(prob(35))
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /mob/living/simple_animal/hostile/hivebot(loc)
- if(prob(25))
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /mob/living/simple_animal/hostile/hivebot/strong(loc)
- if(prob(35))
- new /obj/item/stack/sheet/mineral/silver/twenty(loc)
- new /obj/item/stack/sheet/mineral/titanium/twenty(loc)
- new /obj/item/stack/sheet/mineral/gold/twenty(loc)
- new /mob/living/simple_animal/hostile/hivebot/strong(loc)
- if(prob(35))
- new /obj/item/circuitboard/computer/solar_control(loc)
- new /obj/item/electronics/tracker(loc)
- new /obj/item/solar_assembly(loc)
- new /obj/item/solar_assembly(loc)
- new /obj/item/solar_assembly(loc)
- new /obj/item/solar_assembly(loc)
- if(prob(45))
- new /obj/item/stack/circuit_stack(loc)
- new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/hivebot/range(loc)
- if(prob(45))
- new /obj/item/circuitboard/machine/dna_vault(loc)
- new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/recycler(loc)
- new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/recharger(loc)
- new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/smoke_machine(loc)
- new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/ore_silo(loc)
- new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
- if(prob(35))
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
- new /mob/living/simple_animal/hostile/hivebot/strong(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/medipen_refiller(loc)
- new /mob/living/simple_animal/hostile/hivebot(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/stasis(loc)
- new /mob/living/simple_animal/hostile/hivebot(loc)
- if(prob(50))
- new /obj/item/stack/sheet/metal/fifty(loc)
- new /obj/item/stack/sheet/glass/fifty(loc)
- new /obj/item/stack/cable_coil/yellow(loc)
- new /obj/item/storage/box/lights/bulbs(loc)
- new /mob/living/simple_animal/hostile/hivebot(loc)
- new /mob/living/simple_animal/hostile/hivebot(loc)
- new /mob/living/simple_animal/hostile/hivebot/strong(loc)
- new /obj/machinery/conveyor(loc)
- new /turf/open/floor/circuit/red(loc)
- if(11)//miner's last moments
- visible_message("The familiar sound of an ash storm greets you. A miner steps through the portal, stumbles, and collapses.")
- playsound(loc,'sound/weather/ashstorm/outside/weak_end.ogg', 150, FALSE, 50, TRUE, TRUE)
- if(prob(35))
- new /obj/item/disk/design_disk/modkit_disc/resonator_blast(loc)
- if(prob(25))
- new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(loc)
- if(prob(25))
- new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(loc)
- if(prob(25))
- new /obj/item/disk/design_disk/modkit_disc/bounty(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/vending/mining_equipment(loc)
- if(prob(45))
- new /obj/item/vending_refill/mining_equipment(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- if(prob(35))
- new /obj/item/reagent_containers/hypospray/medipen/survival(loc)
- if(prob(35))
- new /obj/item/fulton_core(loc)
- new /obj/item/extraction_pack(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- if(prob(45))
- new /obj/item/t_scanner/adv_mining_scanner/lesser(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- if(prob(45))
- new /obj/item/gibtonite(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- if(prob(45))
- new /obj/item/clothing/glasses/meson/night(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- if(prob(50))
- new /obj/item/kinetic_crusher(loc)
- else
- new /obj/item/gun/energy/kinetic_accelerator(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc)
- new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc)
- new /obj/effect/mob_spawn/human/miner(loc)
- new /turf/open/floor/plating/asteroid/basalt(loc)
- if(12)//sailing the ocean blue
- visible_message("Water pours out of the portal, followed by a strange vessel. It's occupied.")
- playsound(loc,'sound/ambience/shore.ogg', 150, FALSE, 50, TRUE, TRUE)
- new /obj/vehicle/ridden/lavaboat/dragon(loc)
- new /obj/item/oar(loc)
- if(prob(50))
- new /obj/item/clothing/under/costume/sailor(loc)
- if(prob(50))
- new /obj/item/pneumatic_cannon/speargun(loc)
- new /obj/item/storage/backpack/magspear_quiver(loc)
- new /obj/item/throwing_star/magspear(loc)
- new /obj/item/throwing_star/magspear(loc)
- new /obj/item/throwing_star/magspear(loc)
- new /obj/item/throwing_star/magspear(loc)
- new /obj/item/throwing_star/magspear(loc)
- new /mob/living/simple_animal/hostile/carp(loc)
- if(prob(45))
- new /obj/item/clothing/suit/space/hardsuit/carp(loc)
- new /mob/living/simple_animal/hostile/carp(loc)
- if(prob(45))
- new /mob/living/simple_animal/hostile/carp(loc)
- if(prob(45))
- new /obj/item/reagent_containers/food/snacks/fishmeat/carp(loc)
- new /obj/item/reagent_containers/food/snacks/fishmeat/carp(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/carp/megacarp(loc)
- if(prob(25))
- new /obj/item/book/granter/martial/carp(loc)
- new /mob/living/simple_animal/hostile/carp/megacarp(loc)
- if(prob(35))
- new /obj/item/grenade/spawnergrenade/spesscarp(loc)
- new /mob/living/simple_animal/hostile/carp/megacarp(loc)
- new /mob/living/simple_animal/hostile/carp/megacarp(loc)
- new /mob/living/simple_animal/hostile/carp(loc)
- new /turf/open/water(loc)
- if(13)//hydroponics forest
- visible_message("You catch a glimpse of a strange forest. Smells like weed and bad choices.")
- playsound(loc,'sound/ambience/shore.ogg', 150, FALSE, 50, TRUE, TRUE)
- if(prob(45))
- new /obj/item/circuitboard/machine/biogenerator(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(35))
- new /obj/item/gun/energy/floragun(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/seed_extractor(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(45))
- new /obj/item/circuitboard/machine/plantgenes(loc)
- else
- new /obj/item/circuitboard/machine/hydroponics(loc)
- if(prob(15))
- new /obj/item/circuitboard/machine/hydroponics(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(15))
- new /obj/item/circuitboard/machine/hydroponics(loc)
- if(prob(5))
- new /obj/item/seeds/gatfruit(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(45))
- new /obj/item/seeds/random(loc)
- if(prob(45))
- new /obj/item/seeds/random(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(45))
- new /obj/item/seeds/random(loc)
- if(prob(45))
- new /obj/item/seeds/random(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- if(prob(50))
- new /obj/item/seeds/random(loc)
- if(prob(45))
- new /obj/item/seeds/cannabis(loc)
- new /obj/item/clothing/gloves/botanic_leather(loc)
- new /obj/item/cultivator/rake(loc)
- new /obj/structure/spacevine(loc)
- new /mob/living/simple_animal/hostile/venus_human_trap(loc)
- new /turf/open/floor/plating/grass(loc)
- if(14)//fallout ss13
- visible_message("You hear a geiger counter click and smell ash.")
- playsound(loc,'sound/items/radiostatic.ogg', 100, FALSE, 50, TRUE, TRUE)
- if(prob(50))
- new /obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola(loc)
- new /obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola(loc)
- new /obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola(loc)
- new /mob/living/simple_animal/hostile/cockroach/glockroach(loc)
- if(prob(50))
- new /obj/structure/radioactive/stack(loc)
- new /mob/living/simple_animal/hostile/cockroach/glockroach(loc)
- if(prob(45))
- new /obj/item/stack/sheet/mineral/uranium/twenty(loc)
- new /mob/living/simple_animal/hostile/cockroach/glockroach(loc)
- if(prob(35))
- new /obj/item/clothing/head/radiation(loc)
- new /obj/item/clothing/suit/radiation(loc)
- if(prob(45))
- new /obj/item/gun/energy/decloner(loc)
- new /mob/living/simple_animal/hostile/cockroach/glockroach(loc)
- new /obj/item/geiger_counter(loc)
- new /mob/living/simple_animal/hostile/cockroach/glockroach(loc)
- new /turf/open/floor/plating/dirt(loc)
- if(15)//the backroom freezer
- visible_message("The faint hallogen glow of a faraway kitchen greets you.")
- if(prob(45))
- new /obj/item/kitchen/knife/bloodletter(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(55))
- new /obj/item/clothing/gloves/butchering(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(45))
- new /obj/item/reagent_containers/food/snacks/store/bread/meat(loc)
- new /obj/item/reagent_containers/food/snacks/store/bread/meat(loc)
- new /obj/item/reagent_containers/food/snacks/store/bread/meat(loc)
- if(prob(55))
- new /obj/item/reagent_containers/food/snacks/store/cake/trumpet(loc)
- if(prob(35))
- new /obj/item/reagent_containers/food/snacks/pizza/dank(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(25))
- new /obj/item/reagent_containers/food/snacks/meat/steak/gondola(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(35))
- new /obj/item/reagent_containers/food/snacks/burger/roburgerbig(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(35))
- new /obj/item/kitchen/knife/butcher(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(35))
- new /obj/item/flamethrower/full(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(45))
- new /obj/item/sharpener(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(25))
- new /obj/item/sharpener/super(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/gibber(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/chem_master/condi(loc)
- new /mob/living/simple_animal/hostile/killertomato(loc)
- new /mob/living/simple_animal/hostile/alien/maid(loc)
- new /turf/open/floor/plasteel/kitchen_coldroom/freezerfloor(loc)
- if(16)//legion miniboss
- visible_message("The ground quakes. An immense figure reaches through the portal, crouching to squeeze through.")
- playsound(loc,'sound/magic/knock.ogg', 100, FALSE, 50, TRUE, TRUE)
- new /mob/living/simple_animal/hostile/big_legion(loc)
- if(prob(75))
- new /obj/structure/closet/crate/necropolis/tendril/greater(loc)
- new /turf/open/indestructible/necropolis(loc)
- if(17)//xenobiologist's hubris
- visible_message("You catch a glimpse of a wobbling sea of slimy friends. An abused-looking keeper slips through the portal.")
- playsound(loc,'sound/effects/footstep/slime1.ogg', 100, FALSE, 50, TRUE, TRUE)
- if(prob(25))
- new /obj/item/slime_extract/adamantine(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(35))
- new /obj/item/slime_extract/gold(loc)
- if(prob(25))
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(45))
- new /obj/item/extinguisher/advanced(loc)
- if(prob(25))
- new /obj/item/slimepotion/slime/renaming(loc)
- new /mob/living/simple_animal/slime/random(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(25))
- new /obj/item/slimepotion/slime/sentience(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(25))
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(45))
- new /obj/item/circuitboard/computer/xenobiology(loc)
- new /obj/item/slime_extract/grey(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(45))
- new /obj/item/circuitboard/machine/processor/slime(loc)
- new /mob/living/simple_animal/slime/random(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(25))
- new /obj/item/shield/adamantineshield(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(45))
- new /obj/item/slime_cookie/purple(loc)
- new /obj/item/slime_cookie/purple(loc)
- new /obj/item/slime_cookie/purple(loc)
- if(prob(45))
- new /obj/item/storage/box/monkeycubes(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(35))
- new /obj/item/slimepotion/speed(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(45))
- new /obj/item/slimepotion/slime/slimeradio(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(prob(35))
- new /mob/living/simple_animal/pet/dog/corgi/puppy/slime(loc)
- new /obj/effect/mob_spawn/human/scientist(loc)
- new /turf/open/floor/mineral/titanium/purple(loc)
- new /mob/living/simple_animal/slime/random(loc)
- if(18)//hey, free elite tumor!
- visible_message("A large, pulsating structure falls through the portal and crashes to the floor.")
- playsound(loc,'sound/effects/break_stone.ogg', 100, FALSE, 50, TRUE, TRUE)
- new /obj/structure/elite_tumor(loc)
- new /turf/open/floor/plating/asteroid/basalt(loc)
- if(19)//*you flush the toilet.*
- visible_message("You hear the faint noise of a long flush.")
- new /obj/structure/toilet(loc)
- new /obj/effect/decal/remains(loc)
- new /obj/item/newspaper(loc)
- new /turf/open/floor/plastic(loc)
- new /obj/item/clothing/head/papersack/smiley(loc) //welcome to the bathroom
- if(20)//Research & Zombies
- visible_message("Flashing lights and quarantine alarms echo through the portal. You smell rotting flesh and plasma.")
- playsound(loc,'sound/misc/bloblarm.ogg', 120, FALSE, 50, TRUE, TRUE)
- if(prob(35))
- new /obj/item/storage/box/rndboards(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(35))
- new /obj/item/storage/box/stockparts/deluxe(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(15))
- new /obj/effect/spawner/lootdrop/stockparts(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(15))
- new /obj/effect/spawner/lootdrop/stockparts(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(15))
- new /obj/effect/spawner/lootdrop/stockparts(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(15))
- new /obj/effect/spawner/lootdrop/stockparts(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(30))
- new /obj/item/circuitboard/machine/rdserver(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(35))
- new /obj/item/research_notes/loot/big(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- else
- new /obj/item/research_notes/loot/medium(loc)
- if(prob(35))
- new /obj/item/research_notes/loot/medium(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- else
- new /obj/item/research_notes/loot/small(loc)
- if(prob(35))
- new /obj/item/pneumatic_cannon(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(prob(45))
- new /obj/item/research_notes/loot/medium(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- else
- new /obj/item/research_notes/loot/small(loc)
- new/turf/open/floor/mineral/titanium/purple(loc)
- new /mob/living/simple_animal/hostile/human/zombie(loc)
- if(21)//Silverback's locker room
- visible_message("You catch a glimpse of verdant green. Smells like a locker room.")
- playsound(loc,'sound/creatures/gorilla.ogg', 75, FALSE, 50, TRUE, TRUE)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /obj/item/circuitboard/machine/dnascanner(loc)
- if(prob(35))
- new /obj/item/circuitboard/computer/scan_consolenew(loc)
- if(prob(25))
- new /obj/item/reagent_containers/hypospray/medipen/magillitis(loc)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /obj/item/dnainjector/thermal(loc)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /obj/item/storage/box/gorillacubes(loc)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /obj/item/dnainjector/hulkmut(loc)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /obj/item/dnainjector/gigantism(loc)
- if(prob(45))
- new /obj/item/dnainjector/dwarf(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/gorilla(loc)
- if(prob(35))
- new /mob/living/simple_animal/hostile/gorilla(loc)
- new /obj/item/dnainjector/telemut/darkbundle(loc)
- if(prob(35))
- new /obj/item/dnainjector/insulated(loc)
- new /mob/living/simple_animal/hostile/gorilla(loc)
- new /obj/item/sequence_scanner(loc)
- new /obj/structure/flora/grass/jungle(loc)
- new /turf/open/floor/plating/grass/jungle(loc)
diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm
deleted file mode 100644
index b3c9a8cbf230..000000000000
--- a/code/game/objects/structures/lavaland/necropolis_tendril.dm
+++ /dev/null
@@ -1,187 +0,0 @@
-//Necropolis Tendrils, which spawn lavaland monsters and break into a chasm when killed
-/obj/structure/spawner/lavaland
- name = "necropolis tendril"
- desc = "A vile tendril of corruption, originating deep underground. Terrible monsters are pouring out of it."
-
- icon_state = "tendril"
-
- faction = list("mining")
- max_mobs = 5
- max_integrity = 450
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril)
-
- move_resist = INFINITY // just killing it tears a massive hole in the ground, let's not move it
- anchored = TRUE
- resistance_flags = FIRE_PROOF | LAVA_PROOF
-
- hitsound_type = PROJECTILE_HITSOUND_FLESH
-
- var/gps = null
- var/obj/effect/light_emitter/tendril/emitted_light
-
-GLOBAL_LIST_INIT(tendrils, list())
-/obj/structure/spawner/lavaland/Initialize()
- . = ..()
- emitted_light = new(loc)
- for(var/F in RANGE_TURFS(1, src))
- if(ismineralturf(F))
- var/turf/closed/mineral/M = F
- M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
- GLOB.tendrils += src
-
-/obj/structure/spawner/lavaland/deconstruct(disassembled)
- new /obj/effect/collapse(loc)
- new /obj/structure/closet/crate/necropolis/tendril(loc)
- return ..()
-
-
-/obj/structure/spawner/lavaland/Destroy()
- var/last_tendril = TRUE
- if(GLOB.tendrils.len>1)
- last_tendril = FALSE
-
- if(last_tendril && !(flags_1 & ADMIN_SPAWNED_1))
- if(SSachievements.achievements_enabled)
- for(var/mob/living/L in view(7,src))
- if(L.stat || !L.client)
- continue
- L.client.give_award(/datum/award/achievement/boss/tendril_exterminator, L)
- L.client.give_award(/datum/award/score/tendril_score, L) //Progresses score by one
- GLOB.tendrils -= src
- QDEL_NULL(emitted_light)
- return ..()
-
-/obj/effect/light_emitter/tendril
- set_luminosity = 4
- set_cap = 2.5
- light_color = LIGHT_COLOR_LAVA
-
-/obj/effect/collapse
- name = "collapsing necropolis tendril"
- desc = "Get clear!"
- layer = TABLE_LAYER
- icon = 'icons/mob/nest.dmi'
- icon_state = "tendril"
- anchored = TRUE
- density = TRUE
- var/obj/effect/light_emitter/tendril/emitted_light
-
-/obj/effect/collapse/Initialize()
- . = ..()
- emitted_light = new(loc)
- visible_message("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!")
- visible_message("Something falls free of the tendril!")
- playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, FALSE, 50, TRUE, TRUE)
- addtimer(CALLBACK(src, PROC_REF(collapse)), 50)
-
-/obj/effect/collapse/Destroy()
- QDEL_NULL(emitted_light)
- return ..()
-
-/obj/effect/collapse/proc/collapse()
- for(var/mob/M in range(7,src))
- shake_camera(M, 15, 1)
- playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, TRUE)
- visible_message("The tendril falls inward, the ground around it erupting into bubbling lava!") //WS edit.
- for(var/turf/T in range(2,src))
- if(!T.density)
- T.TerraformTurf(/turf/open/lava/smooth/lava_land_surface, /turf/open/lava/smooth/lava_land_surface, flags = CHANGETURF_INHERIT_AIR) //WS edit, instead of chasms this produces lava instead.
- qdel(src)
-
- //these are good for mappers and already see use in some maps.
-
-/obj/structure/spawner/lavaland/goliath
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril)
-
-/obj/structure/spawner/lavaland/legion
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril)
-
-/obj/structure/spawner/lavaland/icewatcher
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing)
-
-/obj/structure/spawner/lavaland/whitesandsbasilisk
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/whitesands)
-
- //these are ones that we want to see spawning on worlds.
-
-/obj/structure/spawner/lavaland/low_threat //this is the most common one, it shouldn't be a huge issue for most players.
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 27,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 1,
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 20
- )
- max_mobs = 4
- spawn_time = 300
-
-/obj/structure/spawner/lavaland/medium_threat //this is less common. It starts getting dangerous here.
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 27,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 1,
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 20
- )
- max_mobs = 6
- spawn_time = 200 //they spawn a little faster
-
-/obj/structure/spawner/lavaland/high_threat //this should be rare. People will have trouble with this.
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 27,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 1,
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 20
- )
- max_mobs = 9
- spawn_time = 200
-
-/obj/structure/spawner/lavaland/extreme_threat //extremely rare
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 27,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril = 26,
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 1,
- /mob/living/simple_animal/hostile/asteroid/brimdemon = 20
- )
- max_mobs = 12
- spawn_time = 150 //bring a friend and some automatic weapons
-
-//and sand world ones. More legions, no brimdemons, no icewings.
-
-/obj/structure/spawner/lavaland/sand_world/low_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 20,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 40,
- /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40
- )
- max_mobs = 5
- spawn_time = 300
-
-/obj/structure/spawner/lavaland/sand_world/medium_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 20,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 40,
- /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40
- )
- max_mobs = 7
- spawn_time = 200
-
-/obj/structure/spawner/lavaland/sand_world/high_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 20,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 40,
- /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40
- )
- max_mobs = 10
- spawn_time = 200
-
-/obj/structure/spawner/lavaland/sand_world/extreme_threat
- mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 20,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 40,
- /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40
- )
- max_mobs = 12
- spawn_time = 150
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
deleted file mode 100644
index d44606a1a57b..000000000000
--- a/code/game/objects/structures/spawner.dm
+++ /dev/null
@@ -1,153 +0,0 @@
-GLOBAL_LIST_INIT(astroloot, list(
- /obj/item/stack/ore/uranium = 50,
- /obj/item/stack/ore/iron = 50,
- /obj/item/stack/ore/plasma = 75,
- /obj/item/stack/ore/silver = 50,
- /obj/item/stack/ore/gold = 50,
- /obj/item/stack/ore/diamond = 25,
- /obj/item/stack/ore/hellstone = 5,
- /obj/item/stack/ore/titanium = 75,
- /obj/item/pickaxe/diamond = 15,
- /obj/item/borg/upgrade/modkit/cooldown = 5,
- /obj/item/borg/upgrade/modkit/damage = 5,
- /obj/item/borg/upgrade/modkit/range = 5,
- /obj/item/t_scanner/adv_mining_scanner/lesser = 15,
- /obj/item/kinetic_crusher = 15,
- /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
- /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
- /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
- /obj/item/tank/jetpack/suit = 10,
- /obj/item/survivalcapsule = 15,
- /obj/item/reagent_containers/hypospray/medipen/survival = 15,
- /obj/item/gps/mining = 10,
- /obj/item/extraction_pack = 10,
- /obj/item/reagent_containers/food/drinks/beer = 15,
- ))
-
-/obj/structure/spawner
- name = "monster nest"
- icon = 'icons/mob/nest.dmi'
- icon_state = "hole"
- max_integrity = 100
-
- move_resist = MOVE_FORCE_EXTREMELY_STRONG
- anchored = TRUE
- density = TRUE
-
- var/max_mobs = 5
- var/spawn_time = 300 //30 seconds default
- var/mob_types = list(/mob/living/simple_animal/hostile/carp)
- var/spawn_text = "emerges from"
- var/faction = list("hostile")
- var/spawn_sound = list('sound/effects/break_stone.ogg')
- var/spawner_type = /datum/component/spawner
- var/spawn_distance_min = 1
- var/spawn_distance_max = 1
-
-/obj/structure/spawner/Initialize()
- . = ..()
- AddComponent(spawner_type, mob_types, spawn_time, faction, spawn_text, max_mobs, spawn_sound, spawn_distance_min, spawn_distance_max)
-
-/obj/structure/spawner/attack_animal(mob/living/simple_animal/M)
- if(faction_check(faction, M.faction, FALSE)&&!M.client)
- return
- ..()
-
-
-/obj/structure/spawner/syndicate
- name = "warp beacon"
- icon = 'icons/obj/device.dmi'
- icon_state = "syndbeacon"
- spawn_text = "warps in from"
- mob_types = list(/mob/living/simple_animal/hostile/human/syndicate/ranged)
- faction = list(ROLE_SYNDICATE)
-
-/obj/structure/spawner/skeleton
- name = "bone pit"
- desc = "A pit full of bones, and some still seem to be moving..."
- max_integrity = 150
- max_mobs = 15
- spawn_time = 150
- mob_types = list(/mob/living/simple_animal/hostile/human/skeleton)
- spawn_text = "climbs out of"
- faction = list("skeleton")
-
-/obj/structure/spawner/clown
- name = "Laughing Larry"
- desc = "A laughing, jovial figure. Something seems stuck in his throat."
- icon_state = "clownbeacon"
- icon = 'icons/obj/device.dmi'
- max_integrity = 200
- max_mobs = 15
- spawn_time = 150
- mob_types = list(/mob/living/simple_animal/hostile/retaliate/clown, /mob/living/simple_animal/hostile/retaliate/clown/fleshclown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, /mob/living/simple_animal/hostile/retaliate/clown/longface, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob, /mob/living/simple_animal/hostile/retaliate/clown/banana, /mob/living/simple_animal/hostile/retaliate/clown/honkling, /mob/living/simple_animal/hostile/retaliate/clown/lube)
- spawn_text = "climbs out of"
- faction = list("clown")
-
-/obj/structure/spawner/carp
- name = "carp spawn" //the non game spawn meaning
- desc = "A puddle, which appears to be full of carp"
- icon_state = "puddle"
- icon = 'icons/obj/watercloset.dmi'
- max_integrity = 150
- max_mobs = 5
- spawn_time = 1200
- mob_types = list(/mob/living/simple_animal/hostile/carp)
- spawn_text = "climbs out of"
- faction = list("carp")
-
-/obj/structure/spawner/mining/proc/adestroy_effect()
- playsound(loc,'sound/effects/explosionfar.ogg', 200, TRUE)
- visible_message("[src] collapses, sealing everything inside!\nOres fall out of the cave as it is destroyed!")
-
-/obj/structure/spawner/mining
- name = "monster den"
- desc = "A hole dug into the ground, harboring all kinds of monsters found within most caves or mining asteroids."
- max_mobs = 3
- spawn_text = "crawls out of"
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub, /mob/living/simple_animal/hostile/asteroid/goliath, /mob/living/simple_animal/hostile/asteroid/hivelord, /mob/living/simple_animal/hostile/asteroid/basilisk, /mob/living/simple_animal/hostile/asteroid/fugu)
- faction = list("mining")
- density = 0
-
-/obj/structure/spawner/mining/deconstruct(disassembled)
- adestroy_effect()
- drop_astroloot()
- return ..()
-
-/obj/structure/spawner/mining/proc/drop_astroloot()
- for(var/type in GLOB.astroloot)
- var/chance = GLOB.astroloot[type]
- if(!prob(chance))
- continue
- new type(loc, rand(5, 17))
-
-/obj/structure/spawner/mining/goldgrub
- name = "goldgrub den"
- desc = "A den housing a nest of goldgrubs, annoying but arguably much better than anything else you'll find in a nest."
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
-
-/obj/structure/spawner/mining/goliath
- name = "goliath den"
- desc = "A den housing a nest of goliaths, oh god why?"
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath)
-
-/obj/structure/spawner/mining/hivelord
- name = "hivelord den"
- desc = "A den housing a nest of hivelords."
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord)
-
-/obj/structure/spawner/mining/basilisk
- name = "basilisk den"
- desc = "A den housing a nest of basilisks, bring a coat."
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk)
-
-/obj/structure/spawner/mining/wumborian
- name = "wumborian fugu den"
- desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?"
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu)
-
-/obj/structure/spawner/mining/carp
- name = "carp den"
- desc = "A den housing a nest of space carp, seems fishy!"
- mob_types = list(/mob/living/simple_animal/hostile/carp)
- spawn_text = "emerges from"
diff --git a/code/modules/mining/equipment/trophies.dm b/code/modules/mining/equipment/trophies.dm
index a9631c7ffc15..3510a0b59628 100644
--- a/code/modules/mining/equipment/trophies.dm
+++ b/code/modules/mining/equipment/trophies.dm
@@ -30,7 +30,7 @@
desc = "A sliced-off goliath tentacle."
icon_state = "goliath_tentacle"
-//ancient goliath0
+//ancient goliath
/obj/item/mob_trophy/elder_tentacle
name = "elder tentacle"
desc = "The barbed tip of a tentacle sliced from an incredibly ancient goliath."
diff --git a/code/modules/mining/ore_veins.dm b/code/modules/mining/ore_veins.dm
index cfd908c23cbb..32b1ffeab8d5 100644
--- a/code/modules/mining/ore_veins.dm
+++ b/code/modules/mining/ore_veins.dm
@@ -40,8 +40,8 @@ GLOBAL_LIST_EMPTY(ore_veins)
var/max_mobs = 6
var/spawn_time = 150 //15 seconds
var/mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 60,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 20,
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/nest = 60,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest = 20,
/mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
)
var/spawn_text = "emerges from"
@@ -126,11 +126,11 @@ GLOBAL_LIST_EMPTY(ore_veins)
max_mobs = 6
spawn_time = 100
mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 60,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 30,
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/nest = 60,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest = 30,
/mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 5,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/tendril = 5,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/nest = 5,
)
/obj/structure/vein/classthree
@@ -149,18 +149,18 @@ GLOBAL_LIST_EMPTY(ore_veins)
max_mobs = 6 //Best not to go past 6 due to balance and lag reasons
spawn_time = 80
mob_types = list(
- /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril = 60,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril = 30,
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/nest = 60,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest = 30,
/mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 10,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/tendril = 10,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/nest = 10,
)
/obj/structure/vein/ice
mob_types = list(
/mob/living/simple_animal/hostile/asteroid/wolf = 30,
/mob/living/simple_animal/hostile/asteroid/polarbear = 30,
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril = 20,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/nest = 20,
/mob/living/simple_animal/hostile/asteroid/ice_demon = 10,
/mob/living/simple_animal/hostile/asteroid/ice_whelp = 5,
/mob/living/simple_animal/hostile/asteroid/lobstrosity = 20,
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
index 00a32a8dc449..03faa787d155 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
@@ -322,4 +322,3 @@ Difficulty: Extremely Hard
var/turf/T = get_turf(target)
mineral_scan_pulse(T, world.view + 1)
. = ..()
-
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
index 0c13b9d67f16..04723d80ba5a 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
@@ -49,9 +49,6 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
maxHealth = 750 //""""low-ish"""" HP because it's a passive boss, and the swarm itself is the real foe
mob_biotypes = MOB_ROBOTIC
gps_name = "Hungry Signal"
- achievement_type = /datum/award/achievement/boss/swarmer_beacon_kill
- crusher_achievement_type = /datum/award/achievement/boss/swarmer_beacon_crusher
- score_achievement_type = /datum/award/score/swarmer_beacon_score
faction = list("mining", "boss", "swarmer")
weather_immunities = list("lava","ash")
stop_automated_movement = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
index d10b9b86fb9b..b03363e956f1 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
@@ -1,4 +1,3 @@
-#define LEGIONVIRUS_TYPE /datum/disease/transformation/legionvirus
#define BULLET_SHELL_DAMAGE 1
//A beast that fire freezing blasts.
@@ -204,7 +203,6 @@
projectiletype = /obj/projectile/temp/basilisk/heated
#undef BULLET_SHELL_DAMAGE
-#undef LEGIONVIRUS_TYPE
//Watcher
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher
@@ -340,8 +338,8 @@
if(istype(L))
L.apply_status_effect(/datum/status_effect/freon/watcher)
-/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
- fromtendril = TRUE
+/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/nest
+ from_nest = TRUE
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/forgotten
name = "forgotten watcher"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
index cb7eaad0e988..94dd221945b9 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
@@ -185,7 +185,6 @@
move_to_delay = 5
mob_biotypes = MOB_ORGANIC|MOB_BEAST
mouse_opacity = MOUSE_OPACITY_ICON
- butcher_results = list()
guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1)
deathmessage = "falls to the ground."
status_flags = CANPUSH
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index bf8552ba5cb0..e4478b705f45 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -250,10 +250,7 @@
health = 180
speed = 4
//mob_trophy = /obj/item/mob_trophy/elder_tentacle
- pre_attack_icon = "ancient_goliath_preattack"
- throw_message = "does nothing to the rocky hide of the"
guaranteed_butcher_results = list()
- trophy_drop_mod = 75
wander = FALSE
bonus_tame_chance = 10
var/list/cached_tentacle_turfs
@@ -280,9 +277,9 @@
else
cached_tentacle_turfs -= t
-/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
+/mob/living/simple_animal/hostile/asteroid/goliath/beast/nest
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 2)
- fromtendril = TRUE
+ from_nest = TRUE
//tentacles
/obj/effect/temp_visual/goliath_tentacle
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 5158c80d056a..b5d539086ac7 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -164,7 +164,7 @@
if(stored_mob)
stored_mob.forceMove(get_turf(src))
stored_mob = null
- else if(fromtendril)
+ else if(from_nest)
new /obj/effect/mob_spawn/human/corpse/charredskeleton(T)
else if(dwarf_mob)
new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/dwarf(T)
@@ -172,11 +172,11 @@
new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested(T)
..(gibbed)
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
- fromtendril = TRUE
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest
+ from_nest = TRUE
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/tendril
- fromtendril = TRUE
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/nest
+ from_nest = TRUE
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf/death(gibbed)
move_force = MOVE_FORCE_DEFAULT
@@ -320,7 +320,7 @@
/mob/living/simple_animal/hostile/big_legion/Initialize()
.=..()
- AddComponent(/datum/component/spawner, list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril), 200, faction, "peels itself off from", 3)
+ AddComponent(/datum/component/spawner, list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest), 200, faction, "peels itself off from", 3)
// Snow Legion
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow
@@ -345,8 +345,8 @@
icon_aggro = "snowlegion_head"
icon_dead = "snowlegion_head"
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/tendril
- fromtendril = TRUE
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/nest
+ from_nest = TRUE
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/crystal
name = "disfigured legion"
@@ -376,7 +376,7 @@
P.fire(i*(360/5))
return ..()
-//Tendril-spawned Legion remains, the charred skeletons of those whose bodies sank into lava or fell into chasms.
+//nest-spawned Legion remains, the charred skeletons of those whose bodies sank into lava or fell into chasms.
/obj/effect/mob_spawn/human/corpse/charredskeleton
name = "charred skeletal remains"
burn_damage = 1000
@@ -413,19 +413,16 @@
)
)
- switch(type)
- if("Miner")
- outfit = /datum/outfit/generic/miner
- if("Assistant")
- outfit = /datum/outfit/generic
- if("Engineer")
- outfit = /datum/outfit/generic/engineer
- if("Doctor")
- outfit = /datum/outfit/generic/doctor
- if("Scientist")
- outfit = /datum/outfit/generic/science
- if("Cargo")
- outfit = /datum/outfit/generic/cargo
- if("Security")
- outfit = /datum/outfit/generic/security
+ var/outfit_map = list(
+ "Miner" = /datum/outfit/generic/miner,
+ "Assistant" = /datum/outfit/generic,
+ "Engineer" = /datum/outfit/generic/engineer,
+ "Doctor" = /datum/outfit/generic/doctor,
+ "Scientist" = /datum/outfit/generic/science,
+ "Cargo" = /datum/outfit/generic/cargo,
+ "Security" = /datum/outfit/generic/security
+ )
+
+ outfit = outfit_map[type] // Access outfit directly
+
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_demon.dm
similarity index 100%
rename from code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm
rename to code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_demon.dm
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_whelp.dm
similarity index 100%
rename from code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm
rename to code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_whelp.dm
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm
index 19334bc84fcd..6beb2f23b9e6 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm
@@ -15,7 +15,7 @@
var/mob_trophy
var/throw_message = "bounces off of"
var/throw_deflection = 20 //WS edit - Whitesands
- var/fromtendril = FALSE
+ var/from_nest = FALSE
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
mob_size = MOB_SIZE_LARGE
@@ -70,7 +70,7 @@
/mob/living/simple_animal/hostile/asteroid/death(gibbed)
SSblackbox.record_feedback("tally", "mobs_killed_mining", 1, type)
- if(prob(trophy_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item
+ if(prob(trophy_drop_mod)) //on average, you'll need to kill 5 creatures before getting the item
spawn_mob_trophy()
..(gibbed)
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index 55d873cf036a..25827781b4b8 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -167,48 +167,3 @@
attack_verb_simple = "punch"
deathmessage = "falls apart into a fine dust."
phaser = FALSE
-
-/obj/structure/spawner/nether
- name = "netherworld link"
- desc = null //see examine()
- icon_state = "nether"
- max_integrity = 50
- spawn_time = 600 //1 minute
- max_mobs = 15
- spawn_text = "crawls through"
- mob_types = list(/mob/living/simple_animal/hostile/netherworld/migo, /mob/living/simple_animal/hostile/netherworld, /mob/living/simple_animal/hostile/netherworld/blankbody)
- faction = list("nether")
-
-/obj/structure/spawner/nether/Initialize()
- .=..()
- START_PROCESSING(SSprocessing, src)
-
-/obj/structure/spawner/nether/examine(mob/user)
- . = ..()
- if(isskeleton(user) || iszombie(user))
- . += "A direct link to another dimension full of creatures very happy to see you. You can see your house from here!"
- else
- . += "A direct link to another dimension full of creatures not very happy to see you. Entering the link would be a very bad idea."
-
-/obj/structure/spawner/nether/attack_hand(mob/user)
- . = ..()
- if(isskeleton(user) || iszombie(user))
- to_chat(user, "You don't feel like going home yet...")
- else
- user.visible_message("[user] is violently pulled into the link!", \
- "Touching the portal, you are quickly pulled through into a world of unimaginable horror!")
- contents.Add(user)
-
-/obj/structure/spawner/nether/process()
- for(var/mob/living/M in contents)
- if(M)
- playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE)
- M.adjustBruteLoss(60)
- new /obj/effect/gibspawner/generic(get_turf(M), M)
- if(M.stat == DEAD)
- var/mob/living/simple_animal/hostile/netherworld/blankbody/blank
- blank = new(loc)
- blank.name = "[M]"
- blank.desc = "It's [M], but [M.p_their()] flesh has an ashy texture, and [M.p_their()] face is featureless save an eerie smile."
- src.visible_message("[M] reemerges from the link!")
- qdel(M)
diff --git a/code/modules/mob_spawner/burrow.dm b/code/modules/mob_spawner/burrow.dm
new file mode 100644
index 000000000000..f8d4c31bc87f
--- /dev/null
+++ b/code/modules/mob_spawner/burrow.dm
@@ -0,0 +1,109 @@
+GLOBAL_LIST_INIT(ore_probability, list(
+ /obj/item/stack/ore/plasma = 75,
+ /obj/item/stack/ore/iron = 75,
+ /obj/item/stack/ore/titanium = 50,
+ /obj/item/stack/ore/silver = 50,
+ /obj/item/stack/ore/gold = 50,
+ /obj/item/stack/ore/uranium = 50,
+ /obj/item/stack/ore/diamond = 25,
+ /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
+ /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25,
+ /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 25
+ ))
+
+/obj/structure/spawner/burrow
+ name = "burrow entrance"
+ desc = "A hole in the ground, filled with fauna ready to defend it."
+ max_integrity = 250
+ faction = list("mining")
+ max_mobs = 3
+
+/obj/structure/spawner/burrow/Initialize()
+ . = ..()
+ clear_rock()
+
+/**
+ * Clears rocks around the spawner when it is created
+ *
+ */
+/obj/structure/spawner/burrow/proc/clear_rock()
+ for(var/turf/F in RANGE_TURFS(2, src))
+ if(abs(src.x - F.x) + abs(src.y - F.y) > 3)
+ continue
+ if(ismineralturf(F))
+ var/turf/closed/mineral/M = F
+ M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
+
+/obj/structure/spawner/burrow/deconstruct(disassembled)
+ destroy_effect()
+ drop_loot()
+ return ..()
+
+/**
+ * Effects and messages created when the spawner is destroyed
+ *
+ */
+/obj/structure/spawner/burrow/proc/destroy_effect()
+ playsound(loc,'sound/effects/explosionfar.ogg', 200, TRUE)
+ visible_message("[src] collapses, sealing everything inside!\nOres fall out of the burrow as it is destroyed!")
+
+/**
+ * Drops items after the spawner is destroyed
+ *
+ */
+/obj/structure/spawner/burrow/proc/drop_loot()
+ for(var/type in GLOB.ore_probability)
+ var/chance = GLOB.ore_probability[type]
+ if(!prob(chance))
+ continue
+ new type(loc, rand(5, 10))
+
+/obj/structure/spawner/burrow/lava_planet
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/nest = 27,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest = 26,
+ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/nest = 26,
+ /mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
+ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 1
+ )
+
+/obj/structure/spawner/burrow/sand_planet
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest = 40,
+ /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40,
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/nest = 20
+ )
+
+/obj/structure/spawner/burrow/ice_planet
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/wolf,
+ /mob/living/simple_animal/hostile/asteroid/polarbear
+ )
+
+/obj/structure/spawner/burrow/ice_planet/hard
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/brimdemon = 35,
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow/nest = 35,
+ /mob/living/simple_animal/hostile/asteroid/ice_whelp = 15,
+ /mob/living/simple_animal/hostile/asteroid/ice_demon = 15
+ )
+
+/obj/structure/spawner/burrow/jungle_planet
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/wolf/random,
+ /mob/living/simple_animal/hostile/retaliate/bat,
+ /mob/living/simple_animal/hostile/retaliate/poison/snake
+ )
+
+/obj/structure/spawner/burrow/rock_plant
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/rockplanet,
+ /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/rockplanet
+ )
+
+/obj/structure/spawner/burrow/asteroid
+ mob_types = list (
+ /mob/living/simple_animal/hostile/asteroid/goliath,
+ /mob/living/simple_animal/hostile/asteroid/hivelord,
+ /mob/living/simple_animal/hostile/carp
+ )
diff --git a/code/modules/mob_spawner/hivebot.dm b/code/modules/mob_spawner/hivebot.dm
new file mode 100644
index 000000000000..630ed6f6f3c7
--- /dev/null
+++ b/code/modules/mob_spawner/hivebot.dm
@@ -0,0 +1,50 @@
+/obj/structure/spawner/hivebot
+ name = "hivebot fabricator"
+ desc = "An active fabricator, creating hivebots out of resources from below the surface."
+
+ icon = 'icons/obj/machines/bsm.dmi'
+ icon_state = "bsm_on"
+
+ faction = list("mining")
+ max_integrity = 250
+ mob_types = list(
+ /mob/living/simple_animal/hostile/hivebot/wasteplanet = 40,
+ /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged = 40,
+ /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid = 10,
+ /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 5,
+ /mob/living/simple_animal/hostile/hivebot/mechanic = 5
+ )
+ spawn_text = "crawls out of"
+ spawn_sound = list('sound/effects/suitstep2.ogg')
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ var/obj/effect/light_emitter/hivespawner/emitted_light
+
+/obj/structure/spawner/hivebot/Initialize()
+ . = ..()
+ emitted_light = new(loc)
+
+/obj/structure/spawner/hivebot/deconstruct(disassembled)
+ destroy_effect()
+ drop_loot()
+ return ..()
+
+/obj/structure/spawner/hivebot/Destroy()
+ QDEL_NULL(emitted_light)
+ return ..()
+
+/obj/structure/spawner/hivebot/proc/destroy_effect()
+ playsound(loc,'sound/effects/explosionfar.ogg', 200, TRUE)
+ visible_message("[src] begins to rattle and shake, sparks flying off of it!")
+
+
+/obj/structure/spawner/hivebot/proc/drop_loot()
+ var/datum/effect_system/smoke_spread/smoke = new
+ smoke.set_up(2, loc)
+ smoke.start()
+ new /obj/effect/particle_effect/sparks(loc)
+ new /obj/effect/spawner/lootdrop/waste/hivebot/beacon(loc)
+
+/obj/effect/light_emitter/hivespawner
+ set_luminosity = 4
+ set_cap = 2.5
+ light_color = COLOR_RED_LIGHT
diff --git a/code/modules/mob_spawner/spawner.dm b/code/modules/mob_spawner/spawner.dm
new file mode 100644
index 000000000000..f5cfdadd0e96
--- /dev/null
+++ b/code/modules/mob_spawner/spawner.dm
@@ -0,0 +1,40 @@
+/obj/structure/spawner
+ name = "monster nest"
+ icon = 'icons/mob/nest.dmi'
+ icon_state = "hole"
+ max_integrity = 100
+
+ move_resist = INFINITY
+ anchored = TRUE
+ density = TRUE
+
+ var/max_mobs = 5
+ var/spawn_time = 300 //30 seconds default
+ var/mob_types = list(/mob/living/simple_animal/hostile/carp)
+ var/spawn_text = "emerges from"
+ var/faction = list("hostile")
+ var/spawn_sound = list('sound/effects/break_stone.ogg')
+ var/spawner_type = /datum/component/spawner
+ var/spawn_distance_min = 1
+ var/spawn_distance_max = 1
+
+/obj/structure/spawner/Initialize()
+ . = ..()
+ AddComponent(spawner_type, mob_types, spawn_time, faction, spawn_text, max_mobs, spawn_sound, spawn_distance_min, spawn_distance_max)
+
+/obj/structure/spawner/attack_animal(mob/living/simple_animal/M)
+ if(faction_check(faction, M.faction, FALSE)&&!M.client)
+ return
+ ..()
+
+/obj/structure/spawner/carp
+ name = "carp spawn" //the non game spawn meaning
+ desc = "A puddle, which appears to be full of carp"
+ icon_state = "puddle"
+ icon = 'icons/obj/watercloset.dmi'
+ max_integrity = 150
+ max_mobs = 5
+ spawn_time = 1200
+ mob_types = list(/mob/living/simple_animal/hostile/carp)
+ spawn_text = "swims out of"
+ faction = list("carp")
diff --git a/code/datums/components/spawner.dm b/code/modules/mob_spawner/spawner_componet.dm
similarity index 99%
rename from code/datums/components/spawner.dm
rename to code/modules/mob_spawner/spawner_componet.dm
index aab5bb6ea08a..8a904a5504c4 100644
--- a/code/datums/components/spawner.dm
+++ b/code/modules/mob_spawner/spawner_componet.dm
@@ -14,7 +14,6 @@
var/wave_timer
var/current_timerid
-
/datum/component/spawner/Initialize(_mob_types, _spawn_time, _faction, _spawn_text, _max_mobs, _spawn_sound, _spawn_distance_min, _spawn_distance_max, _wave_length, _wave_downtime)
if(_spawn_time)
spawn_time=_spawn_time
diff --git a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm
index b231ea902371..8c2496ce05ab 100644
--- a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm
+++ b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm
@@ -40,7 +40,6 @@
/obj/structure/lavaland/ash_walker/deconstruct(disassembled)
new /obj/item/assembly/signaler/anomaly (get_step(loc, pick(GLOB.alldirs)))
- new /obj/effect/collapse(loc)
return ..()
/obj/structure/lavaland/ash_walker/process()
diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm
index c47205a27323..c34d5cf7c985 100644
--- a/code/modules/spells/spell_types/conjure.dm
+++ b/code/modules/spells/spell_types/conjure.dm
@@ -55,18 +55,6 @@
range = 3
newVars = list("emagged" = 2, "remote_disabled" = 1,"shoot_sound" = 'sound/weapons/laser.ogg',"projectile" = /obj/projectile/beam/laser, "declare_arrests" = 0,"name" = "Wizard's Justicebot")
-/obj/effect/proc_holder/spell/aoe_turf/conjure/linkWorlds
- name = "Link Worlds"
- desc = "A whole new dimension for you to play with! They won't be happy about it, though."
- invocation = "WTF"
- clothes_req = FALSE
- charge_max = 600
- cooldown_min = 200
- summon_type = list(/obj/structure/spawner/nether)
- summon_amt = 1
- range = 1
- cast_sound = 'sound/weapons/marauder.ogg'
-
/obj/effect/proc_holder/spell/targeted/conjure_item
name = "Summon weapon"
desc = "A generic spell that should not exist. This summons an instance of a specific type of item, or if one already exists, un-summons it. Summons into hand if possible."
diff --git a/shiptest.dme b/shiptest.dme
index 4f6f1e910dc4..90c6abbc9310 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -526,7 +526,6 @@
#include "code\datums\components\sizzle.dm"
#include "code\datums\components\slippery.dm"
#include "code\datums\components\soulstoned.dm"
-#include "code\datums\components\spawner.dm"
#include "code\datums\components\spill.dm"
#include "code\datums\components\spooky.dm"
#include "code\datums\components\squeak.dm"
@@ -1357,13 +1356,13 @@
#include "code\game\objects\structures\fireplace.dm"
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\fluff.dm"
+#include "code\game\objects\structures\geyser.dm"
#include "code\game\objects\structures\ghost_role_spawners.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\grille.dm"
#include "code\game\objects\structures\guillotine.dm"
#include "code\game\objects\structures\guncase.dm"
#include "code\game\objects\structures\headpike.dm"
-#include "code\game\objects\structures\hivebot.dm"
#include "code\game\objects\structures\holosign.dm"
#include "code\game\objects\structures\janicart.dm"
#include "code\game\objects\structures\kitchen_spike.dm"
@@ -1391,7 +1390,6 @@
#include "code\game\objects\structures\showcase.dm"
#include "code\game\objects\structures\shower.dm"
#include "code\game\objects\structures\signs.dm"
-#include "code\game\objects\structures\spawner.dm"
#include "code\game\objects\structures\spirit_board.dm"
#include "code\game\objects\structures\stairs.dm"
#include "code\game\objects\structures\statues.dm"
@@ -1441,9 +1439,6 @@
#include "code\game\objects\structures\crates_lockers\crates\large.dm"
#include "code\game\objects\structures\crates_lockers\crates\secure.dm"
#include "code\game\objects\structures\crates_lockers\crates\wooden.dm"
-#include "code\game\objects\structures\icemoon\cave_entrance.dm"
-#include "code\game\objects\structures\lavaland\geyser.dm"
-#include "code\game\objects\structures\lavaland\necropolis_tendril.dm"
#include "code\game\objects\structures\plaques\_plaques.dm"
#include "code\game\objects\structures\plaques\static_plaques.dm"
#include "code\game\objects\structures\signs\_signs.dm"
@@ -2774,8 +2769,8 @@
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord_outfits.dm"
-#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice demon.dm"
-#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice whelp.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice_demon.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice_whelp.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\lobstrosity.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\polarbear.dm"
@@ -2798,6 +2793,10 @@
#include "code\modules\mob\living\simple_animal\slime\slime.dm"
#include "code\modules\mob\living\simple_animal\slime\slime_say.dm"
#include "code\modules\mob\living\simple_animal\slime\subtypes.dm"
+#include "code\modules\mob_spawner\burrow.dm"
+#include "code\modules\mob_spawner\hivebot.dm"
+#include "code\modules\mob_spawner\spawner.dm"
+#include "code\modules\mob_spawner\spawner_componet.dm"
#include "code\modules\modular_computers\laptop_vendor.dm"
#include "code\modules\modular_computers\computers\_modular_computer_shared.dm"
#include "code\modules\modular_computers\computers\item\computer.dm"
diff --git a/tools/HubMigrator/HubMigrator.dm b/tools/HubMigrator/HubMigrator.dm
index cd7f7e6020eb..feb38b9301be 100644
--- a/tools/HubMigrator/HubMigrator.dm
+++ b/tools/HubMigrator/HubMigrator.dm
@@ -19,8 +19,7 @@
#define BOSS_MEDAL_DRAKE "Drake Killer"
#define BOSS_MEDAL_HIEROPHANT "Hierophant Killer"
#define BOSS_MEDAL_LEGION "Legion Killer"
-#define BOSS_MEDAL_TENDRIL "Tendril Exterminator"
-#define BOSS_MEDAL_SWARMERS "Swarmer Beacon Killer"
+#define BOSS_MEDAL_NEST "Nest Exterminator"
#define BOSS_MEDAL_MINER_CRUSHER "Blood-drunk Miner Crusher"
#define BOSS_MEDAL_BUBBLEGUM_CRUSHER "Bubblegum Crusher"
@@ -28,7 +27,6 @@
#define BOSS_MEDAL_DRAKE_CRUSHER "Drake Crusher"
#define BOSS_MEDAL_HIEROPHANT_CRUSHER "Hierophant Crusher"
#define BOSS_MEDAL_LEGION_CRUSHER "Legion Crusher"
-#define BOSS_MEDAL_SWARMERS_CRUSHER "Swarmer Beacon Crusher"
// Medal hub IDs for boss-kill scores
#define BOSS_SCORE "Bosses Killed"
@@ -38,8 +36,7 @@
#define DRAKE_SCORE "Drakes Killed"
#define HIEROPHANT_SCORE "Hierophants Killed"
#define LEGION_SCORE "Legion Killed"
-#define SWARMER_BEACON_SCORE "Swarmer Beacs Killed"
-#define TENDRIL_CLEAR_SCORE "Tendrils Killed"
+#define NEST_CLEAR_SCORE "Nests Killed"
@@ -67,15 +64,13 @@
BOSS_MEDAL_DRAKE,
BOSS_MEDAL_HIEROPHANT,
BOSS_MEDAL_LEGION,
- BOSS_MEDAL_TENDRIL,
- BOSS_MEDAL_SWARMERS,
+ BOSS_MEDAL_NEST,
BOSS_MEDAL_MINER_CRUSHER,
BOSS_MEDAL_BUBBLEGUM_CRUSHER,
BOSS_MEDAL_COLOSSUS_CRUSHER,
BOSS_MEDAL_DRAKE_CRUSHER,
BOSS_MEDAL_HIEROPHANT_CRUSHER,
- BOSS_MEDAL_LEGION_CRUSHER,
- BOSS_MEDAL_SWARMERS_CRUSHER)
+ BOSS_MEDAL_LEGION_CRUSHER)
var/list/valid_scores = list(
BOSS_SCORE,
@@ -85,8 +80,7 @@
DRAKE_SCORE,
HIEROPHANT_SCORE,
LEGION_SCORE,
- SWARMER_BEACON_SCORE,
- TENDRIL_CLEAR_SCORE)
+ NEST_CLEAR_SCORE)
var/ach = "achievements" //IMPORTANT : ADD PREFIX HERE IF YOU'RE USING PREFIXED SCHEMA