Configuration Reference

Every setting in oxide-weather, what it does, its default and allowed range — plus how database-backed settings, the /weather settings editor and restart-only values work.

Every setting in oxide-weather, what it does, and the value it ships with. Start with How configuration is stored — the resource saves its settings in your database, so editing the config files does not always do what you expect.

How Configuration Is Stored

This is the most important thing to understand before you change anything.

  • Before the first start, oxide-weather reads its settings from the files in the shared/ folder.
  • On the first start, it copies every setting from those files into a database table called oxide_settings.
  • From then on, the database is the source of truth. Editing the files after the first start changes nothing, because the value already lives in the database and the database wins.

So there are two ways to work:

  1. First-time setup: edit the files in shared/ before you first start the resource. Your values are imported automatically.
  2. Changing a setting later: run /weather settings in game as an admin. The menu edits the database directly, live. No file editing.

Your region shapes are stored separately from settings, in the world snapshot. Once you have saved a region in /weather zones, the shapes in shared/regions_config.lua are no longer used. They are starting points for a fresh database, not a map you are locked into.

If a saved value ever turns out to be unusable, oxide-weather falls back to the value that shipped, writes a warning to the console naming the setting, and repairs the stored value.

The Settings Menu

/weather settings opens a searchable editor with two tabs, Basic and Advanced, grouped like this:

GroupCovers
WeatherAutomatic weather, the change interval, the transition pattern, allowed weather types, forecast length
ClockTimescale, freezing, clock mode and the night cycle
BroadcastThe weather app, widget, alerts and their timing, and the shared map mode
ExposureShelter detection and clothing insulation
RoadsSurface wetness and ice simulation
Real worldMirroring the weather of a real city through Open-Meteo
RenderingSnow visuals, wind, visibility effects, the transition time and whether blackouts affect vehicles
ClimateSeasons, temperature and snow accumulation
FrontsMoving fronts, automatic routes and lightning
RegionsRegional blending and climate profiles
RuntimeStartup defaults, synchronisation and saving

Region boundaries do not appear here. The menu shows a note pointing you at /weather zones, which is where you draw them.

Every field you have altered shows a Changed badge, and fields that only apply after a restart show a Restart required badge, so you can always see what you have changed and what is still waiting. Each field has a reset button that puts it back to the shipped value.

Which Settings Need a Restart

Most settings apply the moment you save them. Some rebuild the whole simulation and only take effect on a restart of the resource. The menu marks those clearly and tells you after you save.

Apply immediately:

SettingGroup
Config.DynamicWeatherWeather
Config.WeatherIntervalWeather
Config.TimeScaleClock
Config.FreezeTimeClock
Config.ClockClock
Config.BroadcastBroadcast
Config.MapModeBroadcast
Config.ExposureExposure
Config.RoadsRoads
Config.RealWorldReal world

Everything else needs restart oxide-weather.

Some of these changes can conflict with the saved world. Examples are removing a weather type that is current or in a forecast, deleting a climate that a region uses, or lowering a limit below what already exists. When that happens, the saved world is set aside and the resource starts fresh. See My regions and weather reset after a restart.

shared/config.lua

The core clock and weather settings.

Time

SettingTypeDefaultDescription
Config.DefaultTime.hournumber12The hour the world starts at when there is no saved world to restore. 0-23
Config.DefaultTime.minutenumber0The minute it starts at. 0-59
Config.TimeScalenumber30Game minutes per real minute during the day. At 30, a full day takes 48 real minutes. Allowed 0.01-1440
Config.FreezeTimebooleanfalseStart with the clock stopped
Config.Clock.modestring'game''game' runs its own clock. 'realtime' mirrors real-world time
Config.Clock.nightScalenumber30Game minutes per real minute during the night. Set it higher than TimeScale to make nights pass quicker. Allowed 0.01-1440
Config.Clock.nightStartnumber21The hour night begins. 0-23
Config.Clock.nightEndnumber6The hour night ends. 0-23. Must differ from nightStart
Config.Clock.utcOffsetnumber0Minutes to add to UTC in real-time mode. -300 is UTC-5. There is no automatic daylight saving. Allowed -720 to 840
shared/config.lua
Config.DefaultTime = {
    hour = 12,
    minute = 0
}

-- Game minutes per real minute (default: 30 = 1 real minute = 30 game minutes)
Config.TimeScale = 30

-- Real-time mirror uses UTC plus this fixed minute offset (no automatic DST).
Config.Clock = { mode = 'game', nightScale = 30, nightStart = 21, nightEnd = 6, utcOffset = 0 }

-- Start with time frozen
Config.FreezeTime = false

To make nights short, leave TimeScale at 30 and raise nightScale. At nightScale = 120, the nine-hour night passes in about 4.5 real minutes while the day still takes 30.

Weather

