diff --git a/code/modules/fireworks/firework_launcher.dm b/code/modules/fireworks/firework_launcher.dm
index 5f7720fa8c..c7662e6226 100644
--- a/code/modules/fireworks/firework_launcher.dm
+++ b/code/modules/fireworks/firework_launcher.dm
@@ -51,7 +51,7 @@
return
if(user.unEquip(O, 0, src))
loaded_star = O
- to_chat(user, "You insert the firework star into the launcher.")
+ to_chat(user, "You insert the firework star into \the [src].")
add_fingerprint(user)
update_icon()
return
@@ -67,7 +67,7 @@
if(!user || user.stat != 0)
return
if(!loaded_star)
- to_chat(user, "There is no firework star loaded in the launcher.")
+ to_chat(user, "There is no firework star loaded in \the [src].")
return
else
loaded_star.forceMove(get_turf(src))
@@ -81,25 +81,25 @@
return
if(!loaded_star)
- to_chat(user, "There is no firework star loaded in the launcher.")
+ to_chat(user, "There is no firework star loaded in \the [src].")
return
if((world.time - last_launch) <= launch_cooldown)
- to_chat(user, "The launcher is still re-priming for launch.")
+ to_chat(user, "\The [src] is still re-priming for launch.")
return
if(!anchored)
- to_chat(user, "Launcher must be firmly secured to the ground before firework can be launched!")
+ to_chat(user, "\The [src] must be firmly secured to the ground before firework can be launched!")
return
var/datum/planet/P = get_planet()
if(!P || !(P.weather_holder)) // There are potential cases of being outside but not on planet. And checking whether planet has weather at all is more sanity thing than anything.
- to_chat(user, "Launcher beeps as its safeties seem to prevent launch in the current location.")
+ to_chat(user, "\The [src] beeps as its safeties seem to prevent launch in the current location.")
return
var/datum/weather_holder/WH = P.weather_holder
if(WH.firework_override && istype(loaded_star, /obj/item/weapon/firework_star/weather)) // Enable weather-based events to not be ruined
- to_chat(user, "Launcher beeps as it seems some interference is preventing launch of this type of firework.")
+ to_chat(user, "\The [src] beeps as it seems some interference is preventing launch of this type of firework.")
return
to_chat(user, "You launch the firework!")
diff --git a/code/modules/fireworks/firework_stars.dm b/code/modules/fireworks/firework_stars.dm
index a276539424..31cb9d3c59 100644
--- a/code/modules/fireworks/firework_stars.dm
+++ b/code/modules/fireworks/firework_stars.dm
@@ -24,9 +24,10 @@
if(w_holder.firework_override) // Make sure weather-based events can't be interfered with
return
if(weather_type && (weather_type in w_holder.allowed_weather_types))
- w_holder.message_all_outdoor_players("Something seems to flash in the sky, as weather suddenly shifts!")
- w_holder.change_weather(weather_type)
- w_holder.rebuild_forecast()
+ w_holder.message_all_outdoor_players("Something seems to flash in the sky, as weather starts to rapidly shift!")
+ w_holder.queue_imminent_weather(weather_type)
+ var/datum/weather/our_weather = w_holder.allowed_weather_types[weather_type]
+ w_holder.message_all_outdoor_players(our_weather.imminent_transition_message)
/obj/item/weapon/firework_star/weather/clear
name = T_FIREWORK_WEATHER_STAR("CLEAR SKY")
@@ -38,6 +39,11 @@
weather_type = WEATHER_OVERCAST
icon_state = "cloudy"
+/obj/item/weapon/firework_star/weather/fog
+ name = T_FIREWORK_WEATHER_STAR("FOG")
+ weather_type = WEATHER_FOG
+ icon_state = "cloudy"
+
/obj/item/weapon/firework_star/weather/rain
name = T_FIREWORK_WEATHER_STAR("RAIN")
weather_type = WEATHER_RAIN
diff --git a/code/modules/flufftext/look_up.dm b/code/modules/flufftext/look_up.dm
index 10cd25b288..ec7bf85f23 100644
--- a/code/modules/flufftext/look_up.dm
+++ b/code/modules/flufftext/look_up.dm
@@ -28,6 +28,11 @@
if(WH.current_weather.observed_message)
to_chat(usr, WH.current_weather.observed_message)
+ // Describe the current weather.
+ if(WH.imminent_weather)
+ var/datum/weather/coming_weather = WH.allowed_weather_types[WH.imminent_weather]
+ to_chat(usr, coming_weather.imminent_transition_message)
+
// If we can see the sky, we'll see things like sun position, phase of the moon, etc.
if(!WH.current_weather.sky_visible)
to_chat(usr, "You can't see the sky clearly due to the [WH.current_weather.name].")
diff --git a/code/modules/planet/virgo3b_vr.dm b/code/modules/planet/virgo3b_vr.dm
index ffeaf4f253..336fdfc3be 100644
--- a/code/modules/planet/virgo3b_vr.dm
+++ b/code/modules/planet/virgo3b_vr.dm
@@ -107,6 +107,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
WEATHER_RAIN = new /datum/weather/virgo3b/rain(),
WEATHER_STORM = new /datum/weather/virgo3b/storm(),
WEATHER_HAIL = new /datum/weather/virgo3b/hail(),
+ WEATHER_FOG = new /datum/weather/virgo3b/fog(),
WEATHER_BLOOD_MOON = new /datum/weather/virgo3b/blood_moon(),
WEATHER_EMBERFALL = new /datum/weather/virgo3b/emberfall(),
WEATHER_ASH_STORM = new /datum/weather/virgo3b/ash_storm(),
@@ -118,6 +119,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
roundstart_weather_chances = list(
WEATHER_CLEAR = 60,
WEATHER_OVERCAST = 60,
+ WEATHER_FOG = 40,
WEATHER_LIGHT_SNOW = 40,
WEATHER_SNOW = 10,
WEATHER_BLIZZARD = 10,
@@ -135,7 +137,8 @@ var/datum/planet/virgo3b/planet_virgo3b = null
name = "clear"
transition_chances = list(
WEATHER_CLEAR = 60,
- WEATHER_OVERCAST = 40
+ WEATHER_OVERCAST = 40,
+ WEATHER_FOG = 20,
)
transition_messages = list(
"The sky clears up.",
@@ -144,6 +147,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
)
sky_visible = TRUE
observed_message = "The sky is clear."
+ imminent_transition_message = "The sky is rapidly clearing up."
/datum/weather/virgo3b/overcast
name = "overcast"
@@ -151,6 +155,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_chances = list(
WEATHER_CLEAR = 25,
WEATHER_OVERCAST = 50,
+ WEATHER_FOG = 10,
WEATHER_LIGHT_SNOW = 10,
WEATHER_SNOW = 5,
WEATHER_RAIN = 5,
@@ -162,6 +167,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
"Clouds cut off your view of the sky.",
"It's very cloudy."
)
+ imminent_transition_message = "Benign clouds are quickly gathering."
/datum/weather/virgo3b/light_snow
name = "light snow"
@@ -180,6 +186,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
"Small snowflakes begin to fall from above.",
"It begins to snow lightly.",
)
+ imminent_transition_message = "It appears a light snow is about to start."
/datum/weather/virgo3b/snow
name = "moderate snow"
@@ -202,6 +209,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
"It's starting to snow.",
"The air feels much colder as snowflakes fall from above."
)
+ imminent_transition_message = "A snowfall is starting."
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
@@ -230,13 +238,15 @@ var/datum/planet/virgo3b/planet_virgo3b = null
WEATHER_SNOW = 45,
WEATHER_BLIZZARD = 40,
WEATHER_HAIL = 10,
- WEATHER_OVERCAST = 5
+ WEATHER_OVERCAST = 5,
+ WEATHER_FOG = 5
)
observed_message = "A blizzard blows snow everywhere."
transition_messages = list(
"Strong winds howl around you as a blizzard appears.",
"It starts snowing heavily, and it feels extremly cold now."
)
+ imminent_transition_message = "Wind is howling. Blizzard is coming."
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -262,6 +272,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_chances = list(
WEATHER_OVERCAST = 25,
+ WEATHER_FOG = 25,
WEATHER_LIGHT_SNOW = 10,
WEATHER_RAIN = 50,
WEATHER_STORM = 10,
@@ -271,6 +282,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"The sky is dark, and rain falls down upon you."
)
+ imminent_transition_message = "Light drips of water are starting to fall from the sky."
outdoor_sounds_type = /datum/looping_sound/weather/rain
indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
@@ -314,6 +326,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
"Loud thunder is heard in the distance.",
"A bright flash heralds the approach of a storm."
)
+ imminent_transition_message = "You can hear distant thunder. Storm is coming."
outdoor_sounds_type = /datum/looping_sound/weather/rain
indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
@@ -321,6 +334,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_chances = list(
WEATHER_RAIN = 45,
WEATHER_STORM = 40,
+ WEATHER_FOG = 25,
WEATHER_HAIL = 10,
WEATHER_OVERCAST = 5
)
@@ -371,6 +385,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_chances = list(
WEATHER_RAIN = 45,
WEATHER_STORM = 40,
+ WEATHER_FOG = 20,
WEATHER_HAIL = 10,
WEATHER_OVERCAST = 5
)
@@ -380,6 +395,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
"It begins to hail.",
"An intense chill is felt, and chunks of ice start to fall from the sky, towards you."
)
+ imminent_transition_message = "Small bits of ice are falling from the sky, growing larger by the second. Hail is starting, get to cover!"
/datum/weather/virgo3b/hail/process_effects()
..()
@@ -416,6 +432,32 @@ var/datum/planet/virgo3b/planet_virgo3b = null
if(show_message)
to_chat(H, effect_message)
+/datum/weather/virgo3b/fog
+ name = "fog"
+ icon_state = "fog"
+ wind_high = 1
+ wind_low = 0
+ light_modifier = 0.7
+
+ temp_high = 235.15
+ temp_low = 225.15
+
+ transition_chances = list(
+ WEATHER_FOG = 70,
+ WEATHER_OVERCAST = 15,
+ WEATHER_LIGHT_SNOW = 10,
+ WEATHER_RAIN = 5
+ )
+ observed_message = "A fogbank has rolled over the region."
+ transition_messages = list(
+ "Fog rolls in.",
+ "Visibility falls as the air becomes dense.",
+ "The clouds drift lower, as if to smother the forests."
+ )
+ imminent_transition_message = "Clouds are drifting down as the area is getting foggy."
+ outdoor_sounds_type = /datum/looping_sound/weather/wind
+ indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
+
/datum/weather/virgo3b/blood_moon
name = "blood moon"
light_modifier = 0.5
@@ -428,6 +470,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"The sky turns blood red!"
)
+ imminent_transition_message = "The sky is turning red. Blood Moon is starting."
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -447,6 +490,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"Gentle embers waft down around you like grotesque snow."
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers start to rain down."
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -468,6 +512,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"Smoldering clouds of scorching ash billow down around you!"
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too. Ashstorm is coming, get to cover!"
// Lets recycle.
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -499,6 +544,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"Smoldering clouds of scorching ash billow down around you!"
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too."
// Lets recycle.
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -518,6 +564,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"Radioactive soot and ash start to float down around you, contaminating whatever they touch."
)
+ imminent_transition_message = "Sky and clouds are growing sickly green... Radiation storm is approaching, get to cover!"
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -554,9 +601,12 @@ var/datum/planet/virgo3b/planet_virgo3b = null
/datum/weather/virgo3b/fallout/temp
name = "short-term fallout"
+ timer_low_bound = 1
+ timer_high_bound = 3
transition_chances = list(
WEATHER_FALLOUT = 10,
WEATHER_RAIN = 50,
+ WEATHER_FOG = 35,
WEATHER_STORM = 20,
WEATHER_OVERCAST = 5
)
@@ -575,4 +625,5 @@ var/datum/planet/virgo3b/planet_virgo3b = null
transition_messages = list(
"Suddenly, colorful confetti starts raining from the sky."
)
+ imminent_transition_message = "A rain is starting... A rain of confetti...?"
diff --git a/code/modules/planet/virgo3c_vr.dm b/code/modules/planet/virgo3c_vr.dm
index 705fcba2b0..bccd6d9a50 100644
--- a/code/modules/planet/virgo3c_vr.dm
+++ b/code/modules/planet/virgo3c_vr.dm
@@ -127,6 +127,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
WEATHER_RAIN = new /datum/weather/virgo3c/rain(),
WEATHER_STORM = new /datum/weather/virgo3c/storm(),
WEATHER_HAIL = new /datum/weather/virgo3c/hail(),
+ WEATHER_FOG = new /datum/weather/virgo3c/fog(),
WEATHER_BLOOD_MOON = new /datum/weather/virgo3c/blood_moon(),
WEATHER_EMBERFALL = new /datum/weather/virgo3c/emberfall(),
WEATHER_ASH_STORM = new /datum/weather/virgo3c/ash_storm(),
@@ -162,6 +163,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
)
sky_visible = TRUE
observed_message = "The sky is clear."
+ imminent_transition_message = "The sky is rapidly clearing up."
/datum/weather/virgo3c/overcast
name = "overcast"
@@ -171,6 +173,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_chances = list(
WEATHER_CLEAR = 50,
WEATHER_OVERCAST = 50,
+ WEATHER_FOG = 5,
WEATHER_RAIN = 5,
WEATHER_LIGHT_SNOW = 5
)
@@ -180,6 +183,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
"Clouds cut off your view of the sky.",
"It's very cloudy."
)
+ imminent_transition_message = "Benign clouds are quickly gathering."
/datum/weather/virgo3c/light_snow
name = "light snow"
@@ -190,6 +194,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_chances = list(
WEATHER_LIGHT_SNOW = 25,
WEATHER_OVERCAST = 25,
+ WEATHER_FOG = 10,
WEATHER_SNOW = 10,
WEATHER_RAIN = 5
)
@@ -198,6 +203,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
"Small snowflakes begin to fall from above.",
"It begins to snow lightly.",
)
+ imminent_transition_message = "It appears a light snow is about to start."
/datum/weather/virgo3c/snow
name = "moderate snow"
@@ -218,6 +224,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
"It's starting to snow.",
"The air feels much colder as snowflakes fall from above."
)
+ imminent_transition_message = "A snowfall is starting."
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
@@ -239,6 +246,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
"Strong winds howl around you as a blizzard appears.",
"It starts snowing heavily, and it feels extremly cold now."
)
+ imminent_transition_message = "Wind is howling. Blizzard is coming."
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -251,10 +259,13 @@ var/datum/planet/virgo3c/planet_virgo3c = null
wind_low = 1
light_modifier = 0.5
effect_message = "Rain falls on you."
+ outdoor_sounds_type = /datum/looping_sound/weather/rain
+ indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
transition_chances = list(
WEATHER_OVERCAST = 25,
WEATHER_RAIN = 25,
+ WEATHER_FOG = 10,
WEATHER_STORM = 5,
WEATHER_LIGHT_SNOW = 5
)
@@ -262,6 +273,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_messages = list(
"The sky is dark, and rain falls down upon you."
)
+ imminent_transition_message = "Light drips of water are starting to fall from the sky."
/datum/weather/virgo3c/rain/process_effects()
..()
@@ -305,6 +317,9 @@ var/datum/planet/virgo3c/planet_virgo3c = null
"Loud thunder is heard in the distance.",
"A bright flash heralds the approach of a storm."
)
+ imminent_transition_message = "You can hear distant thunder. Storm is coming."
+ outdoor_sounds_type = /datum/looping_sound/weather/rain
+ indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
transition_chances = list(
@@ -360,6 +375,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
effect_message = "The hail smacks into you!"
transition_chances = list(
+ WEATHER_FOG = 5,
WEATHER_HAIL = 25,
WEATHER_RAIN = 75
)
@@ -369,6 +385,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
"It begins to hail.",
"An intense chill is felt, and chunks of ice start to fall from the sky, towards you."
)
+ imminent_transition_message = "Small bits of ice are falling from the sky, growing larger by the second. Hail is starting, get to cover!"
/datum/weather/virgo3c/hail/process_effects()
..()
@@ -405,6 +422,31 @@ var/datum/planet/virgo3c/planet_virgo3c = null
if(show_message)
to_chat(H, effect_message)
+/datum/weather/virgo3c/fog
+ name = "fog"
+ icon_state = "fog"
+ wind_high = 1
+ wind_low = 0
+ light_modifier = 0.7
+
+ temp_high = 273.15 // 0c
+ temp_low = 263.15 // -10c
+
+ transition_chances = list(
+ WEATHER_FOG = 50,
+ WEATHER_OVERCAST = 45,
+ WEATHER_LIGHT_SNOW = 5
+ )
+ observed_message = "A fogbank has rolled over the region."
+ transition_messages = list(
+ "Fog rolls in.",
+ "Visibility falls as the air becomes dense.",
+ "The clouds drift lower, as if to smother the forests."
+ )
+ imminent_transition_message = "Clouds are drifting down as the area is getting foggy."
+ outdoor_sounds_type = /datum/looping_sound/weather/wind
+ indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
+
/datum/weather/virgo3c/blood_moon
name = "blood moon"
light_modifier = 0.5
@@ -412,6 +454,8 @@ var/datum/planet/virgo3c/planet_virgo3c = null
temp_high = 283.15 // 10c
temp_low = 273.15 // 0c
flight_failure_modifier = 25
+ timer_low_bound = 10
+ timer_high_bound = 15
transition_chances = list(
WEATHER_BLOOD_MOON = 25,
WEATHER_CLEAR = 75
@@ -420,6 +464,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_messages = list(
"The sky turns blood red!"
)
+ imminent_transition_message = "The sky is turning red. Blood Moon is starting."
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -432,6 +477,8 @@ var/datum/planet/virgo3c/planet_virgo3c = null
temp_high = 293.15 // 20c
temp_low = 283.15 // 10c
flight_failure_modifier = 20
+ timer_low_bound = 8
+ timer_high_bound = 10
transition_chances = list(
WEATHER_ASH_STORM = 100
)
@@ -439,6 +486,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_messages = list(
"Gentle embers waft down around you like black snow. A wall of dark, glowing ash approaches in the distance..."
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers start to rain down."
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -453,14 +501,17 @@ var/datum/planet/virgo3c/planet_virgo3c = null
wind_high = 6
wind_low = 3
flight_failure_modifier = 50
+ timer_low_bound = 4
+ timer_high_bound = 6
transition_chances = list(
- WEATHER_ASH_STORM = 5,
- WEATHER_CLEAR = 95
+ WEATHER_ASH_STORM = 20,
+ WEATHER_CLEAR = 80
)
observed_message = "All that can be seen is black smoldering ash."
transition_messages = list(
"Smoldering clouds of scorching ash billow down around you!"
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too. Ashstorm is coming, get to cover!"
// Lets recycle.
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -498,6 +549,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_messages = list(
"Smoldering clouds of scorching ash billow down around you!"
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too."
// Lets recycle.
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -516,6 +568,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_messages = list(
"Radioactive soot and ash start to float down around you, contaminating whatever they touch."
)
+ imminent_transition_message = "Sky and clouds are growing sickly green... Radiation storm is approaching, get to cover!"
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -552,9 +605,12 @@ var/datum/planet/virgo3c/planet_virgo3c = null
/datum/weather/virgo3c/fallout/temp
name = "short-term fallout"
+ timer_low_bound = 1
+ timer_high_bound = 3
transition_chances = list(
WEATHER_FALLOUT = 10,
WEATHER_RAIN = 50,
+ WEATHER_FOG = 35,
WEATHER_STORM = 20,
WEATHER_OVERCAST = 5
)
@@ -573,6 +629,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
transition_messages = list(
"Suddenly, colorful confetti starts raining from the sky."
)
+ imminent_transition_message = "A rain is starting... A rain of confetti...?"
/turf/unsimulated/wall/planetary/virgo3c
name = "impassable rock"
diff --git a/code/modules/planet/virgo4_vr.dm b/code/modules/planet/virgo4_vr.dm
index ed7e08d686..af423c1714 100644
--- a/code/modules/planet/virgo4_vr.dm
+++ b/code/modules/planet/virgo4_vr.dm
@@ -106,6 +106,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
WEATHER_RAIN = new /datum/weather/virgo4/rain(),
WEATHER_STORM = new /datum/weather/virgo4/storm(),
WEATHER_HAIL = new /datum/weather/virgo4/hail(),
+ WEATHER_FOG = new /datum/weather/virgo4/fog(),
WEATHER_BLOOD_MOON = new /datum/weather/virgo4/blood_moon(),
WEATHER_EMBERFALL = new /datum/weather/virgo4/emberfall(),
WEATHER_ASH_STORM = new /datum/weather/virgo4/ash_storm(),
@@ -137,6 +138,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
)
sky_visible = TRUE
observed_message = "The sky is clear."
+ imminent_transition_message = "The sky is rapidly clearing up."
/datum/weather/virgo4/overcast
name = "overcast"
@@ -154,6 +156,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
"Clouds cut off your view of the sky.",
"It's very cloudy."
)
+ imminent_transition_message = "Benign clouds are quickly gathering."
/datum/weather/virgo4/light_snow
name = "light snow"
@@ -170,6 +173,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
"Small snowflakes begin to fall from above.",
"It begins to snow lightly.",
)
+ imminent_transition_message = "It appears a light snow is about to start."
/datum/weather/virgo4/snow
name = "moderate snow"
@@ -189,6 +193,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
"It's starting to snow.",
"The air feels much colder as snowflakes fall from above."
)
+ imminent_transition_message = "A snowfall is starting."
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
@@ -222,6 +227,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
"Strong winds howl around you as a blizzard appears.",
"It starts snowing heavily, and it feels extremly cold now."
)
+ imminent_transition_message = "Wind is howling. Blizzard is coming."
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -255,6 +261,9 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"The sky is dark, and rain falls down upon you."
)
+ imminent_transition_message = "Light drips of water are starting to fall from the sky."
+ outdoor_sounds_type = /datum/looping_sound/weather/rain
+ indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
/datum/weather/virgo4/rain/process_effects()
..()
@@ -296,6 +305,9 @@ var/datum/planet/virgo4/planet_virgo4 = null
"Loud thunder is heard in the distance.",
"A bright flash heralds the approach of a storm."
)
+ imminent_transition_message = "You can hear distant thunder. Storm is coming."
+ outdoor_sounds_type = /datum/looping_sound/weather/rain
+ indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
transition_chances = list(
@@ -357,6 +369,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
"It begins to hail.",
"An intense chill is felt, and chunks of ice start to fall from the sky, towards you."
)
+ imminent_transition_message = "Small bits of ice are falling from the sky, growing larger by the second. Hail is starting, get to cover!"
/datum/weather/virgo4/hail/process_effects()
..()
@@ -393,6 +406,30 @@ var/datum/planet/virgo4/planet_virgo4 = null
if(show_message)
to_chat(H, effect_message)
+/datum/weather/virgo4/fog
+ name = "fog"
+ icon_state = "fog"
+ wind_high = 1
+ wind_low = 0
+ light_modifier = 0.7
+
+ temp_high = 283.15 // 10c
+ temp_low = 273.15 // 0c
+
+ transition_chances = list(
+ WEATHER_FOG = 10,
+ WEATHER_OVERCAST = 15
+ )
+ observed_message = "A fogbank has rolled over the region."
+ transition_messages = list(
+ "Fog rolls in.",
+ "Visibility falls as the air becomes dense.",
+ "The clouds drift lower, as if to smother the forests."
+ )
+ imminent_transition_message = "Clouds are drifting down as the area is getting foggy."
+ outdoor_sounds_type = /datum/looping_sound/weather/wind
+ indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
+
/datum/weather/virgo4/blood_moon
name = "blood moon"
light_modifier = 0.5
@@ -407,6 +444,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"The sky turns blood red!"
)
+ imminent_transition_message = "The sky is turning red. Blood Moon is starting."
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -426,6 +464,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"Gentle embers waft down around you like grotesque snow."
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers start to rain down."
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -447,6 +486,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"Smoldering clouds of scorching ash billow down around you!"
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too. Ashstorm is coming, get to cover!"
// Lets recycle.
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -479,6 +519,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"Smoldering clouds of scorching ash billow down around you!"
)
+ imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too."
// Lets recycle.
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
@@ -498,6 +539,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"Radioactive soot and ash start to float down around you, contaminating whatever they touch."
)
+ imminent_transition_message = "Sky and clouds are growing sickly green... Radiation storm is approaching, get to cover!"
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
@@ -534,9 +576,12 @@ var/datum/planet/virgo4/planet_virgo4 = null
/datum/weather/virgo4/fallout/temp
name = "short-term fallout"
+ timer_low_bound = 1
+ timer_high_bound = 3
transition_chances = list(
WEATHER_FALLOUT = 10,
WEATHER_RAIN = 50,
+ WEATHER_FOG = 35,
WEATHER_STORM = 20,
WEATHER_OVERCAST = 5
)
@@ -555,6 +600,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
transition_messages = list(
"Suddenly, colorful confetti starts raining from the sky."
)
+ imminent_transition_message = "A rain is starting... A rain of confetti...?"
/turf/unsimulated/wall/planetary/normal/virgo4
name = "deep ocean"
diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm
index c354e8bde3..e815f2dd06 100644
--- a/code/modules/planet/weather.dm
+++ b/code/modules/planet/weather.dm
@@ -1,12 +1,14 @@
/datum/weather_holder
var/datum/planet/our_planet = null // Reference to the planet datum that holds this datum.
var/datum/weather/current_weather = null // The current weather that is affecting the planet.
+ var/imminent_weather = null // The current weather that is affecting the planet.
var/temperature = T20C // The temperature to set planetary walls to.
var/wind_dir = 0 // The direction the wind is blowing. Moving against the wind slows you down, while moving with it speeds you up.
var/wind_speed = 0 // How fast or slow a mob can be due to wind acting on them.
var/list/allowed_weather_types = list() // Assoc list of weather identifiers, containing the actual weather datum.
var/list/roundstart_weather_chances = list() // Assoc list of weather identifiers and their odds of being picked to happen at roundstart.
var/next_weather_shift = null // world.time when the weather subsystem will advance the forecast.
+ var/imminent_weather_shift = null // world.time when weather will shift towards pre-set imminent weather type.
var/list/forecast = list() // A list of what the weather will be in the future. This allows it to be pre-determined and planned around.
// Holds the weather icon, using vis_contents. Documentation says an /atom/movable is required for placing inside another atom's vis_contents.
@@ -62,7 +64,9 @@
log_debug("[our_planet.name]'s weather is now [new_weather], with a temperature of [temperature]°K ([temperature - T0C]°C | [temperature * 1.8 - 459.67]°F).")
/datum/weather_holder/process()
- if(world.time >= next_weather_shift)
+ if(imminent_weather && world.time >= imminent_weather_shift)
+ proceed_to_imminent_weather()
+ else if(!imminent_weather && world.time >= next_weather_shift)
if(!current_weather) // Roundstart (hopefully).
initialize_weather()
else
@@ -91,6 +95,19 @@
change_weather(new_weather)
build_forecast() // To fill the forecast to the desired length.
+/datum/weather_holder/proc/queue_imminent_weather(weather_to_queue)
+ if(!(weather_to_queue in allowed_weather_types))
+ return
+ imminent_weather = weather_to_queue
+ imminent_weather_shift = world.time + 90 SECONDS
+
+/datum/weather_holder/proc/proceed_to_imminent_weather()
+ var/new_weather = imminent_weather
+ imminent_weather = null
+ forecast.Cut() // Clear the forecast, since we're force-changing the weather.
+ change_weather(new_weather)
+ build_forecast() // To fill the forecast.
+
// Creates a list of future weather shifts, that the planet will undergo at some point in the future.
// Determining it ahead of time allows for attentive players to plan further ahead, if they can see the forecast.
/datum/weather_holder/proc/build_forecast()
@@ -144,7 +161,6 @@
/datum/weather_holder/proc/get_weather_datum(desired_type)
return allowed_weather_types[desired_type]
-
/datum/weather_holder/proc/show_transition_message()
if(!current_weather.transition_messages.len)
return
@@ -175,6 +191,7 @@
var/show_message = FALSE // Is set to TRUE and plays the messsage every [message_delay]
var/list/transition_messages = list()// List of messages shown to all outdoor mobs when this weather is transitioned to, for flavor. Not shown if already this weather.
+ var/imminent_transition_message = null
var/observed_message = null // What is shown to a player 'examining' the weather.
// Looping sound datums for weather sounds, both inside and outside.
diff --git a/code/modules/research/designs/firework_stars.dm b/code/modules/research/designs/firework_stars.dm
index 6fb4e6f70f..b365367451 100644
--- a/code/modules/research/designs/firework_stars.dm
+++ b/code/modules/research/designs/firework_stars.dm
@@ -39,6 +39,15 @@
build_path = /obj/item/weapon/firework_star/weather/overcast
sort_string = "IFABB"
+/datum/design/item/firework_star/weather_fog
+ name = "weather - FOG"
+ desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates fog."
+ id = "fireworkfog"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
+ materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 2000)
+ build_path = /obj/item/weapon/firework_star/weather/fog
+ sort_string = "IFABC"
+
/datum/design/item/firework_star/weather_rain
name = "weather - RAIN"
desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates rain."
@@ -46,7 +55,7 @@
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 4000)
build_path = /obj/item/weapon/firework_star/weather/rain
- sort_string = "IFABC"
+ sort_string = "IFABD"
/datum/design/item/firework_star/weather_storm
name = "weather - STORM"
@@ -55,7 +64,7 @@
req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5)
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_GOLD = 1000)
build_path = /obj/item/weapon/firework_star/weather/storm
- sort_string = "IFABD"
+ sort_string = "IFABE"
/datum/design/item/firework_star/weather_light_snow
name = "weather - LIGHT SNOW"
@@ -64,7 +73,7 @@
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_LEAD = 2000)
build_path = /obj/item/weapon/firework_star/weather/light_snow
- sort_string = "IFABE"
+ sort_string = "IFABF"
/datum/design/item/firework_star/weather_snow
name = "weather - MODERATE SNOW"
@@ -73,7 +82,7 @@
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_LEAD = 2000)
build_path = /obj/item/weapon/firework_star/weather/snow
- sort_string = "IFABF"
+ sort_string = "IFABG"
/datum/design/item/firework_star/weather_blizzard
name = "weather - HEAVY SNOW"
@@ -82,7 +91,7 @@
req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5)
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_LEAD = 3000)
build_path = /obj/item/weapon/firework_star/weather/blizzard
- sort_string = "IFABG"
+ sort_string = "IFABH"
/datum/design/item/firework_star/weather_hail
name = "weather - HAIL"
@@ -91,15 +100,6 @@
req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5, TECH_ILLEGAL = 2)
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_LEAD = 3000, MAT_PLASTEEL = 4000)
build_path = /obj/item/weapon/firework_star/weather/hail
- sort_string = "IFABH"
-
-/datum/design/item/firework_star/weather_fallout
- name = "weather - NUCLEAR"
- desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a heavy cloud of nuclear fallout. DANGEROUS."
- id = "fireworkfallout"
- req_tech = list(TECH_MATERIAL = 8, TECH_ENGINEERING = 6, TECH_ILLEGAL = 7)
- materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_URANIUM = 12000)
- build_path = /obj/item/weapon/firework_star/weather/fallout
sort_string = "IFABI"
/datum/design/item/firework_star/weather_confetti
@@ -110,3 +110,12 @@
materials = list(MAT_PLASTIC = 10000, MAT_GLASS = 10000)
build_path = /obj/item/weapon/firework_star/weather/confetti
sort_string = "IFABJ"
+
+/datum/design/item/firework_star/weather_fallout
+ name = "weather - NUCLEAR"
+ desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a heavy cloud of nuclear fallout. DANGEROUS."
+ id = "fireworkfallout"
+ req_tech = list(TECH_MATERIAL = 8, TECH_ENGINEERING = 6, TECH_ILLEGAL = 7)
+ materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_URANIUM = 12000)
+ build_path = /obj/item/weapon/firework_star/weather/fallout
+ sort_string = "IFABK"
diff --git a/icons/effects/weather.dmi b/icons/effects/weather.dmi
index 94c1fed992..2c10f216a6 100644
Binary files a/icons/effects/weather.dmi and b/icons/effects/weather.dmi differ