diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index aa4b49ff6fc..b3b86ac13e1 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -33,7 +33,8 @@
#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component)
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
-#define COMSIG_PARENT_QDELETED "parent_qdeleted" //after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called
+#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
+#define COMSIG_TOPIC "handle_topic" //generic topic handler (usr, href_list)
// /atom signals
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index edc77bae4c3..e3169ded7fa 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -137,8 +137,11 @@
#define FLAMMABLE 0
#define ON_FIRE 1
-//resistance_flags
-#define INDESTRUCTIBLE 64 //doesn't take damage
+//Fire and Acid stuff, for resistance_flags
+#define UNACIDABLE (1<<4) //acid can't even appear on it, let alone melt it.
+#define ACID_PROOF (1<<5) //acid stuck on it doesn't melt it.
+#define INDESTRUCTIBLE (1<<6) //doesn't take damage
+#define FREEZE_PROOF (1<<7) //can't be frozen
#define CHECK_RICOCHET_1 (1<<4)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 8bc65fcf691..739b059f3bd 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -11,7 +11,8 @@
icon = 'icons/mob/screen_gen.dmi'
layer = HUD_LAYER
plane = HUD_PLANE
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
+ burn_state = LAVA_PROOF
unacidable = TRUE
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
var/datum/hud/hud = null
diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index 9b802291d84..4c397636cab 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -266,8 +266,8 @@ SUBSYSTEM_DEF(garbage)
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
var/start_time = world.time
var/start_tick = world.tick_usage
+ SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy
var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
- SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy
if(world.time != start_time)
I.slept_destroy++
else
diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm
new file mode 100644
index 00000000000..68ec51959a2
--- /dev/null
+++ b/code/datums/components/spawner.dm
@@ -0,0 +1,51 @@
+/datum/component/spawner
+ var/mob_types = list(/mob/living/simple_animal/hostile/carp)
+ var/spawn_time = 300 //30 seconds default
+ var/list/spawned_mobs = list()
+ var/spawn_delay = 0
+ var/max_mobs = 5
+ var/spawn_text = "emerges from"
+ var/list/faction = list("mining")
+
+
+
+/datum/component/spawner/Initialize(_mob_types, _spawn_time, _faction, _spawn_text, _max_mobs)
+ if(_spawn_time)
+ spawn_time=_spawn_time
+ if(_mob_types)
+ mob_types=_mob_types
+ if(_faction)
+ faction=_faction
+ if(_spawn_text)
+ spawn_text=_spawn_text
+ if(_max_mobs)
+ max_mobs=_max_mobs
+
+ RegisterSignal(parent, list(COMSIG_PARENT_QDELETING), .proc/stop_spawning)
+ START_PROCESSING(SSprocessing, src)
+
+/datum/component/spawner/process()
+ try_spawn_mob()
+
+
+/datum/component/spawner/proc/stop_spawning(force)
+ STOP_PROCESSING(SSprocessing, src)
+ for(var/mob/living/simple_animal/L in spawned_mobs)
+ if(L.nest == src)
+ L.nest = null
+ spawned_mobs = null
+
+/datum/component/spawner/proc/try_spawn_mob()
+ var/atom/P = parent
+ if(spawned_mobs.len >= max_mobs)
+ return 0
+ if(spawn_delay > world.time)
+ return 0
+ spawn_delay = world.time + spawn_time
+ var/chosen_mob_type = pick(mob_types)
+ var/mob/living/simple_animal/L = new chosen_mob_type(P.loc)
+ L.admin_spawned = P.admin_spawned
+ spawned_mobs += L
+ L.nest = src
+ L.faction = src.faction
+ P.visible_message("[L] [spawn_text] [P].")
\ No newline at end of file
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index 5feec285408..6b9d89a984a 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -4,7 +4,7 @@
/obj/effect
icon = 'icons/effects/effects.dmi'
- burn_state = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
resistance_flags = INDESTRUCTIBLE
anchored = 1
can_be_hit = FALSE
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 8698a4a2bbe..c98f3355538 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -262,7 +262,7 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
singular_name = "durathread roll"
icon_state = "sheet-durathread"
item_state = "sheet-cloth"
- resistance_flags = FLAMMABLE
+ burn_state = FLAMMABLE
force = 0
throwforce = 0
merge_type = /obj/item/stack/sheet/durathread
@@ -276,7 +276,7 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
desc = "A bundle of raw cotton ready to be spun on the loom."
singular_name = "raw cotton ball"
icon_state = "sheet-cotton"
- resistance_flags = FLAMMABLE
+ burn_state = FLAMMABLE
force = 0
throwforce = 0
merge_type = /obj/item/stack/sheet/cotton
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index eda3088199e..cc7270e73c8 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1506,7 +1506,7 @@ obj/item/toy/cards/deck/syndicate/black
icon = 'icons/obj/toy.dmi'
icon_state = "toy_mouse"
w_class = WEIGHT_CLASS_SMALL
- resistance_flags = FLAMMABLE
+ burn_state = FLAMMABLE
var/cooldown = 0
/*
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 9f3829a8277..482bf4b84b6 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -333,7 +333,7 @@
desc = "A huge chunk of warm metal. The clanging of machinery emanates from within."
icon = 'icons/turf/walls/clockwork_wall.dmi'
icon_state = "clockwork_wall"
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
unacidable = TRUE
mineral_amount = 1
canSmoothWith = list(/obj/effect/clockwork/overlay/wall, /obj/structure/falsewall/brass)
diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm
new file mode 100644
index 00000000000..7ce1f6626b9
--- /dev/null
+++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm
@@ -0,0 +1,100 @@
+//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 = 'icons/mob/nest.dmi'
+ icon_state = "tendril"
+
+ faction = list("mining")
+ max_mobs = 3
+ max_integrity = 250
+ 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
+ burn_state = LAVA_PROOF
+
+ var/gps = null
+ var/obj/effect/light_emitter/tendril/emitted_light
+
+/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)
+
+GLOBAL_LIST_INIT(tendrils, list())
+
+/obj/structure/spawner/lavaland/Initialize(mapload)
+ . = ..()
+ emitted_light = new(loc)
+ gps = new /obj/item/gps/internal(src)
+ GLOB.tendrils += src
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/structure/spawner/lavaland/LateInitialize()
+ for(var/F in RANGE_TURFS(1, src))
+ if(ismineralturf(F))
+ var/turf/simulated/mineral/M = F
+ M.ChangeTurf(M.turf_type, FALSE, FALSE, TRUE)
+
+/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 && !admin_spawned)
+ if(SSmedals.hub_enabled)
+ for(var/mob/living/L in view(7,src))
+ if(L.stat || !L.client)
+ continue
+ SSmedals.UnlockMedal("[BOSS_MEDAL_TENDRIL] [ALL_KILL_MEDAL]", L.client)
+ SSmedals.SetScore(TENDRIL_CLEAR_SCORE, L.client, 1)
+ GLOB.tendrils -= src
+ QDEL_NULL(emitted_light)
+ QDEL_NULL(gps)
+ 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(mapload)
+ . = ..()
+ 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/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 widening into a yawning chasm!")
+ for(var/turf/T in range(2,src))
+ if(!T.density)
+ T.TerraformTurf(/turf/simulated/floor/chasm/straight_down/lava_land_surface)
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 1bb19a81bd2..68a3081fc22 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(safes)
anchored = TRUE
density = TRUE
- resistance_flags = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
unacidable = TRUE
var/open = FALSE
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
new file mode 100644
index 00000000000..71149cb1733
--- /dev/null
+++ b/code/game/objects/structures/spawner.dm
@@ -0,0 +1,124 @@
+/obj/structure/spawner
+ name = "monster nest"
+ icon = 'icons/mob/animal.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/spawner_type = /datum/component/spawner
+
+/obj/structure/spawner/Initialize(mapload)
+ . = ..()
+ AddComponent(spawner_type, mob_types, spawn_time, faction, spawn_text, max_mobs)
+
+/obj/structure/spawner/attack_animal(mob/living/simple_animal/M)
+ if(faction_check(faction, M.faction, FALSE) && !M.client)
+ return
+ ..()
+
+/obj/structure/spawner/blob_act(obj/structure/blob/B) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
+ take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
+
+/obj/structure/spawner/ex_act(severity) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
+ if(resistance_flags & INDESTRUCTIBLE)
+ return
+ switch(severity)
+ if(1)
+ obj_integrity = 0
+ qdel(src)
+ if(2)
+ take_damage(rand(100, 250), BRUTE, "bomb", 0)
+ if(3)
+ take_damage(rand(10, 90), BRUTE, "bomb", 0)
+
+/obj/structure/spawner/mech_melee_attack(obj/mecha/M) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
+ M.do_attack_animation(src)
+ var/play_soundeffect = 0
+ var/mech_damtype = M.damtype
+ if(M.selected)
+ mech_damtype = M.selected.damtype
+ play_soundeffect = 1
+ else
+ switch(M.damtype)
+ if(BRUTE)
+ playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
+ if(BURN)
+ playsound(src, 'sound/items/welder.ogg', 50, 1)
+ if(TOX)
+ playsound(src, 'sound/effects/spray2.ogg', 50, 1)
+ return 0
+ else
+ return 0
+ visible_message("[M.name] has hit [src].")
+ return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
+
+/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/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..."
+ icon_state = "hole"
+ icon = 'icons/mob/nest.dmi'
+ max_integrity = 150
+ max_mobs = 15
+ spawn_time = 150
+ mob_types = list(/mob/living/simple_animal/hostile/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)
+ spawn_text = "climbs out of"
+ faction = list("clown")
+
+/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."
+ icon_state = "hole"
+ max_integrity = 200
+ max_mobs = 3
+ icon = 'icons/mob/nest.dmi'
+ 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)
+ faction = list("mining")
+
+/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)
\ No newline at end of file
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 15e578ed88f..c958096cc74 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -419,7 +419,7 @@
name = "wooden chair"
icon_state = "wooden_chair_toppled"
item_state = "woodenchair"
- resistance_flags = FLAMMABLE
+ burn_state = FLAMMABLE
max_integrity = 70
hitsound = 'sound/weapons/genhit1.ogg'
origin_type = /obj/structure/chair/wood
diff --git a/code/game/turfs/simulated/floor/asteroid.dm b/code/game/turfs/simulated/floor/asteroid.dm
index 275b3a49502..de414ebf0c3 100644
--- a/code/game/turfs/simulated/floor/asteroid.dm
+++ b/code/game/turfs/simulated/floor/asteroid.dm
@@ -159,9 +159,9 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
has_data = TRUE
/turf/simulated/floor/plating/asteroid/airless/cave/volcanic
- mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \
- /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/spawner/lavaland = 2, \
- /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
+ mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /obj/structure/spawner/lavaland/goliath = 3, \
+ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /obj/structure/spawner/lavaland = 2, \
+ /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30, /obj/structure/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 6, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
data_having_type = /turf/simulated/floor/plating/asteroid/airless/cave/volcanic/has_data
@@ -279,7 +279,7 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
return //if there's a megafauna within standard view don't spawn anything at all
if(ispath(randumb, /mob/living/simple_animal/hostile/asteroid) || istype(H, /mob/living/simple_animal/hostile/asteroid))
return //if the random is a standard mob, avoid spawning if there's another one within 12 tiles
- if((ispath(randumb, /mob/living/simple_animal/hostile/spawner/lavaland) || istype(H, /mob/living/simple_animal/hostile/spawner/lavaland)) && get_dist(src, H) <= 2)
+ if((ispath(randumb, /obj/structure/spawner/lavaland) || istype(H, /obj/structure/spawner/lavaland)) && get_dist(src, H) <= 2)
return //prevents tendrils spawning in each other's collapse range
new randumb(T)
diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm
index 1768b2d472a..fda758238e8 100644
--- a/code/game/turfs/simulated/floor/chasm.dm
+++ b/code/game/turfs/simulated/floor/chasm.dm
@@ -8,7 +8,20 @@
canSmoothWith = list(/turf/simulated/floor/chasm)
density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf
var/static/list/falling_atoms = list() //Atoms currently falling into the chasm
- var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse))
+ var/static/list/forbidden_types = typecacheof(list(
+ /obj/singularity,
+ /obj/docking_port,
+ /obj/structure/lattice,
+ /obj/structure/stone_tile,
+ /obj/item/projectile,
+ /obj/effect/portal,
+ /obj/effect/hotspot,
+ /obj/effect/landmark,
+ /obj/effect/temp_visual,
+ /obj/effect/light_emitter/tendril,
+ /obj/effect/collapse,
+ /obj/effect/particle_effect/ion_trails
+ ))
var/drop_x = 1
var/drop_y = 1
var/drop_z = 1
diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
index 83cdfd8ac5c..b66b272c763 100644
--- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm
+++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
@@ -160,7 +160,7 @@
item_state = "anc_helm"
armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75)
item_color = "ancient"
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
sprite_sheets = null
/obj/item/clothing/suit/space/hardsuit/ancient
@@ -170,7 +170,7 @@
item_state = "anc_hardsuit"
armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75)
slowdown = 3
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
sprite_sheets = null
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient
var/footstep = 1
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index b50c1cd68e0..aac3bdcdc30 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -46,7 +46,7 @@
icon_state = "gas_mining"
actions_types = list(/datum/action/item_action/adjust)
armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 50, "rad" = 0)
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index bc7d0d6c701..9dc2f20fb1d 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -126,7 +126,7 @@
name = "mining boots"
desc = "Steel-toed mining boots for mining in hazardous environments. Very good at keeping toes uncrushed."
icon_state = "explorer"
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
/obj/item/clothing/shoes/winterboots
name = "winter boots"
@@ -310,7 +310,7 @@
icon_state = "jetboots"
item_state = "jetboots"
item_color = "hosred"
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
actions_types = list(/datum/action/item_action/bhop)
permeability_coefficient = 0.05
can_cut_open = FALSE
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index fef732ed01b..276bb0bf620 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -8,7 +8,7 @@
flash_protect = 2
tint = 2
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
var/brightness_on = 4 //luminosity when the light is on
var/on = FALSE
var/smile = FALSE
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 0d7267d9a92..d1e9fee0c00 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -501,7 +501,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
/obj/item/clothing/head/hooded/drake
name = "drake helmet"
@@ -511,7 +511,7 @@
armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
flags = BLOCKHAIR
flags_cover = HEADCOVERSEYES
diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm
index 8e667bab885..c18f06c64af 100644
--- a/code/modules/food_and_drinks/food/foods/meat.dm
+++ b/code/modules/food_and_drinks/food/foods/meat.dm
@@ -239,7 +239,7 @@
/obj/item/reagent_containers/food/snacks/goliath_steak
name = "goliath steak"
desc = "A delicious, lava cooked steak."
- resistance_flags = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
icon_state = "goliathsteak"
trash = null
list_reagents = list("protein" = 6, "vitamin" = 2)
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 566694d480d..fc0e58d9874 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -12,7 +12,7 @@
hoodtype = /obj/item/clothing/head/hooded/explorer
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
hide_tail_by_species = list("Vox" , "Vulpkanin" , "Unathi" , "Tajaran")
sprite_sheets = list(
@@ -34,7 +34,7 @@
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi',
@@ -50,7 +50,7 @@
item_state = "hostile_env"
flags = THICKMATERIAL //not spaceproof
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- burn_state = FIRE_PROOF | LAVA_PROOF
+ burn_state = LAVA_PROOF
slowdown = 0
armor = list(melee = 70, bullet = 40, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 100)
allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
@@ -82,7 +82,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
flags = THICKMATERIAL // no space protection
armor = list(melee = 70, bullet = 40, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 100)
- burn_state = FIRE_PROOF | LAVA_PROOF
+ burn_state = LAVA_PROOF
/obj/item/clothing/head/helmet/space/hostile_environment/New()
..()
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 015921634fe..575ea17d7c0 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -295,7 +295,8 @@
/obj/structure/fans/tiny/invisible
name = "air flow blocker"
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
+ burn_state = LAVA_PROOF
unacidable = TRUE
invisibility = INVISIBILITY_ABSTRACT
diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
index 6a30c565547..c9b35e6f883 100644
--- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm
+++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
@@ -168,7 +168,7 @@
force = 25
damtype = BURN
hitsound = 'sound/weapons/sear.ogg'
- burn_state = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
unacidable = 1
var/turf_type = /turf/simulated/floor/plating/lava/smooth
var/transform_string = "lava"
diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm
index 48c4249fd62..24210fc2ff0 100644
--- a/code/modules/mining/lavaland/loot/colossus_loot.dm
+++ b/code/modules/mining/lavaland/loot/colossus_loot.dm
@@ -27,7 +27,7 @@
luminosity = 8
max_n_of_items = INFINITY
unacidable = 1
- burn_state = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
pixel_y = -4
use_power = NO_POWER_USE
var/memory_saved = FALSE
@@ -116,7 +116,7 @@
luminosity = 8
use_power = NO_POWER_USE
density = 1
- burn_state = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
unacidable = 1
var/activation_method = "touch"
var/activation_damage_type = null
diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm
index 3727c103a64..67b597e90aa 100644
--- a/code/modules/mining/lavaland/loot/tendril_loot.dm
+++ b/code/modules/mining/lavaland/loot/tendril_loot.dm
@@ -164,8 +164,7 @@
icon_state = "goliath_boat"
icon = 'icons/obj/lavaland/dragonboat.dmi'
keytype = /obj/item/oar
- burn_state = LAVA_PROOF | FIRE_PROOF
- resistance_flags = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
/obj/vehicle/lavaboat/relaymove(mob/user, direction)
var/turf/next = get_step(src, direction)
@@ -185,7 +184,7 @@
desc = "Not to be confused with the kind Research hassles you for."
force = 12
w_class = WEIGHT_CLASS_NORMAL
- burn_state = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
/datum/crafting_recipe/oar
name = "goliath bone oar"
@@ -208,7 +207,7 @@
desc = "A tiny ship inside a bottle."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "ship_bottle"
- resistance_flags = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
/obj/item/ship_in_a_bottle/attack_self(mob/user)
to_chat(user, "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.")
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 1a0a063e33f..9a7f5c6fe15 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -6,7 +6,7 @@
icon_state = "necrocrate"
icon_opened = "necrocrateopen"
icon_closed = "necrocrate"
- burn_state = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
unacidable = 1
/obj/structure/closet/crate/necropolis/tendril
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index b85db884ef5..dd00368a2ab 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -2,12 +2,22 @@
//this item is intended to give the effect of entering the mine, so that light gradually fades
/obj/effect/light_emitter
- name = "Light emtter"
- anchored = 1
+ name = "Light emitter"
+ anchored = TRUE
invisibility = 101
- unacidable = 1
- light_range = 8
- light_power = 0
+ unacidable = TRUE
+ var/set_luminosity = 8
+ var/set_cap = 0
+
+/obj/effect/light_emitter/Initialize(mapload)
+ . = ..()
+ set_light(set_luminosity, set_cap)
+
+/obj/effect/light_emitter/singularity_pull()
+ return
+
+/obj/effect/light_emitter/singularity_act()
+ return
/**********************Miner Lockers**************************/
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm
deleted file mode 100644
index e910bac7ca3..00000000000
--- a/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm
+++ /dev/null
@@ -1,81 +0,0 @@
-/mob/living/simple_animal/hostile/spawner/lavaland
- name = "necropolis tendril"
- desc = "A vile tendril of corruption, originating deep underground. Terrible monsters are pouring out of it."
- icon = 'icons/mob/nest.dmi'
- icon_state = "tendril"
- icon_living = "tendril"
- icon_dead = "tendril"
- faction = list("mining")
- weather_immunities = list("lava","ash")
- luminosity = 1
- health = 250
- maxHealth = 250
- max_mobs = 3
- spawn_time = 300 //30 seconds default
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril)
- spawn_text = "emerges from"
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = INFINITY
- move_resist = INFINITY
- anchored = TRUE
- loot = list(/obj/effect/collapse, /obj/structure/closet/crate/necropolis/tendril)
- del_on_death = 1
- var/gps = null
-
-/mob/living/simple_animal/hostile/spawner/lavaland/New()
- ..()
- //for(var/F in RANGE_TURFS(1, src)) TODO: Uncomment
- //if(ismineralturf(F))
- //var/turf/simulated/mineral/M = F
- //M.ChangeTurf(M.turf_type, FALSE, TRUE)
- gps = new /obj/item/gps/internal(src)
-
-/mob/living/simple_animal/hostile/spawner/lavaland/Destroy()
- qdel(gps)
- . = ..()
-
-/mob/living/simple_animal/hostile/spawner/lavaland/death()
- var/last_tendril = TRUE
- for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in GLOB.mob_list)
- if(other != src)
- last_tendril = FALSE
- break
- if(last_tendril && !admin_spawned)
- if(SSmedals.hub_enabled)
- for(var/mob/living/L in view(7,src))
- if(L.stat || !L.client)
- continue
- SSmedals.UnlockMedal("[BOSS_MEDAL_TENDRIL] [ALL_KILL_MEDAL]", L.client)
- SSmedals.SetScore(TENDRIL_CLEAR_SCORE, L.client, 1)
- ..()
-
-/obj/effect/collapse
- name = "collapsing necropolis tendril"
- desc = "Get clear!"
- luminosity = 1
- layer = ABOVE_OPEN_TURF_LAYER
- icon = 'icons/mob/nest.dmi'
- icon_state = "tendril"
- anchored = TRUE
-
-/obj/effect/collapse/New()
- ..()
- 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(get_turf(src),'sound/effects/tendril_destroyed.ogg', 200, 0, 50, 1, 1)
- spawn(50)
- for(var/mob/M in range(7,src))
- shake_camera(M, 15, 1)
- playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, 1)
- visible_message("The tendril falls inward, the ground around it widening into a yawning chasm!")
- for(var/turf/T in range(2,src))
- if(!T.density)
- T.TerraformTurf(/turf/simulated/floor/chasm/straight_down/lava_land_surface)
- qdel(src)
-
-/mob/living/simple_animal/hostile/spawner/lavaland/goliath
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril)
-
-/mob/living/simple_animal/hostile/spawner/lavaland/legion
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril)
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index 70d279fd400..96c0bf632ac 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -64,12 +64,11 @@
attacktext = "punches"
deathmessage = "falls apart into a fine dust."
-/mob/living/simple_animal/hostile/spawner/nether
+/obj/structure/spawner/nether
name = "netherworld link"
desc = null //see examine()
icon_state = "nether"
- health = 50
- maxHealth = 50
+ max_integrity = 50
spawn_time = 600 //1 minute
max_mobs = 15
icon = 'icons/mob/nest.dmi'
@@ -77,31 +76,30 @@
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")
-/mob/living/simple_animal/hostile/spawner/nether/death()
- . = ..()
- qdel(src)
+/obj/structure/spawner/nether/Initialize(mapload)
+ .=..()
+ START_PROCESSING(SSprocessing, src)
-/mob/living/simple_animal/hostile/spawner/nether/examine(mob/user)
+/obj/structure/spawner/nether/examine(mob/user)
..()
- if(isskeleton(user))
+ if(isskeleton(user) || iszombie(user))
to_chat(user, "A direct link to another dimension full of creatures very happy to see you. You can see your house from here!")
else
to_chat(user, "A direct link to another dimension full of creatures not very happy to see you. Entering the link would be a very bad idea.")
-/mob/living/simple_animal/hostile/spawner/nether/attack_hand(mob/user)
+/obj/structure/spawner/nether/attack_hand(mob/user)
. = ..()
- if(isskeleton(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)
-/mob/living/simple_animal/hostile/spawner/nether/Life()
- . = ..()
+/obj/structure/spawner/nether/process()
for(var/mob/living/M in contents)
if(M)
- playsound(src, 'sound/magic/demon_consume.ogg', 50, 1)
+ 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)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 299be975def..b64a044cbea 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -76,7 +76,7 @@
var/mob/living/carbon/human/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
- var/mob/living/simple_animal/hostile/spawner/nest
+ var/datum/component/spawner/nest
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm
deleted file mode 100644
index 747c7690150..00000000000
--- a/code/modules/mob/living/simple_animal/spawner.dm
+++ /dev/null
@@ -1,85 +0,0 @@
-/mob/living/simple_animal/hostile/spawner
- name = "monster nest"
- icon = 'icons/mob/animal.dmi'
- health = 100
- maxHealth = 100
- var/list/spawned_mobs = list()
- var/max_mobs = 5
- var/spawn_delay = 0
- var/spawn_time = 300 //30 seconds default
- var/mob_types = list(/mob/living/simple_animal/hostile/carp)
- var/spawn_text = "emerges from"
- status_flags = 0
- move_resist = MOVE_FORCE_VERY_STRONG
- AIStatus = AI_OFF
- a_intent = INTENT_HARM
- stop_automated_movement = 1
- wander = 0
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 350
- layer = MOB_LAYER-0.1
- sentience_type = SENTIENCE_BOSS
-
-
-/mob/living/simple_animal/hostile/spawner/Destroy()
- for(var/mob/living/simple_animal/L in spawned_mobs)
- if(L.nest == src)
- L.nest = null
- spawned_mobs = null
- return ..()
-
-/mob/living/simple_animal/hostile/spawner/Life()
- ..()
- spawn_mob()
-
-/mob/living/simple_animal/hostile/spawner/proc/spawn_mob()
- if(spawned_mobs.len >= max_mobs)
- return 0
- if(spawn_delay > world.time)
- return 0
- spawn_delay = world.time + spawn_time
- var/chosen_type = pick(mob_types)
- var/mob/living/simple_animal/L = new chosen_type(loc)
- L.admin_spawned = admin_spawned //If we were admin spawned, lets have our children count as that as well.
- spawned_mobs += L
- L.nest = src
- L.faction = src.faction
- visible_message("[L] [spawn_text] [src].")
-
-/mob/living/simple_animal/hostile/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/syndicate/ranged)
- faction = list("syndicate")
-
-/mob/living/simple_animal/hostile/spawner/mining
- name = "monster den"
- desc = "A hole dug into the ground, harboring all kinds of monsters found within most caves or mining areas."
- icon_state = "hole"
- icon_living = "hole"
- health = 200
- maxHealth = 200
- max_mobs = 3
- icon = 'icons/mob/nest.dmi'
- spawn_text = "crawls out of"
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- faction = list("mining")
-
-/mob/living/simple_animal/hostile/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)
-
-/mob/living/simple_animal/hostile/spawner/mining/hivelord
- name = "hivelord den"
- desc = "A den housing a nest of hivelords."
- mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord)
-
-/mob/living/simple_animal/hostile/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)
diff --git a/code/modules/ruins/lavalandruin_code/ash_walker_den.dm b/code/modules/ruins/lavalandruin_code/ash_walker_den.dm
index 7800b3eb9ab..168fde07e7d 100644
--- a/code/modules/ruins/lavalandruin_code/ash_walker_den.dm
+++ b/code/modules/ruins/lavalandruin_code/ash_walker_den.dm
@@ -9,7 +9,7 @@
anchored = TRUE
density = TRUE
- resistance_flags = FIRE_PROOF | LAVA_PROOF
+ burn_state = LAVA_PROOF
max_integrity = 200
var/faction = list("ashwalker")
diff --git a/code/modules/ruins/lavalandruin_code/dead_ratvar.dm b/code/modules/ruins/lavalandruin_code/dead_ratvar.dm
index b634aba5c4c..cde2007d643 100644
--- a/code/modules/ruins/lavalandruin_code/dead_ratvar.dm
+++ b/code/modules/ruins/lavalandruin_code/dead_ratvar.dm
@@ -13,7 +13,8 @@
bound_height = 64
pixel_y = -10
unacidable = TRUE
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
+ burn_state = LAVA_PROOF
// An "overlay" used by clockwork walls and floors to appear normal to mesons.
/obj/effect/clockwork/overlay
@@ -78,7 +79,7 @@
anchored = TRUE
density = TRUE
unacidable = TRUE
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
desc = "A massive brass gear. You could probably secure or unsecure it with a wrench, or just climb over it."
/obj/structure/clockwork/wall_gear/displaced
@@ -149,7 +150,7 @@
desc = "Broken shards of some oddly malleable metal. They occasionally move and seem to glow."
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "alloy_shards"
- resistance_flags = LAVA_PROOF | FIRE_PROOF
+ burn_state = LAVA_PROOF
unacidable = TRUE
var/randomsinglesprite = FALSE
var/randomspritemax = 2
diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm
index bbfa4ef688a..73cdd9fe40c 100644
--- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm
+++ b/code/modules/ruins/lavalandruin_code/syndicate_base.dm
@@ -18,7 +18,7 @@
/obj/item/grenade/chem_grenade/adv_release = 5,
/obj/item/reagent_containers/food/drinks/bottle/holywater = 1)
product_slogans = "It's not pyromania if you're getting paid!;You smell that? Plasma, son. Nothing else in the world smells like that.;I love the smell of Plasma in the morning."
- resistance_flags = FIRE_PROOF
+ burn_state = FIRE_PROOF
// Spawners
/obj/effect/mob_spawn/human/lavaland_syndicate
@@ -63,7 +63,7 @@
/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space
flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. Do not abandon the base. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands! \
-
You are free to attack anyone not aligned with the Syndicate in the vicinity of your base. DO NOT work against Syndicate personnel (such as traitors or nuclear operatives). You may work with or against non-Syndicate antagonists on a case-by-case basis. DO NOT leave your base without admin permission."
+
You are free to attack anyone not aligned with the Syndicate in the vicinity of your base. DO NOT work against Syndicate personnel (such as traitors or nuclear operatives). You may work with or against non-Syndicate antagonists on a case-by-case basis. DO NOT leave your base without admin permission."
/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize(mapload)
. = ..()
diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
index 3c9f093921e..869c280a477 100644
--- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
+++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
@@ -11,7 +11,8 @@
density = TRUE
pixel_x = -32
pixel_y = -32
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
+ burn_state = LAVA_PROOF
unacidable = 1
light_range = 8
light_color = LIGHT_COLOR_LAVA
@@ -213,7 +214,8 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
anchored = TRUE
pixel_x = -64
pixel_y = -40
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
+ burn_state = LAVA_PROOF
unacidable = TRUE
var/open = FALSE
var/static/mutable_appearance/top_overlay
@@ -245,7 +247,8 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
icon_state = "pristine_tile1"
layer = ABOVE_OPEN_TURF_LAYER
anchored = TRUE
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
+ burn_state = LAVA_PROOF
unacidable = TRUE
var/tile_key = "pristine_tile"
var/tile_random_sprite_max = 24
diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm
index abb30f22f16..91693668637 100644
--- a/code/modules/zombie/items.dm
+++ b/code/modules/zombie/items.dm
@@ -5,7 +5,7 @@
sustain the zombie, forcing open airlock doors and opening \
child-safe caps on bottles."
flags = NODROP|ABSTRACT|DROPDEL
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ resistance_flags = INDESTRUCTIBLE
burn_state = LAVA_PROOF
unacidable = TRUE
icon = 'icons/effects/blood.dmi'
diff --git a/paradise.dme b/paradise.dme
index 21d156ad2df..237ef95349a 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -283,6 +283,7 @@
#include "code\datums\components\jestosterone.dm"
#include "code\datums\components\material_container.dm"
#include "code\datums\components\paintable.dm"
+#include "code\datums\components\spawner.dm"
#include "code\datums\components\squeak.dm"
#include "code\datums\components\waddling.dm"
#include "code\datums\diseases\_disease.dm"
@@ -1066,6 +1067,7 @@
#include "code\game\objects\structures\reflector.dm"
#include "code\game\objects\structures\safe.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\statues.dm"
#include "code\game\objects\structures\table_frames.dm"
@@ -1109,6 +1111,7 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
#include "code\game\objects\structures\decor\decor.dm"
#include "code\game\objects\structures\decor\machinery\telecomms.dm"
+#include "code\game\objects\structures\lavaland\necropolis_tendril.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm"
@@ -1911,7 +1914,6 @@
#include "code\modules\mob\living\simple_animal\powers.dm"
#include "code\modules\mob\living\simple_animal\shade.dm"
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
-#include "code\modules\mob\living\simple_animal\spawner.dm"
#include "code\modules\mob\living\simple_animal\tribbles.dm"
#include "code\modules\mob\living\simple_animal\bot\bot.dm"
#include "code\modules\mob\living\simple_animal\bot\cleanbot.dm"
@@ -1986,7 +1988,6 @@
#include "code\modules\mob\living\simple_animal\hostile\mining\gutlunch.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining\hivelord.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining\mining.dm"
-#include "code\modules\mob\living\simple_animal\hostile\mining\necropolis_tendril.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\fish.dm"