SettingTypeDefaultDescription
Config.DefaultWeatherstring'CLEAR'The weather the world starts with when there is no saved world to restore
Config.DynamicWeatherbooleantrueWhether weather changes on its own. Off means the weather stays where you set it
Config.WeatherIntervalnumber15Real minutes between weather changes, in every region. Allowed 0.017-10080
Config.WeatherTransitionTimenumber30Seconds a weather change takes to blend on screen. 0 snaps instantly. Allowed 0-600
Config.SyncIntervalnumber1000Milliseconds between server simulation ticks. Leave alone unless you know why you are changing it. Allowed 100-60000
Config.ClientSyncIntervalnumber1000Milliseconds between checks on each player's game. The clock runs at the server speed on its own between checks and is only rewritten if it has drifted. Never runs every frame. Allowed 100-60000
Config.ForecastSyncIntervalnumber10000Milliseconds between forecast countdown updates. Exports and the app calculate live values regardless. Allowed 1000-60000
shared/config.lua
Config.DefaultWeather = 'CLEAR'
Config.DynamicWeather = true
Config.WeatherInterval = 15
Config.WeatherTransitionTime = 30
Config.SyncInterval = 1000
Config.ClientSyncInterval = 1000
Config.ForecastSyncInterval = 10000

Blackout

SettingTypeDefaultDescription
Config.BlackoutbooleanfalseStart with the power out
Config.BlackoutAffectsVehiclesbooleantrueWhether vehicle lights go out during a blackout too
shared/config.lua
Config.Blackout = false
Config.BlackoutAffectsVehicles = true

Weather types and transitions

Config.WeatherTypes is the pool of weather the simulation may use. Remove anything you never want to see. CLEAR must stay in the list, because it is the fallback the resource falls back to if anything goes wrong.

SettingTypeDefaultDescription
Config.WeatherTypestable15 typesThe allowed weather pool. Must include CLEAR
Config.WeatherTransitionstablesee fileFor each weather, the list of what it can turn into next and how likely each is
Config.WinterTransitionstablesee fileExtra snow-bound routes, added on top of the base pattern
Config.DynamicSnowbooleanfalseFold the winter routes into the base pattern all year round

The 15 shipped types:

CLEAR, EXTRASUNNY, CLOUDS, OVERCAST, RAIN, CLEARING, THUNDER, SMOG, FOGGY, XMAS, SNOWLIGHT, BLIZZARD, SNOW, NEUTRAL, HALLOWEEN

A transition entry looks like this. The weight numbers are relative, so a weight of 30 next to a weight of 10 is three times as likely:

shared/config.lua
Config.WeatherTransitions = {
    OVERCAST = {
        { weather = 'OVERCAST', weight = 20 },   -- stay overcast
        { weather = 'CLOUDS', weight = 25 },
        { weather = 'RAIN', weight = 30 },       -- most likely
        { weather = 'THUNDER', weight = 15 },
        { weather = 'CLEARING', weight = 10 },
    },
    -- ...one entry per weather type
}

When seasons are on, Config.DynamicSnow is mostly redundant. A season that allows snow adds the winter routes automatically, and a season that does not strips every snow type out of the pool. Leave DynamicSnow off unless you have turned seasons off and still want snow to appear on its own.

Forecast

SettingTypeDefaultDescription
Config.ForecastLengthnumber4How many weather changes ahead are decided and published. Higher gives longer warnings and a longer radar horizon. Allowed 1-24
shared/config.lua
Config.ForecastLength = 4

Snow rendering

How snow looks. How much snow there is lives under Snow accumulation.

SettingTypeDefaultDescription
Config.Snow.GroundbooleantrueDraw snow-covered ground
Config.Snow.VehicleTrailsbooleantrueVehicles leave tracks in the snow
Config.Snow.FootprintsbooleantruePlayers leave footprints in the snow
Config.Snow.EffectScalenumber0.35How strong the falling-snow effect is, 0-1. The game's full strength is very heavy
Config.Snow.NightMultipliernumber0.4The effect is scaled by this at night, easing in through dawn and dusk. 0-1
Config.Snow.RenderWeatherstring or false'XMAS'Which snow weather's visuals to use for all snow. XMAS avoids the heavy ground mist. false uses each weather's own look. The simulation still reports the real weather
Config.Snow.XmasFallbackstring or falsefalseSubstitute for XMAS if it causes problems. 'SNOW', 'SNOWLIGHT' or 'BLIZZARD'. The server still reports XMAS
Config.Snow.ExcludeCayobooleantrueKeep snow off Cayo Perico
Config.Snow.CayoWeatherstring'CLEAR'What Cayo Perico shows instead of snow. May not itself be a snow type
Config.Snow.CayoBoundstablesee belowThe box treated as Cayo Perico, by position. Works whether or not the island is loaded
shared/config.lua
Config.Snow = {
    Ground = true,
    VehicleTrails = true,
    Footprints = true,
    EffectScale = 0.35,
    NightMultiplier = 0.4,
    RenderWeather = 'XMAS',
    XmasFallback = false,
    ExcludeCayo = true,
    CayoWeather = 'CLEAR',
    CayoBounds = { minX = 3000.0, maxX = 6500.0, minY = -7000.0, maxY = -3500.0 },
}

