Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
DvergrAstrolabe
Strictly server-side Valheim 1.0 mod - no client install ever. Set how many real minutes daylight and night each last; the server paces the world clock and every client follows.
| Date uploaded | 3 weeks ago |
| Version | 0.1.1 |
| Download link | Wubarrk-DvergrAstrolabe-0.1.1.zip |
| Downloads | 34 |
| Dependency string | Wubarrk-DvergrAstrolabe-0.1.1 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350README
๐ญ Dvergr Astrolabe
Daylight and night, in real minutes, set once on the server. No client install, ever.
๐ฐ Wubarrk lives on Hexium - don't miss out
Dvergr Astrolabe is published here and on valheim.hexium.gg. The rest of the
Wubarrk and RavenIron Studios catalogue is Hexium only: that is where the current builds live, every one of
them tagged Valheim 1.0. The old copies under the Wubarrk name here on Thunderstore are pre-1.0 lines, most
of them deprecated, and they are not kept current. Hexium packages install with one click from the
Gale mod manager, or unzip into BepInEx/plugins like any other mod.
Here is what you are missing.
Server-side only, nothing on clients - the same family as this mod, so Steam, Xbox, PlayFab and crossplay parties all get it with nothing installed:
- Wonderland - automation, world governance, status effects and Discord notifications for a server whose players run plain vanilla, with vanilla-client enforcement built in.
- Get Off My Lawn - active wards keep wild creatures and raids out of your base, and doors inside wards close themselves.
- TortalPortal LITE - a portal network with progression-gated gates, one-way corpse-run recovery, fast-transit terminals, per-portal ore upgrades and portal caps.
Client and server:
- Njord - a mythic overhaul of ship handling, steering and seafaring, with a Harbourmaster who gives every new Viking their first hull and refits the rest.
- Shadows of Midgard - a stealth and perception engine: creatures see, hear, remember and doubt, with vision cones, line of sight, noise, light, weather and camouflage tracked for each player separately.
- Wings of the Valkyrie - four tiers of upgradable runic dragon wings with real armour and resistances, and a Valkyrie Flight skill that grows with every wingbeat.
- Fatty - a food overhaul: no stat decay, a bigger food bar with a drink slot, stack the same food for extra stats, and diet-based synergy buffs. Works with any food mod.
- StackIT - server-synced stack sizes, item weights and carry capacity, plus hold Shift to harvest a whole berry patch.
- TortalPortal - total portal control: pick destinations from a map UI, with destination photos, PIN locks, tame teleportation, travel filters and a procedural runic gateway.
- AwayFromHome - build a Keeper Stone and that place keeps living while you are elsewhere: animals fed, smelters reloaded, production that no longer stops on an empty server.
- Let It Grow - a full farming overhaul: configurable growth speed and conditions, hover grow-timers, and Scarecrow and Farm Silo automation that tends farms nobody is near.
- RuneboundRest - server-authoritative Rested and Comfort: config-driven comfort, resting conditions and duration, plus a Well Rested buff for a full night in your own claimed bed.
- Blighted World Heart - a massive raid boss that summons endless waves and unique sub-bosses, dropping dozens of custom weapons and armours with Poison, Spirit and Defense affixes.
- Dvergr Allies - tame, breed and lead an army of Dvergr: four classes, breeding genetics, star-level weapon scaling and native combat AI.
- Mists of Avalor - a procedural black-stone crypt-labyrinth in a forsaken sky-realm: true-damage traps, restless dead, keys torn from mutant bosses, and the Avalorian Greatsword off the Warden. Bring a torch.
- VikingOS (beta) - rebuild the interface: move, resize and rotate any HUD, inventory or chat element in a live edit mode, plus chat that keeps your capitals and drag-and-drop item sharing.
RavenIron Studios:
- FireFront - fire that actually spreads: structure to structure, into the trees, across open ground. Wind-driven, rain-damped, stopped by water, with burn scars, tree regrowth and fires that remember who lit them.
- Ragnarok's Wrath - the world reacts and remembers: seasons, devastating storms, spreading plague with visible miasma, fire scars, tiring soil and earned titles.
- Undertow - the sea gets its own motion: currents in a learnable shape, tides, storm surge and flotsam, carrying whatever floats on them. No HUD.
- Cairn - stack stones on a headland and they burn: a trail of cairns you build yourself, lit and remembered, for worlds with no map.
- Valkyries Cargo - a Valkyrie air-drops Ingvar the Far-Travelled, a dwarven merchant, beside your hearth when rested; buy and sell at supply-and-demand prices before he vanishes.
- The Raven's Call (server-only) - admin and analytics: kills, deaths, bosses, gear and playtime narrated to Discord and Chronicle logs, with a web dashboard. Pairs with WhereTheCrowFlies, the client companion that witnesses and reports the events.
- RavenEye - for server owners: restores the vanilla map to listed admins only on no-map worlds, with every player pinned. Does nothing for anyone else.
Two are published in both places: Valheim 1.0 Compatibility, the preloader that carries pre-1.0 mods across, and The Eye, the API dump tool for mod developers. Questions, bug reports, the clan: Discord. ๐
A vanilla Valheim day is 30 real minutes: 21 of daylight and 9 of night. Dvergr Astrolabe lets the server decide those two numbers - a lazy hour of daylight with a 5-minute night, or a 10-minute day and a 20-minute night for a horror server - and every player sees it with nothing installed on their side. Steam, Xbox, PlayFab and crossplay parties alike, because the server is the only machine that owns the world clock.
โ๏ธ Settings
BepInEx/config/wubarrk.dvergrastrolabe.cfg on the server. Edits are picked up within 5 seconds, no restart.
The defaults are vanilla, so installing the mod changes nothing until you set them.
| Setting | Default | What it does |
|---|---|---|
[2 - Day And Night] DayMinutes |
21 |
Real minutes from sunrise to sunset: the whole stretch in which the sun is above the horizon and the game counts as day (the Day N banner fires at its start). 0.5 to 180. |
[2 - Day And Night] NightMinutes |
9 |
Real minutes from sunset to sunrise: dusk, the midnight day-counter tick and dawn. 0.5 to 180. |
[3 - Client Sync] ClockPushInterval |
0.5 |
Seconds between extra pushes of the clock to clients (vanilla pushes every 2 s). Keeps the sun moving smoothly when the rate is far from 1x. 2 adds no extra traffic. |
[1 - General] Enabled |
true |
Master switch. Off = vanilla 21 + 9. |
[1 - General] VerboseLogging |
false |
Log every sunrise and sunset with the day number and the rate that just took effect. |
A few starting points:
| Feel | DayMinutes |
NightMinutes |
Full day |
|---|---|---|---|
| Vanilla | 21 | 9 | 30 min |
| Long lazy days | 45 | 10 | 55 min |
| Builders' server | 60 | 5 | 65 min |
| Horror server | 10 | 20 | 30 min |
| Quick test | 1 | 1 | 2 min |
๐ญ How it works
Every machine in a Valheim game turns one number into the time of day: the world clock, in game-seconds. Only the server advances it, and every 2 seconds it pushes the value to each client, which simply adopts it. Time of day is that clock modulo the day length, 1800 game-seconds: the stretch from 0.15 to 0.85 of each day (1260 seconds) is daylight, the remaining 540 seconds are night. That is where vanilla's 21 + 9 comes from.
The server cannot change the 1800 baked into an unmodded client. It can change how fast the clock runs.
Astrolabe scales the server's clock tick to 1260 / (DayMinutes x 60) game-seconds per real second while the
sun is up and 540 / (NightMinutes x 60) while it is down, switching exactly at sunrise and sunset (a tick
that straddles the boundary is split so each side runs at its own rate). A day is still 1800 game-seconds,
the clock still only counts up, the world save stores it unchanged. It just takes as long as you said.
Between pushes an unmodded client runs its own copy of the clock at 1x, so each push applies a small correction, which the game already smooths over about 2 seconds. Astrolabe pushes every 0.5 s by default so that correction stays under a degree of sun movement at any sane setting, at the cost of one tiny packet per client per half second.
๐ What changes, and what doesn't
Untouched. The day counter (it ticks at midnight, the Day N banner still appears at sunrise). Sleeping: still allowed from noon, still skips to the next sunrise in 12 real seconds. World saves. The empty-server freeze: with nobody online the clock stops exactly as in vanilla (if you run Let It Grow's time flows while empty, its tick is the scaled one, so the two agree).
Stretch with your day (they run on the game clock). Crops and trees, smelters, kilns and furnaces, cooking stations, fermenters, beehives and sap collectors, fires' fuel, item despawn, berry and pickable respawn, creature spawners, taming hunger, pregnancy and growing up, creature and tame health regeneration, trap and ballista rearm, snow damage. With a 45-minute day these still take exactly as many days as before, which now means more real minutes. With a 1-minute night, monsters regenerate health nine times faster than you are used to while it is dark.
Do not stretch (they run on the wall clock). Raids and random events, Rested, food, comfort. A longer day therefore gets more raids per game day, a shorter one fewer.
Fine print. At very long stretches (a rate under 0.2x: days over 105 minutes or nights over 45) a
client-owned fire, beehive or sap collector can occasionally drop a fraction of a second of progress when a
clock correction lands mid-tick; lower ClockPushInterval to 0.25 to shrink it further. The vanilla
10-game-second lockout between two sleep attempts scales with the night rate too.
๐ฆ Install
Server side only. Drop DvergrAstrolabe.dll into BepInEx/plugins/ on the dedicated server (for a
player-hosted world, on the hosting player's game). Through r2modman, Thunderstore Mod Manager or Gale:
install it in the profile of the machine that hosts the world, and nobody else's. Start it once to generate the cfg, set DayMinutes and
NightMinutes, done. Nothing goes on clients; if the DLL ends up on a client by accident it does nothing.
Requires the BepInExPack for Valheim (5.4.2350). Built against the Valheim 1.0.15 dedicated server.
๐งช Checking it works
BepInEx/LogOutput.log on the server, at startup and after every config edit:
[Message:DvergrAstrolabe] schedule (startup): daylight 45 real min at 0.467x, night 10 real min at 0.9x; one full day = 55 real min (vanilla 30); clock pushed to clients every 0.5 s (plus vanilla's 2 s).
[Message:DvergrAstrolabe] clock patch live: EnvMan found, day 12, raw day-fraction 0.412 (daylight), 1 player(s) connected.
With VerboseLogging on, every transition as well:
[Info :DvergrAstrolabe] sunset, day 12: clock at 0.9x for the next 10 real min.
A Valheim mod by Wubarrk.
CHANGELOG
Changelog
0.4.0
A new line of the mod: it now runs on the server and on every client, and owns the whole day/night cycle instead of pacing the server's clock around a vanilla one. Settings carry over from 0.3 (see Upgrading from 0.3 in the README); clients that do not have the mod can no longer join.
Added
- Three lengths in real minutes.
[2 - Cycle]CycleMinutes(the full day, vanilla 30),DaytimeMinutes(sunrise to sunset, vanilla 21) andNightMinutes(sunset to sunrise, vanilla 9), withLengthRuledeciding which one gives way when they do not add up (FitToCyclekeeps the cycle exact and scales the other two, the default;DaytimePlusNight,CycleMinusNight,CycleMinusDaytime). - Production as its own dial.
[3 - Production]ProductionScale(1 = vanilla, 2 = twice as fast, 0.01 to 100) runs everything on the game clock - crops, smelters, fermenters, beehives, fuel, respawns, spawners, taming, regeneration, weather - at that multiple, without touching the sun.ProductionBasissays what 1 means:RealTime(vanilla per real minute whatever the cycle length) orGameDays(vanilla per game day, the 0.3 economy). - The full mathematics, in the log and in the README. The solver derives the game-day length
L, the exact clock rateRand the sunrise/sunset knees from the settings in six steps, and prints each step with your numbers in at startup, after every settings change, and on every client as the values arrive. The README has the formulas, their consequences and worked examples; theastrolabeconsole command prints the working plus the live clock of the machine you are on. - Server-synced, version-locked. ServerSync (compiled in) pushes the settings to every client and
[1 - General]LockConfiguration(default on) makes the server's values the only ones that count. Both sides must run the same version; a vanilla client is refused at the door. [4 - Clock]WaveSpeed(Vanilla, default: the water runs on real time whatever the clock rate, so waves look and hit as in vanilla;FollowClockas an unmodded game) andSleepSkipPushInterval(how many steps clients see the 12-second sleep skip in).[5 - Compatibility]PatchSelfCheck(samples the game's own sunrise/sunset function after applying and reports another mod's knees if they won; re-asserts the day length every 5 s with a warning naming the other mod) andSelfCheckSteps.- Every cfg comment explains its setting in plain words and gives worked examples ("60 = each day takes one real hour"), with the formula underneath for those who want it.
- Automatic migration of a 0.3 (or earlier) cfg:
DayMinutes+NightMinutesbecome the three lengths withProductionBasis = GameDays, keeping the 1800-second day, the per-day economy and the day counter of the existing world.
Changed
- The day/night cycle is set on every machine (
EnvMan.m_dayLengthSec,RescaleDayFraction,GetMorningStartSec,SkipToMorning) and the clock runs at one flat rateReverywhere (ZNet.UpdateNetTimeon the server and on every client). Daylight and night no longer run at two different rates: the band moves instead. A sunrise/sunset patch from another mod on the same method loses to Astrolabe's (it runs last). - Changing the day length on a running world shifts the day counter and the time of day once (the clock itself is never re-based, so every timestamp in the world stays valid); the log prints the before and after.
- A sleep taken in the pre-dawn with a late sunrise no longer risks skipping an extra day, and with an early one no
longer risks rewinding the clock:
SkipToMorninguses the configured sunrise instead of vanilla's 0.15.
Removed
[4 - Boats](PauseFor,PauseRadius,MooredRadius,UnderWaySpeed,CheckInterval),HoldSchedule,CatchUpLimit,ClockPushInterval,BandDetection,BandProbeSteps. With every machine on the same clock a push carries nothing, so there is nothing to pause for, nothing to catch up, and no other mod's band to follow. The 0.3 limits go with them: no schedule slip while someone sails, no 0.2x floor, no fast-night production.
0.3.0
Fixed
- Sunrise and sunset were hardcoded at vanilla's raw day-fractions 0.15 and 0.85. With a mod that moves them
(Gamma of Night Lights' day/night cycle sets the night as a percentage of the day) Astrolabe paced the wrong
stretch: at Gamma's
3600 / 75the real daylight band is 900 game-seconds, but Astrolabe fitted 1260 intoDayMinutes, so every rate was off by 1260/900 and the segment it treated as the long one was the short one. Found on ProximaMaxi.
Added
- The daylight band is read from the running game. Astrolabe samples
EnvMan.RescaleDayFraction(the patched version, whoever patched it) to find where the game's day begins and ends, and paces that band; the day length was already read live. Re-read every 5 seconds, at every sunrise and sunset and after a config edit, so a synced change on the other mod is picked up within seconds. Gamma sets the size and the split of the day, Astrolabe sets how long it takes in real minutes, and when both segments land on the same multiplier there is no fast-day, slow-night contrast at all: Gamma3600 / 75+ Astrolabe15 / 45runs a flat 1x with a 45-minute night,7200 / 75+15 / 45a flat 2x. See Pairing with Gamma of Night Lights in the README. Detection that fails falls back to the vanilla knees and logs an error; an unmodded game detects exactly 0.15 / 0.85 and behaves as 0.2.1 did. [5 - Compatibility]:BandDetection=Auto(default) orVanilla(force the vanilla knees, the escape hatch), andBandProbeSteps(1000) for how finely the band is sampled.- Logging. The schedule line reports the daylight band (
daylight band 900 of 3600 game-s (25%, sunrise and sunset moved by another mod)), aday cycleline is printed when the world loads and whenever the band or the day length changes, andVerboseLoggingadds the two detected fractions. A warning names the setting and the number whenever a schedule implies a nominal rate at or under 0.2x (progress drift on client-owned fires, beehives and sap collectors) or fast enough that one clock push moves the sun more than a degree (about 11x at the default 0.5 s push interval). When another mod has moved the band, one note reminds you that it must be on the clients too.
0.2.1
Fixed
- Rebuilt against Valheim 1.0.16 and re-verified (static reference check on client and dedicated server, headless 1.0.16 dedicated-server boot).
0.2.0
Fixed
- Boats took water-impact damage under sail while the schedule was active (60-150 hull damage a minute on
a Karve at a 40-minute day, with constant bobbing). Every clock push moved an unmodded client's physics
water surface in a single step, and vanilla's
Ship.UpdateWaterForcecounts a jump like that as a slam: 10 blunt per hit, up to thirty hits a minute, whenever someone is aboard. The sun and the rendered water are smoothed; the surface boats float on is not, whatever the push interval. Found on the live server through Wonderland's boat-upkeep log.
Added
[4 - Boats]. The whole server's clock runs at vanilla speed while any player is withinPauseRadius(64 m) of a boat under way orMooredRadius(24 m) of one at rest, where pushes change nothing; the switch is seamless.PauseFor=Ships(default),Water(also anyone over water) orOff;UnderWaySpeedandCheckIntervaltune the detection. A boat docked beside a base only pauses it for someone on or beside the deck. The README's Boats section explains exactly how time behaves around boats.HoldSchedule(default on) andCatchUpLimit(default 4) in[2 - Day And Night]. Every sunrise and sunset is now held to its scheduled time: after a pause near boats, a server hitch or a mid-day config edit, the rest of the segment runs faster or slower (within the limit) to land the boundary on time. A 40-minute day absorbs about 18 minutes of boating, a 5-minute night about 4. Off = fixed rates, as 0.1.0 behaved.- Self-verifying sunrise and sunset lines. With
VerboseLoggingon, each line now reports how long the segment that just ended really ran, what was scheduled, and how much of it was spent at vanilla speed near boats; every pause and resume is logged with who and which boat. - Boat guard self-test at startup ("boat guard ready: sector query OK ..."). If the lookup ever throws, the mod logs an error and keeps the clock at vanilla speed until restart rather than risk hulls.
0.1.0
Added
- Day and night length in real minutes.
DayMinutes(sunrise to sunset, vanilla 21) andNightMinutes(sunset to sunrise, vanilla 9) in[2 - Day And Night]. The server paces its authoritative world clock (ZNet.UpdateNetTime) at a different rate inside and outside the daylight band, so every connected client sees the new lengths with nothing installed. The clock itself, the day counter, sleeping and the world save are untouched: a day is still 1800 game-seconds, it just takes as long as you say in wall time. - Smoother sun at rates far from 1x.
ClockPushIntervalin[3 - Client Sync](default0.5s) pushes the clock to clients more often than vanilla's 2 s, shrinking the correction each push applies. Set2to add no extra traffic. - Live config reload. Edit the cfg on a running server; the new schedule is picked up within 5 seconds and logged.