Devlog #2: So many options...

05 March 2024

Ahoy! How's it going? It's been a bit since the last devlog, so I wanted to update you guys on the progress I've made with the v0.2.0 update by showing you some cool screenshots and GIFs that make you go "oh wow, this guy is showing me some cool screenshots and GIFs"!

But first, there's something that I need to do. Something that has been lurking in the shadows for months, that I have neglected up until now, and that my career as an independent, open-source game developer depends on. That's right - shameless plugging!

Donating via Ko-fi

Are you a fan of free, open-source board game simulators? Do you want to see more stuff more quickly in said board game simulators? Do you like making random men on the internet so happy that they start squealing and make random unintelligible noises??

Well, come on down to the one-stop shop for all your money-induced, stranger-pleasing needs! For as little as five pounds (no, not the weight, you freedom lovers), you can be safe in the knowledge that your favourite board game simulator will get even better, with awesome new features like:

  • An online database of asset packs!
  • An in-game asset pack editor!
  • A Lua scripting API!
  • An upgrade to Godot 4!

So, what are you waiting for? Visit the brand new Ko-fi page now and donate to the melon who just word-vomited this segment and somehow it kind of worked out??

New Options Menu

If you haven't read the last devlog, the TL;DR is that for the v0.2.0 update I'm in the process of re-writing the majority of the game due to the fact that, although it worked for the most part, I wasn't happy with the code and some aspects of the UI. So far in the re-write, I think the area of the game that has improved the most from a visual standpoint is the options menu:

Audio

A comparison between the v0.1.2 audio settings and the v0.2.0 ones.
  • The tabs at the top, as well as the buttons at the bottom, have been given icons.
  • All of the sliders in the options menu now show values.
  • The "Effects Volume" setting has been renamed to "Object Volume" to better express its function.
  • The "OK" button has been removed, and the "Apply" button will only become clickable once changes have been made.

Controls

A comparison between the v0.1.2 control settings and the v0.2.0 ones.
  • What was previously the "Key Bindings" tab has now become a sub-menu within the "Controls" tab.
  • Similar settings have been grouped together.
  • When hovering over settings with the mouse, or when they are focused with either the keyboard or a controller, hints will be shown at the bottom of the menu.

General

A comparison between the v0.1.2 general settings and the v0.2.0 ones.
  • A note has been added under the "Language" setting warning that translations may not be complete, and explains how they can be contributed.
  • Custom UI elements have been created for controller support. The "Autosave File Count" setting has one of these new UI elements.
  • The "Open Assets Folder" and "Reimport Assets" buttons have been removed from the options menu, as they will be added in the future "Collection" menu.

Player

A comparison between the v0.1.2 player settings and the v0.2.0 ones.
  • A preview has been added for what the player's name and colour will look like in-game.
  • The colour picker provided by the Godot Engine has been replaced with custom colour sliders for controller support.
  • A warning will now appear if the player name is invalid.

Video

A comparison between the v0.1.2 video settings and the v0.2.0 ones.
  • Added the "UI Scale" setting, which adjusts how large the UI appears relative to it's default size.
  • Added a "Graphics Quality" preset setting, which adjusts all of the advanced graphics settings for you based on levels of visual quality. For new players, this will be set to "Medium" by default.
  • All of the advanced graphics settings are now hidden by default, but a toggle has been added so that they can be adjusted manually.
  • A restart is no longer required when changing the "Shadow Detail" setting.
  • The Fast Approximate Anti-Aliasing (FXAA) method has been added, which is more performant than MSAA, but can result in slightly blurry edges. This is the default anti-aliasing method for new players.
  • Added settings for adjusting the brightness, contrast, and saturation, of the game.

Key Bindings

A comparison between the v0.1.2 key bindings menu and the v0.2.0 one.
  • Actions have been grouped together by type.
  • All actions can have up to two bindings now, instead of just one.
  • Bindings can now be removed by holding down the Escape key while they are being set.
  • Added actions for rotating the camera up, down, left, and right. By default these are bound to the arrow keys.
  • The mouse wheel's default binding of zooming in and out can now be adjusted.

Multiplayer Refactor

After completing the new options menu, I set my sights on the multiplayer back-end. Luckily, I actually did somewhat of an OK job with the code the first time around, so this was mostly a case of tidying it up, improving the UI, and dealing with every possible outcome that could occur.

A comparison between the v0.1.2 multiplayer menu and the v0.2.0 one.

