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. Enjoy!
0 Comments
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:
<Conquest><Command>Book</Command><User>Nemesis</User><Token>VMLFFHVEHFLKSOLVXAWMWBBPMHCBZAU</Token></Conquest> 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... I created a page specifically for the reviews. You can check it out here.
After a very relaxing week in Maui I returned to Conquest! to address several bugs involving the client and server (thanks to SeLTiC and MrEricScott for their efforts). Most notably, was a bug which broke the client if you changed classes. In addition to all the bug fixes, I managed to add a few new quality of life items. First up, the client side bugs:
This should help alliances stock enough troops to make them worthwhile. The troop type alliances give can also be changed by the leader. Some "creature comforts" added to the client:
On April 4, 2015 DINOLION studios shot a promotional video for Conquest! The editing process is complete and it looks awesome! Check it out here. It is essentially a live action version of the introductory text used for Conquest! for as long as I can remember. Great stuff!
On the client and server front, I made several modifications the past couple of days. For the server, I changed the food production calculation. Now, peasants can farm 2 land each and if you have more peasants than land they can still contribute to your food production. I added a few more journal entries (traveling to the secret, antimagic, and magic cities and clues to the secret spell component). I also added support for level 7 quest characters. For the client, I added a "Use Item" menu to the right click options and increased support for the vacation command. I also cleaned up some code; you won't notice anything on the front end, but it helps me sleep at night knowing I'm removing unnecessary code. The last two days have seen quite a bit of activity. An "old" player, "SeLTiC", was testing what happens when a player is eliminated while playing. The client did not handle this well. At all. You received two popups and if you created a new player, your old stats were displayed. Yuck.
The issue was my lack of understanding when Form events are fired. I was initially used "Load", which is only called once, and then actually broke the client for new players when I switched to "Activates". Now I just call the function I want instead of relying on events and the experience is smoother. On the new front, I added "Sell" to the rick click menu for market to quickly allow you to sell food and a "Transfer All" command to manage troop movements better. The server supported this, I just got around to adding it to the client. Finally, I added a configuration file ("conquest.settings") to store the last used username/password and server/port. Another good suggestion by SeLTiC. Feedback from MrEricScott also yielded two new pages to help the new player experience. Conquest! has always had a bit of a learning curve and these new pages address that by providing step by step instructions (with images) of what to do when you first land in the game. Thanks to MrEricScott for these! In testing with "MrEricScott", a chicken/egg problem was discovered. Once all the land has been claimed, by attacking the hordes, how does a newplayer go about getting land? With only 1 Keep, it will be difficult to find targets who have land and who you can beat in combat.
Enter "Forgery", which allows you to take a small amount of land (25-100) from another player, at the cost of an attack (only if successful). In this way, you can steal land from other players and build up your army. Since this is new, testing will have to ensure it is balanced. Check it out in the new client released today. The login screen no longer automatically pulls the list of lieges to newplayer under. I did this in case a player wanted to connect to a different game server. Might be kind of silly since there is only one game server right now...
Anyway, to refresh the list hit the "crown" button next to the dropdown to pull in the list. |
AuthorJames has been working on Conquest! since 1993. Archives
December 2023
Categories |