Design Diary – December 2023

Posted by billk on December 11, 2023 12:41 pm

Hello and happy holiday season, everyone! I figured I could sneak one blog post in 2023 and pretend I’ve been keeping up with it all along. It’s been my one area of neglect on this digital board game journey, but I’ve been busily working on Arete: The Battles of Alexander the Great since the last update.

First, a note about social media: Since November of last year, my Twitter feed has been saturated with hate speech, spam, and misinformation. “Blue check” accounts are elevated and sifting through them to find the buried tweets of those I care about is a chore. Consequently, I’m far less active there and the only reason I haven’t deleted the account entirely is because some great people from the wargaming community still use it. I hope you’ll consider joining me at one or more of the alternatives: Bluesky, Mastodon, Facebook, Facebook Wargames group, and Facebook Wargame Design group. If you find any of those confusing and need help or if you need an invite code for Bluesky, please don’t hesitate to contact me.

Now onto the good stuff. There have been lots of changes since last time. Here are some of the biggest ones:

Online Multiplayer

This was out of nowhere. I originally planned this to just be a single player game, possibly with pass-and-play, but entirely offline. At some point early in the year, I started wondering, “If I was going to add multiplayer as well, how would I do it?” and my investigations to see if I could do it turned into, “Well now I might as well do it.” It took a few months to construct and I had to handle a way to pass the states of the game with all its counters and its ever-growing history, but I managed to piece it together.

From a technical standpoint, I looked at saving all game states, whether by sending the whole collection or by assembling it on the server, but this just gets too big. Instead I devised a way to save a much-abbreviated history within the game object that gets sent back and forth. If you’re in the game and waiting for your opponent, the app will then play back what they did, recreating it. If not, you’ll just see the latest state when you log back into the game. The down side of this is that you can’t “rewind” like you can in Vassal or Rally-the-Troops, but to get a working online game that doesn’t slow down as it progresses, I’ll take it for now.

Online home screen (not final art)

Adding online meant I had to add a lot of accompanying elements such as a login system, an ability to save games somewhere, and the user interface to name a few. It was a long process and one that I’m still not completely done tweaking.

AI Enhancements

Disclaimer: When I talk about AI, I’m talking about enemy behavior that’s always been around in video games. Generative AI, which copies and manipulates patterns found in other creators’ work, is something else entirely. There’s much debate going on about the ethics of how developers of generative AI collect sources. I stand firmly with artists and other creators in demanding all creator work be protected from use without permission. Needless to say all the art, text, and code in my game has been created by me. Now onto game AI…

The simplest enemy AI behavior is something like, “Go towards the player character and attack.” Having multiple enemies converging on your lone character is good chaotic fun. If you’ve ever played the video game classics, Berzerk, Robotron: 2084, or Smash TV you know what I mean. If you’ve ever gotten the puck while playing hockey in grade school gym class and been swarmed by every kid on the other team, you’ve experienced an unintentional analog version of this.

Obviously that behavior doesn’t work so well when trying to recreate historic battles with armies of multiple targets and orders, because all enemies converging on the closest counter isn’t very effective or realistic. I added a list of behaviors that could be applied to each counter (attack, defend, etc.) and that took me part of the way there, but it still needed something.

I wanted the flexibility of having one group doing one thing, while another does something else. For example, one group might react to an enemy that just moved into range, while another adjacent group maintains their original behavior (standing their ground for example), so I added this idea of groups. This allows the AI the ability to coordinate, not only on the counter level, but also at a group level and it avoids the swarming AI as described above. I made a video that explains this in more detail.

Additionally, I now have the ability to test a scenario multiple times with animations off. An indirect benefit that players will never see, being able to run through a battle 10 times in a matter of minutes has helped me immeasurably in balancing the scenarios, observing AI behaviors, and catching bugs.

Computer playing itself on the Battle of Issus scenario
Computer playing itself in the Battle of Issus

Campaign Mode!

Once I finished the fourth battle of the game, I thought it was time to add a campaign feature that links all the battles together. It gives the player a better understanding of how Alexander’s army moved across his would-be empire and gives the game more purpose, a “bigger than one battle” feeling. At the time of this writing I’m still undecided as to how I will grade a player’s performance, but the game is saving stats on each battle as they progress so anything’s possible.

Campaign progress screen
Campaign progress screen (not final art)

More Scenarios

At the time of this writing I’m working on the sixth battle that will be included in the game. I’m not sure if I’ll stop after six or keep adding battles. Along the way I’ve tried to make art improvements to both, the counters and maps.

Reinforcements

I added this feature last year and wasn’t even sure if it would make its way into the game, but I knew it might come in handy at some point. Especially if I were to make more games using this system…

Lucille wink

Ahem. Well it turns out I did have use for it in the Hydaspes scenario where some units were getting to the party late so it worked out well. There were some interesting challenges in having these units being placed mid-battle. For example, when the reinforcement’s entry hex and its adjacent hexes are occupied. In that case I made the decision that a counter could enter into contiguous adjacent hexes up to its movement value. If all hexes are occupied that unit will have to wait to enter the fray.

During testing, Alexander and unit boldly enter as reinforcements into a less-than-ideal situation.

Much, Much More

Other than these major changes there were many smaller ones. Adding online and campaign modes means adding more screens and more UI elements. I had originally said I was going to be done with this game at the start of last year (lolz) but I decided it’s more important to get some things right on launch than adding them later, additional battles, online, and campaign being the biggest culprits.

One of the smaller fixes was to improve Ranged Attack. Here a Macedonian Archer can target a unit on the edge of a higher elevation, but not the units that are one hex back from the edge.
One of the smaller fixes was to improve Ranged Attack. Here a Macedonian Archer can target a unit on the edge of a higher elevation, but not the units that are one hex back from the edge.

There’s still a lot to do but I’m optimistically hoping I can release this game in 2024. Thanks for reading and happy gaming!


2 responses to “Design Diary – December 2023”

  1. mark churney says:

    Fabulous work. Couple of questions,
    1. Do you have a database – I’m starting wargame project using Django.
    2. What is your front-end – I’m using the brand-new Pyscript/LTK in the browser.

    3. How are you handling zoom and pan.
    4. Do you have a github.

    • billk says:

      Hi there Mark, I do have a database but it’s only needed for online play. So far, I’m not using any frameworks or libraries at all. Everything is coded from scratch. I’m not against frameworks or anything, just personally more comfortable doing as much as I can without and relying on my front-end experience.

Leave a Reply

Your email address will not be published. Required fields are marked *

Sign up to our newsletter and stay updated!