April 2024 Development Update


It's been a busy few months, but there's been great progress in continuing to build out the technology for the game. With the first five minutes of gameplay stubbed out, the next goal is to stub out the first hour of gameplay. 

Quests

The basic framework of quests has been implemented. Shining Force didn't really have quests as we think of them today - most of the world interactions were simply talking to characters or fighting. You could argue that there were some very limited quest trappings - like the finding and hatching of Domingo, but for the most part, it was pretty simple. I felt that Project Max could use a few side quests to help direct the player to explore the world, and thus - we have our first quest: picking berries.

AI

Much of the work done so far on the project was focused around exploration mode, but it was time to turn my attention to the most important element of the game, battles! I want battles to feel unique, have special objectives, and surprise the player with enemy types and challenges. Coding AI to support that would be challenging without a framework to stand on - and with Unreal, I was able to integrate this 2d world with their EQS (Environmental Query System) plugin. One of the benefits of this system is it allows to very quickly generate AI behavior based on generators, and tests. Let's look at an example


In this screenshot, the wolf wants to attack our hero, Max. The first thing it does is generate all positions that it can pathfind to that have an enemy nearby.  These are represented by the 4 green spheres around Max. Next, we need to prioritize which of these positions is the most optimal, given the wolf's desires in combat. For the wolf, it wants to move as little as possible to fight - no sense traveling 1/2 way across the map if the enemy is standing right next to you!

Scores are assigned to those nodes. As you can see, there are 2 nodes that are pretty close and 2 that are far away. The 2 nodes that are close are evenly weighted (0.4) so the AI will randomly choose one to move to and attack.

This sort of system will make it easy to customize AI based on their behaviors. For example, maybe you have a mage killer enemy that wants to focus on your casters. Or an archer that wants to move as far away from enemies as possible - but keeping them in range of their arrows. There are a lot of exciting possibilities here!

Cinematics

More tooling for our cinematics has been put in place, but one of the most exciting is the concept of a mult-event. Previously, every event had to finish before the next one started. If you wanted 2 creatures to move at the same time during a cutscene, you had to tell 1 to move, let it get to where it wanted to go, then have the other move. Suffice to say, it wasn't ideal. Multi-events now allow us to issue as many simultaneous events as we want!

Optimizations

Finally, I've spent some time optimizing some of our pathfinding. With some clever memory restructuring, I was able to get a sufficiently complex AI turn from 60ms (spread over a couple of frames) to < 1ms while running in debug mode. Because this is a turn-based game, it's not super important to have immediate AI turns (if it takes 1 frame or 5, it's really all the same to the player) - but this does allow more room for other things to be calculated!

Leave a comment

Log in with itch.io to leave a comment.