God-game: minimal graphics, deep simulation. The engine lives in the engine/ git submodule and its sources plus test suites are part of LittleSim.sln, so engine and game are developed in one editor window. Playable skeleton: seed-deterministic terrain (smoothed height field -> water/sand/grass/forest/mountain tinted cells), 80 wandering villagers on a Y-sorted layer, god camera (WASD pan, wheel zoom, world-bounds clamp), HUD and the dev console with a 'regen [seed]' command. CLAUDE.md sets the game rules: simulation-first, one-seed determinism, simulation/presentation split, a console command for every mechanic. Design docs in Russian under docs/. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.8 KiB
1.8 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
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 useRandom.Sharedinside 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 : IComponentdata, logic in systems. - Every new mechanic gets a dev-console command for testing (
regen,timescale, …).