Repository navigation
Contributing
The short version is CONTRIBUTING.md at the repository root. This page
adds how the branches are run.
-
mainis the owner's. Nobody else commits to it or pushes to it. - Work happens on
work/<topic>branches (work/ui,work/editor,work/docs). One topic per branch; a branch is merged intomainby the owner, usually as a merge commit named after the sprint it closed. - Agents and contributors never push. They leave a branch with clean commits and a report; the owner reviews, merges and pushes.
- Several branches may be in flight at once; ADR numbers are claimed in
docs\architecture\README.mdbefore an ADR is written so they do not collide. - The owner keeps a worktree per branch (
.claude\worktrees\<name>) so branches do not tread on each other's build output. A worktree uses the main checkout's engine and upstream reference throughUO_GODOT_HOMEandUO_UPSTREAM_DIR(no directory links); runlaunchers\dev\worktree_setup.batonce in a fresh one.
dotnet build godot\GUO\GUO.csproj REM 0 errors
launchers\dev\smoke.bat REM 5/5
launchers\pipeline\03_port_audit.bat REM if you touched porting progress; commit docs\port_status.mdCI (.github\workflows\ci.yml and build.yml) repeats the build, compiles
the Python tools, checks that docs\port_status.md is current, and rejects
game data, machine paths outside docs\, and a committed
config.local.bat.
-
Never edit
sources\. It is the upstream reference, read only. -
Port faithfully. No reformatting, renaming, modernising or
opportunistic bug fixing in ported files. Where a change is unavoidable,
mark it
PORT DEVIATION (GUO)with the reason. - Parity before improvement. Make it behave like ClassicUO first; propose improvements in their own PR.
-
Keep
GUO.Compatto value types. If a shim file wants a texture or a device, fix the tier; do not grow Compat. - Measure, do not estimate. Progress claims come from the audit. "Ported" is not "working": say whether you have a smoke run, a screenshot or a parity diff.
- Never filter pixel art.
-
Never commit game data or credentials. No
.mul,.uop,.idx,.defor.enufiles, no captures rendered from them, no passwords, no machine paths, no LAN addresses or device serials. Those belong inconfig.local.bator on the command line.
- Small batches: one subsystem or one fix per commit and per PR. One file's error is cheap to find; fifty files' errors are not.
- A plain imperative summary, then a body that says what was verified and
how: which launcher ran, what it printed, which picture under
build\shows it. Read the existing history for the shape. - If the engine rewrote
project.godotduring a windowed editor session, check that diff before staging it (see Editor). - Visual changes: attach a screenshot, ideally next to ClassicUO's
(
launchers\dev\ab_compare.bat).
Code here is BSD 2-Clause; opening a PR licenses your contribution the same
way. Ported files keep their upstream SPDX-License-Identifier header, and
new C# files start with // SPDX-License-Identifier: BSD-2-Clause. The
ModernUO patches are GPL-3.0.
Use the issue templates. Include your client version (UO_CLIENT_VERSION),
the shard you connected to, and what ClassicUO does in the same place. A
difference from ClassicUO is a bug. Security issues go through GitHub's
private vulnerability reporting, see SECURITY.md; never a public issue.
Start
- Getting Started
- Configuration
- Launchers and Tools
- What is GUO?
- FAQ
- Known Issues
- Troubleshooting
- Glossary
Builds
Playing
- Servers and Accounts
- Controller
- Mobile UI
- Canvas Background
- Screen Effects
- Asset Store
- Dev Shard
- Server Compatibility
Developing
- Scripted Runs and Probes
- Parity and Drift
- Editor
- World Editing
- Manage Your Shard From the Editor
- Author UO Data
- Building Multis
- Architecture
- Working with AI Agents
- Contributing
Project