Wind

The fallback wind, used where no region supplies its own.

SettingTypeDefaultDescription
Config.Wind.Speednumber1.0Metres per second, 0-12
Config.Wind.Directionnumber0.0Bearing in degrees. 0 north, 90 east, 180 south, 270 west
shared/config.lua
Config.Wind = {
    Speed = 1.0,
    Direction = 0.0,
}

Persistence

SettingTypeDefaultDescription
Config.Persistence.EnabledbooleantrueSave the world to the database. Turning this off means every restart begins from the startup defaults, and the oxide_weather_state table is not needed
Config.Persistence.Keystring'global'The name this server's saved world is stored under. Give each server its own key if several share one database. Up to 64 characters
Config.Persistence.SaveIntervalnumber30Seconds between checkpoints. Changes are also saved immediately as they happen. Allowed 1-3600
Config.Persistence.RetryIntervalnumber60Seconds to wait before trying again after a database error. Allowed 5-3600
shared/config.lua
Config.Persistence = {
    Enabled = true,
    Key = 'global',
    SaveInterval = 30,
    RetryInterval = 60,
}

Trusted resources

Config.SetterResources is the list of other resources allowed to change the weather through the API. Anything not on this list can read but never write.

SettingTypeDefaultDescription
Config.SetterResourcestableone entryResource name to true. Only listed resources may change weather, time, seasons, fronts, blackouts or scene locks
shared/config.lua
Config.SetterResources = {
    ['oxide-developer'] = true,
}

It ships with a single entry for an Oxide admin tool. If you do not run that resource, the entry does nothing at all. Leave it or remove it as you prefer.

To let one of your own scripts change the weather, add its exact folder name:

shared/config.lua
Config.SetterResources = {
    ['oxide-developer'] = true,
    ['my-event-script'] = true,
}

After the first start, add it in /weather settings instead: search for Trusted automation resources, add the resource with Allow weather setters on, save, then run restart oxide-weather. This list only applies after a restart.

Being on the list is not a free pass. If the call carries a player, that player must also be a server admin. See API Reference → Permissions for writes.

Shared map mode

Config.MapMode chooses which map the zone editor and the radar draw on. o-link owns the artwork and calibration, so this only picks a mode.

SettingTypeDefaultDescription
Config.MapModestring'inherit'inherit, combined, separate, or disabled (mainland only). inherit follows the server-wide default set with olink:mapmode
shared/config.lua
Config.MapMode = 'inherit'

This value is saved in oxide_settings like every other setting, and applies live. Change it under Broadcast in /weather settings, or with oxide-weather:mapmode <value> from the server console (prefix it with / in game as an admin). What each mode looks like is covered by o-link's shared map documentation.

shared/regions_config.lua

Weather regions and climates.

Regional blending

SettingTypeDefaultDescription
Config.Regional.EnabledbooleantrueTurn regions on. Off means one weather for the whole map
Config.Regional.BlendWidthnumber200.0Metres either side of a boundary that blend, unless a region overrides it. Allowed 1-2000
Config.Regional.UpdateIntervalnumber100Milliseconds between blend updates on a player's game. Allowed 50-1000
Config.Regional.BlendSecondsnumber6.0Seconds a full weather blend takes when crossing a region or a front. Allowed 0.1-60
Config.Regional.WindSmoothingSecondsnumber2.0Seconds the wind takes to ease to a new value. Allowed 0.1-30
Config.Regional.MaxZonesnumber32The most regions you may have. Allowed 1-32
Config.Regional.MaxPointsnumber64The most corners one region may have. Allowed 3-64
shared/regions_config.lua
Config.Regional = {
    Enabled = true,
    BlendWidth = 200.0,
    UpdateInterval = 100,
    BlendSeconds = 6.0,
    WindSmoothingSeconds = 2.0,
    MaxZones = 32,
    MaxPoints = 64,
}

Climate profiles

A climate reweights how likely each weather is. A weight of 2.0 makes that weather twice as likely there. A weight of 0.25 makes it four times less likely. Anything not listed keeps its normal chance.

FieldTypeDescription
labelstringThe name shown to players and admins. Up to 60 characters
defaultWeatherstringThe weather a region using this climate starts with
weightstableWeather name to multiplier, 0-100
wind.speednumberMetres per second, 0-12
wind.directionnumberBearing in degrees, 0-360
WeatherTransitionstableOptional. A completely separate transition pattern for this climate

Five ship by default:

