It's been a while since an update as I've been extremely busy with work, but a good amount of progress has been made.
I have split the game up into Logic, Input, and Graphics.
Logic
The logic system is responsible for handling the state of the game world. It tracks objects and their properties such as their type and position.
The logic system only runs at 20fps. This may seem extremely low, but it will be more than fast enough. Having the logic framerate this low gives major advantages.
First, networking at this framerate will be much lighter. Second, this gives each frame a 50ms window rather than a 16ms window. This means the game can be 3x as complex as it otherwise could be.
Input
The input system handles capturing input from the keyboard and mouse. This will be expanded soon to also handle gamepads.
The input system operates independently of the logic system. This means it will trigger input events at a higher framerate than the logic system runs. This eliminates dropped inputs, even if the game experiences slowdown.
Graphics
The graphics system listens to the logic system's events. It has its own separate graphics state. This allows graphics to run at a framerate completely independently of logic.
For example, if you have a 120Hz monitor, you can run the game at 120fps with no changes to the logic system. The graphics system will simply run its animations at 120fps.
The graphics system will also skip frames if the game experiences slowdown.
Basic lighting has been implemented. In this demo, ambient lighting and a single spot light are being simulated. I've also implemented materials (a property that determines how reflective etc. textures are) and basic shadows.
Movement
The world is described by a grid of "spaces". Each crate in this demo is 4x4x4 spaces. All objects are locked to this grid. This makes coding physics significantly simpler. This is also necessary to ensure networked physics remain deterministic. Doing any calculations related to pi will break the physics simulation's consistency across devices.
The tradeoff is that movement can only occur in 8 directions (orthagonally and diagonally). To get around this, I've implemented a 16-directional movement system.
The input system allows you to look around freely, but at the logic level, your character is considered to be looking in 1 of 16 directions horizontally. Those directions determine the direction of your movement. Because it's not possible to move in 16 directions on a square-grid, I implemented a simple system that detects whether you're on an even or odd space along the x or z axis to determine which axis to move along for this frame when you're looking between a diagonal and orthagonal direction.
Basically, it's a system of doing knight's moves on the grid, but not having to do the entire knight's move in one "turn". Currently, this movement is not smoothed graphically in any way, so there's a good amount of jitter.
While this system is not nearly as smooth as it people are used to in first person games, it's a tradeoff that has to be made to ensure the game works as a networked game with complex physics.
Next Steps
I have not yet implemented physics. Having simple collision-detection and object interaction will be the next steps, and after that, networked multiplayer. I should have a demo ready in the next few updates that will be playable by multiple players, though of course there will be little to do.
You can now sign up for user accounts. For now, it requires an invite token.
I've added an Account Screen you can use to set your name, email address, handle, and password.
There's also a dropdown menu now that lets you toggle fullscreen. No accounts have been issued for anyone yet. Rather than inviting, I'm just going to finish up public signups and launch that.
Btw, basically none of the interface will actually look like this in the final game. This is just to get major functionality implemented so the rest of the game can be built.
I've given the MMO a basic interface and user accounts have been added. I'll be handing out some invites in the next few days.
I'll also be implementing public signups in the next few days because why not.
Up next is some of the basic server architecture. The next few updates will be fairly boring, but will be laying the groundwork for being able to host all of the MMO's gameplay mechanics.
The plan is to get a basic server up and running with the ability for people to sign up, create a character, and start playing as soon as possible. Then new features will be added gradually over time.
This means at first, things will be very boring, but it also means development will progress rapidly, rather than having to wait months (or years) until I decide it's "ready".
The MMO server is now running and we have config and a database. Current work is on user accounts.
User accounts will be issued on an invitation basis for now, though the goal is to make the game free and open to anyone.
Welcome to the new site.
Development has started again on the MMO. It's available at https://mmo.aligerum.io.
The rest of the website will be set up in the next few days.