{"id":109,"date":"2013-06-17T09:40:46","date_gmt":"2013-06-17T09:40:46","guid":{"rendered":"http:\/\/www.kamremake.com\/devblog\/?p=109"},"modified":"2013-06-17T09:40:46","modified_gmt":"2013-06-17T09:40:46","slug":"what-else-does-a-game-need","status":"publish","type":"post","link":"https:\/\/www.kamremake.com\/devblog\/what-else-does-a-game-need\/","title":{"rendered":"What else does a game need?"},"content":{"rendered":"<p>Looking at a game a clueless stranger would see a handful of moving objects. A newcomer sees a GUI and units wandering around. A passionate player will see a whole living world. A modmaker\u00c2\u00a0sees a game full of complex mechanics and AI, hidden links and modding perspectives. A programmer sees\u00c2\u00a0a lot of code behind the scenes, data structures, the outline of an architecture, and megabytes of a source-code.<\/p>\n<p><!--more--><\/p>\n<p><span style=\"font-size: 12px;\">Note: Of course there are lots of other things that contribute to a game (art, assets, logic, mechanics, ideas), but for simplicity&#8217;s sake let&#8217;s focus on programming alone for now.<\/span><\/p>\n<p>Taking a step further I would like to add one more piece from a technical point of view &#8211; <strong>utility tools<\/strong>. They are mostly invisible, but a game without them is impossible. What are they and why they are noteworthy? That&#8217;s very simple &#8211; without utility tools the game is nothing more than a skeleton, beautiful in its inner workings, but hollow and lifeless.<\/p>\n<p>Tools fill the game with the &#8220;game&#8221;. One of the most widely known tools in KaM Remake is the <strong>Map Editor<\/strong>. Yes, you heard it right &#8211; MapEd is an utility tool, it is not part of the game itself. Yet MapEd is one of the most important pieces, for it allows the game to be filled with beautiful landscapes, green hills and fast rivers, mountains full of gold and iron that are so needed for a good fight \ud83d\ude42 Many mapmakers work hard to make all this beauty and the MapEd is their servant with many brushes and settings and controls.<\/p>\n<p>But wait, there are other tools. One of less known is the <strong>Translation Manager<\/strong>. This handy fellow allows the game translators to easily add new translations into 20+ languages. Of course that would not be fully possible without one more tool &#8211; <strong>Font Editor<\/strong>, the tool that lets you edit the font glyphs for all these languages.<\/p>\n<p>There is also the less used <strong>Campaign Builder<\/strong> &#8211; tool to make a bundle of several maps into a story, with a tactical map and briefings. The <strong>Script Validator<\/strong> follows, with the addition of dynamic scripts this new tool comes in play &#8211; it let&#8217;s you quickly check your scripts for errors without needing to start the game.<\/p>\n<p><a href=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_01.png\"><img loading=\"lazy\" class=\"alignnone size-medium wp-image-117\" alt=\"wgn_01\" src=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_01-300x209.png\" width=\"300\" height=\"209\" srcset=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_01-300x209.png 300w, https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_01.png 600w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>There&#8217;s also <strong>RXXPacker<\/strong> &#8211; the tool needed to bundle sprites into rxx packages. Sprites are packed and archived to take less space on HDD yet be in format suitable for inner rendering routines. Soft shadows are generated on the fly in this tool as well. Alongside comes <strong>RXXEditor<\/strong> &#8211; a tool to see the RXX pack contents and check the sprites offsets and visuals of the images and masks.<\/p>\n<p>Some one-time jobs are done with <strong>TilesetResampler<\/strong> and its elder brother\u00c2\u00a0<strong>Batcher<\/strong> &#8211; a true swiss-army knife that allows to do batch script updates and changes in maps.<\/p>\n<p>We also have some <strong>Unit Tests<\/strong>. Those are tools that check certain areas of code for correctness.<\/p>\n<p><strong>PathFinder<\/strong> is another one-timer that we made to compare 3 different pathfinding algorithms to pick the best one in terms of complexity and speed:<\/p>\n<p><a href=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/pathfinder.png\"><img loading=\"lazy\" class=\"alignnone size-medium wp-image-110\" alt=\"pathfinder\" src=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/pathfinder-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/pathfinder-300x246.png 300w, https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/pathfinder.png 689w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><strong>Runner<\/strong>\u00c2\u00a0is what allows us to test gameplay balance, performance and especially AI. It runs the game without anything but the logic (sound and video are disabled). It can simulate 2 hours game time with 6 AIs on Across the Desert in few minutes, so we see how AIs performs in e.g. weapon production. Simulating 1000 fights between 200 militia armies and graphing the results &#8211; easy deal :)\u00c2\u00a0On this screenshot you can see times in msec it takes to compute each games step:<\/p>\n<p><a href=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_02.png\"><img loading=\"lazy\" class=\"alignnone size-medium wp-image-118\" alt=\"wgn_02\" src=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_02-300x227.png\" width=\"300\" height=\"227\" srcset=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_02-300x227.png 300w, https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/wgn_02.png 713w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><strong>BugParser<\/strong> lets us maintain a list of crashreports we receive:<\/p>\n<p><a href=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/bugparser.png\"><img loading=\"lazy\" class=\"alignnone size-medium wp-image-111\" alt=\"bugparser\" src=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/bugparser-300x160.png\" width=\"300\" height=\"160\" srcset=\"https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/bugparser-300x160.png 300w, https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/bugparser-1024x548.png 1024w, https:\/\/www.kamremake.com\/devblog\/wp-content\/uploads\/2013\/06\/bugparser.png 1407w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>There is a dozen more one-timer tools that are too specific and uninspiring to show here, yet they exist as well (<strong>Net tests, algorithm tests, etc<\/strong>).<\/p>\n<p>And there are tools we miss: <strong>Unit Editor<\/strong> to easily tweak units properties, <strong>House Editor<\/strong> to edit house settings, <strong>Tile Editor<\/strong>, and many others. We haven&#8217;t written these tools partly because hard-coding values works good enough and partly because they would make a good first task for a new programmer wanting to join our development team.<\/p>\n<p>Behind tens of thousands of lines of code in the actual game, there&#8217;s also comparable amount of utility tools. It may never be seen outside, but making a game without any of these tools would be next to impossible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Looking at a game a clueless stranger would see a handful of moving objects. A newcomer sees a GUI and units wandering around. A passionate player will see a whole living world. A modmaker\u00c2\u00a0sees a game full of complex mechanics &hellip; <a href=\"https:\/\/www.kamremake.com\/devblog\/what-else-does-a-game-need\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/posts\/109"}],"collection":[{"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/comments?post=109"}],"version-history":[{"count":7,"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/posts\/109\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/posts\/109\/revisions\/120"}],"wp:attachment":[{"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/media?parent=109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/categories?post=109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kamremake.com\/devblog\/wp-json\/wp\/v2\/tags?post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}