mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
@@ -1,148 +1,34 @@
|
||||
var/list/global_snowtiles = list()
|
||||
var/list/snow_state_to_texture = list()
|
||||
var/snowtiles_setup = 0
|
||||
var/snow_intensity = SNOW_CALM
|
||||
var/blizzard_ready = 1 //Whether a new blizzard can be started.
|
||||
var/list/snowstorm_ambience = list('sound/misc/snowstorm/snowfall_calm.ogg','sound/misc/snowstorm/snowfall_average.ogg','sound/misc/snowstorm/snowfall_hard.ogg','sound/misc/snowstorm/snowfall_blizzard.ogg')
|
||||
var/list/snowstorm_ambience_volumes = list(30,40,60,80)
|
||||
var/blizzard_cooldown = 3000 //5 minutes minimum
|
||||
var/list/climatecomps = list()
|
||||
var/blizzard_ready = TRUE //Whether a new blizzard can be started.
|
||||
var/blizzard_cooldown = 5 MINUTES
|
||||
|
||||
|
||||
/datum/event/blizzard/can_start()
|
||||
return 80
|
||||
return 80 * istype(map.climate,/datum/climate/arctic)
|
||||
|
||||
/datum/event/blizzard/start()
|
||||
if(blizzard_ready)
|
||||
blizzard_ready = 0
|
||||
blizzard_ready = FALSE
|
||||
command_alert(/datum/command_alert/blizzard_start)
|
||||
sleep(rand(20 SECONDS, 2 MINUTES))
|
||||
greaten_snowfall()
|
||||
sleep(rand(3 MINUTES, 6 MINUTES))
|
||||
greaten_snowfall()
|
||||
sleep(rand(8 MINUTES, 13 MINUTES))
|
||||
lessen_snowfall()
|
||||
sleep(rand(3 MINUTES, 6 MINUTES))
|
||||
lessen_snowfall()
|
||||
sleep(rand(20 SECONDS, 40 SECONDS))
|
||||
command_alert(/datum/command_alert/blizzard_end)
|
||||
var/datum/climate/C = map.climate
|
||||
var/datum/weather/W = C.current_weather
|
||||
W.timeleft = round(rand(2 MINUTES, 4 MINUTES),SS_WAIT_WEATHER)
|
||||
W.next_weather = list(/datum/weather/snow/blizzard = 100)
|
||||
C.forecast()
|
||||
spawn(blizzard_cooldown)
|
||||
blizzard_ready = 1
|
||||
blizzard_ready = TRUE
|
||||
|
||||
/datum/event/omega_blizzard
|
||||
oneShot = 1
|
||||
|
||||
/datum/event/omega_blizzard/can_start()
|
||||
return 3
|
||||
return 3 * istype(map.climate,/datum/climate/arctic)
|
||||
|
||||
/datum/event/omega_blizzard/start() //Oh god oh fuck
|
||||
if(blizzard_ready)
|
||||
blizzard_ready = 0
|
||||
command_alert(/datum/command_alert/omega_blizzard)
|
||||
sleep(rand(20 SECONDS, 30 SECONDS))
|
||||
greaten_snowfall()
|
||||
sleep(rand(50 SECONDS, 2 MINUTES))
|
||||
greaten_snowfall()
|
||||
sleep(rand(3 MINUTES, 5 MINUTES))
|
||||
greaten_snowfall() //Never-ending MISERY
|
||||
|
||||
/proc/force_update_snowfall_sfx() //Since the vision blocking UI only updates on Entered, let's call it.
|
||||
for(var/mob/M in player_list)
|
||||
if(M && M.client)
|
||||
var/turf/unsimulated/floor/snow/snow = get_turf(M)
|
||||
if(snow && istype(snow))
|
||||
snow.Entered(M)
|
||||
M << sound(snowstorm_ambience[snow_intensity+1], repeat = 1, wait = 0, channel = CHANNEL_WEATHER, volume = snowstorm_ambience_volumes[snow_intensity+1])
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/proc/greaten_snowfall()
|
||||
if(snow_intensity == SNOW_BLIZZARD)
|
||||
return
|
||||
snow_intensity++
|
||||
for(var/obj/machinery/computer/climate/C in climatecomps)
|
||||
C.update_weather(snow_intensity)
|
||||
for(var/turf/unsimulated/floor/snow/tile in global_snowtiles)
|
||||
if(tile.ignore_blizzard_updates)
|
||||
continue
|
||||
tile.snow_state = snow_intensity
|
||||
tile.update_environment()
|
||||
force_update_snowfall_sfx()
|
||||
|
||||
/proc/lessen_snowfall()
|
||||
if(snow_intensity == SNOW_CALM)
|
||||
return
|
||||
snow_intensity--
|
||||
for(var/obj/machinery/computer/climate/C in climatecomps)
|
||||
C.update_weather(snow_intensity)
|
||||
for(var/turf/unsimulated/floor/snow/tile in global_snowtiles)
|
||||
if(tile.ignore_blizzard_updates)
|
||||
continue
|
||||
tile.snow_state = snow_intensity
|
||||
tile.update_environment()
|
||||
force_update_snowfall_sfx()
|
||||
|
||||
/proc/snowfall_tick()
|
||||
switch(snow_intensity)
|
||||
if(SNOW_CALM)
|
||||
snowfall_calm_tick()
|
||||
if(SNOW_AVERAGE)
|
||||
snowfall_average_tick()
|
||||
if(SNOW_HARD)
|
||||
snowfall_hard_tick()
|
||||
if(SNOW_BLIZZARD)
|
||||
snowfall_blizzard_tick()
|
||||
|
||||
/proc/snowfall_calm_tick()
|
||||
var/tile_interval = 5
|
||||
if(prob(3))
|
||||
var/i = rand(1,tile_interval) //Efficiently selects a set of random tiles to melt snow on.
|
||||
for(var/turf/unsimulated/floor/snow/tile in global_snowtiles)
|
||||
if(i == tile_interval)
|
||||
tile.change_snowballs(-1,0)
|
||||
if(tile.snowprint_parent)
|
||||
tile.snowprint_parent.ClearSnowprints()
|
||||
i = 1
|
||||
else
|
||||
i++
|
||||
/proc/snowfall_average_tick()
|
||||
var/tile_interval = 5
|
||||
if(prob(5))
|
||||
var/i = rand(1,tile_interval)
|
||||
for(var/turf/unsimulated/floor/snow/tile in global_snowtiles)
|
||||
if(i == tile_interval)
|
||||
tile.change_snowballs(1,8)
|
||||
if(tile.snowprint_parent)
|
||||
tile.snowprint_parent.ClearSnowprints()
|
||||
i = 1
|
||||
else
|
||||
i++
|
||||
|
||||
|
||||
/proc/snowfall_hard_tick()
|
||||
var/tile_interval = 5
|
||||
if(prob(8))
|
||||
var/i = rand(1,tile_interval)
|
||||
for(var/turf/unsimulated/floor/snow/tile in global_snowtiles)
|
||||
if(i == tile_interval)
|
||||
tile.change_snowballs(2,15)
|
||||
if(tile.snowprint_parent)
|
||||
tile.snowprint_parent.ClearSnowprints()
|
||||
i = 1
|
||||
else
|
||||
i++
|
||||
|
||||
|
||||
/proc/snowfall_blizzard_tick()
|
||||
var/tile_interval = 3
|
||||
if(prob(12))
|
||||
var/i = rand(1,tile_interval)
|
||||
for(var/turf/unsimulated/floor/snow/tile in global_snowtiles)
|
||||
if(i == tile_interval)
|
||||
tile.change_snowballs(3,20)
|
||||
if(tile.snowprint_parent)
|
||||
tile.snowprint_parent.ClearSnowprints()
|
||||
i = 1
|
||||
else
|
||||
i++
|
||||
var/datum/climate/C = map.climate
|
||||
var/datum/weather/W = C.current_weather
|
||||
W.timeleft = round(rand(8 MINUTES, 10 MINUTES),SS_WAIT_WEATHER)
|
||||
W.next_weather = list(/datum/weather/snow/blizzard/omega = 100)
|
||||
C.forecast()
|
||||
|
||||
Reference in New Issue
Block a user