IdLabelDefault weatherWindCharacter
temperateTemperateCLEAR1.5 m/s at 225No adjustment
aridDry inlandEXTRASUNNY2.5 m/s at 270Much more sun, much less rain, thunder and fog
coastalCool coastCLOUDS3.0 m/s at 240More cloud, overcast, rain and fog
alpineAlpineOVERCAST4.0 m/s at 300More overcast, fog, rain and snow
marineOpen waterCLEAR5.0 m/s at 250More cloud and fog, almost no smog
shared/regions_config.lua
Config.Climates = {
    arid = {
        label = locale("climate.arid"), defaultWeather = 'EXTRASUNNY',
        weights = { CLEAR = 2.0, EXTRASUNNY = 3.0, RAIN = 0.25, THUNDER = 0.2, FOGGY = 0.3 },
        wind = { speed = 2.5, direction = 270.0 },
    },
    -- ...
}

A climate id must be lowercase letters, digits and hyphens, must start with a letter, can be up to 40 characters, and cannot be global. There must always be a temperate climate. If you delete it, one is recreated for you.

Starting regions

Config.Zones are the regions a fresh database starts with. Once you have saved anything in /weather zones, these are no longer read.

FieldTypeDefaultDescription
idstringrequiredUnique name. Lowercase letters, digits and hyphens, starting with a letter, up to 40 characters. Cannot be global
labelstringrequiredThe name shown to players. 1 to 60 characters
climatestringrequiredWhich climate profile this region uses
colorstring'#57c6c5'Colour on the map, as #rrggbb
prioritynumber0Higher wins where regions overlap. Equal priorities blend. Allowed -1000 to 1000
polygon.pointstablerequiredThe shape, as a list of { x, y } corners. 3 to 64 of them, no two the same, the shape may not cross itself, and it must enclose at least 25 square metres
enabledbooleantrueTurn a region off without deleting it
blendWidthnumberConfig.Regional.BlendWidthThis region's own soft edge, in metres. Allowed 1-2000
weatherIntervalnumberConfig.WeatherIntervalThis region's own change interval, in real minutes
dynamicWeatherbooleanConfig.DynamicWeatherWhether this region changes weather on its own
windtablethe climate's windThis region's own wind, overriding the climate's

Six regions ship: city, sandy, paleto and cayo (priority 0), chiliad and zancudo (priority 10).

IdLabelClimatePriority
cityLos Santostemperate0
sandySandy Shoresarid0
paletoPaleto Baycoastal0
cayoCayo Pericotemperate0
chiliadMount Chiliadalpine10
zancudoFort Zancudocoastal10
shared/regions_config.lua
Config.Zones = {
    { id = 'city', label = locale("region.city"), climate = 'temperate', color = '#57c6c5', priority = 0,
        polygon = { points = { { x = -3200, y = -3800 }, { x = 2000, y = -3800 }, { x = 3400, y = 1200 },
                               { x = -1400, y = 1200 }, { x = -2900, y = 900 } } } },
    -- ...
}

Anywhere no region covers, such as open ocean, uses the global weather. Draw a region in /weather zones if you want somewhere uncovered to have its own.

shared/climate_config.lua

Seasons, temperature and snow accumulation.

Season handling

SettingTypeDefaultDescription
Config.Climate.EnabledbooleantrueTurn seasons, temperature and snow accumulation on. Off means no temperature readings and no snow build-up
Config.Climate.Modestring'game''game' advances with the in-game calendar. 'calendar' follows the real-world month. 'manual' stays put
Config.Climate.DefaultSeasonstring'spring'Which season a fresh world starts in
Config.Climate.DaysPerSeasontable7 eachIn-game days per season in game mode. Allowed 1-365 each
Config.Climate.CalendarUTCbooleanfalseIn calendar mode, follow UTC instead of the server machine's own clock
Config.Climate.Hemispherestring'north''south' flips the calendar so December is summer
Config.Climate.DisplayUnitstring'F''C' or 'F'. Only changes what is shown. Other resources always receive Celsius
shared/climate_config.lua
Config.Climate = {
    Enabled = true,
    Mode = 'game',
    DefaultSeason = 'spring',
    DaysPerSeason = { spring = 7, summer = 7, autumn = 7, winter = 7 },
    CalendarUTC = false,
    Hemisphere = 'north',
    DisplayUnit = 'F',
    -- ...
}

Season profiles

FieldTypeDescription
temperaturenumberThe baseline temperature in Celsius for that season. Allowed -50 to 50
snowbooleanWhether snow weather may appear at all. When false, every snow type is removed from the pool and anything already snowing clears
weightstableWeather name to multiplier, 0-100, applied on top of the region's own climate weights
SeasonBaselineSnowWeights
spring16.0falseRain 1.5, clouds 1.3, extra sunny 0.8
summer28.0falseClear 1.8, extra sunny 2.5, rain 0.4, fog 0.5
autumn13.0falseOvercast 1.6, rain 1.6, fog 1.4, extra sunny 0.5
winter-2.0trueOvercast 1.6, snow 2.0, light snow 2.0, blizzard 1.2, extra sunny 0.3
shared/climate_config.lua
Seasons = {
    winter = { temperature = -2.0, snow = true,
        weights = { OVERCAST = 1.6, SNOW = 2.0, SNOWLIGHT = 2.0, BLIZZARD = 1.2, EXTRASUNNY = 0.3 } },
    -- ...
}

