top of page
Millennia
My Role
-
Implemented content for ages, national spirits, governments, factions, tile improvements, and more leading up to launch.
-
Designed and implemented a system for Ai players to show their decisions within a game.
-
Balanced complex economies within the game for both human and Ai players.
-
Supported the game with continuous update cycles and balance patches.
-
Wrote extensive in-game and flavor text, nested tooltips, infopedia entries, and coordinated with localization teams to ensure high-quality translations across multiple languages.

Game Summary
Millennia is a turn based 4X strategy game for PC where players take a unique journey through alternate sets of history, shape what their nation is known for, and engage in deep economy systems.
Engine:
Platform:
Unity 2019.4.4.0f1
PC
Development Time:
1.5 years
Team Size:
18 team members
Initial Concept


Iteration
The concept for the game is a spin on Civilization except alternate history. Players make decisions within the course of the game and that will affect them for the rest of their playthrough. The game tries to answer a number of things Civ fans have disliked for years such as having ways to end a playthrough early, customizing your chosen nation through actions taken rather than a predetermined choice, and a more in depth tile economy with a goods system.
Design Goals
Balancing Systems
I was tasked with the balancing and management of multiple overlapping systems that made up a complex in game economy. I tried to make changes that enhanced the player's decisions with how they built their nation.
Ai Decision Making
I was the main designer tasked with managing Ai. My main goal with the enemy Ai players was to make them appear to be smarter than they are by showing them visibly changing or acting differently based on decisions they made.
Iterative Playtesting
I joined this team in the middle of intense development to help get the game across the finish line. My central goal was to make positive additions to the core of the game through black-box style balancing and feedback from playtesting.
Balance Systems
Soft Region Count
There was a lot of design work that went into the economy of the game. I wouldn't be able to show every problem with a culture power, technology, tile improvement, or good that I was tasked with solving.
Some of the more interesting problems I tackled when looking at resources within the game were ensuring Region Count had soft limits based on culture upkeep. I tracked Ai & human player's average culture values per age and set an upkeep value that would be affected by an exponential exponent. That way we could ensure big culture spikes at certain gameplay ages and balance ages around an intended region count.


Tuning Overpowered Abilities
Another issue I ran into during development was that culture powers felt outclassed by the Eureka ability to discover a random technology. Players would rush culture, then discover technologies faster than players who rushed knowledge buildings. I decided during development that this dynamic didn't make sense. I brought it up to the lead designer and after getting approval I was tasked with coming up with a solution.
To fix this I added a negative modifier to the Eureka power each time it's use within an age. However, once the next age triggers Eureka will scale back to it's original value, then increase to an age-appropriate amount of knowledge. This greatly improved the play experience as now all players tended to use their first culture power on the Eureka ability, but then use other powers after the scaling took effect. Now players were summoning armies and founding religions within an age when previously they were spamming constant Eurekas.


Taps vs Drains
Taps add resources to a player's inventory within an in-game economy. Drains remove those resources. During Millenia's development it was clear we had an issue of too many taps within the Domain XP system. Domain XP was often added to the player's inventory on a per-turn-basis. This issue would scale as the the game went on for a long time. The vision for the game was to have a very long playtime, roughly 500 turns, so players often hit their Domain XP cap around turn 250.
I felt that it was satisfying to add more Domain XP taps as a player. So instead of removing taps I opted to design new drains for the game that would be rolled out in an update. Domain XP often couldn't influence other systems such as City Food, Housing, or Education. The drains I proposed would add temporary percentage-based buffs to a selected city's need. While the powers themselves had a middling effect to gameplay they gave players a way to modify their city stats using an overflowing resource they had nothing else to spend on.



Ai Decision Making
Dynamically Weighted Goals
During development Millennia already had static weights that helped determine an Ai player's decisions. A culture power with a higher weight would be used more frequently by the AI player than another power they had access to with a lower weight. Some consistent feedback throughout development was that it was difficult to tell what the other players were doing
Working with the Ai programmer on our team we created a system of dynamically weighted Ai goals that placed weights on abilities, units, and tile improvements based on a set of requirements. I was tasked with authoring all of these goals for everything in the game, and the Ai programmer I was working with assisted in caching off this data to help the game remain performant.
Here's an example. The Aztecs within this example game selected the Mound Builders national spirit. Here is the goal I wrote out in XML which specifies to add weight to tagged objects with AIHint-Mound. The Mound tile improvement is tagged with this ai hint so while this goal is active for the player they will build it more. The goal also specifies the age must be below Age 4 and the player must own less than or equal to 3 mounds. The capital city can be seen in game with two mound improvements.



Research Pace
Another example of my design work with the Ai players in Millennia pertains to the knowledge race. Over a ~500 turn game human players would begin to easily outpace ai players gaining a lead of 2-3 whole ages. This resulted in players with tanks fighting players on horseback, obviously not an ideal play experience for the human player.
To fix this issue I took a multi-faceted approach using new Ai goals, new updates for Ai players upon age transitions, additional difficulty settings, and balance on paper using available telemetry at the time.
First I made a chart looking at tech costs by age, took the average knowledge per turn of ai players across many games on average difficulty, and broke those costs down into their turn count for the age. I also used telemetry data available at the time (most games only reached around turn 400 at the time due to this knowledge race issue) and pulled in game data of when ai players reached different ages by what turn number.
I then added new ai goals, buffs, and buildings at sections where ai players took many more turns than the target number (50 per age after age 3). Finally to refine this I increased or decreased this average based on the difficulty of each Ai player.



Iterative Playtesting
Wonders
Something I noticed after many rounds of playtesting was that the game featured Wonder buildings in the early ages of the game, but not the later ones. I designed a list of new wonders to fill out the rest of the ages.
I researched historically accurate examples and wrote out pseudo XML entries for each of these new buildings. I also designed these buildings to be powerful as not every player will unlock them on every run.
I worked with the game's publisher on copyright issues for what buildings could and could not be used. I also worked with the art team on what buildings they would like to see and work on in game. Once the assets were finished it was easy for me to add them to the game along with my XML to begin testing and playing with them.


Postmortem
What Went Well
-
This was the largest game I've shipped to date with the highest volume of content.
-
Some of the player's nicest compliments for the game are how deep the systems within it are and how it's fun to play even if it's visually unappealing.
What Went Wrong
-
There's an overreliance on text within the game to explain mechanics.
-
The game's late game tends to drag as the player is burdened with managing too many regions, units, etc. This was a problem in Civilization we were not able to solve in this game.
What I Learned
-
I learned the importance of planning file and code structure. The Ai goals xml deck ended up very disorganized.
-
When possible think about data driving a mechanic. Data empowered the design team to craft a lot of content for this game.
bottom of page