Multiplayer Online RPG Project

The Great Migration

I finally got around to doing a bit more work on this project!

I decided over Christmas that I was going to spend sometime moving the game to 3D and thus also to Godot v4. As I mentioned in the first post, this was only going to be the client as I was planning to keep the servers in Godot 3.5 as they were just code so it seemed unecessary to move them to the newer version...

Well, it turned out that the networking features in Godot 3.5 aren't compatible with those in version 4, so I ended up having to move all the servers across to Godot 4 as well. Luckilly that didn't take a huge amount of time as a lot of the code which wasn't sending data across the network was reusuable and only required a few modifications, so that stuff could almost be copied across.

One small addition to the servers was a simple user interface with a few simple buttons to do tasks, such as logging out players. I also made a simple console display to post status messages in.

[humorous caption]

The Newish World

While I'm moving everything across to the new version of Godot I'm going to try and keep as much of it the same as possible, so to begin with I recreated the 2D world in 3D. For the character, I've gone with the Gobot model as it looks nicer than anything I could do at the moment and already has animations, so I won't need to spend time doing those. The other aspect of the world is that chickens spawn as they did previously, these look a lot worse than the players as I "modelled" them myself (they are actually just built out of simple 3D shapes).

The vast and expansive world.
Hanging out with a friend.

New Feature!

I might be being generous describing this as a feature, but I also added some basic interpolation for the movement so other players moved more smoothly. I just keep the previous position for each player and, when I recieve the new position from the server, I save the direction between the two and then move the player based on that. Once I recieve the new position I just set that as the players current position. The same is also done with the players rotation and seems to work fine from what I can see with my eyes!

Current Status

Background

I began working on this project all the way back in 2021. There had been a spate of kickstarters being setup for MMO games by teams of one or two people and there were a lot of comments being made about how small teams couldn't make an MMO. I thought it sounded like an interesting challenge so I decided to have a go at one. Now, I consider myself to quite realistic, so I went in to this purely for the fun/challenge of doing it. The intent is to only work on it occasionally, and I'm also working on the basis that I'll be the only person to play it.

Current State

Currently the game looks terrible, with the initial plan being to implement the networking code rather than worrying about its appearance, but I think I have a lot of the basic features down.

Firstly, and I guess most importantly for a multiplayer game, players can log on and see other players in the game world moving around. The movement is a bit stuttery as the client doesn't currently have movement interpolation, which is something that I was waiting to impliment once the client moved to 3D.

Looting a deceased chicken.
There is also very simple combat in the game, using a few different weapons that each player has, allowing players to kill wolves and chickens which are standing around the world. This currently appeals to the hyper-casual player, as the animals don't yet have the ability to fight back. Each animal spawns within a specific area on the map, with a cap on the number of each that can exist at any one time. Players are able to attack and kill the animals resulting in them leaving a corpse which can then be looted for meat, pelts, or feathers.
Looting a deceased chicken.
While we're on the topic of killing animals, there is also an NPC in the game who will give the player a quest to kill some chickens. There is a reward of gold, but without a way of spending it (or even viewing it) the only reason to take the quest on at the moment is for the joy of killing small animals.
What Tina has against chickens is currently unknown.
Less noticeable to the player is that all of this is currently done with full server side authorisation (well with the exception of movement) so any action only "counts" if the server says it does. This has probably been the most fun part of the project, trying to work out the best way for each thing to be verified without the server having to do a large amount of processing, though I guess I won't really know how successful I have been until it's tested with more than 2 players!

Future

As this is just a project that I'll work on occasionally when I have some spare time, the plan for it is quite vague. I think the next step will be to start moving it across to 3D, as the client/server basics are now working. My plan is to remake the game client using version 4 of Godot but to leave the servers in version 3, as they won't have graphics so it will save some work.