Note
The repository's documentation website: slayhorizon.github.io/godot-tiny-mmo/
A tiny web-based MMORPG demo developed with Godot Engine 4.4,
created without relying on the built-in multiplayer nodes.
The client and server share the same codebase, but thanks to its unique organization,
custom export presets allow you to Export Client and Server builds separately,
keeping builds secure and optimized by excluding unnecessary components.
This project contains different types of servers to try to mimic typical MMO architecture:
gateway, world, and master server (See Network Architecture diagram in #Features).
For documentation and more details, check out the https://slayhorizon.github.io/godot-tiny-mmo/.
Warning
This project is in experimental state, and features are missing (See #Features).
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)
Current network architecture diagram for this demo (subject to change):
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.
- Maps designed by @d-Cadrius.
- Screenshots provided by @WithinAmnesia.
- Also thanks to @Anokolisa for allowing us to use its assets for this open source project!
Code source under MIT License
For inquiries, contact me on Discord:slayhorizon