Temperature model

SettingTypeDefaultDescription
Temperature.DailyAmplitudenumber5.0Degrees Celsius above and below the baseline across the day. Allowed 0-30
Temperature.WarmestHournumber14.0The hour of the day that is warmest. Allowed 0-23.99
Temperature.LapsePerKmnumber6.5Degrees Celsius cooler per 1000 metres of altitude. Allowed 0-20
Temperature.ClimateOffsetstablesee belowDegrees added per climate. Allowed -30 to 30 each
Temperature.ZoneAltitudestablesee belowThe reference altitude of each region, in metres, used for region-wide readings. Point queries use the real altitude instead. Allowed -500 to 3000
Temperature.ZoneOffsetstableemptyDegrees added per region, on top of everything else. Allowed -30 to 30
Temperature.CayoTemperaturenumber26.0The tropical baseline used on Cayo Perico instead of the season baseline. Allowed 0-40
Temperature.WeatherOffsetstablesee belowDegrees added per weather type. Allowed -30 to 30

Shipped climate offsets: temperate 0, arid +5, coastal -2, alpine -6, marine -1.

Shipped region altitudes: city 30, sandy 45, paleto 20, chiliad 650, zancudo 20. A region without an entry, such as cayo, uses 0.

Shipped weather offsets:

WeatherOffsetWeatherOffset
CLEAR0.0FOGGY-3.0
EXTRASUNNY+2.0XMAS-4.0
CLOUDS-1.0SNOWLIGHT-3.0
OVERCAST-2.0SNOW-4.0
RAIN-3.0BLIZZARD-7.0
CLEARING-1.0NEUTRAL0.0
THUNDER-5.0HALLOWEEN-3.0
SMOG+1.0

The final result is clamped between -80 °C and 65 °C.

Snow accumulation

SettingTypeDefaultDescription
Snow.EnabledbooleantrueWhether snow builds up at all. Off means snow weather still falls but nothing settles
Snow.FullCoverMinutesnumber30.0Real minutes to reach full cover while snowing at full rate, at or below freezing. Allowed 0.1-1440
Snow.MeltMinutesAt5Cnumber25.0Real minutes for full cover to melt away at +5 °C. Warmer melts faster, cooler slower. Allowed 0.1-1440
Snow.RainMeltMultipliernumber1.5How much faster rain melts snow. Allowed 1-10
Snow.Ratestablesee belowHow fast each snow weather lays snow. Allowed 0-10 each
Snow.TrackThresholdnumber0.08Cover level at which vehicle tracks and footprints appear. 0-1
Snow.GroundThresholdnumber0.01Cover level at which the ground turns white. 0-1
Snow.InterpolationSecondsnumber5.0Seconds visible cover takes to ease to a new value. Allowed 0-60

Shipped rates: XMAS 1.0, SNOW 1.0, SNOWLIGHT 0.4, BLIZZARD 1.5.

shared/climate_config.lua
Snow = {
    Enabled = true,
    FullCoverMinutes = 30.0,
    MeltMinutesAt5C = 25.0,
    RainMeltMultiplier = 1.5,
    Rates = { XMAS = 1.0, SNOW = 1.0, SNOWLIGHT = 0.4, BLIZZARD = 1.5 },
    TrackThreshold = 0.08,
    GroundThreshold = 0.01,
    InterpolationSeconds = 5.0,
}

Holiday presets

FieldTypeDescription
seasonstringThe season forced while the preset is on
weatherstringThe weather forced everywhere
snowLevelnumberThe snow cover forced, 0-1
PresetSeasonWeatherSnow
christmaswinterXMAS1.0
halloweenautumnHALLOWEEN0.0
shared/climate_config.lua
Holidays = {
    christmas = { season = 'winter', weather = 'XMAS', snowLevel = 1.0 },
    halloween = { season = 'autumn', weather = 'HALLOWEEN', snowLevel = 0.0 },
}

These are the only two presets. You can change what each one does, but other ids are ignored. Turning one on snapshots the world first, so turning it off restores everything exactly.

shared/fronts_config.lua

Moving storms, lightning, blackouts and screen effects.

Fronts

SettingTypeDefaultDescription
Config.Fronts.EnabledbooleantrueTurn moving fronts, lightning and regional blackouts on
Config.Fronts.SyncIntervalnumber1000Milliseconds between front position updates sent to players. Allowed 250-10000
Config.Fronts.MaxFrontsnumber8The most fronts active at once. Allowed 1-16

New front defaults

Used when you spawn a front without specifying everything, and as the automatic front template.

