Sponsored By

Continuous Improvement Development

This week I made several major modifications to the Conquest! game server which don't affect player experience but do make the server run more efficient.

James Bennett, Blogger

August 24, 2015

3 Min Read

This week saw many major changes to the server.  The server has a centralized parser, which handles figuring out the request from a user and calling the appropriate function to execute.  The commands are stored in a sorted array and a function pointer is associated with each one.  Prior to the change, the server would save the player who initiated the command, regardless of the outcome of the command.  This is fine for small numbers of players but Conquest! needs to scale once we launch a mobile client.  Now, the server will only save if the command has an impact on a player's stats.  This is especially critical for commands such as "Person" and "Review", which are purely for informational purposes but called frequently.

The next change had to do with how commands are checked.  Most commands in Conquest! require movement points to execute (this represent time) and some are class-based.  Prior to the update, these items were checked in each function.  I modified the command structure to include the cost and class restrictions and these are now checked in the parser.  This reduced duplicated code (the server supports over 100 individual commands) and makes it easier for me to maintain these items going forward.  There are some exceptions, for example some commands use a player's level to determine the exact cost, and these are still handled individually.  Neither of these changes have an impact on the user experience but make the server better.

The last major backend change deals with how player logs, private messages between players, and journals are stored.  Before, I used the player's name and two different functions to handle logs/private messages and journal entries.  Now I have one central function which handles all three and a standard naming convention using the players unique ID.

There were several changes which do affect player experience, the first relates to Vassals.  Conquest! supports the notion of Liege/Vassal, whereby a new player can choose to server under a Lord (or Lady).  This allows players to choose their Faction, Continent, and Class at the start of the game.  Prior to the change, you could have up to 16 Vassals; each new year Vassals would send a small amount of food (5%) to their Liege in exchange for a small amount of gold (2%).  During battles, Lieges and Vassals would send small amount of troops to aid one another; this feature can be toggled on/off by the Liege.

When I revisited the math, the numbers were ridiculously low: if your liege had 500,000 gold a vassal would receive 10,000 gold per day.  Assuming 4 vassals, each with 3000 food, a Liege received 600 food.  Neither of these amounts are significant at all.  So I capped the number of vassals to 4 and for each Vassal a Liege receives a 5% bonus to their food production each Housekeeping (HK, currently 6x per day).  For each level their Liege is above 3, Vassals receive a 5% bonus to income each HK.  This equates to nice bonuses for each and does not take away assets from either player.  Aid during battles remains the same.

On the Unity client front, Steffon rearchitected how incoming commands from the server are processed.  This is key because the the client has to respond to not only commands initiated by a player but also things like world event messages or chat send by the server.  This new architecture is a good foundation for the client.

Finally, on the crowd funding front we have picked a target date of September 7th to launch the campaign.  This is contingent on having the artwork and a playable Unity client ready but should be achievable.

Until next time, I hope to see you in the game!

Read more about:

Blogs
Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like