{"id":1098,"date":"2014-10-01T12:31:10","date_gmt":"2014-10-01T04:31:10","guid":{"rendered":"http:\/\/www.gridsagegames.com\/blog\/?p=1098"},"modified":"2015-10-02T13:16:37","modified_gmt":"2015-10-02T05:16:37","slug":"prototype-full-game","status":"publish","type":"post","link":"https:\/\/www.gridsagegames.com\/blog\/2014\/10\/prototype-full-game\/","title":{"rendered":"From Prototype to Full Game"},"content":{"rendered":"<p>I often look back on the time it&#8217;s taken Cogmind to reach this stage and ask myself &#8220;why the #!@^# is it not done yet?!&#8221; (That&#8217;s actually me standing in a corridor between a Potion of Speed Coding and Trap of Feature Creep.) More recently I&#8217;ve also been wondering if the investment is worth it--think about it: I&#8217;ve already put in more than <em>five times <\/em>the amount of work that went into the 7DRL (including post-release updates) and the game still isn&#8217;t released. I&#8217;m perhaps not the best judge of my own work, but is the result really five times better? In any case, as a game the 7DRL was obviously a lot less than it could be. It lacked polish. And polish is what takes time.<\/p>\n<p>While at some point the law of diminishing returns will inevitably kick in, Cogmind development still has yet to even cover all the core features, much less reach out into completely unnecessary territory. Since it&#8217;s about time for a general progress update anyway, here&#8217;s a quick look at Cogmind in the context of what it takes to turn a jam game into a polished product.<\/p>\n<h2>7DRL vs. Full Game<\/h1>\n<p>Seven-day roguelikes are great for prototyping, since the restrictive time limit ideally forces you to focus on a single core mechanic. Where commercial indie games are concerned, those most likely to be financially successful (defined as turning a profit&#8230;) will just stop there--polish a core mechanic and release.<\/p>\n<p>For a (very) short time that was my intention, to simply polish up the Cogmind 7DRL and be done with it. That&#8230; would&#8217;ve been done by now ;)<\/p>\n<p>But no.<\/p>\n<p>Then I started thinking that a true roguelike also needs <em>more<\/em>. &#8220;This is already a fun, solid foundation to build on&#8230; what if we added X, Y, and Z?&#8221; More systems! More options! When properly combined in a procedural world these will multiply against each other to produce an exponentially deeper experience.<\/p>\n<p>The thing about polish is that you obviously want the core game to have the highest quality possible, but that means every added feature or element must reach the <em>same level<\/em> of polish, otherwise a lack of consistency ruins the entire thing. Applying and maintaining consistent aesthetics and gameplay throughout a major project is a project in itself, manageable as a one-man independent operation only because roguelikes defer a good chunk of the experience to the player&#8217;s imagination (thereby reducing visual asset requirements).<\/p>\n<h2>Scope<\/h1>\n<p>So what exactly happened to explode the amount of work necessary to turn what was a pretty feature- and content-complete 7DRL into the expanded game described in the new design doc?<\/p>\n<p>Let&#8217;s examine the new scope across three main areas:<\/p>\n<h3>World<\/h2>\n<p>The 7DRL was organized as a straight dungeon dive (although technically up, not down), passing through ten floors before completion. While the world retains that same central complex, there are now many alternate branching paths. You&#8217;ll still be able to go straight up to the surface, but that may not always be the best route depending on your situation.<\/p>\n<div id=\"attachment_1105\" style=\"width: 552px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/09\/cogmind_sample_world_map.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1105\" class=\"wp-image-1105 \" title=\"Cogmind Sample World Map\" alt=\"cogmind_sample_world_map\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/09\/cogmind_sample_world_map.png\" width=\"542\" height=\"519\" \/><\/a><p id=\"caption-attachment-1105\" class=\"wp-caption-text\">A sample path through the world of Cogmind, highlighting the central area organized similarly to the 7DRL while also showing potential outlying branches. Each rectangle represents a separate map. (There are more areas generated in a given world than shown here--this is just one possible path, since taking one path means you lose access to others.)<\/p><\/div>\n<p>Individual map size is also increased. Those which were mostly 100&#215;100 in the 7DRL now range from 100&#215;100 to 200&#215;200.<\/p>\n<div id=\"attachment_1108\" style=\"width: 580px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_factory_evolution.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1108\" class=\"size-full wp-image-1108 \" title=\"Cogmind Factory Evolution\" alt=\"cogmind_factory_evolution\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_factory_evolution.png\" width=\"570\" height=\"870\" \/><\/a><p id=\"caption-attachment-1108\" class=\"wp-caption-text\">A sample mid-level factory map layout--see how the size has quadrupled since the 7DRL, naturally along with significant algorithm improvements (still more to add).<\/p><\/div>\n<p>We need lots of new content to fill this extra space, so in addition to unique themes and gameplay purposes for the new maps, they&#8217;re also occupied with new robots and even factions. (Really it&#8217;s the other way around--the added space was required to fit all the planned content.)<\/p>\n<p>There will be a more in-depth discussion of the world later on &#8220;when it&#8217;s ready,&#8221; in traditional roguelikedev fashion ;)<\/p>\n<h3>Mechanics<\/h2>\n<p>At the prototype level Cogmind already came with a variety of items, that being instrumental to the core mechanic of building and rebuilding yourself throughout the game. However, the 7DRL is very obviously just shoot\/avoid enemies -&gt; attach parts -&gt; rinse and repeat. Sure there are plenty of possibilities and considerations given the large number of parts to choose from, but it all boils down to combat (or fleeing from combat).<\/p>\n<p>The prototype <em>is<\/em> the core mechanic, where it would be quite easy to add just a few more systems for a result that is greater than the sum of its parts. &#8220;Easy&#8221; taken in the design sense, <em>not<\/em> implementation (which takes forever, hence this post). <a title=\"Hacking, the Concept\" href=\"http:\/\/www.gridsagegames.com\/blog\/2013\/12\/hacking-concept\/\">Hacking<\/a> was a logical choice, adding a whole new dimension to the game that integrates well with all its elements from combat to intelligence gathering and story. Even a range of new combat features found their way into the game, like <a title=\"Melee Combat\" href=\"http:\/\/www.gridsagegames.com\/blog\/2013\/10\/melee-combat\/\">melee weapons<\/a>. Then of course there&#8217;s the collection of parts related to these new mechanics. And on top of that each part needs its own art and sound, neither of which existed in the 7DRL. Now <em>that<\/em> took a huge chunk of time.<\/p>\n<p>NPCs and <a title=\"Allies &amp; Factions\" href=\"http:\/\/www.gridsagegames.com\/blog\/2013\/11\/allies\/\">allies<\/a> are another big addition, fleshing out the story and gameplay though requiring support for dialogue and <a title=\"Ally Orders\" href=\"http:\/\/www.gridsagegames.com\/blog\/2014\/01\/orders\/\">orders<\/a>.<\/p>\n<h3>Interface<\/h2>\n<p>In terms of visuals the 7DRL may seem relatively polished, which can be attributed to importing the existing <a title=\"X@COM\" href=\"http:\/\/xcomrl.blogspot.com\">X@COM<\/a> code base (which had already been in development for nine months at that point).<\/p>\n<p>Now that we&#8217;ve <a title=\"Building a Better UI\" href=\"http:\/\/www.gridsagegames.com\/blog\/2013\/10\/building-better-ui\/\">doubled the available width<\/a> of text windows we have plenty more room to work with, as well as many more windows and UI components related to the new mechanics. These in turn need their own behavior logic and animation scripts consistent with the rest of the interface.<\/p>\n<p>Improving accessibility is a big part of turning a prototype into a full game, thus the entire interface had to be updated or redesigned to make every interaction possible via both mouse and keyboard, sometimes even through a variety of different methods. Heck, there&#8217;s even <a title=\"Drag &amp; Drop\" href=\"http:\/\/www.gridsagegames.com\/blog\/2013\/10\/drag-drop\/\">drag and drop<\/a>. The latest enhancements in particular have focused on visual action feedback, something largely missing from the prototype. I&#8217;ll be posted about those soon. (As a side note, one major\/common accessibility feature <em>not<\/em> supported is key remapping. The input system isn&#8217;t set up for it, something I hope to resolve one day.)<\/p>\n<h2>Progress Update<\/h1>\n<p>Despite the significant increase in scope beyond the prototype, this is not me succumbing to feature creep ;). The added mechanics and content are things I think the game needs to satisfy the player&#8217;s desire for variety, depth and, more importantly for a roguelike, longevity.<\/p>\n<p>So where are we now?<\/p>\n<div id=\"attachment_1110\" style=\"width: 394px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_progress_140930.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1110\" class=\"size-full wp-image-1110 \" title=\"Cogmind Development Progress (140930)\" alt=\"cogmind_progress_140930\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_progress_140930.png\" width=\"384\" height=\"468\" \/><\/a><p id=\"caption-attachment-1110\" class=\"wp-caption-text\">Cogmind Development Snapshot: Sep. 30, 2014<\/p><\/div>\n<p>Put simply, the three main components remaining are<\/p>\n<ul>\n<li>Robot AI. There is an AI, but it&#8217;s pretty simple and doesn&#8217;t know how to handle any of the new robot types requiring special behavior.<\/li>\n<li>Hacking. Machine hacking is complete as a system but there is no content yet, and robot hacking has yet to be added at all.<\/li>\n<li>Maps. Parameters for the core maps are more or less done, but we&#8217;re still missing basic event scripting, prefabs, and then designs for other maps.<\/li>\n<\/ul>\n<p>According to the roadmap, the above list combined with various odd items here and there will require 21 weeks of dev time.<\/p>\n<p>The good news is that all features have been on target in terms of planned development time. The bad news is I only have about eight weeks of pure dev time left this year. Family reasons will be keeping me away from my dev machine the rest of the time. I&#8217;m partially making up for it by heavily prioritizing anything that must be in a first release while resisting urges to do anything non-essential (these features would be candidates for post-release updates). Unfortunately no amount of shifting priorities will get the game to a state where I can run a Kickstarter campaign that can finish before the end of the year (a requirement to work with my U.S. partner). Too bad since it would definitely help raise more funds to make Cogmind a better game. Skipping that phase isn&#8217;t without its advantages, so we&#8217;ll just make the best of it!<\/p>\n<h3>An Empirical Look<\/h2>\n<p>Besides listing features, we can also measure progress in numbers. It&#8217;s been a while since we <a title=\"Making a Game\" href=\"http:\/\/www.gridsagegames.com\/blog\/2014\/02\/making-game\/\">last looked<\/a> at lines of code:<\/p>\n<div id=\"attachment_1111\" style=\"width: 561px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_LOC_140930.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1111\" class=\"size-full wp-image-1111 \" title=\"Cogmind Lines of Code (140930)\" alt=\"cogmind_LOC_140930\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_LOC_140930.png\" width=\"551\" height=\"225\" \/><\/a><p id=\"caption-attachment-1111\" class=\"wp-caption-text\">Cogmind LOC: 55,632.<\/p><\/div>\n<p>As of September 30th Cogmind has 55,632 lines of code, compared to 20k in the 7DRL (remember that much of the code was reused from previous projects) and 35k in February earlier this year. In addition to this there&#8217;s about 6,000 lines of scripts that define game objects, animations and sound effect behavior.<\/p>\n<p>Time-wise progress has been pretty steady. Below you can see that aside from a few wider shelves where I was busy with something else, Cogmind is under regular development. In recent months you&#8217;ll see a lot of tiny ridges, created as I began concentrating development into weekdays and using weekends (the ridges) for other activities.<\/p>\n<div id=\"attachment_1113\" style=\"width: 577px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_cumulative_dev_hours.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1113\" class=\"size-full wp-image-1113 \" title=\"Cogmind Cumulative Dev Hours (2013.7~2014.9)\" alt=\"cogmind_cumulative_dev_hours\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2014\/10\/cogmind_cumulative_dev_hours.png\" width=\"567\" height=\"390\" \/><\/a><p id=\"caption-attachment-1113\" class=\"wp-caption-text\">Cumulative development time from July 2013 to September 2014.<\/p><\/div>\n<p>That&#8217;s certainly not all coding! There are many other aspects of development, all of which are included in the above graph: I divide my time records into Design, Code, Art, Audio, Content, Web, Community, and Business. We&#8217;ll wait until there&#8217;s more data to talk about that.<\/p>\n<p>Instead, here&#8217;s Cogmind in numbers*:<\/p>\n<ul>\n<li>55,632 lines of code<\/li>\n<li>6,142 lines of script<\/li>\n<li>100 source files<\/li>\n<li>749 game files<\/li>\n<li>26 font bitmaps<\/li>\n<li>620 audio samples<\/li>\n<li>634 pieces of ASCII art<\/li>\n<li>636 items<\/li>\n<li>82 item special effects<\/li>\n<li>56 explosions<\/li>\n<li>116 robot definitions<\/li>\n<li>15 AI behavior modes<\/li>\n<li>10 NPCs<\/li>\n<li>23 map themes<\/li>\n<li>146 machines<\/li>\n<li>265 stats recorded for score\/morgue file<\/li>\n<li>50 game options<\/li>\n<li>269 recognized input signatures<\/li>\n<li>zero main menu (you&#8217;ve never seen one because Cogmind doesn&#8217;t have one)<\/li>\n<\/ul>\n<p>*(set randomly chosen, numbers subject to change--the general trend being to revise them upward :D)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I often look back on the time it&#8217;s taken Cogmind to reach this stage and ask myself &#8220;why the #!@^# is it not done yet?!&#8221; (That&#8217;s actually me standing in a corridor between a Potion of Speed Coding and Trap of Feature Creep.) More recently I&#8217;ve also been wondering if the investment is worth it&#8211;think [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1113,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52],"tags":[11,4,170,46],"class_list":["post-1098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gamedev","tag-7drl","tag-cogmind","tag-gamedev","tag-roguelikes"],"_links":{"self":[{"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/posts\/1098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/comments?post=1098"}],"version-history":[{"count":15,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/posts\/1098\/revisions"}],"predecessor-version":[{"id":1119,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/posts\/1098\/revisions\/1119"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/media\/1113"}],"wp:attachment":[{"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/media?parent=1098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/categories?post=1098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gridsagegames.com\/blog\/wp-json\/wp\/v2\/tags?post=1098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}