{"id":194,"date":"2013-11-12T04:19:46","date_gmt":"2013-11-12T09:19:46","guid":{"rendered":"http:\/\/www.defectivestudios.com\/devblog\/?p=194"},"modified":"2013-11-12T15:33:50","modified_gmt":"2013-11-12T20:33:50","slug":"part-1-breaking-stealth-mode","status":"publish","type":"post","link":"https:\/\/www.defectivestudios.com\/devblog\/part-1-breaking-stealth-mode\/","title":{"rendered":"Part 1: Breaking Stealth Mode"},"content":{"rendered":"<p dir=\"ltr\"><span style=\"font-size: 13px;\">Excellent news everyone! \u00a0After what\u2019s felt like a very long stealthy period, I dare say the tunnel of Gimbal Cop is showing some light at its end! \u00a0We\u2019ve been working on this project for a while now &#8212; just about two years, with some fits and starts &#8212; and the game\u2019s passed through many phases in that time. \u00a0In this post, I\u2019ll describe what we\u2019ve been up to in our long dark phase, and I\u2019ll follow up with another post about the present excitement, the private alpha stage we\u2019re in now, and the forthcoming public alpha\/beta phase.<\/span><\/p>\n<p dir=\"ltr\"><span style=\"font-size: 13px;\"><!--more--><\/span><\/p>\n<p dir=\"ltr\">At its conception, Gimbal Cop was on one hand an experiment in procedural mesh building (reflecting on our shelved\u00a0<a title=\"Platformer\" href=\"http:\/\/defectivestudios.com\/platformer\">Platformer<\/a> project, Schoen came up with many insights in a less restrictive approach to mesh building and was eager to build a game around it), and also an attempt at a \u201cquick and easy\u201d game: in that initial form, it was an infinite procedural runner.<\/p>\n<div id=\"attachment_213\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/nyan.jpg\"><img aria-describedby=\"caption-attachment-213\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-213  \" alt=\"NyanNyanNyanNyan\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/nyan-300x223.jpg\" width=\"300\" height=\"223\" srcset=\"https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/nyan-300x223.jpg 300w, https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/nyan.jpg 597w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-213\" class=\"wp-caption-text\">Nyanyanyanyanyanyanyan: The original Gimbal Cop infinite runner prototype. Yes, that Mute button has to be huge.<\/p><\/div>\n<h2 dir=\"ltr\">Branching out, diving deep<\/h2>\n<p dir=\"ltr\">In retrospect, we should\u2019ve polished up that prototype and shipped it before moving on to more unproven and complicated gameplay ideas &#8212; but, seeing the potential for a really interesting new kind of game, we (myself in particular, I must admit) really pushed the game towards the high ideal we\u2019ve long dreamt about: an asymmetric multiplayer creation game. \u00a0To make a long story short, there was a lot of time spent experimenting with different ways to deliver on those gameplay goals, and at least as much time spent developing the required systems: many iterations and improvements on the mesh building technology, multiplayer and matchmaking, \u201c3D\u201d GUI (as opposed to Unity\u2019s native OnGUI approach), AI, and more. \u00a0Another of those \u201cin retrospect\u201d realizations: we should\u2019ve taken advantage of middleware options for many of those systems, particularly multiplayer and GUI. \u00a0Respectively, <a href=\"http:\/\/u3d.as\/content\/exit-games\/photon-unity-networking-free\/2ey\">Photon<\/a> and <a href=\"http:\/\/u3d.as\/content\/tasharen-entertainment\/ngui-next-gen-ui\/2vh\">NGUI<\/a> come to mind.<\/p>\n<p dir=\"ltr\">Throughout this long period of developing our tech and exploring the gameplay space, the experimental aspirations of the project slowly gave way to the goal that, sooner rather than later, we wanted this game to come out to and be enjoyed by the public &#8212; yet still we hadn\u2019t found something that simply worked, in terms of connecting with people, and finding the elusive \u201cfun.\u201d \u00a0When we played the game, we didn\u2019t love it, but that can often be an unhelpful test, since we\u2019re looking at the game from zero inches away, day after day. \u00a0So we\u2019d peddle it at demo events and conferences, and pretty consistently get the feedback of \u201ccool, that\u2019s a really interesting idea.. yeah, the game\u2019s OK, keep iterating.\u201d \u00a0Simply put, it didn\u2019t connect with people. \u00a0Moreover, we shared their lack of enthusiasm; personally, I wouldn\u2019t find myself playing it for more than a minute or two, and I know that if I\u2019m not getting sucked into my own game and losing track of time, neither will anyone else.<\/p>\n<h2 dir=\"ltr\">Breaking it down<\/h2>\n<p dir=\"ltr\">From Schoen\u2019s earliest tests with the mesh building tech, we had played with two modes &#8212; Tunnel-style barrel-rolling controls, and freeflying controls (both for the Architect, the player creating the track) &#8212; and have always meant for a combined approach (freeflying Architect, and also twist-based racing) to be the ultimate form of the game. \u00a0But, after about a year of trying to get all of these components to fit cohesively into a single fun game, I started concluding that we\u2019d be better off breaking the game down into its simpler constituent experiences: one mode that was a constrained racing experience, and another that was a freeflying experience, without the racing and asymmetric multiplayer elements.<\/p>\n<p dir=\"ltr\">I prototyped a bare-bones freeflying 3D Snake mode, and after a couple of hours of work, had a little game that I was very happy with, and found myself &#8212; and my faithful testers &#8212; getting sucked into it, playing for many runs on end, competing for high scores. \u00a0For the first time in a while, I felt like a gameplay experiment was really landing with people. \u00a0And this was also the simplest gameplay experiment we had tried since Schoen\u2019s original racer prototype. \u00a0Yes, I suppose there\u2019s a lot of wisdom to the common knowledge of keeping it stupid simple.<\/p>\n<div id=\"attachment_214\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/protosnake.png\"><img aria-describedby=\"caption-attachment-214\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-214 \" alt=\"The Protosnakemen\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/protosnake-300x158.png\" width=\"300\" height=\"158\" srcset=\"https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/protosnake-300x158.png 300w, https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/protosnake-1024x542.png 1024w, https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/protosnake.png 1080w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-214\" class=\"wp-caption-text\">Act I: The Protosnake<\/p><\/div>\n<p dir=\"ltr\">The Snake prototype was a fresh project, written outside of the Gimbal Cop codebase. \u00a0I did this because, at the time, I found experimenting in Gimbal Cop\u2019s code to be very hairy business: it was complicated to implement a new idea, requiring edits to a wide swath of the codebase, and thus was very prone to breaking other components of the game, and would always make the codebase more convoluted. \u00a0In other words, every change, iteration, and experiment made the code increasingly messy and hard to deal with. \u00a0Something had to change to make the game more \u201cjammable\u201d: more inviting to non-destructive, non-cluttering, modular gameplay experiments. \u00a0I\u2019ll write a full and developer-oriented description of the Modes framework another day, but in brief, we added callbacks throughout the game\u2019s codebase that would let a new gameplay module easily hook into any event in the game (for example, OnRoundStart, OnArchitectTriggerEnter, OnRunnerUpdate, etc), from one centralized location. \u00a0This let us separate out the core logic that makes the game run from the gameplay iterations of any one mode.<\/p>\n<p dir=\"ltr\">We transposed the Tunnel gameplay, as well as some control scheme options, into their own modes, and I ported my Snake prototype to this framework, at last unifying that project and Gimbal Cop.<\/p>\n<div id=\"attachment_215\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/snakeMode1.jpg\"><img aria-describedby=\"caption-attachment-215\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-215  \" alt=\"SnakeMode #1\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/snakeMode1-300x155.jpg\" width=\"300\" height=\"155\" srcset=\"https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/snakeMode1-300x155.jpg 300w, https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/snakeMode1.jpg 950w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-215\" class=\"wp-caption-text\">Snake makes it into the game<\/p><\/div>\n<p dir=\"ltr\">The next big phase came this past summer, leading up to the Boston Festival of Indie Games. \u00a0Tunnel and Snake modes were both decent, but definitely had room for improvement, and I had a few gameplay ideas in mind for both.<\/p>\n<p dir=\"ltr\">Tunnel\u2019s \u201cfirst\u201d iteration (in the new Mode system at least) had the Architect player manually switching tracks, each of which had different droppable obstacles and path-following projectiles for the Architect to use to impede the Runner players. \u00a0In theory all these ideas sound cool (or at least they do to us), but in practice, asking the player to think about which track they want to be making, and which obstacles they want to drop and when, was asking too much &#8212; and probably most of the problem is the interface. \u00a0On mobile, the Architect player is controlling the path with the twist of the device, and then has three on-screen buttons, each of which pops up a small menu, to control track type, obstacle choice, and projectile choice. \u00a0Then the the player drags and releases on the screen to actually place that obstacle or projectile. \u00a0So yeah, it was asking a lot of the player, and understandably didn\u2019t click. \u00a0The interface makes arguably even less sense on a screen with a mouse, since you\u2019re using the mouse to drive, and also to pick things out of the menu (you can hold a modifier to not listen to mouse input on the track, but that\u2019s contrived). \u00a0Long story short, the interaction was far too messy, and in need of further refinement and steamlining.<\/p>\n<h2 dir=\"ltr\">Jamming out<\/h2>\n<p dir=\"ltr\">So I tried a second iteration of Tunnel, where both the Architect and Runner players pick up goodies in the environment (floating in space for the Architect, sitting on the track for the Runner) which immediately fire a projectile towards the other player, and spawns into an obstacle when it gets there. \u00a0In other words, the Architect grabs a pickup and instantly fires a projectile down the path, which waits until it\u2019s close the the lead Runner, and then bursts into an obstacle on the track. \u00a0The Runner does the same: grabs a pickup and instantly fires a projectile up the track, which flies past the Architect and bursts into an obstacle in the that player\u2019s path.<\/p>\n<div id=\"attachment_216\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/tunnel1.jpg\"><img aria-describedby=\"caption-attachment-216\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-216 \" alt=\"tunnel1\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/tunnel1-300x142.jpg\" width=\"300\" height=\"142\" srcset=\"https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/tunnel1-300x142.jpg 300w, https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/tunnel1.jpg 950w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-216\" class=\"wp-caption-text\">Tunnel mode is burning for you<\/p><\/div>\n<p dir=\"ltr\">Around the same time, I was also experimenting with a second iteration of Snake mode. \u00a0The first is fun but felt too boring to me, and I thought that the environment was in major need of rethinking: instead of just being in a semi-random asteroid field, there should actually be a level to speak of. \u00a0This idea is a fundamental shift in the way we\u2019d been approaching Gimbal Cop\u2019s environment throughout the project: we\u2019d been attempting to go fully procedural with the environments, wanting to make a decently interesting infinite space environment. \u00a0After a number of attempts at making that work, we all started to realize that making an interesting procedural environment is much, much harder than making an interesting static hand-authored environment.<\/p>\n<p dir=\"ltr\">With the new iterations of Tunnel and Snake ready for some feedback, we prepared for <a href=\"http:\/\/bostonfig.com\/\">FIG<\/a> (the Boston Fest o\u2019 Indie Games), where we\u2019d get to try our latest ideas out on some real folk. \u00a0With just a few days left before FIG, Danger started trying out Oculus Rift support in the game. \u00a0We\u2019d known since we first heard about the Rift that we\u2019d want to support it in Gimbal Cop, and with some of the recent changes to the game, it felt like it might actually work pretty well. \u00a0He got the Rift integration solid within a few days, we tried it out &#8212; and we were blown away. \u00a0I had been actively thinking about (let\u2019s be honest: obsessing over) the Rift while prototyping Snake mode, knowing that being able to look around with your head would add a major dimension to the game. \u00a0Still, I underestimated what an excellent fit the game and device were for each other (we\u2019ll make another post soon with our full findings on working with the Rift and VR game design). \u00a0We decided that we\u2019d show off VR mode at FIG, and Danger and I both arrived with our devkits in tow. \u00a0We were wondering before the show if there\u2019d be any other VR games there; after all, the Rift is a pretty huge rage in the indie gamedev world, including the Boston indie scene, probably most notably with Dejobaan and Owlchemy\u2019s <a href=\"https:\/\/share.oculusvr.com\/app\/aaaaaaaaaaaaaaaaaaaaculus\">AaaaaAAaaaAaaaculus!<\/a> \u00a0As it was, nobody else turned up with VR games, so of course we were swamped all day by people waiting to see the fabled Rift &#8212; and, hopefully, at least a bit, they could also enjoy our game! \u00a0In fact, people really enjoyed the experience, and we got lots of great, almost entirely positive, feedback on the game itself.<\/p>\n<div id=\"attachment_231\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/IMG_20130914_113940.jpg\"><img aria-describedby=\"caption-attachment-231\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-231   \" alt=\"FIG crowd\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/IMG_20130914_113940-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/IMG_20130914_113940-300x225.jpg 300w, https:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2013\/11\/IMG_20130914_113940-1024x768.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-231\" class=\"wp-caption-text\">Yeees, come my children, and ogle at your screen-faced future!<\/p><\/div>\n<p dir=\"ltr\">On the flipside of those good vibes, we found that, even with a captive audience of people waiting to play the VR Snake mode, people by and large weren\u2019t interested by the Tunnel mode experience, which we were also running at the booth on multiple networked mobile devices. \u00a0A few people got into it for a while, but the vast majority of people gave the \u2018ol \u201ccool idea, but I\u2019ve played enough now, thanks,\u201d and one little kid had a very sad moment with it (lesson learned: make sure nobody has the experience of picking the game up, being confused, and quickly getting a giant \u201cYOU LOOOOOOOOOOOSE!!!\u201d).<\/p>\n<p dir=\"ltr\">Coming out of FIG, the message was very clear to me: Snake was in a good state and close to leaving the incubator, and Tunnel still has work to be done if we\u2019re going to get that ambitious mode working the way we think it can.<\/p>\n<h2 dir=\"ltr\">Back to the now<\/h2>\n<p dir=\"ltr\">That all brings us more or less to the present. \u00a0In the name of being at least a little bit coherent, I\u2019ll make a second post about what we\u2019re working on right now and what comes next. \u00a0<a href=\"http:\/\/www.defectivestudios.com\/devblog\/part-2-the-here-and-now\/\">Here that be<\/a>.<\/p>\n<p dir=\"ltr\">I hope that this long, long-winded post has broken the ice of our stealth mode, has told you, the curious longtime Defective fan, what we\u2019ve been doing with ourselves. \u00a0I don\u2019t want to get too far ahead of ourselves here, but methinks we\u2019re ready to be a little less stealthy going forward \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Excellent news everyone! \u00a0After what\u2019s felt like a very long stealthy period, I dare say the tunnel of Gimbal Cop is showing some light at its end! \u00a0We\u2019ve been working on this project for a while now &#8212; just about two years, with some fits and starts &#8212; and the game\u2019s passed through many phases [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,19],"tags":[],"_links":{"self":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts\/194"}],"collection":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/comments?post=194"}],"version-history":[{"count":10,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts\/194\/revisions"}],"predecessor-version":[{"id":239,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts\/194\/revisions\/239"}],"wp:attachment":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/media?parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/categories?post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/tags?post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}