This week saw several commands modified for increased flexibility and updates to the way vassals and lieges receive aid. In Conquest! a player can have up to 4 armies fighting in a battle: their own, troops sent by an alliance, and two summoned armies (such as barbarians or packs of animals). There are class abilities, heroes, magical items, and spells which can grant summoned armies. Having multiple armies not only increases your firepower but they also absorb casualties. If your main army retreats the battle is over so having these additional armies is a tactical advantage. Prior to this change, all but the alliance and class-related summoned armies worked for attackers only and a target had to be specified when summoning the army i.e. "Use Amulet PlayerX" would summon a pack of animals and attack PlayerX immediately. These hordes could not aid you when fighting hordes to gain land. Now, when a player does summon an additional army, a flag is set and the very next battle, whether it is an attack or defense, the horde will join in. This opens a wide variety of tactical possibilities and allows a player to stage multiple armies prior to launching an attack. You can also stage these for defense. Similarly, magical items which granted bonuses, such as a Shield of the Wind, were one used immediately when attacking another player. Now, this bonus is granted for the next battle and can be combined with summoned armies. These hordes and bonuses are currently only valid for the very next battle but in the future additional effects could be granted where they last for x number of attacks or defenses. Last week I discussed the changes to Vassals and Lieges regarding food and gold generation. This week I modified how vassal aid works. Instead of pulling very small amounts of troops a player's army (too small to make a noticeable impact), the game will create a Militia army to aid a Liege/Vassal. The number of troops is dependent on the level of your Liege and/or the number of vassals you currently have. Players still receive a small percentage of the spoils when their Liege or one of their Vassals wins a battle. On the backend I added a player's class and numeric level to messages sent when a player is attacked/attacking and the population command, which lists 10 random player's on a continent. These values will be used by the Unity client; for example, here you can see the player's level displayed in the battle results: I also spent a couple of days rewriting major sections of the battle code. As with any development, over time bits and pieces were bolted onto the main structure which caused for duplication and/or inefficiencies in the code. This rewrite addresses some of them. For example, I used to have two functions which created summoned armies: one for troop based, one for creatures (such as dragons or packs of animals). Fundamentally they did the same thing so by combining into one function I can standardize how they are created (now all summoned armies are created by one function) and ensure ease of maintenance.
On the Unity front, Steffon continues to make good progress on the Client. The login and overview screens are functioning with the new architecture and he is now working on the kingdom screen. For the Kickstarter launch on September 7th, we hope to have a downloadable, playable version of the Unity client to demonstrate these screens. Until next week, I hope to see you in the game. Follow our journey on Twitter or Facebook.
0 Comments
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! This week saw many small improvements to the Conquest! game engine. A portion of these have no impact to how the game functions, such as standardizing constants used in the code, removing global variables, or collapsing like functions into one. The engine itself is written in C and over time had gotten "messy". The past several months have been spent not only adding new features but doing quite a bit of house cleaning.
Some of the new things this week include 8 magical items for players to quest for: Book of Prayer, Robe of Vermin, Potion of Invisibility, Bracers of Defense, Lens of Detection, Rogue's Dice, Horn of Fog, Stone of Weight. This brings the total amount available to an even 50. Magical items are loot in Conquest!; most (38) are beneficial in nature, the rest are cursed. Items can be sold for gold and are an important way for new players to build wealth or assets early on. The exact descriptions of all the items can be found here. Several artifacts also saw a boost in power. I also corrected the way troop bonuses are calculated and sent to the client. With the exception of one bonus given by the Alchemist hero, the bonuses you see when looking at your army are what you will use during combat (before these bonuses were not displayed properly until combat). Summoned armies, such as barbarian hordes, are now balanced instead of strictly being based on the player's army composition. This was done to prevent certain classes from being able to fight the horde risk free due to certain combinations of troops. The total in the summoned army is still based on the player's army. I removed support for two commands this week: "spy conquest" and "spy conquest list". The former used to show 10 random players on any continent; the latter, showed a list of the total number of players on a continent by level. "Spy Conquest" has been supplanted by the "population" command (which shows 10 players on your continent only) and "conquest list" wasn't very useful (and the client didn't support it). These were some of the earliest commands created in Conquest! but over time not needed. The total number of commands the server understands is now 129 and I may remove a few more to tidy things up. Finally, effects of weather are governed by how much of a continent you control: the higher the percentage, the more likely a weather event will affect your kingdom. On the client side, there was lots of good work done by Steffon and Krees this week. Steffon is working on a prototype of a mobile client in Unity, with art and design from Krees. Steffon has the login page working with the new design and it looks great! Once Krees finishes designing the new Kingdom, Travel, Combat, and Subterfuge screens we will have everything in place to launch a crowd funding campaign to complete development. Until next week, I hope to see you in the game! After approximately 3 weeks, a winner in the Conquest! Mobile UI Design contest was chosen: congratulations to Krees for his winning design. The design fits with the theme of the game and brings a much needed graphical interface to the game. Check out a sample: In other exciting news, a former player and C# developer ("Archelf") has started working on a Unity based platform for the client. He already has the client connecting to the game server and is able to send/receive data. The next steps are to incorporate the designs from Krees with the Unity client to build a working prototype for the crowd funding campaign to bring it all together. I've been working on a modest budget which should get us to the finish line. Very exciting!!!
On the server side, I added rotation for player logs. Before, they would just grow and grow, but I've now capped them to 128 entries. I also modified tithing for Clerics and Rangers to 20% and 15%, versus a hard cap. I added the "Summoned" and "Bandit" types to the configuration file vs. having them hard-hard coded. Quest characters will also increase their surrender percentage by 5% for every defeat. One of the more interesting changes this week was to "rock/paper/scissors" or troop counters. In summary, Infantry < Cavalry < Flight. Ranged attacks do more dammge to infantry and flying units, but less to cavalry. This has the effect of making army compositions and formations much more important and should lead to some fun outcomes. Until next time, I hope to see you in the game! 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. |
AuthorJames has been working on Conquest! since 1993. Archives
December 2023
Categories |