Caution
README.md and documentations are out of date, refer to this branch archive/v1.
Current main is still experimental since the massive rework from this PR.
Note
The repository's documentation website: slayhorizon.github.io/godot-tiny-mmo/
A tiny, experimental MMORPG demo developed with Godot Engine 4.4.
- Browser + Desktop support
- Shared codebase
- Client and server live in the same repo
- Clear folder organization
- Faster iteration: develop & test in one place
- Optimized exports
- Separate presets for client & server
- Excludes unused components (e.g. no server logic in client)
- "Custom" netcode
- No MultiplayerSynchronizer/Spawner
- Supports movement interpolation, multiple maps loaded simultaneously, etc.
- Mimic real MMO-style architecture
- Gateway server: authentication & routing
- Master server: account management & bridge between gateways and world servers
- World servers: host multiple map instances per server
See current and planned features:
-
Client-Server connection through
WebSocketMultiplayerPeer
-
Playable on web browser and desktop
-
Network architecture (see diagram below)
-
Authentication system through gateway server with Login UI
-
Account Creation for permanent player accounts
-
Server Selection UI to let the player choose between different servers
-
QAD Database to save persistent data
-
Guest Login option for quick access
-
Game version check to ensure client compatibility
-
Character Creation
-
Basic RPG class system with three initial classes: Knight, Rogue, Wizard
-
Weapons at least one usable weapon per class
-
Basic combat system
-
Entity synchronization for players within the same instance
-
Entity interpolation to handle rubber banding
-
Instance-based chat for localized communication
-
Instance-based maps with traveling between different map instances
- Three different maps: Overworld, Dungeon Entrance, Dungeon
- Private instances for solo players or small groups
-
Server-side anti-cheat (basic validation for speed hacks, teleport hacks, etc.)
-
Server-side NPCs (AI logic processed on the server)
To run the project, follow these steps:
- Open the project in Godot 4.4.
- Go to Debug tab, select "Customizable Run Instance...".
- Enable Multiple Instances and set the count to 4 or more.
- Under Feature Tags, ensure you have:
- Exactly one "gateway-server" tag.
- Exactly one "master-server" tag.
- Exactly one "world-server" tag.
- At least one or more "client" tags.
- (Optional) Under Launch Arguments:
- For servers, add --headless to prevent empty windows.
- For any, add --config=config_file_path.cfg to use non-default config path.
- Run the project (Press F5).
Setup example
(More details in the wiki How to use "Customize Run Instances...":
Feel free to fork the repository and submit a pull request if you have ideas or improvements!
You can also open an Issue to discuss bugs or feature requests.
Thanks to people who made this project possible:
- Maps designed by @d-Cadrius.
- Screenshots provided by @WithinAmnesia.
- Thanks to @Jackiefrost for their valuable contributions to the source code.
- Also thanks to @Anokolisa for allowing us to use its assets for this open source project!
Source code under the MIT License.