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