Weather anomaly (#94509)

## About The Pull Request

A weather anomaly can spawn on the station, causing a sandstorm,
snowstorm, or rainstorm to affect the room (and nearby rooms). These
weathers range from "harmless" to "mildly damaging".

They last for around five minutes.
The weather doesn't start immediately, giving people time to neutralize
it before it causes damage.
Neutralizing the anomaly stops the weather. 
If they detonate, it just throw objects away from itself.

<img width="407" height="225" alt="image"
src="https://github.com/user-attachments/assets/2de1b797-2b17-442c-9023-11085b4849cf"
/>

<img width="991" height="674" alt="image"
src="https://github.com/user-attachments/assets/afe5a21d-9cf8-4e9d-95ec-adef6fd12a93"
/>

A rarer version of the anomaly can also occur, which brings a lightning
storm, which may damage the station itself.

Also, reactive weather armor. When you are hit, it summons a lightning
strike below nearby assailants.

## Why It's Good For The Game

With the added rain mechanics I wanted to use them, but it's kinda hard
to shoe them into the station because, "why is it raining on a space
station that makes no sense"

However, anomalies are weird, so this fits perfectly

## Changelog

🆑 Melbert
add: Weather anomalies, in four variants: Rain, snow, sand, and the rare
lightning storm.
add: Reactive Weather Armor
/🆑
This commit is contained in:
MrMelbert
2025-12-20 12:33:10 -05:00
committed by GitHub
parent 116c6951fd
commit a9b0ecb7d0
21 changed files with 437 additions and 67 deletions
+7 -7
View File
@@ -28,9 +28,9 @@ ADMIN_VERB(run_weather, R_ADMIN|R_FUN, "Run Weather", "Triggers specific weather
return
var/list/area_choices = list()
if(!length(area_choices))
for(var/area/area_type as anything in typesof(/area))
area_choices[initial(area_type.type)] = area_type
for(var/area/area_instance as anything in GLOB.areas)
area_choices[area_instance.type] ||= list()
area_choices[area_instance.type] |= area_instance
var/area/area_choice = tgui_input_list(user, "Select an area for weather to target", "Target Area", area_choices)
if(!area_choice)
@@ -72,10 +72,10 @@ ADMIN_VERB(run_weather, R_ADMIN|R_FUN, "Run Weather", "Triggers specific weather
thunder_value = GLOB.thunder_chance_options[thunder_choice]
var/list/weather_data = list(
area = area_choice,
weather_flags = weather_bitflags,
thunder_chance = thunder_value,
reagent = reagent_choice,
WEATHER_FORCED_AREAS = area_choice,
WEATHER_FORCED_FLAGS = weather_bitflags,
WEATHER_FORCED_THUNDER = thunder_value,
WEATHER_FORCED_REAGENT = reagent_choice,
)
SSweather.run_weather(weather_choice, z_level, weather_data)