Step 1: the Salty project, two modules, tests and the gym

Salty.uproject (UE 5.8) from the Third Person template with class redirects, the SaltyCore and Salty modules,
the three build targets, USaltyAssetManager calling InitGlobalData, Config/Tags with the 23 root namespaces,
Scripts/run-tests.sh, build.sh and Authoring/create_gym.py, L_Gym, Git LFS attributes and the placeholder test.
Template variants kept as reference (D-41). The four Fab packs stay out of the repository for now (~10 GB).
The editor serves the engine MCP plugin on 127.0.0.1:8000 through DefaultEditorPerProjectUserSettings.ini.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Rainer Leit
2026-09-16 20:10:43 +03:00
co-authored by Claude Fable 5.1
parent 0e61a77346
commit 4f2c55cd2a
1434 changed files with 11358 additions and 27 deletions
+12 -2
View File
@@ -7,6 +7,16 @@ say so.
Status: `Decided` · `Supersedes` (contradicts an earlier decision, names it) · `Deferred` (deliberately not now,
with a trigger)
## 2026-09-16 — Step 1 closes the two open decisions
Taken when the project was created from the engine's Third Person template.
| # | Decision | Where |
| --- | --- | --- |
| D-41 | **The template's three gameplay variants stay in-tree as reference only.** `Source/Salty/Variant_*` and `Content/Variant_*` (Combat, Platforming, SideScrolling) compile and load but nothing new is built on them; they break the conventions (rules in Blueprint, casts, no server path) and are deleted when step 7 closes or the moment they block a build. The plain template character, game mode and controller are renamed `ATemplate*` and are the placeholder body until step 3. | [Architecture](Spec/Architecture.md) |
| D-40 | **The project is `Salty`.** `Salty.uproject` at the repository root, modules `Salty` and `SaltyCore`, test filter root `Salty.`. Closes OD-02. | [CLAUDE.md](../CLAUDE.md) |
| D-39 | **Unreal Engine 5.8, the launcher build.** Pinned in `Salty.uproject`; upgraded deliberately, never mid-step. Closes OD-01. Four Fab packs sit in `Content/` unused: `Medieval_Weapons` is expected at step 7, `RPGEnvironmentVFX` at step 14, `HouseForge_01` as dressing after 7, `Elite_RockyMeadows` serves no step on the ladder. A pack enters a step only when that step's spec names the asset. | [Steps](Steps.md) |
## 2026-09-15 — The stat block
Taken on the same day, after the first read of the doc set.
@@ -67,8 +77,8 @@ confirmation, not a fresh discussion. When one is taken it moves up as a D-line
| id | Question | Blocks | Recommendation | Status |
| --- | --- | --- | --- | --- |
| OD-01 | **Engine version.** | 1 | The newest release with a hotfix out (5.6.x at the time of writing). Pin it in `CLAUDE.md` and the `.uproject` in step 1; upgrade deliberately, never mid-step. | Open |
| OD-02 | **Project and module name.** | 1 | Short, one word, no spaces. It becomes the `.uproject`, the module prefix and the test filter root. The docs write `<Project>` until it exists. | Open |
| OD-01 | **Engine version.** | 1 | The newest release with a hotfix out (5.6.x at the time of writing). Pin it in `CLAUDE.md` and the `.uproject` in step 1; upgrade deliberately, never mid-step. | Closed, D-39 (5.8) |
| OD-02 | **Project and module name.** | 1 | Short, one word, no spaces. It becomes the `.uproject`, the module prefix and the test filter root. The docs write `<Project>` until it exists. | Closed, D-40 (Salty) |
| OD-03 | **Default camera mode.** | none until 8 | Build both in step 3, play the gym and the first fight in each, let `camera_mode_changed` and `movement_sample` settle it by step 8. | Recommended |
| OD-04 | **Engine from source.** | the first packaged server | The launcher build until then; the editor's dedicated-server option covers every step in the ladder. | Recommended |
| OD-05 | **Placeholder character and animations.** | 3 | The engine's Third Person template mannequin and its animation blueprint; a retargeted pack only when the swing needs a clip the template lacks. | Recommended |
+21
View File
@@ -246,3 +246,24 @@ Real ones, from the engine, that cost a day each if met in the wild rather than
- **Dedicated server packages need the engine from source.** The launcher build compiles no server target. Play In
Editor's "Run Dedicated Server" works on the launcher build and is the everyday test; the source build arrives when
the first packaged server does.
## What was built, and where it differs
Step 1, 2026-09-16.
- **Name and engine:** `Salty`, UE 5.8 launcher build (D-39, D-40). Modules `SaltyCore` and `Salty` as specified;
`SaltyServer.Target.cs` exists but the launcher build cannot compile it, so the dedicated server is proved through
Play In Editor (OD-04).
- **The project started from the Third Person template, not empty.** Its plain character, game mode and controller
survive as `ATemplateCharacter`, `ATemplateGameMode`, `ATemplatePlayerController` (class redirects in
`DefaultEngine.ini`) and are the placeholder body until step 3 replaces them. The template's three variants stay as
reference only (D-41); they do not follow these conventions and nothing is built on them.
- **`USaltyAssetManager` arrived in step 1**, earlier than the spec implies, because it is the one place
`UAbilitySystemGlobals::InitGlobalData` belongs and the cost was a file. No `PrimaryAssetTypesToScan` entries yet;
each definition class adds its own.
- **Tags:** one `Config/Tags/<Namespace>.ini` per top-level namespace (23 files), each holding only its root tag.
`NativeTags.h/.cpp` exist and are empty until step 2 declares the first native tag.
- **The gym is authored by `Scripts/Authoring/create_gym.py`**, not by hand: a floor, daylight and two player starts.
Step 3 extends the same script with the sections table.
- `.gitattributes` routes binaries through LFS; the four asset packs are in the working tree but no pack is
referenced by code or a definition yet.
+1 -1
View File
@@ -25,7 +25,7 @@ Status: `☐` not started · `◐` in progress · `☑` done · `⊘` dropped ·
| # | Step | Proves | Status |
| --- | --- | --- | --- |
| 1 | The project, two modules, tests, a dedicated server in the editor | It builds, tests run headless, and the server posture is real from the first commit | ☐ |
| 1 | The project, two modules, tests, a dedicated server in the editor | It builds, tests run headless, and the server posture is real from the first commit | ◐ |
| 2 | The telemetry seam | Every later step can emit into something | ☐ |
| 3 | A body, a camera, an input map and the gym | You can walk, in both camera modes, on a server | ☐ |
| 4 | The feel pass | The written checklist passes with a person at the keyboard | ☐ |
+8 -1
View File
@@ -5,6 +5,12 @@ the reasoning lives in the specs, this is the memory.
## Done
- 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.
@@ -22,6 +28,7 @@ the reasoning lives in the specs, this is the memory.
## Open
- OD-01 (engine version) and OD-02 (project name) block step 1.
- 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.