A microservices based distributed 2d MMORPG with Hazelcast and Vert.x on Java 11, currently 20k LOC + configuration.
The backend is developed using the chili-core framework
First demo video now available!
If you are a part of the team please include the client prototype submodule.
# cloning the repository: git clone --recursive <repository-url> # if already cloned: git submodule update --init --recursive
- Requires node/npm
Builds the project and runs all tests.
- Authentication: Account creation and available realms.
- Routing: Routes client requests in/out of the cluster.
- Realms: Handles incoming connections, instance travel.
- Instances: Handles game logic.
- Realm registry: keeps track of active realms.
- Website: Provides an interface for account/character/realmlist.
- Logging: Receives logging data from the other components.
- Social: Achievements, chat, guilds. (TBD)
- Auction house: Handles asynchronous trading with orders/offers. (TBD)
- Serverstatus: Provides a quick overview of system uptime. (TBD)
Patching is no longer a service - the webseed standard was not very well supported so support was dropped. We are aiming to create a browser based game primarily and will rely on a CDN to provide game resources. We want to avoid serving files over the cluster or machines that handles the website or the game state.
Communication between services is done over the cluster/local bus, other available transports such as websock, tcp, udp and rest is available but not recommended unless a service is not able to join the cluster. Services that needs to authenticate another service should use the AuthenticationGenerator to generate pre-shared keys, secrets and generate tokens. This may be invoked from the standard launcher in chili-core, using the
--generate commandline argument.
All communication between services in different JVM's uses a text-protocol based on JSON for simplicity.
This is a 2D MMORPG server that is in development, which focuses on
- ease of development: simple event passing and handler-based server development.
- fast feedback loop: fast startup times, fast client load times, unit-testable.
- simple and extendable: scripted events, yaml-based npc/item/spell/affliction configurations.
Overview of the server implementation progress
- player chat
- spell engine (cooldown, learned spells, charges)
- dialog engine
- affliction engine
- cross realm/instance chat
- friend lists
- instance travel
- instance loading
- dynamically deployed instances
- scripted npcs/entities
- support for animations
- spawn entities/npcs from script
- NPC initiated dialogs
- NPC/interaction dialogs
- Game developers seeking to implement a 2D RPG multiplayer game.
- Aspiring game developers with an interest in backend development.
- Players who are into simplistic 2D MMORPG's.
To make this project a reality we use only great software.
On the backend
- CQEngine primary persistence store.
- Hazelcast for cluster discovery.
- Vert.x for threading and transports.
- chili-core for maximum ease of development.
Do you have an idea for a spell? a new player class? an NPC? gameplay mechanics? story? anything really, we are open 24/7 for contributions. Just submit an issue or a PR.