Files
Bubberstation/code/modules/events
Tim 8aa86fb326 Add wizard event - Magical Rain (#90495)
## About The Pull Request
Adds a new wizard event - Magical Rain

This selects a random reagent from a curtailed list that is rained down
on the station. The only safe spaces are in maintenance and containers
like lockers. Of course the wizard is not directly affected by the
reagent, although side effects may still apply. For example, if it is
raining lube, it will cause turfs to get slippery which can slip the
wizard. You can also collect the rain in containers, which might be
funny or useful depending on what it is. (Alcoholics love booze rain)

I did have to trim down the list of reagents since there are over +700
and most of them do nothing to mobs/turfs when they `TOUCH`. The list is
~50 reagents that are:

```dm
	// most medicine do nothing when it comes into contact with turfs or mobs (via TOUCH) except for a few
	var/list/allowed_medicine = list(
		/datum/reagent/medicine/c2/synthflesh,
		/datum/reagent/medicine/adminordrazine,
		/datum/reagent/medicine/strange_reagent,
		// include a random medicine
		pick(subtypesof(/datum/reagent/medicine)),
	)
	GLOB.wizard_rain_reagents |= allowed_medicine

	// One randomized type is allowed so the whitelist isn't spammed with subtypes
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/glitter))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/carpet))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/mutationtoxin))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/plantnutriment))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/uranium))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/luminescent_fluid))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/impurity))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent/drug))
	GLOB.wizard_rain_reagents |= pick(typesof(/datum/reagent/water))
	GLOB.wizard_rain_reagents |= pick(typesof(/datum/reagent/fuel))
	GLOB.wizard_rain_reagents |= pick(typesof(/datum/reagent/colorful_reagent))
	GLOB.wizard_rain_reagents |= pick(typesof(/datum/reagent/ants))
	GLOB.wizard_rain_reagents |= pick(typesof(/datum/reagent/lube))
	GLOB.wizard_rain_reagents |= pick(typesof(/datum/reagent/space_cleaner))

	// lots of toxins do nothing so we need to be picky
	var/list/allowed_toxins = list(
		/datum/reagent/toxin/itching_powder,
		/datum/reagent/toxin/polonium, // radiation
		/datum/reagent/toxin/mutagen,
		// all the acids
		/datum/reagent/toxin/acid,
		/datum/reagent/toxin/acid/fluacid,
		/datum/reagent/toxin/acid/nitracid,
		// include a random toxin
		pick(subtypesof(/datum/reagent/toxin)),
	)
	GLOB.wizard_rain_reagents |= allowed_toxins

	// too many food & drinks so blacklist most of them
	var/list/allowed_food_drinks = list(
		/datum/reagent/consumable/ethanol/wizz_fizz,
		/datum/reagent/consumable/condensedcapsaicin,
		/datum/reagent/consumable/frostoil,
		// include a random food or drink
		pick(subtypesof(/datum/reagent/consumable)),
		// include a random regular drink (vodka, wine, beer, etc.)
		pick(/obj/machinery/chem_dispenser/drinks/beer::beer_dispensable_reagents),
	)
	GLOB.wizard_rain_reagents |= allowed_food_drinks

	var/list/allowed_exotic_reagents = list(
		// fire
		/datum/reagent/clf3,
		/datum/reagent/phlogiston,
		/datum/reagent/napalm,
		// cosmetic
		/datum/reagent/hair_dye,
		/datum/reagent/barbers_aid,
		/datum/reagent/baldium,
		/datum/reagent/mulligan,
		/datum/reagent/growthserum,
		// op shit
		/datum/reagent/romerol,
		/datum/reagent/gondola_mutation_toxin,
		/datum/reagent/metalgen,
		/datum/reagent/flightpotion,
		/datum/reagent/eigenstate,
		/datum/reagent/magillitis,
		/datum/reagent/pax,
		/datum/reagent/gluttonytoxin,
		/datum/reagent/aslimetoxin,
		// misc
		/datum/reagent/blood,
		/datum/reagent/hauntium,
		/datum/reagent/copper,
	)
	GLOB.wizard_rain_reagents |= allowed_exotic_reagents

	// add a few randomized reagents not listed above so they at least have a chance
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent))
	GLOB.wizard_rain_reagents |= pick(subtypesof(/datum/reagent))
```

## Why It's Good For The Game
More interesting effects for weather. The wizard events are always
supposed to be silly and wacky, so having stuff like raining ants or
booze is hilarious. Several OP chems are included like napalm, strange
reagent, and flight potion which can lead to some chaos.

## Changelog
🆑
add: Add wizard magical rain event. A random reagent is selected to rain
down across the station. The only places to escape are in maintenance
and inside containers such as lockers. The wizard is not directly
affected by the reagent, but the side effects might still apply. (ie.
raining lube, will make the floors slippery, which can slip the wizard)
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-04-15 11:36:39 +01:00
..
2025-02-17 00:25:56 +01:00