Should be doable. I’ve been thinking about making an addon for extreme weather and a gamemode that uses SF.
I’ll repost the functions here;
This is what I’ve written so far. There are more functions but its mostly internal stuff.

--Shared
-- Time
StormFox.GetTime(pure) -- Returns 0-1440. Pure will make it ignore the 6 decimals synchronization attempt.
StormFox.GetDaylightAmount() -- Easy function that returns 1 doing the day and 0 doing the night. Between 0-1 at sunset/sunrise
StormFox.GetRealTime(Use_12clock) -- Returns the time in a 24clock or 12clock format
-- Data
StormFox.SetData(str,var[, timestamp]) -- Sets and syncs the data with clients(if server). Setting a timestamp (0-1339) will make the variable leap smoothly towards the given time (Without sending more data)
StormFox.GetData(str,default) -- Returns the data
-- Basic
StormFox.GetBeaufort(ms) -- Retuns the windspeed in a beaufort scale and description.
StormFox.CelsiusToFahrenheit(cel) -- Returns degrees in freedom unit.
StormFox.GetWeatherName() -- Tries to descripe the current weather.
-- Skybox (This is for cloud stuff later)
StormFox.Is3DSkyBox()
StormFox.SkyboxScale()
StormFox.MapOBBCenter()
StormFox.SkyboxOBBMaxs()
StormFox.SkyboxOBBMins()
StormFox.WorldToSkybox(Vector)
StormFox.SkyboxToWorld(Vector)
--Server
-- Time
StormFox.SetTime(24clock-str or 0-1440) -- StormFox might get confused for a few seconds tho.
-- Data
StormFox.SetGhostData(str,var[,timestamp]) -- Sets the data without sharing
-- Weather
StormFox.GetWeathers() -- Returns a list of valid 'weathers'.
StormFox.AddWeather(name,weatherdata) -- Weatherdata is a table of data that descripe it.
StormFox.SetWeather(name,procent) -- Procent goes from 0-1. Allows you to set the 'amount'.
-- Weather-logic
StormFox.AddWeatherCondition(name,{min-clock,max-clock},[min-procent,max-procent},{min-length,max-length},func canPick) -- Allows the weather-generator to pick the weather.
StormFox.GenerateNewDay(dont_update_clients) -- Creates a new day. Useful for skipping a day if rain.
--Client
--Env
StormFox.GetExspensive() -- Returns the weather-quality (0-7 or 0-20 for ultra).
StormFox.Env.IsOutside() -- Returns true if standing under open sky.
StormFox.Env.IsInRain() -- Returns true if standing in the rain/wind direction.
StormFox.Env.NearOutside() -- Returns true if standing near the outside.
StormFox.Env.FadeDistanceToWindow() -- Returns a number between 0-1. Where 1 is when you stand next to a window.
StormFox.Env.FadeDistanceToRoof() -- Returns a number between 0-1. Where 1 is when you stand against the roof.
--Basic
StormFox.GetWeatherSymbol() -- Returns the material for the current weather
P.S. Don’t use StormFox.SetTime regularly, SF can get confused and turn the sky into a disco-floor if you do it at a bad point.
The cbox for “Ultra High Quality” is not a cvar, but rather stored as a cookie. Its only there to allow users (And the automatic system) to get sf_exspensive (The quality convar) up to 20.
The cookie is stored as: cookie.GetNumber(“StormFox_ultraqt”,0)