With feature-work having officially ended for Milestone 2A and us moving on to bug-fixing and cleanup, it's time for our second milestone retrospective! For those that missed our Milestone 1 Retrospective these are intended as a look back at our previous milestone, and in the interest of transparency, talk in greater depth about the things that worked, the lessons learned from the things that didn't work, and the always important small victories.
Before we jump in, some of you might have noticed that our Alpha invites for Kingdoms of Elyria didn’t materialize at the end of May. Despite pushing hard, we encountered some key technical issues we’ve had to overcome that have pushed development back by a week or two. Additionally, getting the Alpha test into your hands means implementing an installer, launcher, updates to our authentication services, and an in-game feedback form, but time spent now will serve us well in the future as we deploy regular updates to the client.
Our next episode of Inside Chronicles of Elyria, which we're aiming to release next week, will provide lengthier details on the Alpha invite process and a firmer timescale. We’re hoping that in a couple of weeks’ time our issues will be ironed out and Alpha backers can dive in to experience the first moments of KoE.
In-Editor view of the Dryas Elk in KoE
With that out of the way, let's dive into the retrospective. As we discussed in the M1 retrospective, each of our milestones are planned for between 4 and 6 weeks of development time. At the end, we like to look back and dissect the good, the bad, and the ugly in a format we call our "KDA" - a sort of scoreboard for our progress. Here's how we use these familiar gaming terms:
This milestone's KDA is measured against the work that was laid out in our Milestone 2 Preview. If you haven't read what's planned for Milestone 2A and 2B, check that out so you can see what's coming up next.
To kick it off, Milestone 2A saw the introduction of ambient, UI, and action-based sound effects into the game. In next week's episode of Inside CoE you'll get to hear birds chirping, animals "talking", buttons clicking, and of course, sound effects for things such as chopping trees. While not technically challenging, the addition of sound to the game brings the immersion up a notch. Additionally, we've temporarily integrated our existing Chronicles of Elyria soundtrack into the game as background music. I say "temporarily" because our award-winning composer, Sean Beeson, is hard at work on new background music for each of the different biomes, starting with the Mixed Leaf Forest. The effort to create biome-specific background music began with our prior work on CoE in biomes such as the Wetlands and Semi-Arid desert and will continue through the remaining biomes. This means the music in KoE and CoE will, in whole or in part, be found in both games, helping to bridge the two and communicating that both are part of the same universe. Score: 1/0/0.
Next up, NPC diversity. Prior to Milestone 2A, all the citizens in KoE were Neran males. With the stellar work from our character artist, our test environment is now populated with Neran, Kypiq, and The Waerd, Male & Female, with a diverse set of ages ranging from adolescent to geriatric. Killed it! It should be noted, however, that the faces and head shapes of all the tribes remain the same for the time being, with differences limited to height, skin color, and hair color. This is intentional as the work to give them different facial features is reserved for Milestone 4 (Families & Immigration) when we'll investigate the DNA and offspring mechanics. Score: 2/0/0.
While not originally part of the Milestone 2 roadmap, lots of people got in touch to ask whether our adorable (and dangerous) animals from CoE were going to be a part of KoE. Well, during Milestone 2A we were able to write the tools necessary to convert our CoE rigs and skeletons to a format usable by Unity. So, we now have the ability to bring over all of our existing CoE animals. So far, we've brought over the Canis Rabbit and the Dryas Elk, with more to come down the road. Unfortunately, the process of bringing them over isn’t entirely straightforward as the skinning mechanics in Kingdoms of Elyria, which hadn't previously been implemented in Chronicles of Elyria, means we also need to create skinned versions of the models. Bringing them over isn't free but the additional asset creation is necessary for both KoE and CoE, so why not now? Score: 3/0/0.
In-Editor view of the Canis Rabbit in KoE
Finally, work has been completed in Milestone 2A to improve the biodiversity of the Mixed Leaf Forest to increase density and expand the different types of underbrush present. The result is a lusher looking forest that more closely resembles the look and feel of Chronicles of Elyria. This is an ongoing process which will continue for many milestones, but each pass makes the world feel richer, deeper, and brings it more in line with our goal for the game's visuals. Score: 4/0/0.
In-Editor view of the test map with more biodiversity
While we made huge strides in Milestone 2A, it’s not all good news. We ran into a few technical hurdles on the dynamic AI system which occupied quite a bit of our time. As a result, we ran out of time before being able to make significant progress on porting the contract system from CoE and implementing the new contract UI. At the moment, the contract system is missing from KoE.
With that in mind, we had to make a choice on whether to call milestone 2A "complete" and push the remaining work to 2B, or keep chugging away on 2A, further delaying the first Alpha Test. This was the first real test of our desire to get KoE into the hands of our backers for feedback, regardless of its current state. Every bone in our bodies wanted to hold onto it longer so we could get the contract system working before release, however, that's not what we're going to do. The learning here is that it's more important to show regular progress and deliver "something" than to try and get "everything" done. As they say, "Perfect is the enemy of good." So, the KoE Alpha Test for Milestone 2A will launch without contracts initially, but that'll be one of our first priorities after launch and we'll work to get that done before moving on to the Milestone 2B feature set. Score: 4/1/0.
Next up, the Fog of War. The fog was originally a Milestone 1 feature and as we mentioned in our last retrospective, was pushed to M2 because our current implementation doesn't support showing previously visited locations as a semi-transparent fog. Well, it still doesn't. We deprioritized work on the fog due to our focus on pathfinding and AI, and as a result, our new solution remains non-performant enough that we can't ship it yet. For the time-being, we're still using the previous fog of war solution. That means that when KoE launches for the first Alpha test, the fog will fill in after you leave the area. Score: 4/2/0.
Finishing off our KDA scorecard are the assists, and this one is so close to being done, and required so much work to complete that I really wanted to call it a Kill. But it's not 100% complete at the moment, so it wouldn't be fair to take the point. The largest amount of time in Milestone 2A was spent on our new dynamic AI system, a variation of Jeff Orkin's Goal Oriented Action Planning system. In short, the AI system forgoes more traditional, static methods of planning such as Finite State Machines and Push-down Automata, in favor of a composable planning system consisting of actions and goals. As the NPC goes about their lives, they're regularly evaluating their needs and goals, and once one is determined to be the highest priority, they go about creating a plan of actions that will ultimately result in them fulfilling their goal.
The actions themselves are comprised of precondition (things that must be true before the action can be started) and post-conditions (things that will be true when the action is complete). As an example, an NPC may determine that their highest priority at a given moment is to get warm. This could happen at night or during certain seasons when the temperature drops below a comfortable level. At that point, the NPC must determine the appropriate actions to take to get warm. Hypothetically, they may decide the cheapest way to do that is to build a fire, but to do that they'll need wood. To get wood, they'll need to chop down a tree, which requires having an axe in-hand. Each of those steps are hypothetically the "cheapest" actions given the current state of the world and each one is necessary for the NPC to "get warm." Working backwards from needing to get warm, the NPC would then build a plan consisting of getting an axe, chopping down a tree, building a fire, and then standing next to the fire until warm.
The real benefit to the GOAP system is that more than one action can fulfill the preconditions of another action. In the above example, if the citizen was in town, they may be closer to their house. In that case, it may be "cheaper" just to go to their house to get warm. As the number of actions available increases, so too does the perceived choice and intelligence of the AI. As the number of goals increase, so too does the complexity of the NPCs AI.
In Milestone 2A, we built our implementation of the GOAP system, we built a handful of survival goals, and we've built almost three dozen actions. All-in-all we're super proud of the work. That said, we ran into some architectural challenges. Unlike most implementations of GOAP that assume an object-oriented approach, KoE and CoE are built on a distributed ECS where component data is distributed across different repositories potentially living on different servers. There are performance considerations that must be addressed to make sure our AI runs efficiently. These extra constraints to our GOAP system meant we had less time for bug-fixing and integration and so while a ton of work has been done, we still have bugs present, such as missing pre/post conditions and missing event notifications that prevent the system from working as planned.
At the moment, the NPCs still aren't using the GOAP AI system in production. However, we do expect that to be done before KoE ships to Alpha Testers. Overall, we're going to call it an assist. Score: 4/2/1.
Finally, we have pathfinding. Like the Fog of War, pathfinding was a Milestone 1 goal that got punted to Milestone 2. In milestone 2A we switched from the default Unity navigation mesh and pathfinding system to a third-party solution. This was to remove our reliance on Unity for navigation, as pathfinding must ultimately be performed on the server. That said, the pathfinding is still being done on the client and isn't functional on the server yet.
This gets us one-step closer and whether we refactor the third-party solution to work on the server or re-write our own, we're at least no longer tied to Unity for pathfinding. Score: 4/2/2.
In-Editor view of the test map Showing some of the richer underbrush
As mentioned before, our next episode of Inside Chronicles of Elyria will be released next week. In that episode, we'll recap some of what's been said here for those that prefer a video format, but we'll also be taking an in-depth look at everything that's been done in KoE.
This is going to be more of a "let’s play" format. I'll be launching the game and then going feature-by-feature demonstrating what's working and what isn't. This is partly to make sure those not participating in the Alpha Test are still able to follow along with our progress, and partly to set expectations for the Alpha Testers. We're only about 25% of the way done with KoE so we don't want people going in expecting a complete game.
That's it for this milestone retrospective! Looking forward, we've got a week or so more of bug-fixing, and then we need to spend time working on the installer, launcher, and updates to our authorization system. After that, it's on to the first play test! So stay tuned for next week's episode for more information on the first KoE Alpha Test.