diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm index 195b9ec3..91b4217e 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm @@ -777,4 +777,14 @@ weight = 5 repeatable = TRUE repeatable_weight_decrease = 3 - occurances_max = 3 \ No newline at end of file + occurances_max = 3 + +/datum/dynamic_ruleset/event/oxygen_rain + name = "Oxygen Rain" + typepath = /datum/round_event/oxygen_rain + requirements = list(0,0,0,0,0,0,0,0,0,0) + high_population_requirement = 0 + weight = 1 //This is a rare occurence. + repeatable = FALSE + occurances_max = 1 + map_whitelist = list("LayeniaStation.dmm") diff --git a/hyperstation/code/datums/weather/oxygen_rain.dm b/hyperstation/code/datums/weather/oxygen_rain.dm new file mode 100644 index 00000000..56397286 --- /dev/null +++ b/hyperstation/code/datums/weather/oxygen_rain.dm @@ -0,0 +1,152 @@ +/datum/weather/oxygen_rain + name = "oxygen rain" + desc = "The weather of Layenia can be quite unpredictable... Given the low temperature outside the station, oxygen condenses into liquid droplets." + + telegraph_duration = 400 + telegraph_message = "Oxygen clouds condense above and around the station..." + + weather_message = "Liquid oxygen pours down around you! It's freezing!" + weather_overlay = "oxygen_rain" + weather_duration_lower = 600 + weather_duration_upper = 1500 + + end_duration = 100 + end_message = "The downpour gradually slows to a light shower before fading away..." + + area_type = /area/layenia/cloudlayer + target_trait = ZTRAIT_STATION + + immunity_type = "storm" // temp + + barometer_predictable = TRUE + + var/datum/looping_sound/active_outside_oxygenrain/sound_ao = new(list(), FALSE, TRUE) + var/datum/looping_sound/active_inside_oxygenrain/sound_ai = new(list(), FALSE, TRUE) + var/datum/looping_sound/weak_outside_oxygenrain/sound_wo = new(list(), FALSE, TRUE) + var/datum/looping_sound/weak_inside_oxygenrain/sound_wi = new(list(), FALSE, TRUE) + +/datum/weather/oxygen_rain/telegraph() + . = ..() + var/list/inside_areas = list() + var/list/outside_areas = list() + var/list/eligible_areas = list() + for (var/z in impacted_z_levels) + eligible_areas += SSmapping.areas_in_z["[z]"] + for(var/i in 1 to eligible_areas.len) + var/area/place = eligible_areas[i] + if(place.outdoors) + outside_areas += place + else + inside_areas += place + CHECK_TICK + + sound_ao.output_atoms = outside_areas + sound_ai.output_atoms = inside_areas + sound_wo.output_atoms = outside_areas + sound_wi.output_atoms = inside_areas + + sound_wo.start() + sound_wi.start() + +/datum/weather/oxygen_rain/start() + . = ..() + sound_wo.stop() + sound_wi.stop() + + sound_ao.start() + sound_ai.start() + +/datum/weather/oxygen_rain/wind_down() + . = ..() + sound_ao.stop() + sound_ai.stop() + + sound_wo.start() + sound_wi.start() + +/datum/weather/oxygen_rain/end() + . = ..() + sound_wo.stop() + sound_wi.stop() + +/datum/weather/oxygen_rain/weather_act(mob/living/L) + //This is liquid oxygen after all. (-90C) + L.adjust_bodytemperature(-rand(5,10)) + + + + +/datum/looping_sound/active_outside_oxygenrain + mid_sounds = list( + 'sound/weather/oxygenrain/outside/active_mid1.ogg'=1, + 'sound/weather/oxygenrain/outside/active_mid1.ogg'=1, + 'sound/weather/oxygenrain/outside/active_mid1.ogg'=1 + ) + mid_length = 80 + start_sound = 'sound/weather/oxygenrain/outside/active_start.ogg' + start_length = 130 + end_sound = 'sound/weather/oxygenrain/outside/active_end.ogg' + volume = 60 + +/datum/looping_sound/active_inside_oxygenrain + mid_sounds = list( + 'sound/weather/oxygenrain/inside/active_mid1.ogg'=1, + 'sound/weather/oxygenrain/inside/active_mid2.ogg'=1, + 'sound/weather/oxygenrain/inside/active_mid3.ogg'=1 + ) + mid_length = 80 + start_sound = 'sound/weather/oxygenrain/inside/active_start.ogg' + start_length = 130 + end_sound = 'sound/weather/oxygenrain/inside/active_end.ogg' + volume = 20 + +/datum/looping_sound/weak_outside_oxygenrain + mid_sounds = list( + 'sound/weather/oxygenrain/outside/weak_mid1.ogg'=1, + 'sound/weather/oxygenrain/outside/weak_mid2.ogg'=1, + 'sound/weather/oxygenrain/outside/weak_mid3.ogg'=1 + ) + mid_length = 80 + start_sound = 'sound/weather/oxygenrain/outside/weak_start.ogg' + start_length = 130 + end_sound = 'sound/weather/oxygenrain/outside/weak_end.ogg' + volume = 50 + +/datum/looping_sound/weak_inside_oxygenrain + mid_sounds = list( + 'sound/weather/oxygenrain/inside/weak_mid1.ogg'=1, + 'sound/weather/oxygenrain/inside/weak_mid2.ogg'=1, + 'sound/weather/oxygenrain/inside/weak_mid3.ogg'=1 + ) + mid_length = 80 + start_sound = 'sound/weather/oxygenrain/inside/weak_start.ogg' + start_length = 130 + end_sound = 'sound/weather/oxygenrain/inside/weak_end.ogg' + volume = 30 + + + + +/datum/round_event_control/oxygen_rain + name = "Oxygen Rain" + typepath = /datum/round_event/oxygen_rain + max_occurrences = 1 + +/datum/round_event/oxygen_rain + +/datum/round_event/oxygen_rain/setup() + startWhen = 3 + endWhen = startWhen + 1 + announceWhen = 1 + +/datum/round_event/oxygen_rain/start() + SSweather.run_weather(/datum/weather/oxygen_rain) + +/datum/round_event/oxygen_rain/announce() + priority_announce("[station_name()]: Oxygen Rain Placeholder", + sound = 'sound/misc/notice2.ogg', + sender_override = "Kinaris Meteorology Division") + for(var/V in GLOB.player_list) + var/mob/M = V + if((M.client.prefs.toggles & SOUND_MIDI) && is_station_level(M.z)) + M.playsound_local(M, pick('sound/ambience/aurora_caelus_new.ogg','sound/ambience/aurora_caelus.ogg'), 40, FALSE, pressure_affected = FALSE) //ogg is "The Fire is Gone" by Heaven Pierce Her, used in the videogame ULTRAKILL. All respects and credits to the equivalent artists who worked on it. diff --git a/icons/effects/weather_effects.dmi b/icons/effects/weather_effects.dmi index a66f5032..6805e960 100644 Binary files a/icons/effects/weather_effects.dmi and b/icons/effects/weather_effects.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 9f689647..f1e27c3d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3049,6 +3049,7 @@ #include "hyperstation\code\datums\ruins\lavaland.dm" #include "hyperstation\code\datums\traits\good.dm" #include "hyperstation\code\datums\traits\neutral.dm" +#include "hyperstation\code\datums\weather\oxygen_rain.dm" #include "hyperstation\code\game\objects\railings.dm" #include "hyperstation\code\game\objects\items\cosmetics.dm" #include "hyperstation\code\game\objects\items\storage\big_bag.dm"