This week saw the completion of traveling the realm in Conquest!. This was challenging yet exciting as the screens work a bit different from most of the others. The realm of Conquest! is comprised of three continents, with each having a varying number of cities. Each city has different markets (and prices) for goods, so players must determine where they need to go to buy the troops they want. Additionally, the magic shop is only located in Port Cities. Fortunately, favorable markets can be added to a player's journal. Players may only purchase ships in port cities and may only sail from Port or Coastal cities. Traveling by land can be done in a number of different ways: by foot (most common), a magic carpet, or teleporting (mages only). Cities can be locked, either by the owner, mages, or in response to a barbarian attack. Players may not normally leave locked cities but rather can attempt to escape from them. Locked cities also prevent players from entering through normal means. The design of the screens called for a map of the continent or the realm to be displayed. As you can see, Krees did a very nice job with the maps and the features. Players will then click on a destination and select how they want to get there. Cities are laid out on a 10x10 grid. Prior to this week, these locations were randomized by the server. Given the nature of the continents and where the land and water are this lead to some cities being in the oceans or a port/coastal city far inland. I tried to come up with some rules when randomizing the locations but in the end I decided to just scrub the randomizing and have the coordinates fixed in the configuration. So while the city locations no longer change each Conquest! Age, I no longer have cities ending up in strange locations Traveling between continents is similar: Note that the Kraken will not appear unless a mage has summoned it!
We are moving on to Subterfuge next, which will cover spying and espionage. I expect this to take several days as there is a lot of content here. For those keeping score, we have the following screens remaining: Subterfuge, Combat, Fleet Maintenance, Alliances, Quests, Class Commands,Weather, Chat, Settings, Town Call. Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game.
1 Comment
It took several days but we finally finished the design for all 50 magical items! The results came out very nice: Each item now has a unique icon, visible here in the magic shop and in a player's vault. There are still many more icons to create, including Heroes (22), Badges (50), Troops (48), and Classes (7). For now, though, we are moving on to Travel, which will allow players to traverse the continents by land, sea, and magic. Here is the concept we used for the Kickstarter campaign: The idea was to have a scrollable map where players will tap to travel to each city or continent. There are 3 continents in Conquest! and each one has different cities. Additionally, the number of cities is variable by continent. The game server lays out the cities on a 10x10 grid when a new age begins. This is used to determine travel costs between cities. The mobile client will take those coordinates and plot them on the map. I have already modified the "MAP" command to send these coordinates. When a player enters the travel screen the client will fetch this information from the server and render the map. At least, that is the current design plan.
I believe this will have some unique challenges in Unity (as each new scene does). One thing I am concerned about is the server never had the concept of a graphical map; therefore, the coordinates for each city were just 2 random numbers. However, it might look strange if a port city is in the middle of a continent. I will have to adjust the algorithm to put port (and coastal) cities on the edges. I also completed prototypes for the Log, Private Messages, Journal, and Population screens. The first three use the same scene underneath, as the information they display is very similar. Once we get some of these other major items out of the way, we can circle back around and make these look better. This week saw great progress on the Tavern area of Conquest!. Conquest! was designed to accept a command at a time and yield one response. In the new client we have designed screens around a theme, to tie like activities together. The tavern is a good example of that. Rather than just visiting a tavern and seeing player gossip, we created a "room" where players go to not only gossip, but also gamble in a simple dice game, view or set bounties on other players, view jousting results, and the top 25 players. In short we created a better, more immersive experience by tying things you would expect to do in a tavern together. This is exactly the same concept we have been using for other areas, such as Kingdom and City. In Unity it is very easy to add these types of screens to the game. I have a certain set of core elements, such as the HUD and the button list, which can quickly be duplicated in Unity using copy/paste. I did find some idiosyncrasies using this method in Unity. For example, copying entire canvas objects can lead to a situation where the position is off screen and even after correcting and saving it will not preserve the position (as of this writing I'm using Unity 5.2.1). This is overcome by creating a new Canvas object and bringing in the elements I need. I also discovered Canvas Groups, which allow me to very easily disable buttons when a popup is displayed.
There are a few more items we need to complete before moving on to travel, namely the Mystic and Church. At this rate, I would anticipate the mobile client will be "playable" in 60-90 days. On the server side I continued to make enhancements to support the mobile client. Most of these involve adding additional information to the output of commands, which make the client easier to complete. An example this week was adding the individual die rolls to the output of gambling (versus just the total of the two rolls). Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. This week saw an important addition to Conquest!: the ability to buy and sell goods at the local city markets. In Conquest!, each continent has different cities and each city has different markets. There can be a maximum of 10 markets in each city and they will be a combination of troops from each class (except the Vampire) and other commodities such as food or spies. Players are only allowed to purchase troops for their class. At the start of an Age, Conquest will randomly open 5-7 of these markets and over time will slowly open additional ones until each has 10. Markets will also change prices, based on having a surplus or deficit. As a text based game, actions like checking the markets, buying/selling, going to the tavern, etc. were separate commands. With the new client we are combining these common elements to make the experience richer. For example, when visiting the tavern you have a variety of actions you can perform: hear gossip, see the top 25 players, set/view bounties on other players, etc. On the back-end these actions are still separate commands but the client masks this from the player. Here is the new city overview screen: The two items we worked on this week are "Marketplace" and "Magic Shop". The latter only exist in port cities in Conquest! so that button is disabled in non-port cities. We have just started work on the tavern screen; hopefully we will finish that in the next few days. The markets look like this: The images for non-Fighter troops are placeholders for right now. You can see that, as a Ranger, I'm not allowed to purchase Soldiers. Clicking on an item you can buy brings up more details: We still need to add the troop's additional combat attributes to the bottom (such as ambush, range, shield, etc.). Note that players can purchase items here or on the previous screen. The magic shop looks like the Royal Vault screen, with the items laid out in a grid. Clicking on an item reveals the cost, quantity available, and a description of the item. Not all magical items can be sold, which is why there are only 3 pages instead of 4. We have not finished all the item icons (there are 50 in total).
Now that I have done several of these scenes, replicating them is a matter of cut/paste in Unity. While I'm still a novice Unity developer I'm confident that I'll make improvements to the client over time (same thing happened with the game server earlier this year). I have also been able to leverage the work I did on the WIndows reference client earlier in the year (written in VB). While the code is not 100% portable many of the problems I solved in that client can be transferred to the Unity client. There is still much work to be done on the Conquest! client; I'd estimate we are 30% complete at this stage. And right now the game isn't playable: players cannot travel, spy, or attack and none of the class commands have been implemented. But we are slowly chipping away and hope to make good progress over the next month. On the server side, I modified several commands to send the client information it needs to support the design. These changes included adding the class name of the troop for a market and adding a keyword for each artifact (this determines which image to load). An area of concern I have now is the amount of raw data I'm sending to the client. Conquest! already uses a numbering system to send data (which results in smaller messages). But adding additional bytes going to a mobile client (with limited bandwidth) will have to be monitored. Unfortunately, our Kickstater campaign failed to reach it's goal. Despite this, work on Conquest! will continue but it will take longer to complete without the funding we were seeking. Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. This week saw the addition of two screens under Kingdom maintenance: Vassals and the Vault. Each of these posed some unique challenges in Unity. Once a player reaches level 4, other players may select them as a liege when creating a new player. One liege may have at most 4 vassals. Vassals provide a bonus to food production for their lord and in return receive an income bonus. Additionally, small bands of Militia will aid either the lord or the vassal while defending. A new feature added for the Unity client was the ability for a player to email an invite to their friends to become a vassal. The server already contained a few email capabilities so this was expanded to support the new email for vassals. RIght now, the email just directs players to a web site which will (eventually) provide instructions on how to download, install, and become a vassal. Eventually it would be nice to have everything done in one click. I'll have to save that for a future version. Since a player can have 1-4 vassals, I created a Vassal class in Unity to store the results from the server. Once received the client will determine which prefabs to show and hide the rest. Unity makes all of these pretty easy so once the basic structure and code was in place the rest was simple. Also new was the addition of using Canvas Groups in Unity to disable the background buttons. Before I was setting the active property to true/false, depending on whether a pop-up was displayed. This worked OK but is not a typical user experience. By setting the interactable flag to false, Unity shades the buttons and prevents users from clicking on them. Nice! There are 3 different kinds of loot in Conquest!: magical items, artifacts, and heroes. Magical items are common and can either be used or sold at the magic shop for gold. Artifacts and heroes are much more rare and there is a fixed amount of them in the game. A player may only have one artifact and one hero. All of your loot, plus the badges you have earned, are available for maintenance in the Royal Vault screen. This is a new screen, even though it uses the same background as Kingdom maintenance. There are 50 magical items and badges so a grid layout was used; the max page is determined dynamically, based on the number of items you have. Any artifact you own always appears in the first slot. Eventually, there will be a unique icon for each artifact and item. Any hero you have is displayed on the second tab, along with a description and an opinion the hero has of you. And finally, the list of all badges and which you have earned; this screen is still a work in progress but eventually there will be a unique icon for each. On the server side, a few changes were made to support these screens (such as the aforementioned email invites). I removed the "release" command and collapsed all Vassal related commands under one umbrella command ("Vassal"). I can't decide if I should do that for all actions or not i.e. have just a few commands with many variations. I also added the descriptions of items, artifacts, and heroes to the output from the server. This is expensive in terms of data so I may move instead to having them stored on the client. There are advantages/disadvantages to each approach. Finally, I added support to see another player's badges and the type of troop to the army listing. In most cases a player's troop type will be the same as their class, but there is a hero you can hire which changes that. Additionally, this might be a feature I want to expand in the future.
The Kickstarter campaign is in its final week. Please consider supporting us with a pledge of any amount: http://kck.st/1LTthng Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. This week the graphic designer, Krees, and I started work on the kingdom maintenance screens. We completed 4 of them throughout the week: Basic Settings (Kingdom name, Win Message, Corpse, and Vacation), adjusting your tax rate, buying/selling keeps, and enlisting peasants into your army. Most of these are used only once or twice but we are chipping away at the functionality. The last two screens under Kingdom are Vassal maintenance and the Royal Vault. The latter will be challenging, as there are 50 magical items players can obtain with a wide variety of effects. Additionally, some can be used, others can't. Some take arguments, such as a Player's Name or City, some don't. I don't have the design yet but I'm anxious to see it. Here is the new basic settings screen: Another import add this week was the inclusion of the Advisor (bottom left). The Conquest! game server processes all of the commands sent to it by clients. Until all situations are handled by the Unity client, the Advisor will contain the text of the response from the server. Some checking will be done by the client, to minimize the number of error responses. It is also a great tool for debugging. We also added a players total peasants to the HUD. The HUD now contains all the essential information a player needs to quickly check on the status of their kingdoms. Here is the new Buy/Sell structure screen: These new screens were relatively easy to add, as I created a structure while working on the army screens which is fairly easy to replicate. Unity makes it easy to copy/paste Game Objects from one scene to the next. Once I have the base structure in place, this pop-up window for example, I swap out the controls I need and in just a few minutes the prefab objects are done. Similarly, I copy/paste the accompanying C# code and voila, a new working scene. For example, take the Advisor object. I created all the GUI elements under one GameObject, so I just need one cut/paste to create the UI prefab. I created an Advisor class, which stores all the UI elements and the code necessary to update the pop-up and the message indicator. Once I got it working on the Overview scene, it took a few minutes to have it on the others. Here is the new Enlist screen: As you can see, these screens are just variations on one another. We have not yet started work on any of the buttons on the bottom of the screen (Alliance, Population, etc.). Prior to tackling these I would like to move to the City screens, since this gets us a little closer to a playable build. There was just one small fix to the game server this week: a bug fix when sending over a certain help command without being a player in the game. This actually crashed the server so this was a good find. Finally, here is the adjust tax screen: The Kickstarter support has taken a noticeable dip. I do plan on continuing development of Conquest! once the campaign ends. Please consider supporting us with a pledge of any amount: http://kck.st/1LTthng
Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. This week saw me tackle the hardest item (to date!) in Unity: formation maintenance. In Conquest! players have the ability to define groups (or ranks) for their troops. Troops in the front lines engage before those in the rear. Troops with range can strike first from any formation. This allows players to line up their "meat shields" to protect the (generally) more fragile ranged units. The design in Unity called for a drag & drop interface, with groups dynamically added and removed. I found a few tutorials on the new UI system in unity, which allowed me to get the drag and drop functionality working relatively quickly. However, dynamically creating the group graphics and moving the icons took 2 days! Most of this time was spent on Google, trying to wade through all the available documentation remotely related to my needs. In the end, the biggest block was detecting where the mouse was when the user let go of an icon. As easy as it seems now, this caused quite a bit of issues for me. Eventually, I created a new project and went with just one icon. Then I remembered that by default, Unity draws items from the middle, expanding both sides evenly. In order to detect the leftmost edge I had to divide the center position by 2 and likewise for the rightmost edge. I'm sure there are better ways of handling this but it worked! The layouts of the group boxes are a little off but overall it is functioning! After I got it working I took the APK file to the Test Droid cloud and the layout was all wrong. Back to Unity. I adjusted all the anchors (I had largely left them at the default due to being in a hurry) to correct the formatting issues. Another test and this time my screens looked ok. I went back to the other screens and corrected the anchors there too. The Army screen received a new background this week. The camp is now much more visible and really brings out the buttons. Thank you Krees! I also spent some time correcting some other minor formatting and coding issues. One of the advantages of getting something working is now I get to go back and fix all the items I did while in development mode. The army screen is now mostly complete. We will move on to the Kingdom screens next which will provide additional challenges (I'm looking at you Fleet Maintenance!).
On the server side, there were just two new items: formation sends the troop numbers vs. the names (which made parsing the format much easier) and accepts a new command ("DEFAULT") to restore the game default. I anticipate making additional changes to the engine as it transforms from serving text based clients to mobile ones. The Kickstarter campaign picked up a few new pledges but we are a ways off. Please consider supporting Conquest! with a pledge of any amount: http://kck.st/1LTthng Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. This week saw the launch of the Kickstarter campaign. We are seeking to raise $11,000 to accelerate the completion of the client. Thanks to Eric S, Eric M, and John B for their generous donations! You can check out the campaign page here: http://kck.st/1LTthng I made great strides with the Unity client this week. I continued to clean up some old code and added quite a bit of functionality, including two new army screens: The background image is going to be re-worked so it is during the day but the bones are in place. The second screen handles all the functions on the right (Training, Movement, Disbanding). The challenging aspect of this screen was simply scrolling the panels and the added complexity of having 3 of them. Fortunately, I found a great video tutorial on Unity's site which had step by step instructions on how to complete it. There may be some minor tweaking but overall I'm very happy with the results: One of the advantages of using a tool like Unity is built in functions to aid in development. One of the key ones I found this week was "PlayerPrefs". This class allows you to store information, such as name and password, on a devices local storage and retrieve it later. In just three lines of code, I had this information stored and could easily retrieve it. When I was writing the reference client in VisualStudio, I used a file based mechanism and had to open/close the file, write the data, etc. While learning Unity has been challenging at times, items like this offset some of it. Thank you Unity development team!
One odd thing which has happened is my HP Slatebook 2 is no longer rendering the images in the game (they appear all black). At first I thought this was an issue with the build but I found an Android test site (cloud.testdroid.com) and the game plays fine there (slow, but good for a simulation). I'm still investigating this one. On the server side, I made two small changes. One was to remove parenthesis included in a message sent to clients. This was a legacy behaviour, as the server was trying to format for text based clients. The second change has to do with attack time. Previously, you could only attack once every 15 seconds. This was meant to give defender's time to react. However, the timer was based on the attacker and not the defender! This meant that as a defender I could be attacked 10 times in a row, by different players, leading to the dreaded "ganking". Now, defender's have some time to react. Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. It began in early 1993 when two high school friends, James Bennett and John Leth-Nissen, who enjoyed creating their own pen and paper games were introduced to a new medium, Internet Relay Chat (IRC). Both had spent time dialing in Bulletin Board Systems (BBS) using 14.4K modems (eventually 28.8K and beyond!) and played Multi-User-Dungeons (MUDs). But these systems were typically regional, required accounts to play, and limited the number of people who could connect simultaneously. They also had a tendency to disappear and would be crossed off a printed list of phone numbers.
IRC was different. Thousands of people connect connect at once. Channels were formed where like minds would gather and chat (or argue!) with people from all around the world in real time. There was lag and disconnects but it was amazing! There were already games on IRC using automated programs written in script called "bots". But these were limited to poker or word games. We started talking about building a persistent world war game and "Conquest!" started to take shape. Once we figured out how to generate random numbers, development began in earnest. I lived in St. Augustine, Florida at the time and John in Daytona Beach. Most Saturdays I would drive and meet up with John where the two of us would pour over Conquest! code for many hours. The scripting language was very similar to UNIX scripting and learning the idiosyncrasies took time. But after approximately 6 months, Conquest! 1.0 was released on #Conquest on efnet. The reception was incredible. Players from all over the globe joined to compete against one another in the world we created. There was just one class, one continent, and no cities. There were bugs and "nerfs". But the action and gameplay drew players in. Shortly after the launch we immediately started working on enhancements. The game started as one bot but before long the player base outgrew it. The code was split into server and client processes; eventually, there were 4 clients to keep up with the load! The IRC bots were inherently flaky and I coded an elaborate system to attempt to keep them all in sync. There was quite a bit of drama when the server went to save data; if the process crashed or lost connectivity hours worth of battles could be lost. There was drama in the game as well, as alliances were formed (and frequently broken!). The politics in the game would rival anything in the "real" world. In 1995, the first Conquest! "Gathering" was held in Orlando, Florida. Approximately 15 players met face-to-face to share our war stories, triumphs, and defeats. It was thrilling to finally meet these great people in person. Three more Gatherings were held, in Chicago, Dallas, and Las Vegas. I met some amazing people and am still in touch with some of them today. In 1998, the game had finally outgrown the IRC script and I began converting it to C. This was quite an undertaking (it took approximately 6 months) but dramatically improved performance, scalability, and reliability. The architecture remained a client/server model and over the years I experimented with different clients, such as Web, and Instant Messenger (before AOL changed the protocol!). I could never get a good graphical client written, however, and that was the direction I had always wanted to take Conquest!. In 2005 or so, I left the game to pursue other interests. I released the binaries and the game continued to run in one form or another for several years. I never forgot about it and early in 2015 a former player approached me about taking Conquest! mobile. This re-ignited my passion for the game. I opened up the server and corrected many wrongs (how was this stuff ever working?!?). I created a new web page and built a reference client using Windows Forms. And I partnered with a graphic artist, and Steffon, another former player, to design and build a Unity based client. Finally, Conquest! was getting the medium it deserved. It's less than 24 hours before the Kickstarter launch. No matter what happens I have enjoyed the ride and look forward to the next chapter. A big Thank You to all the players who have made Conquest! great over the years: Pierre, Rommel, Gog_Magog, Cym, TazQ, Aethelred, FRobOS, Ravenfire, Belief, Kanyslupa, Prenex, Kioras, Netwalker, Xelindrya, Vhaeraun, Kyld, the Star clan, Archelf, STARBREEZ, LadySunF, Wolfsbane, Shaylan, Hitsnorth, lesla, Perrin, LordRemok, SeLTiC, Baggy, and many, many others. Follow the journey on Facebook or Twitter. Until next time, I hope to see you in the game. This week saw final preparations for the Kickstarter launch on September 7th. This included last minute updates to the campaign page and submission for review (it was accepted!). I will probably be wordsmithing the page up until the last minute before clicking the button to launch. On the page we have a video (a "live" action demonstration of the game plus an interview with me), a Unity prototype for Android, a reference client for Windows, and many screenshots. Here is the latest prototype for travel: We are attempting to raise $11,000 to complete development and fund the remaining graphic design. It's nerve-wracking and exciting at the same time! On the server side, I made some adjustments to the random kingdom/ship name generators (removed some of the felines from the latter; somehow it didn't seem right to have "Angry Cat" as a ship name). In Conquest! battles were typically over in 1-2 days (rounds). I wanted to extend them a bit so I adjusted most attack values for troops down by 50%. This will require further adjustments but they are now about where I think they should be. Additionally, cavalry and certain large units (such as Fire Drakes) take 2 housing now (versus 1 for infantry). Instead of loading up on 1-2 units, players will have to balance cost (in food or gold) versus how much housing space they have available. Units which require food still only need 1 but adjusting this is another option to explore. I also added a new espionage command, "Raid". This allows players to raid another player's vault and steal 1-3 magical items. Success changes are the same for "Forgery" (which allows you to steal a small amount of land). There are quite a few espionage options now and I'm excited to see these explored within the game. Finally, I made some minor adjustments to the output of certain commands for the clients (such as adding whether a unit can be trained and when spying you can see the total number of magical items another player has, etc.). These don't add functionality but will make things a bit easier when the client goes to implement these features. On the Unity client front, Steffon continues to make great strides. We have 4 working screens now: Loading, Login, Overview, and Kingdom. There are a few minor defects but nothing major. The Android APK file will be available for download once the Kickstarter campaign launches so folks can see what we have been up to and the vision for Conquest!. I'll be posting regular updates on the progress of our campaign. To get involved, spread the word on social networks or donate to the Kickstarter campaign. As little as $1 helps bring Conquest! to life. And if you decide to donate more, you might be able to name a hero or even a continent within the game. Follow our journey on Facebook or Twitter. Until next time, I hope to see you in the game. |
AuthorJames has been working on Conquest! since 1993. Archives
December 2023
Categories |