SettingTypeDefaultDescription
Defaults.weatherstring'THUNDER'The weather the front carries
Defaults.headingnumber90.0Bearing it travels along. 0 north, 90 east, 180 south, 270 west
Defaults.speednumber12.0Metres per second. Allowed 0-100
Defaults.radiusnumber900.0Metres from the centre where its weather fully applies. Allowed 100-5000
Defaults.blendWidthnumber350.0Metres of soft edge. Cannot exceed the radius. Allowed 1-5000
Defaults.windLeadnumber500.0Metres ahead of the front where wind picks up. Allowed 0-5000
Defaults.windSpeednumber6.0Wind speed inside the front, in metres per second. Allowed 0-12
Defaults.durationnumber1200.0Lifetime in seconds. 1200 is 20 real minutes. Allowed 10-7200
Defaults.fadeSecondsnumber20.0Seconds to fade in and out. Cannot exceed half the lifetime. Allowed 0-60
Defaults.prioritynumber0Which front wins where two overlap. Allowed -1000 to 1000

Automatic fronts

SettingTypeDefaultDescription
Auto.EnabledbooleantrueSpawn fronts on their own
Auto.MinMinutesnumber30Shortest gap between automatic fronts, in real minutes. Allowed 1-1440
Auto.MaxMinutesnumber60Longest gap. Allowed 1-1440
Auto.Weathertablesee belowThe weighted pool of weather automatic fronts carry
Auto.Routestable3 routesWhere they start and which way they travel
shared/fronts_config.lua
Auto = {
    Enabled = true,
    MinMinutes = 30, MaxMinutes = 60,
    Weather = { { weather = 'RAIN', weight = 55 }, { weather = 'THUNDER', weight = 35 },
                { weather = 'FOGGY', weight = 10 } },
    Routes = {
        { coords = { x = -5000.0, y = -1000.0, z = 30.0 }, heading = 90.0 },
        { coords = { x = -5000.0, y = 2800.0, z = 45.0 }, heading = 90.0 },
        { coords = { x = -4000.0, y = 6300.0, z = 20.0 }, heading = 90.0 },
    },
},

All three shipped routes start well off the west coast and head due east, so storms sweep across the map and off the other side. If you leave Auto.Weather or Auto.Routes empty, automatic fronts turn themselves off and say so in the console.

Lightning

SettingTypeDefaultDescription
Lightning.EnabledbooleantrueWhether lightning strikes at all
Lightning.MinSecondsnumber35Shortest gap between strikes. Allowed 5-3600
Lightning.MaxSecondsnumber70Longest gap. Allowed 5-3600
Lightning.Radiusnumber2500.0Metres from a strike where players see the flash. Allowed 100-10000
Lightning.FlickerbooleantrueWhether strikes flicker nearby street lights
Lightning.FlickerMillisecondsnumber400How long the flicker lasts. Allowed 100-3000
Lightning.BlackoutChancenumber0.2Chance a strike knocks the region's power out. 0.2 is 20%. One roll per thunder front or exposed region. 0-1
Lightning.BlackoutSecondsnumber120How long that outage lasts. Allowed 1-86400
Lightning.Exposurenumber0.65How much of a region a front must cover before it can strike there. Allowed 0.01-1

Scheduled blackout limits

SettingTypeDefaultDescription
Blackouts.MaxSchedulesnumber64The most outages queued at once. Allowed 1-128
Blackouts.MaxSecondsnumber86400Longest a scheduled outage may last, in seconds. 86400 is 24 hours. Allowed 1-86400
Blackouts.MaxDelaySecondsnumber604800Furthest ahead an outage may be scheduled. 604800 is 7 days. Allowed 1-604800

Visibility effects

SettingTypeDefaultDescription
Config.Visibility.EnabledbooleantrueApply a subtle screen filter in heavy weather
Config.Visibility.FadeSecondsnumber8.0Seconds to fade to about 95% of the target strength. Allowed 0.1-30
Config.Visibility.MaxStrengthnumber0.2Hardest the effect may ever get, before night and snow reductions. 0-1
Config.Visibility.NightMultipliernumber0.5Scale at night, eased through dawn (06-08) and dusk (18-20). 0-1
Config.Visibility.SnowMultipliernumber0.25Scale as snow blends in, so lingering fog does not wash the screen out. 0-1
Config.Visibility.Profilestable3 profilesWeather to screen filter and strength
shared/fronts_config.lua
Config.Visibility = {
    Enabled = true,
    FadeSeconds = 8.0,
    MaxStrength = 0.2,
    NightMultiplier = 0.5,
    SnowMultiplier = 0.25,
    Profiles = {
        FOGGY = { modifier = 'prologue_ending_fog', strength = 0.15 },
        RAIN = { modifier = 'Yacht_Mission_ThunderRain', strength = 0.06 },
        THUNDER = { modifier = 'Yacht_Mission_ThunderRain', strength = 0.12 },
    },
}

