Files
UnrealPrototyping/Docs/Worklog.md
T
Rainer LeitandClaude Fable 5.1 1945ef033b L_World: a 200 km2 world-partitioned landscape from a seeded heightmap
Off the ladder at the user's request. Scripts/Authoring/generate_heightmap.py (numpy, installed locally by
bootstrap-pylib.sh) writes a 16-bit height PNG and three 8-bit weight PNGs to Content/World/Heightmaps;
create_world.py rebuilds /Game/Maps/L_World from them through ULandscapeAuthoringLibrary in the new SaltyEditor
module, which wraps ALandscape::Import because the engine exposes no landscape creation to Python. Uses
Elite_RockyMeadows' landscape material and layer infos (the pack itself is still uncommitted). 4033 vertices
a side at 350 cm a quad; swap the PNGs and rerun to change the terrain.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 20:51:37 +03:00

3.3 KiB

Worklog

One line per item, newest at the top of each section. What was done, what worked, what did not. Keep it terse; the reasoning lives in the specs, this is the memory.

Done

  • 2026-09-16 — Off the ladder, at the user's request: L_World, a world-partitioned ~200 km² landscape from a seeded heightmap. Scripts/Authoring/generate_heightmap.py (numpy, in Scripts/Authoring/.pylib via bootstrap-pylib.sh) writes 16-bit height and 8-bit weight PNGs to Content/World/Heightmaps/; create_world.py rebuilds the level from them through ULandscapeAuthoringLibrary in the new SaltyEditor module, because the engine exposes no landscape creation to Python. Elite_RockyMeadows' landscape material and three layer infos. Swap the terrain by replacing the PNGs and rerunning. Nothing in gameplay references it.
  • 2026-09-16 — Step 2: ITelemetrySink with null, log and JSON Lines sinks; FTelemetryEvent, the envelope and Telemetry::ToJsonLine; TelemetryEvents with the four session names; UTelemetrySubsystem; ASaltyGameMode minting the session id into ASaltyGameState; bs.TelemetryTest; the git hash in the build string (D-42); four Core tests. Proved standalone, and with a headless -server plus -game client sharing one session id.
  • 2026-09-16 — The editor's MCP: the engine's experimental plugin only listens when bAutoStartServer is set, so .mcp.json refused until DefaultEditorPerProjectUserSettings.ini set it (D-43). Enabled the Editor, AutomationTest, GameplayTags, ConfigSettings and LiveCoding toolsets; before that the only toolset was skills. Reconnect with /mcp after the editor is up. Live Coding must be closed before a shell build.
  • 2026-09-16 — Step 1: Salty.uproject (UE 5.8) at the root from the Third Person template, renamed from ProjectSomething with class redirects; SaltyCore and Salty modules; SaltyServer.Target.cs (unbuildable on the launcher, OD-04); USaltyAssetManager calling InitGlobalData; Config/Tags/ with 23 root namespaces; Gameplay Abilities, CommonUI and Python enabled; Scripts/run-tests.sh, build.sh, Authoring/create_gym.py; Git LFS attributes; the placeholder test. Template variants kept as reference (D-41). Four Fab packs in Content/, none used yet (D-39).
  • 2026-09-15 — Spec/Stats.md: one stat block on every body, every outside influence an effect, counters on the receiver (D-37, D-38). Replaced the movement component's own speed-multiplier map, which was the first strand of the spaghetti this exists to prevent; enemies and kits now carry FStatBlockDefaults; step 5 builds it.
  • 2026-09-15 — The documentation set written for Unreal from the two earlier projects' docs: Design.md, Steps.md (fifteen rungs, the first six in full), Ideas.md, Decisions.md (D-01 to D-36, OD-01 to OD-08), and the eight specs under Spec/. No code, no project yet; step 1 is next and waits on OD-01 and OD-02.

Worked

  • (nothing built yet)

Did not work

  • (nothing built yet)

Open

  • Step 1's last proof is a person's: Play In Editor in L_Gym, two players, "Run Dedicated Server" on, two pawns in the gym. Until it is ticked the step is ◐.
  • The default camera mode (OD-03) is deliberately undecided until step 8.
  • The numbers in every spec are the earlier projects' guesses in centimetres and seconds. None has been played.