Devlog 6: Cue Fanfare

Greetings! Welcome back to another Armadahex Devlog, covering week 7 & 8 of development. We had panel presentations on 4/19, which meant lots of hard work right up to the last minute! Here's a sample of everything we've done so far:

Basic Gantt chart of progress so far

We've done a lot, and the game is looking good, but there's still a ton we could add and polish. So we'll have to plan going forward carefully.

So let's get started! Week 7 was absolutely huge for gameplay. Firstly, we fixed the hexagon grid, which had a bug in it (thanks GitHub Copilot...). As seen in the following image, it's now in the proper arrangement, spiraling from the center.

Hexagon grid fixed

It can be tough to evaluate and fix runtime logic bugs when developing in Unity, and the best thing you can do is either create unit tests or visualize the situation, as we did. With the grid fixed, it allowed us to add neighbor checks + ship attacking, integrated with the ship data structures and a simple UI.

Video showing attacking and UI


The attacking can best be seen with the aircraft carrier, as once it's attacked, it catches on fire. This hasn't been done for each ship yet, but is coming soon.

Aircraft carrier on fire


This was all good, but it still needed to be networked. This comes in three parts. First, there's the game initialization, where the master client picks out a terrain + team for each player. This can best be seen in code, as such

Snippet of code containing init networking

Next, there's the actual game loop and attacking logic. Unlike the init networking, which mostly consists of "room properties," the attacking involves RPCs or remote procedure calls, which are best suited for non-constant updates between clients.

Attacking networking with RPCs

And finally, once all the enemy ships are destroyed, or a player leaves or surrenders, the game must end so the remaining players can play again. This also serves as a good point to show the player how they did in the game, and communicate any other useful information. Once the networking was in place, we also created a simple game over scene. Like the other menus, it's not fully polished, and will likely be updated a few times before the game is done. (The stats shown in the game over scene were added in week 8. More might be added later, but its a good start.)

Game over scene, with networking

Currently the XP is a placeholder and means nothing, but will hopefully be communicated with a central server.


Now in Week 8, where a similar amount of work got done, as well as a few bug fixes and general polishing. To start with, Juniper finished creating the layered in-game menu music, which will be played slowly and only one part at first, but as the game progresses, the music will build up gradually. It sounds really good!

Armadahex in-game music


In Unity, we got the fog and hexagons to be responsive with color and other methods. The system we've designed allows us to change the color gradually or instantaneously. It supports a bunch of colors, as seen here
Rainbomized fog

First, though, the fog Kyle had made earlier was causing issues with performance and sorting, so the fog had to be ported over to Unity's Particle System, which is more optimized. Here, the fog gets sorted from large to small, which assists with a foggy look. Unfortunately, the fog looks really good as a single blob, but still suffers from z-fighting with other fog groups. This could potentially be fixed later on, but could also be beyond the scope of this project.

Fog in the particle system instead of VFX graph


This next section may not look like much, but was a large source of headaches for a day or two. Highlighting hexagons to visually show the attack pattern, as well as displaying arrows above each attack. There's still a few bugs involved with this, but it looks good when it works.

Visual attack patterns 


To add to the visual appeal of the game, which was important for the panel, we quickly created the in-game user interface. First created in Adobe XD, and then added into Unity and connected with the attack manager & networking. Again, it's not fully polished, but hopefully it should help communicate major game aspects to the player. In the following screenshot, all of the information panels are expanded. They will normally only appear when relevant, so it'll be less busy on-screen.

Game UI

To make the UI, we used free icons from https://iconoir.com/.

Icons for the game UI

Additionally, we used photoshop to create ship silhouettes, to put on the pattern selection display. The original images were taken from an in-game orthographic camera.
 
Ship icons


A smaller but important thing we got done before the panel presentation was water shader improvements. Namely, we added underwater refraction and foam in shallow water. There was also an issue where the project graphic settings was set to "Ultra Low," and the shadows were only rendered at low quality and very close to the camera. These were both fixed. For reference, here is both before and after all these improvements.

Before


After


Shadows in more detail

The water shader currently is looking pretty good, and the Shader Graph is getting very complex. There's still one more bug with refraction getting applied for objects above the water, but once that's fixed, the water shader will be complete.

Water shader refraction bug


Full water shader in Shader Graph editor


We also added more camera options, including a top-down view. This allows you to see more at once, but makes the water + graphics harder to see. There's also accessibility zoom controls in the same area. Additionally, we added a screen shaking effect, for when there's an attack.
Camera options panel

Camera shake effect


As before, this is only the tip of the iceberg for what got done these past two weeks! There's a lot of smaller features, bug fixing, and misc stuff that gets excluded. This project has taken a lot of time, and I think the number of lines of code shows that. It's by far the largest project I've worked on (more than double my ~3000 lines previous record), and I probably wouldn't have gotten this far if I didn't have the motivations provided by this course.
Lines of C# code written for Armadahex






Comments