oxide-weather only takes the screen filter slot when it is free. If any other resource has claimed it, this feature backs off, and it never clears or adjusts a filter it does not own. If a filter name does not exist in a player's game, it is noted once and skipped.

shared/broadcast_config.lua

The public weather app, widget and alerts.

Public weather service

SettingTypeDefaultDescription
Config.Broadcast.EnabledbooleantrueMaster switch for everything public: the app, the widget, alerts and the news report
Config.Broadcast.TabletbooleantrueRegister the weather app on the tablet
Config.Broadcast.WidgetbooleantrueRegister the home-screen widget
Config.Broadcast.AlertsbooleantrueIssue severe weather alerts
Config.Broadcast.NotificationSoundbooleantruePlay a sound with alert notifications
Config.Broadcast.NotificationScopestring'local''local' notifies only about a player's own region. 'all' notifies about every region
Config.Broadcast.MinimumSeveritynumber2Lowest level that notifies. 1 advisory and above, 2 watch and above, 3 warning only
Config.Broadcast.LookAheadSecondsnumber900How far ahead, in real seconds, an alert may be issued. 900 is 15 real minutes. Allowed 30-3600
shared/broadcast_config.lua
Config.Broadcast = {
    Enabled = true,
    Tablet = true,
    Widget = true,
    Alerts = true,
    NotificationSound = true,
    NotificationScope = 'local',
    MinimumSeverity = 2,
    LookAheadSeconds = 900,
}

The tablet app and widget need oxide-tablet. Without it, those two switches simply do nothing. Alerts, the radar data and the news report still work and are still readable by other resources.

Timing and limits

These control how often things refresh and how much history is kept. Changing them needs a restart.

SettingTypeDefaultDescription
BroadcastLimits.AlertIntervalnumber2000Milliseconds between alert recalculations. Allowed 1000-30000
BroadcastLimits.AppIntervalnumber5000Milliseconds between weather app refreshes. Allowed 2000-60000
BroadcastLimits.WidgetIntervalnumber15000Milliseconds between widget refreshes. Allowed 5000-120000
BroadcastLimits.HistorySecondsnumber3600How long ended alerts stay in the history. Allowed 60-86400
BroadcastLimits.MaxAlertsnumber64The most alerts active at once. When more qualify, the weakest are dropped. Allowed 8-128
BroadcastLimits.RadarSecondsnumber900How far ahead the radar may project. Allowed 30-3600
BroadcastLimits.FrontCoveragenumber0.35How much of a region a storm must cover before it triggers an alert there. Allowed 0.05-0.95

Warning rules

Which weather deserves an alert, at what level, and what the alert says.

FieldTypeDescription
severitynumber1 advisory, 2 watch, 3 warning
labelstringThe short name in the alert title. Up to 60 characters
advicestringThe line of advice below it. Up to 240 characters
WeatherSeverityReads as
THUNDER3Thunderstorm warning
BLIZZARD3Blizzard warning
SNOW2Snow watch
XMAS2Snow watch
RAIN1Rain advisory
FOGGY1Fog advisory
shared/broadcast_config.lua
Config.WeatherWarnings = {
    THUNDER = { severity = 3, label = locale("alert.thunder.label"),
        advice = locale("alert.thunder.advice") },
    -- ...
}

Anything not listed never raises an alert. Remove RAIN and FOGGY if you only want alerts for serious weather.

A rule's severity applies in full only when the weather is happening now. Something forecast for later is capped at a watch and promoted to a warning when it actually starts. That is what makes them read like real weather alerts rather than spoilers.

shared/gameplay_config.lua

Shelter detection and road surfaces.

Neither of these does anything on its own. They supply data other resources read. See Features → Shelter and exposure.

Exposure

SettingTypeDefaultDescription
Config.Exposure.Radiusnumber80Metres. The furthest a player can be from a point and still be asked to check it. Allowed 5-150
Config.Exposure.FreshSecondsnumber30How long a cover result stays valid before it is checked again. Allowed 5-120
Config.Exposure.LeaseSecondsnumber5How long the server waits for a check to come back. Allowed 1-10
Config.Exposure.MaxPointsnumber512The most points tracked at once. Allowed 16-2048
Config.Exposure.ProbesPerTicknumber8Checks started per second. Allowed 1-32
Config.Exposure.CoveredAreastableemptyShapes always treated as covered. Draw them in the settings menu
Config.Exposure.ClothingtableemptyInsulation per character model and torso item, 0-1
shared/gameplay_config.lua
Config.Exposure = {
    Radius = 80, FreshSeconds = 30, LeaseSeconds = 5, MaxPoints = 512, ProbesPerTick = 8,
    CoveredAreas = {},
    Clothing = {},
}

Covered areas are the right fix for anywhere the automatic check gets wrong: interiors, tunnels, multi-storey car parks. Add them under Exposure in /weather settings. Each one is a shape you draw in the world, with a height range, an optional name, and an optional routing bucket if it only applies in one instance. They always beat the automatic check.