You may notice that there's a new toggle: it hasn't been fully implemented yet, but the plan is that as well as being able to share room codes with your friends so that they can join your game, you will also be able to host games in "Direct Connection" mode, which uses IP addresses instead of room codes. This way, you don't have to rely on the game's lobby server in order to play with each other, and you can host games easily over the local network (LAN). With port forwarding, you'll also be able to host games over the internet as well.

The new "Host Game" menu.
The new "Join Game" menu.

Both the "Host Game" and "Join Game" menus now explain the process of hosting and joining a multiplayer room, and include a note about the necessary internet connection and possible system permission pop-up.

Entering the room code is now also supported on controller by pressing the up and down arrows next to the text boxes, which will cycle through the alphabet.

You can now also hide the room code from this menu as well as in-game, which will be useful for anyone that streams the game live so that you don't need to switch scenes as you are setting up a multiplayer game.

The process of hosting and joining multiplayer rooms has been greatly improved - previously, the game would enter a loading screen to go to the main game scene, and only after it had fully loaded would it attempt to setup the lobby. This meant that if something went wrong with the setup, the player would be put into a second loading screen back to the main menu to show the error:

A demonstration of attempting to join a non-existent room in v0.1.2.

In hindsight, this was probably one of the worst design decisions I made... but I have now redeemed myself!

A demonstration of attempting to join a non-existent room in v0.2.0.

Now, the entire setup process happens within the multiplayer menu. If something goes wrong (for example, the client can't connect to the master server, or a connection couldn't be established with the room's host), then an error is shown there and then on the menu, with no loading screens whatsoever. You can then try again straight away without having to navigate back through the menus.

You can now also cancel the attempt to setup a multiplayer game as it is happening. This can come in handy if you're noticing that it's taking a bit too long to connect, although if it takes too long the game will eventually give up after about 30 seconds.

With the updates to the multiplayer back-end, the game now properly detects and handles silent disconnects. This is where the connection between two clients gets lost without either client purposefully causing it, for example, when one client's internet connection drops all of a sudden.

Furthermore, in v0.1.x the game would kick the player back to the main menu when the connection to either the master server or the host was lost. That is no longer the case - if the connection to the master server is lost, then the room will continue as is, with the only issue being that no new players will be able to join until a new room is made. On the other hand, if a client's connection to the host of the room is lost, then the game will switch to singleplayer mode on the fly, and will give the player the choice to either continue in singleplayer mode, or to go back to the main menu to try and reconnect with the host:

A pop-up warning the player that they have disconnected from the host, giving them a choice between staying in singleplayer or saving and going back to the main menu.

Chat Window Update

As well as the options and multiplayer menus, the chat window has also been given a fancy new look:

A comparison between the v0.1.2 chat window and the v0.2.0 one.

Previously, the chat window was only shown when the player was in a game. Now that the game scene and the main menu scene are one and the same, the chat window is now also shown in the main menu, where the player can invoke commands if they wish. This also means that errors and warnings that are thrown when importing custom assets are now shown in the chat window instead of in a separate import log.

You can now also press the Enter key while in-game to immediately start typing a message to the other players, as well as the forward slash (/) key to start typing a command.

Other updates to the chat window include:

  • Using the up and down arrow keys while typing a message will now cycle through the player's message and command history.
  • The chat window will now make itself transparent when the mouse is being captured elsewhere, for example, when rotating the camera.

Documentation Update

The tools used to build the project's documentation have been updated, and as such, the appearance has been updated dramatically:

A comparison between the v0.1.2 documentation home page and the v0.2.0 home page.
  • The webpage now has dark mode support, which can be toggled at the top of the page.
  • Icon links have been added to the left-hand navigation bar, which link to the project's various websites.

macOS: M1 & M2 Crash Fix

When v0.1.0 first came out, the library used to provide multiplayer WebRTC functionality only had x86_64 support for macOS, meaning that those of you using ARM processors (like the M1 or M2 chips) were not able to run the game without using Rosetta.

Now that the library has been updated with ARM support, this should fix the crash for M1 and M2 users, but this requires testing.

What's next?

Now that all of the elements of the main menu are pretty much done, I'll finally be moving on to the in-game systems! The first thing I'll be revisiting are the objects, more specifically, improving the code that handles players moving them around the room, and trying to make the selection outline clearer, especially in player's hands. After that, I'll be re-organising the absolutely mammoth CameraController script, and attempt to split it up into multiple different scripts so that it is a lot more maintainable overall.

That's pretty much it for this update! You can find the full list of changes made for the v0.2.0 update so far here.

Until next time!