A major improvement was made to the Conquest! server this week. In order to understand it, first a minor history lesson.
Conquest! has always had the concept of a single winner of an Age. In the past, this was the player who made it to king ten times without dying. This usually took a player 30-45 calendar days, depending on the level of competition.
For the mobile version, the game was modified so that land was fixed and the victory condition was changed to the first player who controlled a percentage of the total land (current 15%).
When an Age ends, all players are reset, heroes and artifact locations are changed, a new secret city name is chosen, and a few variables (such as the current Age) were updated. The mobile version of the server works the same, except players are automatically carried over. In the past, everyone had to recreate their player, including all settings.
Restarting an age was a manual process. Since Ages used to take so long and the level of effort was relatively low (15-30 minutes) I didn't have automating the Age restart as a high priority. Until recently.
For the first time since Conquest! started (circa 1993), Age restarts are now fully automated. The process took a day to implement (and another to fully debug) but it works great. Once a player amasses enough land, they are made Titan (a special class reserved for Age winners) and an announcement is made that a new Age will be starting soon. Email alerts for those who have signed up are also sent.
Thirty minutes later, the server initiates the new Age code. Files are closed and backed up to an "ages" directory. Cities and continents are reset and players who survived the old Age and recreated in the new.
One of the most challenging aspects was the random generation of names for heroes and the secret city; I already had code to generate locations of artifacts. I had never written a random name generator and searching around yielded little in the way of an actual algorithm I could use. Some were simple, such as randomly combining consonants and vowels. Others were much more sophisticated, where probabilities were established that one letter would follow another. But I didn't really like either approach.
In the end, I simply created a "dictionary" of word combinations and then randomly put them together. In my tests, they came out well. For some reason I thought this was going to be easier than it was.
Now that no human intervention is required, the game is effectively self-running. As long as the machine stays up (and the game doesn't crash for another reason!) it could run indefinitely (in theory!). While this process is invisible to the players, it is a huge quality of life improvement for me.
An improvement for the players next Age that is being discussed is the removal of a game season. Seasons currently happen 5x per day and grant movement points, attacks, food and gold production, etc. This gives players more to do but also means a greater time commitment. By reducing the seasons, and lowering the victory condition to 12%, I'm hoping to make it easier to get into the game without sacrificing real life responsibilities. I'll report back after the 5th Age ends.
Sign up for the Conquest! mailing list here and follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game.
James has been working on Conquest! since 1993.