How Map (waypoints, world map and climate) was built

Raw game files read

Processing

The map page is three parts on one plane. Waypoints (waypoints.js, waypointsPage.js, waypointMap.js) come only from what you give it: waypoints you add, a JSON export, or the translocator-locator mod's Nf3tData.json (the route search is Dijkstra over straight-line distances, with translocator links costing nothing). Nothing is stored on the server; the list lives in your browser's local storage. The explored world map (worldMap.js, worldMapPage.js) reads the game client's Maps/<savegame id>.db with sql.js (SQLite compiled to WebAssembly, loaded only when you choose a file). Its mappiece table has one row per 32×32-pixel tile, positioned by (tileZ << 27) | tileX, whose blob is a protobuf message with one ABGR varint per pixel; the tiles are drawn at one pixel per block (sampled and averaged when the explored area is larger than 4096 blocks), and laid behind the waypoints in absolute world coordinates. It is a port of the vintage-story-launcher's map preview and has been tested against tiles built by hand to that layout, not against a real save file. The climate part is described below.

This tool is different from the other pages: the climate numbers are not read from a game data file, because the game computes them in C# at world-generation time. apps/vs-wiki/site/assets/climate.js is a port of that code, written against the game's own source (vsessentialsmod Systems/WorldGen/Standard/ChunkGen/0.GenMaps/ and vsapi Common/Climate.cs, read from local reference clones that are not part of the build). The only game data it uses is the set of wild-patch, tree and fruit-tree climate bands the rest of the wiki already extracted, to say what grows at the computed climate.

What is ported

What is not ported

The results are approximate.

How it was checked

No running game was available, so there is no comparison against real worlds. Instead test/climate.test.ts checks the port against an independent re-implementation of the same C# arithmetic (64-bit wraparound, signed shifts, float rounding) on several seeds, and checks properties such as the spawn temperature landing in the chosen starting-climate range. This catches arithmetic mistakes, not a misreading of the C#. Comparing a few readouts from a real save would be the best further validation.

Pipeline code