Files
Bubberstation/code/game/objects/effects/spawners/random/structure.dm
Rhials 45174ce0e3 New maintenance hazard: Smokey Remains (#86016)
## About The Pull Request

![tboi
unlock](https://github.com/user-attachments/assets/c1cc3d10-85b1-450b-b404-1b00eeb5715b)

This implements a new rare maintenance spawn, smokey remains. Piles of
bones that used to be Nanotrasen employees, still packed with whatever
reagent finally did them in.

Rarely replacing a crate spawn (7/1007 chance per crate spawn if I'm
doing the math right), these act as landmines for uncareful travelers in
maintenance. When you get too close, one will release a cloud of a
randomly generated reagents into the air (the same reagent every time,
unique to the instance of remains). You can (mostly) avoid this by
walking instead of running. These will "re-arm" themselves after 4-6
minutes. They're decals, so you can just sweep them away if they're a
problem.

This also slightly tweaks the original iteration of this, which I used
in my Smoking Room ruin. Don't worry about it.

I'm open to adjusting the rarity, cooldown, and selection of reagents if
need be.
## Why It's Good For The Game

Makes maintenance a bit more spicy. Maybe dangerous, maybe beneficial,
maybe it's baldium. Who knows! Better be careful just in case!

There's plenty of boring chemicals that could roll, but an interesting
one could be a nice injection of uniqueness into an otherwise dull
round. It's an infinite supply, but can only be dispensed infrequently
(at a fixed location) and would be extremely difficult to harvest.

The rarity, combined with the variety of reagents that can be picked,
make it unlikely that these will have any serious impact on a round
(it's still possible, but rarely, which is good).
## Changelog
🆑 Rhials
add: Smokey remains have appeared in maintenance. Make sure to walk when
near them!
/🆑
2024-08-28 21:50:40 +02:00

282 lines
9.2 KiB
Plaintext

/obj/effect/spawner/random/structure
name = "structure spawner"
desc = "Now you see me, now you don't..."
///12% chance to spawn a ouija board, or a potted plant. Btw, Wawastation has a guaranteed board.
/obj/effect/spawner/random/structure/twelve_percent_spirit_board
name = "12% spirit board"
icon_state = "spirit_board"
loot = list(
/obj/structure/spirit_board = 3,
/obj/item/kirbyplants/random = 22,
)
/obj/effect/spawner/random/structure/crate
name = "crate spawner"
icon_state = "crate_secure"
loot = list(
/obj/effect/spawner/random/structure/crate_loot = 744,
/obj/structure/closet/crate/trashcart/filled = 75,
/obj/effect/spawner/random/trash/moisture_trap = 50,
/obj/effect/spawner/random/trash/hobo_squat = 30,
/obj/structure/closet/mini_fridge = 35,
/obj/effect/spawner/random/trash/mess = 30,
/obj/item/kirbyplants/fern = 20,
/obj/structure/closet/crate/decorations = 15,
/obj/effect/decal/remains/human/smokey/maintenance = 7,
/obj/structure/destructible/cult/pants_altar = 1,
)
/obj/effect/spawner/random/structure/crate_abandoned
name = "locked crate spawner"
icon_state = "crate_secure"
spawn_loot_chance = 20
loot = list(/obj/structure/closet/crate/secure/loot)
/obj/effect/spawner/random/structure/girder
name = "girder spawner"
icon_state = "girder"
spawn_loot_chance = 90
loot = list( // 80% chance normal girder, 10% chance of displaced, 10% chance of nothing
/obj/structure/girder = 8,
/obj/structure/girder/displaced = 1,
)
/obj/effect/spawner/random/structure/grille
name = "grille spawner"
icon_state = "grille"
spawn_loot_chance = 90
loot = list( // 80% chance normal grille, 10% chance of broken, 10% chance of nothing
/obj/structure/grille = 8,
/obj/structure/grille/broken = 1,
)
/obj/effect/spawner/random/structure/furniture_parts
name = "furniture parts spawner"
icon_state = "table_parts"
loot = list(
/obj/structure/table_frame,
/obj/structure/table_frame/wood,
/obj/item/rack_parts,
)
/obj/effect/spawner/random/structure/table_or_rack
name = "table or rack spawner"
icon_state = "rack_parts"
loot = list(
/obj/effect/spawner/random/structure/table,
/obj/structure/rack,
)
/obj/effect/spawner/random/structure/table
name = "table spawner"
icon_state = "table"
loot = list(
/obj/structure/table = 40,
/obj/structure/table/wood = 30,
/obj/structure/table/glass = 20,
/obj/structure/table/reinforced = 5,
/obj/structure/table/wood/poker = 5,
)
/obj/effect/spawner/random/structure/table_fancy
name = "table spawner"
icon_state = "table_fancy"
loot_type_path = /obj/structure/table/wood/fancy
loot = list()
/obj/effect/spawner/random/structure/tank_holder
name = "tank holder spawner"
icon_state = "tank_holder"
loot = list(
/obj/structure/tank_holder/oxygen = 40,
/obj/structure/tank_holder/extinguisher = 40,
/obj/structure/tank_holder = 20,
/obj/structure/tank_holder/extinguisher/advanced = 1,
)
/obj/effect/spawner/random/structure/closet_empty
name = "empty closet spawner"
icon_state = "locker"
loot = list(
/obj/structure/closet = 850,
/obj/structure/closet/cabinet = 150,
/obj/structure/closet/acloset = 1,
)
/obj/effect/spawner/random/structure/closet_empty/make_item(spawn_loc, type_path_to_make)
var/obj/structure/closet/peek_a_boo = ..()
if(istype(peek_a_boo) && prob(50))
peek_a_boo.open(special_effects = FALSE) //the crate appears immediatly out of thin air so no need to animate anything
return peek_a_boo
/obj/effect/spawner/random/structure/closet_empty/crate
name = "empty crate spawner"
icon_state = "crate"
loot = list(
/obj/structure/closet/crate = 20,
/obj/structure/closet/crate/wooden = 1,
/obj/structure/closet/crate/internals = 1,
/obj/structure/closet/crate/medical = 1,
/obj/structure/closet/crate/freezer = 1,
/obj/structure/closet/crate/radiation = 1,
/obj/structure/closet/crate/hydroponics = 1,
/obj/structure/closet/crate/engineering = 1,
/obj/structure/closet/crate/engineering/electrical = 1,
/obj/structure/closet/crate/science = 1,
)
/obj/effect/spawner/random/structure/closet_empty/crate/with_loot
name = "crate spawner with maintenance loot"
icon_state = "crate"
/obj/effect/spawner/random/structure/closet_empty/crate/with_loot/make_item(spawn_loc, type_path_to_make)
var/obj/structure/closet/closet_to_fill = ..()
closet_to_fill.RegisterSignal(closet_to_fill, COMSIG_CLOSET_CONTENTS_INITIALIZED, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot))
return closet_to_fill
/obj/effect/spawner/random/structure/crate_loot
name = "lootcrate spawner"
icon_state = "crate"
loot = list(
/obj/effect/spawner/random/structure/closet_empty/crate/with_loot = 15,
/obj/effect/spawner/random/structure/closet_empty/crate = 4,
/obj/structure/closet/crate/secure/loot = 1,
)
/obj/effect/spawner/random/structure/closet_private
name = "private closet spawner"
icon_state = "cabinet"
loot = list(
/obj/structure/closet/secure_closet/personal,
/obj/structure/closet/secure_closet/personal/cabinet,
)
/obj/effect/spawner/random/structure/closet_maintenance
name = "maintenance closet spawner"
icon_state = "locker"
loot = list( // use these for maintenance areas
/obj/effect/spawner/random/structure/closet_empty = 10,
/obj/structure/closet/emcloset = 2,
/obj/structure/closet/firecloset = 2,
/obj/structure/closet/toolcloset = 2,
/obj/structure/closet/l3closet = 1,
/obj/structure/closet/radiation = 1,
/obj/structure/closet/bombcloset = 1,
/obj/structure/closet/mini_fridge/grimy = 1,
)
/obj/effect/spawner/random/structure/chair_flipped
name = "flipped chair spawner"
icon_state = "chair"
loot = list(
/obj/item/chair/wood,
/obj/item/chair/stool/bar,
/obj/item/chair/stool,
/obj/item/chair,
)
/obj/effect/spawner/random/structure/chair_comfy
name = "comfy chair spawner"
icon_state = "chair"
loot_type_path = /obj/structure/chair/comfy
loot = list()
/obj/effect/spawner/random/structure/chair_maintenance
name = "maintenance chair spawner"
icon_state = "chair"
loot = list(
/obj/structure/chair = 200,
/obj/structure/chair/stool = 200,
/obj/structure/chair/stool/bar = 200,
/obj/effect/spawner/random/structure/chair_flipped = 150,
/obj/structure/chair/wood = 100,
/obj/effect/spawner/random/structure/chair_comfy = 50,
/obj/structure/chair/office/light = 50,
/obj/structure/chair/office = 50,
/obj/structure/chair/wood/wings = 1,
/obj/structure/chair/old = 1,
)
/obj/effect/spawner/random/structure/barricade
name = "barricade spawner"
icon_state = "barricade"
spawn_loot_chance = 80
loot = list(
/obj/structure/barricade/wooden,
/obj/structure/barricade/wooden/crude,
)
/obj/effect/spawner/random/structure/billboard
name = "billboard spawner"
icon = 'icons/obj/fluff/billboard.dmi'
icon_state = "billboard_random"
loot = list(
/obj/structure/billboard/azik = 50,
/obj/structure/billboard/donk_n_go = 50,
/obj/structure/billboard/space_cola = 50,
/obj/structure/billboard/nanotrasen = 35,
/obj/structure/billboard/nanotrasen/defaced = 15,
)
/obj/effect/spawner/random/structure/billboard/nanotrasen //useful for station maps- NT isn't the sort to advertise for competitors
name = "\improper Nanotrasen billboard spawner"
loot = list(
/obj/structure/billboard/nanotrasen = 35,
/obj/structure/billboard/nanotrasen/defaced = 15,
)
/obj/effect/spawner/random/structure/billboard/lizardsgas //for the space ruin, The Lizard's Gas. I don't see much use for the sprites below anywhere else since they're unifunctional.
name = "\improper The Lizards Gas billboard spawner"
loot = list(
/obj/structure/billboard/lizards_gas = 75,
/obj/structure/billboard/lizards_gas/defaced = 25,
)
/obj/effect/spawner/random/structure/billboard/roadsigns //also pretty much only unifunctionally useful for gas stations
name = "\improper Gas Station billboard spawner"
loot = list(
/obj/structure/billboard/roadsign/two,
/obj/structure/billboard/roadsign/twothousand,
/obj/structure/billboard/roadsign/twomillion,
/obj/structure/billboard/roadsign/error,
)
/obj/effect/spawner/random/structure/steam_vent
name = "steam vent spawner"
loot = list(
/obj/structure/steam_vent,
/obj/structure/steam_vent/fast,
)
/obj/effect/spawner/random/structure/musician/piano/random_piano
name = "random piano spawner"
icon_state = "piano"
loot = list(
/obj/structure/musician/piano,
/obj/structure/musician/piano/minimoog,
)
/obj/effect/spawner/random/structure/shipping_container
name = "shipping container spawner"
icon = 'icons/obj/fluff/containers.dmi'
icon_state = "random_container"
loot = list(
/obj/structure/shipping_container/conarex = 3,
/obj/structure/shipping_container/deforest = 3,
/obj/structure/shipping_container/kahraman = 3,
/obj/structure/shipping_container/kahraman/alt = 3,
/obj/structure/shipping_container/kosmologistika = 3,
/obj/structure/shipping_container/interdyne = 3,
/obj/structure/shipping_container/nakamura = 3,
/obj/structure/shipping_container/nanotrasen = 3,
/obj/structure/shipping_container/nthi = 3,
/obj/structure/shipping_container/vitezstvi = 3,
/obj/structure/shipping_container/cybersun = 2,
/obj/structure/shipping_container/donk_co = 2,
/obj/structure/shipping_container/gorlex = 1,
/obj/structure/shipping_container/gorlex/red = 1,
)