mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-09 16:05:07 +00:00
## 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>
59 lines
2.9 KiB
Plaintext
59 lines
2.9 KiB
Plaintext
//A reference to this list is passed into area sound managers, and it's modified in a manner that preserves that reference in ash_storm.dm
|
|
GLOBAL_LIST_EMPTY(ash_storm_sounds)
|
|
GLOBAL_LIST_EMPTY(rain_storm_sounds)
|
|
GLOBAL_LIST_EMPTY(sand_storm_sounds)
|
|
/// Tracks where we should play snowstorm sounds for the area sound listener
|
|
GLOBAL_LIST_EMPTY(snowstorm_sounds)
|
|
/// The wizard rain event can run multiple times so we use a global reagent whitelist to reuse the same list to boost performance
|
|
GLOBAL_LIST_EMPTY(wizard_rain_reagents)
|
|
|
|
#define STARTUP_STAGE 1
|
|
#define MAIN_STAGE 2
|
|
#define WIND_DOWN_STAGE 3
|
|
#define END_STAGE 4
|
|
|
|
/// The amount of reagent units that is applied when an object comes into contact with rain
|
|
#define WEATHER_REAGENT_VOLUME 5
|
|
/// Weather reagent volume applied to randomly selected turfs/objects is scaled by this multiplier to compensate for reduced processing frequency
|
|
#define TURF_REAGENT_VOLUME_MULTIPLIER 3
|
|
|
|
/// 1 / 400 chance for a turf to get a thunder strike per tick (death and destruction to mobs/equipment in area)
|
|
#define THUNDER_CHANCE_INSANE 0.0025
|
|
/// 1 / 1,000 chance for a turf to get a thunder strike per tick (damage to mobs/equipment in area)
|
|
#define THUNDER_CHANCE_HIGH 0.001
|
|
/// 1 / 5,000 chance for a turf to get a thunder strike per tick (sporadic damage to mobs/equipment in area)
|
|
#define THUNDER_CHANCE_AVERAGE 0.0002
|
|
/// 1 / 20,000 chance for a turf to get a thunder strike per tick (rare damage to mobs/equipment in area)
|
|
#define THUNDER_CHANCE_RARE 0.00005
|
|
/// 1 / 50,000 chance for a turf to get a thunder strike per tick (almost no damage to mobs/equipment in area)
|
|
#define THUNDER_CHANCE_VERY_RARE 0.00002
|
|
|
|
/// admin verb to control thunder via the run_weather command
|
|
GLOBAL_LIST_INIT(thunder_chance_options, list(
|
|
"Relentless - The Sky is Angry, Very Angry" = THUNDER_CHANCE_INSANE,
|
|
"Abundant - A shocking amount of thunder" = THUNDER_CHANCE_HIGH,
|
|
"Regular - Standard Storm Activity" = THUNDER_CHANCE_AVERAGE,
|
|
"Occasional - A polite amount of thunder" = THUNDER_CHANCE_RARE,
|
|
"Rare - Like finding a four-leaf clover, but in the sky" = THUNDER_CHANCE_VERY_RARE,
|
|
"None - Admin Safe Space (Thunder Disabled)" = NONE,
|
|
))
|
|
|
|
//WEATHER FLAGS
|
|
/// If weather will affect turfs
|
|
#define WEATHER_TURFS (1<<0)
|
|
/// If weather will affect mobs
|
|
#define WEATHER_MOBS (1<<1)
|
|
/// If weather will apply thunder strikes to turfs
|
|
#define WEATHER_THUNDER (1<<2)
|
|
/// If weather will be allowed to affect indoor areas
|
|
#define WEATHER_INDOORS (1<<3)
|
|
/// If weather is endless and can only be stopped manually
|
|
#define WEATHER_ENDLESS (1<<4)
|
|
/// If weather will be detected by a barometer
|
|
#define WEATHER_BAROMETER (1<<5)
|
|
/// If weather temperature ignores clothing insulation when adjusting bodytemperature
|
|
#define WEATHER_TEMPERATURE_BYPASS_CLOTHING (1<<6)
|
|
|
|
/// Does weather have any type of processing related to mobs, turfs, or thunder?
|
|
#define FUNCTIONAL_WEATHER (WEATHER_TURFS|WEATHER_MOBS|WEATHER_THUNDER)
|