Files
Bubberstation/code/game/objects/effects/spawners/random/engineering.dm
SkyratBot 67ca6389d0 [MIRROR] Adds the Sandstorm random event, directional meteor functionality, space sand. [MDB IGNORE] (#18338)
* Adds the Sandstorm random event, directional meteor functionality, space sand. (#71802)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

![sandstorm](https://user-images.githubusercontent.com/28870487/206070641-80d37afc-a365-4f5e-ad48-e8cdf0153ac9.png)

Hey guys, it's your boy. Back at it again with another meteor-adjacent
event PR.

Adds the Sandstorm random event, inspired by the long-unused admin only
one. It picks a direction to approach from, alerts the crew of its
imminent arrival, and after a little over a minute of preparatory time,
sends waves of sand and dust to grind down everything in that direction.

To accomplish this, some minor adjustments had to be made to meteor
generation code. They can now be passed an optional arg for a direction
to be thrown from, and will pick a random one if no direction is given.

Also introduces the newest addition to our cast of meteors -- space
sand! It's even weaker than space dust, and shows up exclusively in this
event. Space sand is **ineffective against rwalls**, and will not damage
the arrivals area's high-tech sand-resistant glass. This is to prevent
this event from venting one of the most dust-vulnerable areas on the
station, and to make sure new players aren't shafted into firelock hell
when the right angle is picked.

I did a lot of testing and tweaking of numbers to get the damage to
average at about the level I'm comfortable with. This is meant to be a
high-impact event that isn't as destructive (or unavoidable) as a meteor
wave. Speaking of avoidance, let's talk about mitigation:

You get an early warning and a direction the sand will come from. You
have time to grab repair supplies, move to safety, get a MODsuit. You
can make worthwhile repairs as the sand comes in from inside (or
outside, if you're brave enough) with nothing more than a welder and
iron sheets. If you're feeling particularly spicy, you can leverage your
prep time setting up shield generators, which spawn in engineering and
have been added to the maintenance machines loot pool. Anyone can
contribute, so do your part as a good crewmate and help out!

All that being said, the event can't be prevented entirely. Shit's going
to get shredded, especially on the outside of the station. Damage will
vary heavily based on the station and direction, ranging from
inconsequential to threatening. It should happen late enough into the
round that, at the bare minimum, the crew shouldn't be caught
unprepared.

For those of you who are worried, the ORIGINAL sandstorm admin event is
still with us too. It's been moved from the space dust file into the
Sandstorm event file. This PR also makes a very minor change to the
naming of the space _dust_ events, for better menuing.

So, to sum it all up: Sand hits grinds down one side of the station, you
get a minute of warning, shield generators now spawn in maintenance. Be
a good crewmate and help where you can.

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

More event variety is good, and events that give the players agency on
how bad the impact will be is even better.

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑 Rhials
add: Sandstorm random event! A random side of the station is pummeled by
an onslaught of sand and dust. If you hear that one is approaching, grab
a welder and some iron to help with repairs!
add: Space sand! It's weak and doesn't hurt reinforced walls, but
shouldn't be underestimated in high quantities.
code: You can now pass a start direction to the
spawn_meteors/spawn_meteor global procs.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

* Adds the Sandstorm random event, directional meteor functionality, space sand.

Co-authored-by: Rhials <Datguy33456@gmail.com>
2022-12-25 17:56:37 -08:00

139 lines
4.2 KiB
Plaintext

/obj/effect/spawner/random/engineering
name = "engineering loot spawner"
desc = "All engineering related spawners go here"
icon_state = "toolbox"
/obj/effect/spawner/random/engineering/tool
name = "Tool spawner"
icon_state = "wrench"
loot = list(
/obj/item/wrench = 2,
/obj/item/wirecutters = 2,
/obj/item/screwdriver = 2,
/obj/item/crowbar = 2,
/obj/item/weldingtool = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/analyzer = 2,
/obj/item/t_scanner = 2,
/obj/item/multitool = 1,
/obj/item/clothing/glasses/meson = 1,
/obj/item/storage/belt/utility = 1,
/obj/item/clothing/head/utility/welding = 1,
)
/obj/effect/spawner/random/engineering/tool_advanced
name = "Advanced tool spawner"
icon_state = "wrench"
loot = list( // Mail loot spawner. Some sort of random and rare building tool. No alien tech here.
/obj/item/wrench/caravan,
/obj/item/wirecutters/caravan,
/obj/item/screwdriver/caravan,
/obj/item/crowbar/red/caravan,
/obj/item/weldingtool/largetank,
)
/obj/effect/spawner/random/engineering/tool_alien
name = "Rare tool spawner"
icon_state = "wrench"
loot = list(
/obj/item/wrench/abductor,
/obj/item/wirecutters/abductor,
/obj/item/screwdriver/abductor,
/obj/item/crowbar/abductor,
/obj/item/weldingtool/abductor,
/obj/item/multitool/abductor,
)
/obj/effect/spawner/random/engineering/material_cheap
name = "Cheap material spawner"
icon_state = "cardboard"
loot = list(
/obj/item/stack/sheet/mineral/wood{amount = 30},
/obj/item/stack/sheet/cardboard{amount = 30},
/obj/item/stack/sheet/mineral/sandstone/thirty,
)
/obj/effect/spawner/random/engineering/material
name = "Material spawner"
icon_state = "metal"
loot = list(
/obj/item/stack/sheet/iron/fifty = 5,
/obj/item/stack/sheet/glass/fifty = 5,
/obj/item/stack/rods/fifty = 3,
/obj/item/stack/sheet/rglass{amount = 30} = 2,
)
/obj/effect/spawner/random/engineering/material_rare
name = "Rare material spawner"
icon_state = "diamond"
spawn_loot_count = 3
loot = list( // Space loot spawner. Random selecton of a few rarer materials.
/obj/item/stack/sheet/runed_metal/ten = 20,
/obj/item/stack/sheet/mineral/diamond{amount = 15} = 15,
/obj/item/stack/sheet/mineral/uranium{amount = 15} = 15,
/obj/item/stack/sheet/mineral/plasma{amount = 15} = 15,
/obj/item/stack/sheet/mineral/gold{amount = 15} = 15,
/obj/item/stack/sheet/plastic/fifty = 5,
/obj/item/stack/sheet/runed_metal/fifty = 5,
)
/obj/effect/spawner/random/engineering/toolbox
name = "toolbox spawner"
icon_state = "toolbox"
loot = list(
/obj/item/storage/toolbox/emergency = 4,
/obj/item/storage/toolbox/electrical = 2,
/obj/item/storage/toolbox/mechanical = 2,
)
/obj/effect/spawner/random/engineering/flashlight
name = "flashlight spawner"
icon_state = "flashlight"
loot = list(
/obj/item/flashlight = 20,
/obj/item/flashlight/flare = 10,
/obj/effect/spawner/random/decoration/glowstick = 10,
/obj/item/flashlight/lantern = 5,
/obj/item/flashlight/seclite = 4,
/obj/item/flashlight/lantern/jade = 1,
)
/obj/effect/spawner/random/engineering/canister
name = "air canister spawner"
icon_state = "canister"
loot = list( // use this for emergency storage areas and maint
/obj/machinery/portable_atmospherics/canister/air = 4,
/obj/machinery/portable_atmospherics/canister/oxygen = 1,
)
/obj/effect/spawner/random/engineering/tank
name = "tank spawner"
icon_state = "tank"
loot = list( // use this for emergency storage areas and maint
/obj/structure/reagent_dispensers/fueltank = 5,
/obj/structure/reagent_dispensers/watertank = 4,
/obj/structure/reagent_dispensers/watertank/high = 1,
)
/obj/effect/spawner/random/engineering/vending_restock
name = "vending restock spawner"
icon_state = "vending_restock"
loot_subtype_path = /obj/item/vending_refill
loot = list()
/obj/effect/spawner/random/engineering/atmospherics_portable
name = "portable atmospherics machine spawner"
icon_state = "heater"
loot = list(
/obj/machinery/space_heater = 8,
/obj/machinery/shieldgen = 3,
/obj/machinery/portable_atmospherics/pump = 1,
/obj/machinery/portable_atmospherics/scrubber = 1,
)
/obj/effect/spawner/random/engineering/tracking_beacon
name = "tracking beacon spawner"
icon_state = "beacon"
spawn_loot_chance = 35
loot = list(/obj/item/beacon)