The UI design contest ended yesterday. I had selected 2 designers from a field of 10 and now it is time to select a winner. You can vote and check them out here. Thank you to all the designers who participated; I expect to make a final decision within the next couple of days.
On the Conquest! front the age ended (Congratulations Perrin!) and I made modifications to the amount of land required to win (from 20 to 30%) and lowered the total amount of land available in game. Attack limits are (finally) continent specific which, when combined with the increase in movement points a while back, should give players more to do. I believe the only things now shared between a player's kingdoms are movement points and magical items.
I also made some significant changes to the core data structures used in the game, namely a player's kingdoms and class. This does not affect gameplay in any way but it makes it easier for easier code maintenance. Most of these changes affected "ancient" code (circa 2000) which was bolted onto over many years of development. Eventually, this spider web becomes hard to wade through and is a constant reminder of, you need to fix that!
Certain magical items also saw a boost in the number of charges they have (i.e. Thieves Tools, Golden Cow, Mask of the Undead, etc.). The charges are random but I thought it would things more interesting vs having all items either one use or unlimited.
On the Windows client side, I changed the colors again. This client is just to allow people to play the game while a mobile client is under development. You can download it here.
I also launched a new Facebook and Forum pages this week. One of the suggestions I received was to host these items myself to improve the Conquest! brand by making them consistent.
Until next week, hope to see you in the game!
Last week I launched a UI design contest at 99designs.com asking for two screens: the Kingdom Overview and Travel. The responses have been great and I cannot wait to share. The contest is broken into several phases: bidding, finalists, winner. Today the contest will enter the finalists phase, where I select the top 4 designers to narrow the field down.
In other exciting news, "ArchElf" has started work on a client in the Unity platform and already has the communication piece working. I believe this effort, combined with the winning design, is the future for Conquest!. One of the challenges with Conquest! has also been a high barrier to entry. When it started on IRC, there was a limited number of people who knew about that platform and getting online was more involved than it is today. Earlier this year I created a Windows client, but it uses a legacy API which is not supported on anything but a PC. It was never meant to be the final solution; rather, an easier way to demonstrate the game-play.
On the server side, I made just a few enhancements this week. When you establish a new kingdom, you will receive enough land for 2 structures (until it runs out). In this way, you can get a small army and economy going. I also modified how data is sent to the client for certain commands (market, city, email, alliance, troops). Under the old way, these items were sent either with separate messages or (in the case of troops) as one long space delimited string. The latter violated the protocol, as each should be sent with a separate XML tag as part of one message. I'm sure there are other instances of this that I will root out and fix over time.
I also standardized the true/false messages coming from the server to YES/NO. For example, when sending whether a player can buy an item one of those values is now a parameter. How this is conveyed to the user is up to the client.
For the existing client, I combined the "View Kingdom/Army" buttons into one, due to the warnings in place for low food/gold/housing. I also modified the sidebar to improve readability.
This week saw the introduction of a few new features, as well as the return of something old. On the new front, I modified the "Quest" concept to be tasks which any class can undertake. This includes the Bandits tutorial, searching for items, attacking the horde, or your signature troop. Former quests for magical components and jousting were moved to Mage and Fighter tabs; jousting is now a fighter-only quest. I retired quest riddle, which made more sense before the advent of Google.
A new Age started and I took the chance to modify some of the key metrics, namely the amount of land a structure needs and how many troops it can support. Previously, all structures required 50 land and the amount of troops were based on your class. Now, the amount of land varies between class (Fighters, Mages, and Clerics requiring more land than Barbarians, Rangers, and Vampires). The goal here was to keep the number of troops and income the same, but decrease the number of structures in the game. The reason for the change is the amount of loot you capture is based on the number of castles you have. This will probably require further balancing as more testing is done. On a related topic, players once again start with land (enough for 2 structures).
I added a new task to the tutorial, which shows how to locate other players in the game. Finally, I added a new magical item to the game (Potion of Cure Disease), which will rid your kingdom of plague or sickness.
Until next time!
This week I introduced a new tutorial, "Quest Bandits". The "old" tutorial, which describes the game, is now called the "Player Guide". This quest walks players through several key concepts in the game: traveling, markets, visiting the tavern and mystic, questing for items, spying on others, and combat.
None of the actions, including the final assault on the bandit leader, remove a player's protection. The quest can only be completed once and grants some additional loot, including +25 movement points. It is still in a "beta" stage, so I may tweak it based on feedback.
Also this week I added support for "housing". Before, all troops essentially took up one "unit" of housing. However, by removing the required support for siege, these ranged weapons became very powerful. Siege now occupies 5 units of housing; all other troops currently use just 1. Housing is displayed in the sidebar for easy reference. Troops not housed will desert as usual.
I added a new option for email, "Daily Digest", which sends out the total players, free land, and top 5 players. Weather was updated so the seasons are based on the server time (early morning is winter, morning is spring, afternoon is summer, evening is fall). This has helped regulate the weather so it isn't just completely random.
There was a bug in the Graveyard, where Vampires animate troops, which was producing weird results. This was corrected this week as well.
Finally, I continued my own quest to clean up the messages sent by the server with 50+ messages either changed or removed. One of the new messages includes a warning for cursed magical items.
This week saw this addition of basic email alerts for Conquest! (accessible under Game > Options > Email). When Conquest! ran on IRC< it included the ability to email a player's log or the KIA to an email address. This functionality was removed when I started a new major version of the server earlier this year.
The modification allows alerts to be sent when a player is attacked or a new age is about to begin (see persistent worlds in the previous blog post). Other alerts could be added in the future.
Balancing changes this week included the ability for Barbarians to quest horde. Before this mod, low-level Barbarians had a tough time of establishing a foothold. With this change I also added a distinct type each class faces when attacking the horde: Fighters > Barbarians, Barbarians > Sellswords, Mages > Crusaders, Clerics > Magical Army, Rangers > Undead. The mechanics are the same, but it adds some variety.
Finally, I added support in the Windows client for city owners to open ports. I also modified some of the structures used in the game client. This last change should not have any noticeable change but it helps me sleep better at night. :-)
This week saw the inclusion of a nee player tutorial to the game client. The tutorial consists of 8 pages designed to clarify the objective of the game, as well as some specific actions to try. The tutorial is displayed whenever a player is created or the client is upgraded, but it can be disabled from the options menu.
I developed three new magical items for the game: Drums of Panic, Boots of Dancing, Scroll of Dispel Magic. I will leave it to your imagination to determine which one is cursed. The items will be available next age.
I also re-did the journal structure. Before, it saved the entire message i.e. "I began my reign on Normandy in the year 1000." Now, it just saves the message number and the parameters i.e. "4170_Normandy_1000". This will cut down on the amount of network traffic between client and server. I also increased the number of message IDs which could be sent in one go to a client.
Some game balancing changes were also made, notably to the mage spell wish. Under the old system, there was a 20% chance a mage could wish for 100 towers. These could then be sold for 3,750,000 gold. With mages having the most movement points and receiving components each HK I thought this was overpowered. Additionally, I discovered an error in the chance of success calculation (meant to increase the odds as you decreased the amount) where you could find a "sweet spot" and wishes would always succeed. Clearly this wasn't what I intended with wish (ask any DM).
Finally, in the game I purchased a city and noticed that the minimum price could be 1 gold. This allowed me to open up markets for my class and buy troops, essentially for free (the game fills the market for your each HK). To prevent this I added minimum prices to the markets. I also continued tweaking the messages with over 50 messages adjusted.
One of the suggestions made by players is that in order to compete you cannot miss a Housekeeping. At Housekeeping, all players receive large amounts of movement points, food is produced, troops are fed/paid, etc. When Conquest! first started there was just one Housekeeping. Over time, more HKs were added, to improve the pace of the game.
Until today, the server time dictated when HKs ran. I have made a change to the server to allow players to specify an offset from GMT (in hours). This offset ensures that the 9pm HK, for example, runs at 9pm for everyone. "World HKs", which is when cities open markets, change prices, etc. still occur at the server time.
I also changed the HK times to run from 6am - 9pm, when most people have availability to play.
This was a fairly involved change and I do expect some bugs. In the end, I'm hoping this will make things easier for people to enjoy the game.
Non-time related enhancements this week include a button to show who is currently connected to the server and adjustments to the client UI. I removed some extraneous information (like showing "Yes" next to the icon indicating if you were protected) and grouped other items together where it made sense (Remote Kingdom on the Kingdom tab, for example).
And since the last Age was won in 4 days I increased the strength of the Barbarian Hordes and modified the payouts.
Finally, I continued my quest to standardize the messages with updates to 20-30 messages.
In my never ending quest to make Conquest! better, I often go back and look at old code, that is code I haven't looked at in a very long time. Sometimes I will find code that was bolted on and isn't very good (either inefficient or just written poorly). While researching a new idea (allowing players to specify when Housekeeping (HK) occurs for their kingdoms) I discovered some of this poor written code.
I didn't implement the feature, but I decided to fix the code, which was related to New Year HKs. The one line of code which caused the disaster was using the memset() function. As it's name implies, memset is used to specify what value a block of memory should have. One of the things which occurs during a NYHK is to clear the retaliation list.
Retaliation allows higher level players who have been attacked by lower level players to attack back, regardless of the level difference. This was to counter low level players attacking higher level players without risk, either to wear them down or to "spy" on their army. Instead of specifying the part of the player data model dealing with retaliation, I specified the address of the whole structure. When the NYHK ran, it cleared the first 256 bytes of the player record!
This may not seem like a lot (and it really isn't) but it had the effect of wiping out several key pieces of information for every player in the game. Through coding and liberal use of the reset command I was able to fix most of it (after about 3 hours), though player badges and total battles won/lost, total troops killed/lost were reset back to zero.
New this week are some new random events: wandering spy, finding magical items, losing a ship. Additionally, finding troops or ships now includes a wider range (instead of just Soldiers or Barges). I also set a minimum number for movement points (MPs): players levels 1-3 receive the same amount. This was done to help lower level players do more each HK. I also increased the MP cap and removed the 50% penalty for stockpiling MPs.
Finally, I redid part of the weather system. Nothing like spending time on Google figuring out how fog works...
Conquest! has been developed over 20 years and as such has evolved quite a bit from the beginning, when it was a single process running as a bot on IRC. One of the major enhancements I made to the game was splitting it into a client/server model, which allows various clients (MUD, IRC, PC) to connect to the same game server. To facilitate this, all messages used in the game were assigned a unique number and moved to a file ("conquest.messages").
When a player interacts with the game, the server will send a response which contains that unique message number and any parameters which go along with it. It is up to the client to parse the message and display for the user. As such, there are over 1300 unique messages currently in Conquest!. Recently I have been trying to tighten these up, by correcting spelling or grammar mistakes, removing duplicates, and standardizing the language used by the game. It is a slow process, but definitely overdue.
On the disconnect front, I have removed the SO_LINGER option from the socket options on the server. I've been working with SeLTiC, who has created a ping program to find the disconnect "sweet spot". SO_LINGER modifies how the server deals with a close request from a client. Testing is underway to see if this solves the issue.
I've spent the morning working on the issue where the client fails to update the UI. I added some debug messages to the server and discovered that the server is indeed disconnecting the client for not following the Conquest! protocol, which looks something like this:
However, when I had the client log the commands before sending the XML and terminator were intact. Even more strange, around 90% of the time the same command would report the issue ("Book"). This seems to indicate there is a sizing issue but after spending the morning on Google, I couldn't locate any solid leads.
At least I know, generally, what the issue is. I will resume debugging sometime this weekend.
In other news, I am starting to work on a sequence document, which will list all the different commands and paths through the game. Up until now, this has only existed in my head but it's time to put some of this on paper. I really don't like documentation...
James has been working on Conquest! since 1993.