Files
LittleSim/CLAUDE.md
T
Leonid PershinandClaude Fable 5 3c777c53b8 Pack Textures/ into atlases and render the world from them
Engine bump brings MrGameEng.Atlases (atlas builder + runtime loader).
Textures/ (2747 images) is packed by MrGameEng.AtlasTool into 10 atlases
(93 pages) under Assets/Atlases, loaded through generated handles.
Beings now draw pawn bodies, forest cells grow trees (both Y-sorted),
and the dev console gains 'atlas [name] [filter]' for inspection.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 09:03:35 +03:00

2.4 KiB

LittleSim

A god-game: minimal graphics, deep simulation. Built on the mrgameeng engine (MonoGame + Friflo ECS), vendored as the git submodule engine/ so the game and the engine are developed side by side in one editor window.

Game design docs live in docs/ and are written in Russian. Engine rules live in engine/CLAUDE.md — read it before touching engine code; both rule sets apply here.

Layout

engine/        mrgameeng git submodule (own repo, own CLAUDE.md)
src/LittleSim  the game (net8.0); references engine projects directly
docs/          концепт, симуляция, roadmap (Russian)
LittleSim.sln  game + engine sources + engine tests — one window for everything

Commands

git submodule update --init             # after fresh clone
dotnet build LittleSim.sln
dotnet run --project src/LittleSim -c Release   # measure perf in Release only
dotnet test LittleSim.sln                        # runs the engine test suites

Texture atlases

Source images live in Textures/ (committed); the game only loads packed atlases from src/LittleSim/Assets/Atlases (also committed — the asset generator emits GameAssets.Atlases.* handles for them). After changing Textures/, rebuild with:

dotnet run --project engine/tools/MrGameEng.AtlasTool -c Release -- Textures src/LittleSim/Assets/Atlases --group-depth 2

Rebuilds are incremental (unchanged groups are skipped). Region keys are paths relative to Textures/ without extension: atlas.GetRegion("Things/Plant/TreeOak/TreeOakA").

Submodule workflow

Engine changes are committed inside engine/ first (engine repo, its commit style), pushed to the engine remote, then the submodule pointer bump is committed here. Never commit a pointer to an unpushed engine commit.

Game rules

  • Simulation first: depth of behavior over visuals. Graphics stay primitive (tinted quads are fine); complexity budget goes to simulation systems.
  • Determinism: the whole world derives from one integer seed. Systems that need randomness own a seeded Random; never use Random.Shared inside simulation.
  • Simulation/presentation split: simulation systems mutate components only; rendering reads them. No draw calls or UI from simulation systems.
  • ECS-first per the engine: plain struct : IComponent data, logic in systems.
  • Every new mechanic gets a dev-console command for testing (regen, timescale, …).