Pack Architecture

Updated 3 weeks ago

Pack Architecture

FrostVale ships as one Thunderstore package: FrostVale_ModPack_3.

Why one pack

Most FrostVale mods register networked items, pieces, recipes, or versioned behavior through Jotunn or ServerSync. If the client and server modsets differ, Jotunn can refuse the connection.

The old split between solo, client, and server packages drifted out of sync. Players were carrying mods that the server did not have, while the server had shared libraries and operational mods that the client package lacked. Version 3.1.0 reunified the pack so every install uses the same dependency list.

Safe divergence rule

In theory, only mods that add no networked content can safely diverge, such as:

  • purely cosmetic client-side mods
  • server-only operations mods

For FrostVale, the maintenance cost of tracking that boundary was not worth it. The current rule is simpler: everything is in one pack, and the server runs the exact same pack as players.

Shared identity

FrostVale is Balrond-first.

Balrond owns the primary progression and world identity:

  • nature
  • crafting
  • food
  • building
  • ships
  • monsters
  • gear
  • the survival loop

RtDOcean has a deliberately narrow role:

  • ocean danger
  • shoreline interest
  • rice loop support

Quality-of-life mods are part of the design rather than an afterthought. Azumatt, MSchmoecker, Smoothbrain, SearsCatalog, BetterUI, and CookieMilk mods all support the intended play experience.

Config model

ServerSync-capable mods push their settings from the host to clients on join. Multiplayer players automatically inherit the server's tuning.

For solo parity, the build process can bundle tuned host .cfg files into the pack, excluding any secret-bearing config. Only do this after the live server has been rebuilt on the current dependency list and tuned.

Local compatibility plugin

FrostValeCompat.dll is the local compatibility plugin.

Current responsibilities:

  • keep RtDOcean rice placement near shoreline water level
  • support Discord-visible player-name cleanup

The plugin is bundled under:

plugins/FrostValeCompat/FrostValeCompat.dll