The alpha is using three.js, which is fast enough for what alpha is doing. For the beta, I wrote my own renderer based on OGL that uses a lot of optimizations for specific things that you can't easily do with Three.js (batch draw calls of dynamic objects for example).
Largely, the alpha was made in 3 months, after which I added features on and off. I did not work in it full time, but released two major updates from 2017-2018. (Items, and UI overhaul).
In late 2018 I started working on the beta. Entirely new codebase, too much technical debt in the alpha. Many technologies were improved, such as moving from a json based net protocol to a much faster and smaller binary net protocol, moving away from mongodb and threejs.
The result is now a much more stable and future proof engine. We even have a world editor that also runs in the browser and communicates with the server. You can edit the world with multiple people at the same time with the changes reflecting in real time for the players.
Thanks!
The entire project essentially lives in a series of horizontally scaling node.js processes doing all kinds of things. The worlds are divided into chunks which helps significantly with culling network traffic and distributing the load.
For the database I moved from MongoDB to Postgres. When I started doing Hordes I had very little DB experience and thought that using MongoDB might be a good idea since I am using node. Turns out that Postgres is much better at helping with transactional logic for an MMORPG. Inventory management for example can be constructed almost entirely with constraints, ensuring that the data always makes sense (no two items occupying one slot, that kind of thing).
The alpha used vanillajs for the entire front end, but with the beta I started using Svelte and Rollup, which I would highly recommend for almost anything.
Yup, Svelte is hot and Postgres is always a good decision! Thank you for the details, really interesting project!
Once I built a CSS based browser MMO myself as a challenge. I used Clojurescript and React on the front end and Clojure with a simple in memory key-value storage. My solution was basically a turn based architecture, but many turns happened in a sec, so it was semi-realtime.
CSS means I didnt use webgl, just pseudo 3D with divs and transforms. Field of view was small, but playable. :D
Oh man. I found Hordes recently and was impressed. I guess I didn't expect a 3D game to run so smoothly in my browser. Glad to see it here! Quick question, what's the plan with beta? I signed up a few days ago! Great work, by the way!
Thank you! WebGL is underutilized in my opinion. You can do a lot with it, and if you do it right, it can be performant, too. Right now the Hordes Alpha is more or less a concept for what the game is meant to be, and the Beta is a total overhaul. We're doing tests on the weekends and the response has been very positive!
Some of the new features will include:
- A party system that allows 10 people to group up and fight bosses together
- A skill progression system for each class, with a vastly broader amount of skills you can learn
- Much larger worlds, and the ability to chain many worlds together
- Improved performance, slicker netcode, and overall a more snappy experience
If you're interested, you can sign up for the beta here: https://beta.hordes.io
Hit me up when you're around :)