Classic Ultima Online on Godot 4 .NET
Everything in GUO belongs to one of five layers. The layer decides what a
change must prove before it is merged, whether it is on by default, and
whether it ships in the game you download. The owner approved the layers on
2026-10-13; the binding text is the layer table in AGENTS.md and
CONTRIBUTING.md.
| Layer | What it holds | On by default? | In an exported game? |
|---|---|---|---|
| L0 Core port | ClassicUO’s own code, carried across | Yes | Yes |
| L1 Client options | GUO features a player switches on in Options | No | Yes, switched off |
| L2 Packs | Art, HD art, splats, screen effects, sounds, voices, zones, themes | Only what you install | Never bundled; installed from the Store |
| L3 Editor packages | The GodotUO editor: authoring, generation, AI, MCP, tours | Editor only | Never |
| L4 Labs | Experiments not ready to be an option | No, needs an opt-in build | Never |
PORT DEVIATION (GUO) marker, and
docs/upstream/GUO_DIVERGENCES.md lists them. See
Parity and Drift.docs/data_formats.md. Anything that
changes how the world is drawn or how input works also needs an ADR. An
option may not start another program, run Python or call a network
service. Enhanced HD and Regional audio and recorded NPC voices
are L1 options.#if TOOLS), and
every AI feature also sits behind the editor’s AI switch (Editor Settings >
GUO > AI > Enabled). With it off, AI menus are hidden and no AI work runs;
manual authoring always stays. See Editor.godot/GUO/src/Labs/<feature>/ and are compiled only
into a Debug build made with -p:GuoLabs=true. Release and export builds
leave them out even when the flag is set. Each Lab needs a README, a
doctor launcher that says what to install, a scenario and a smoke line.
The registry is empty today: no Lab ships yet.tools/scenarios/ and a
line in the smoke.dotnet build godot\GUO\GUO.csproj -c Debug -p:GuoLabs=true
godot/GUO/src/Labs/README.md explains how a Lab registers its chat commands
and Options rows.