diff --git a/code/datums/weather/weather_types/layenia.dm b/code/datums/weather/weather_types/layenia.dm index e551c788..97113bb9 100644 --- a/code/datums/weather/weather_types/layenia.dm +++ b/code/datums/weather/weather_types/layenia.dm @@ -19,7 +19,7 @@ area_type = /area/layenia target_trait = ZTRAIT_STATION - probability = 100 + probability = 98 barometer_predictable = TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm index 195b9ec3..b2441940 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm @@ -777,4 +777,16 @@ weight = 5 repeatable = TRUE repeatable_weight_decrease = 3 - occurances_max = 3 \ No newline at end of file + occurances_max = 3 + +/* Unused, testing purposes only. +/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..eba1fe49 --- /dev/null +++ b/hyperstation/code/datums/weather/oxygen_rain.dm @@ -0,0 +1,119 @@ +/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 = 300 + telegraph_message = "Oxygen clouds condense above and around the station..." + telegraph_overlay = "rain_med" + + weather_message = "Liquid oxygen pours down around you! It's freezing!" + weather_overlay = "rain_high" + weather_duration_lower = 600 + weather_duration_upper = 1200 + + end_duration = 300 + end_message = "The downpour gradually slows to a light shower before fading away..." + end_overlay = "rain_low" + + area_type = /area/layenia + target_trait = ZTRAIT_STATION + + immunity_type = "storm" // temp + probability = 2 //The chances of this happening are very low after all. We'll rarely see it, but it's worth it. + barometer_predictable = 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() + . = ..() + priority_announce("[station_name()]: A large quantity of condensed oxygen clouds has been detected around and above the station. A liquid oxygen downpour is expected.", + 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, 'hyperstation/sound/ambience/embrace.ogg', 40, FALSE, pressure_affected = FALSE) + /* + "Sappheiros - Embrace" is under a Creative Commons license (CC BY 3.0) + https://www.youtube.com/channel/UCxLKyBhC6igFhLEb0gxvQNg + Music promoted by BreakingCopyright: https://youtu.be/DzYp5uqixz0 + */ + 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_wo.output_atoms = outside_areas + sound_wi.output_atoms = inside_areas + + sound_wo.start() + sound_wi.start() + +/datum/weather/oxygen_rain/start() + . = ..() + +/datum/weather/oxygen_rain/wind_down() + . = ..() + +/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/weak_outside_oxygenrain + mid_sounds = list( + 'sound/weather/oxygenrain/outside/weak_mid1.ogg'=1, + 'sound/weather/oxygenrain/outside/weak_mid2.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 + ) + 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 + +/* Unused code for testing purposes. + +/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()]: A large quantity of condensed oxygen clouds has been detected around and above the station. A liquid oxygen downpour is expected.", + sound = 'sound/misc/notice2.ogg', + sender_override = "Kinaris Meteorology Division") +*/ diff --git a/hyperstation/sound/ambience/embrace.ogg b/hyperstation/sound/ambience/embrace.ogg new file mode 100644 index 00000000..2f150fce Binary files /dev/null and b/hyperstation/sound/ambience/embrace.ogg differ diff --git a/icons/effects/weather_effects.dmi b/icons/effects/weather_effects.dmi index a66f5032..2f271d4a 100644 Binary files a/icons/effects/weather_effects.dmi and b/icons/effects/weather_effects.dmi differ diff --git a/sound/weather/oxygenrain/inside/weak_end.ogg b/sound/weather/oxygenrain/inside/weak_end.ogg new file mode 100644 index 00000000..c6cdcfff Binary files /dev/null and b/sound/weather/oxygenrain/inside/weak_end.ogg differ diff --git a/sound/weather/oxygenrain/inside/weak_mid1.ogg b/sound/weather/oxygenrain/inside/weak_mid1.ogg new file mode 100644 index 00000000..51595bf4 Binary files /dev/null and b/sound/weather/oxygenrain/inside/weak_mid1.ogg differ diff --git a/sound/weather/oxygenrain/inside/weak_mid2.ogg b/sound/weather/oxygenrain/inside/weak_mid2.ogg new file mode 100644 index 00000000..53e0769f Binary files /dev/null and b/sound/weather/oxygenrain/inside/weak_mid2.ogg differ diff --git a/sound/weather/oxygenrain/inside/weak_start.ogg b/sound/weather/oxygenrain/inside/weak_start.ogg new file mode 100644 index 00000000..6d71ae0f Binary files /dev/null and b/sound/weather/oxygenrain/inside/weak_start.ogg differ diff --git a/sound/weather/oxygenrain/outside/weak_end.ogg b/sound/weather/oxygenrain/outside/weak_end.ogg new file mode 100644 index 00000000..b540f929 Binary files /dev/null and b/sound/weather/oxygenrain/outside/weak_end.ogg differ diff --git a/sound/weather/oxygenrain/outside/weak_mid1.ogg b/sound/weather/oxygenrain/outside/weak_mid1.ogg new file mode 100644 index 00000000..504328ef Binary files /dev/null and b/sound/weather/oxygenrain/outside/weak_mid1.ogg differ diff --git a/sound/weather/oxygenrain/outside/weak_mid2.ogg b/sound/weather/oxygenrain/outside/weak_mid2.ogg new file mode 100644 index 00000000..ae66e6a4 Binary files /dev/null and b/sound/weather/oxygenrain/outside/weak_mid2.ogg differ diff --git a/sound/weather/oxygenrain/outside/weak_start.ogg b/sound/weather/oxygenrain/outside/weak_start.ogg new file mode 100644 index 00000000..15785282 Binary files /dev/null and b/sound/weather/oxygenrain/outside/weak_start.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 0cdb4b26..b4e2828f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3050,6 +3050,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"