Skip to content

A tiny open-source web-based MMO / MMORPG built in Godot 4, with unique project organization.

License

Notifications You must be signed in to change notification settings

SlayHorizon/godot-tiny-mmo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Warning

This project is in experimental state and gameplay features are missing (see #🚀 Features).

Godot Tiny MMO

A tiny web-based MMO / MMORPG demo developed with Godot Engine 4.x - 4.3,
created without relying on the built-in multiplayer nodes.

This project contains both client and server within the same codebase.
Using custom export presets, you can easily Export Client and Server builds separately.
This keeps exports safe and optimized by excluding unnecessary components.

For additional details, check out the Wiki.

project-demo-screenshot image

🚀 Features

The current and planned features are listed below:

  • 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
  • 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

Current network architecture diagram for this demo (subject to change):
architecture-diagram-26-10-2024

You can track development and report issues by checking the open issues page.

🛠️ Getting Started

To get started with the project, follow these steps:

  1. Clone this repository.
  2. Open the project in Godot 4.3+.
  3. In the Debug tab, select "Customizable Run Instance...".
  4. Enable Multiple Instances and set the count to 4 or more.
  5. 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
  6. (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.
  7. Run the project!

Setup example:
(More details in the wiki How to use "Customize Run Instances...") debug-screenshot

🤝 Contributing

If you have ideas or improvements in mind, fork this repository and submit a pull request. You can also open an issue with the tag enhancement.

To contribute:

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Credits