Clothing insulation maps a character model and the torso item worn to a value from 0 (no protection) to 1 (fully insulated). It ships empty. The value is decided on the server and handed to whichever resource asked, so a cold-damage script can use it. A player's game never supplies it.

Road surfaces

SettingTypeDefaultDescription
Config.Roads.CellSizenumber500Metres per grid cell. Bigger is coarser and cheaper. Allowed 400-2000
Config.Roads.TickSecondsnumber5Seconds between grid updates. Allowed 2-30
Config.Roads.WetMinutesnumber8Real minutes of rain to fully saturate a road. Allowed 1-60
Config.Roads.DryMinutesnumber25Real minutes for a soaked road to dry out. Allowed 1-180
Config.Roads.FreezeMinutesnumber20Real minutes at or below 0 °C for full ice. Allowed 1-180
Config.Roads.MeltMinutesnumber15Real minutes above freezing for ice to clear. Allowed 1-180
Config.Roads.MinX / MaxXnumber-4500 / 7000The east-west bounds of the simulated area
Config.Roads.MinY / MaxYnumber-7500 / 8500The north-south bounds
shared/gameplay_config.lua
Config.Roads = { CellSize = 500, TickSeconds = 5, WetMinutes = 8, DryMinutes = 25,
    FreezeMinutes = 20, MeltMinutes = 15, MinX = -4500, MaxX = 7000, MinY = -7500, MaxY = 8500 }

The grid may not exceed 2048 cells in total. The shipped bounds and cell size produce well under that. If you widen the bounds, raise CellSize to compensate, or the menu refuses the change and the resource falls back to the shipped bounds. Changing CellSize rebuilds the grid, which resets current wetness and ice.

shared/realworld_config.lua

Mirror one real place through Open-Meteo.

Real-world weather

Off by default. When it is on, your server asks Open-Meteo for the current conditions and the next two days of hourly forecast at the location you chose, and every region follows it: the weather type, the temperature, the wind and the forecast queue. Everything here applies live from the settings menu or with /weather realworld.

SettingTypeDefaultDescription
Config.RealWorld.EnabledbooleanfalseMirror a real place. While on, the weather, forecast and front controls are read-only
Config.RealWorld.Locationstring'Los Angeles, US'A city name, optionally followed by a comma and a country (Paris, FR), or coordinates as latitude, longitude (34.05, -118.24). 2 to 120 characters. City names are looked up once and remembered
Config.RealWorld.PollMinutesnumber15Real minutes between updates. Allowed 5-120. The default makes about 100 requests a day
Config.RealWorld.SyncClockbooleanfalseAlso mirror the location's local time. Switches the clock to the real-time mirror and keeps its UTC offset in step, including daylight saving
shared/realworld_config.lua
Config.RealWorld = {
    Enabled = false,
    Location = 'Los Angeles, US',
    PollMinutes = 15,
    SyncClock = false,
}

Open-Meteo reports a standard weather code, which maps to the closest weather type: clear and cloudy skies to EXTRASUNNY, CLEAR, CLOUDS and OVERCAST, drizzle and light rain to CLEARING, rain to RAIN, thunderstorms to THUNDER, fog to FOGGY, and snow to SNOWLIGHT, SNOW or BLIZZARD by intensity. If you removed a type from Config.WeatherTypes, the closest remaining type is used instead.

What is sent, and to whom

Your own server contacts api.open-meteo.com, or customer-api.open-meteo.com when you have set a commercial key, plus geocoding-api.open-meteo.com once for each new city name. The only things it sends are the location you configured and, on the commercial service, your key. No player data leaves the server.

The free service is for non-commercial use and allows 10,000 requests a day; one server at the default interval uses about 100. If your server needs Open-Meteo's commercial service, put your key in server.cfg and it is used automatically:

server.cfg
set openmeteo_api_key "your-key"

The key is read from that convar only. It is never read from a config file, never stored in the database and never sent to players.

Attribution

Open-Meteo data is licensed CC BY 4.0. The tablet weather app shows "Weather data by Open-Meteo.com" whenever the mirror is on, which is what the licence asks for. Keep that line if you customise the app.

Weather changes on the real hour, so with the default 30x game clock the sky changes about once every 30 game hours. If you want the in-game day to move with the real one, turn on SyncClock or use /weather clock realtime. Snow still builds up and melts from the real temperature, and the seasons keep whatever mode you chose.

Starting Over

If you want to wipe your settings and re-import from the files in shared/:

Stop the resource: stop oxide-weather in the server console.
In your database manager, delete every row in oxide_settings where resource is oxide-weather.
Start it again: start oxide-weather. Everything is re-imported from the files.

To also reset the world itself (time, weather, season, snow, storms and your drawn regions), delete the row in oxide_weather_state whose state_key matches your simulation key, global unless you changed it. Do this while the resource is stopped.

Deleting the oxide_weather_state row also deletes any regions you drew in /weather zones.

Next Steps