<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Indie by Night]]></title><description><![CDATA[The chronicles of a moonlighting indie game dev team.]]></description><link>http://indiebn.com/</link><generator>Ghost 0.9</generator><lastBuildDate>Tue, 24 May 2022 23:33:48 GMT</lastBuildDate><atom:link href="http://indiebn.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Realm Racer Devlog #6: Almost Ready for Alpha Build]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It’s been a long three months since our last update, but fear not. We did not go gentle into the good night. Far from it, in fact; we have been busy with many things.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The main change in our</p>]]></description><link>http://indiebn.com/realm-racer-devlog-6-alpha-build-2/</link><guid isPermaLink="false">977ab5ba-ec67-474c-b9ec-01cff657a0d2</guid><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Thu, 10 Nov 2016 15:52:15 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It’s been a long three months since our last update, but fear not. We did not go gentle into the good night. Far from it, in fact; we have been busy with many things.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The main change in our lives is the hallmark out-of-college experience—we got full-time jobs. That’s what it means to be an adult, right? To bring home the bacon? Well, regardless of what being an adult truly means, getting a job and being financially grounded is important, especially in the independent gaming industry. Fortunately for us, work is fun. We work at a fabulous company called <a href="https://www.rallyhealth.com/">Rally</a> as Fullstack Software Engineers. The work there is engaging and pushes us to learn new coding tools and techniques. Besides work, we play with the Rally soccer team too, and even managed to win the championship last season! The only downside to working is the 1 hour 30 minute commute, but we take advantage of that time by working on Realm Racer.</p>

<hr>

<h4 id="alphabuild">Alpha Build</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We are really excited about this one. Within the next month or two, we should have an alpha build ready and available for testing. This is a great milestone for us. Compared to our previous game, Realm Racer has required a lot more effort and thinking. We had to treat this game like we treat our work: one task at a time, incrementally building out the product. <a href="http://hacknplan.com/">Hack'n'plan</a> has tremendously increased our productivity by creating a task-driven mindset, enabling us to close out smaller goals without being overcome by the looming task of completing a game.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Accomplishing the actual Android build was a little tricky with jME, since the stable SDK still uses the Ant build system. Our code exceeds the <a href="https://developer.android.com/studio/build/multidex.html">65K limits</a> specified by Google. An easy fix for this is to add some build dependencies in the “gradle” file of the app in in Android Studio to enable what’s known as a <a href="https://developer.android.com/studio/build/multidex.html">multidex build</a>. What I ended up doing is copying our code from the jME3 folder to a new Android Studio project, and editing the gradle file. Luckily for us, it built first time without any hassles.</p>

<h6 id="issues">Issues</h6>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We will leave the thorough testing of the game to our alpha testers, but we've come upon one major hiccup ourselves. My and Suchaaver's phones are on Android 6.1, but my dad's phone is on 7.0. When testing on the 7.0 phone, the shaders of the tubes and the car break. If you thought the current game might induce epileptic seizures, then playing it on a Android 7.0 will surely do so. When we do release the alpha build for testers, we’ll be gathering more info about this problem to address it accordingly.</p>

<hr>

<h3 id="thegoodstuff">The Good Stuff</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;As always, we start out with a teaser gif of what the game looks like:</p>

<p><img src="http://indiebn.com/content/images/2016/11/RealmRacer6o.gif" alt=""></p>

<h4 id="obstaclenotifications">Obstacle Notifications</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The major functional update for the game is the obstacle notifications feature seen in the gif. The notifications show up when an obstacle is close enough to the player. We knew this was a very much needed feature due to how fast the player moves, especially when going around blind corners. If a rocket comes around one of those corners, then BAM—there is no way the player can react fast enough to dodge it. Thus, the dire need for notifications.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It was a bit of a technical challenge for us as well. I had an idea of how I was going to approach the notifications, but I didn’t know how well my approach would work. What ended up working is the following:</p>

<ol>
<li><p>When an obstacle is a certain distance from the player, start emitting a message from the <code>ObstacleCreationControl</code> to the <code>HudControl</code> that contains the obstacle's rotation from the center, distance from the center, and distance from the player.</p></li>
<li><p>When <code>HudControl</code> receives <code>ObstacleCreationControl</code> messages, attach a notification per unique obstacle message, and use the data to set its transform properly.</p></li>
<li><p>When the player rotates, emit messages from the <code>PlayerControl</code> to the <code>HudControl</code> with rotation information.</p></li>
<li><p>When <code>HudControl</code> receives <code>PlayerControl</code> messages, rotate the center node by which all other obstacle notifications are attached to in the opposite direction of the message's angle, keeping the notifications inline with the obstacles.</p></li>
</ol>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method works because at any point in time, any obstacle's location with regards to the player is a mere 2D projection of the obstacle on the player’s view once the tube is collapsed.</p>

<h4 id="functionalgameguis">Functional Game GUI’s</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We have functional GUI’s now too. There are four GUI’s to consider: the main menu, the in-game hud, the pause menu, and the end-game menu. They are respectively shown below:</p>

<p><img src="http://indiebn.com/content/images/2016/11/2016-11-05-144239_1282x827_scrot.png" alt="">
<img src="http://indiebn.com/content/images/2016/11/2016-11-05-144315_1282x827_scrot.png" alt="">
<img src="http://indiebn.com/content/images/2016/11/Screen-Shot-2016-11-10-at-8-33-01-AM.png" alt="">
<img src="http://indiebn.com/content/images/2016/11/2016-11-05-144340_1282x827_scrot.png" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Designing these is arguably the hardest and most frustrating part of using the jMonkeyEngine.  GUI design using jME, if not using the Nifty GUI editor, leaves a lot to be desired. The libraries for the GUI’s are almost as powerful as any other GUI libraries, but the tooling to iterate quickly on GUI design is poor. The game has to be rerun in the editor every time changes need to be tested. It’s almost like front-end development without a server that automatically refreshes when assets have changed. Instead, a compile and rerun of the server is necessary followed by a hard refresh. That’s not how things are done anymore. Of course, our complaining only forces the question from the open source community: “Why don’t you build it then?” My response? It’s already been done in other engines, and I’m in the business of writing games, not tools. So while I’m not against writing tools, I just don’t want to put  up with it right now.
    That ends that discussion.</p>

<h4 id="newshaders">New Shaders</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shaders continue to be a point of experimentation for us.  <a href="https://www.reddit.com/r/gamedev/comments/59ghtt/wip_wednesday_26_technically_not_a_clone/d99ru9p/?context=3">This comment on reddit</a> echoed a thought we’ve had for quite some time—our shaders are seizure inducing. The effort is a mix of just using shaders to get the desired effect, or going back and UV unwrapping different textures on the model for different tubes. The former is seizure inducing, the latter is tiresome work. I feel as if the answer will lie somewhere in between, but Suchaaver will have an update ready when that really happens.</p>

<h4 id="emotionalimpact">Emotional Impact</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I don't broach this topic often, simply because I find it difficult to put into words well. But there is something to be said about this topic now. After putting it on our phone, and showing it to my mom, dad, and little brother, something clicked. All of sudden, we could see them enjoying the game. None of them are mobile gamers (or gamers, except for my little brother), but to see them so casually hooked on our game meant we did something right. Out of the blue, my dad starts talking about monetizing schemes for the game. My dad doesn't know anything about the mobile gaming market (he knows much more about general market and business intricacies), so his strategies were a bit bizarre, but it's the fact that he opened up the discussion that matters the most. And our little brother offered to whip up some sample soundtracks to start testing some music. They say the games that make the money really capitalize on the 5% of their audience that does the spending, but I'd be happy just watching the other 95% enjoy our game. Just like my family did.</p>

<hr>

<p>Thanks for reading buddy boys. Also, we may or may not (depending if time allows) participate in the <a href="https://github.com/blog/2274-game-off-theme-announcement">Github November Game Jam</a> to let us explore new ideas before getting back to the game. Regardless, expect an alpha release within the next two months!</p>]]></content:encoded></item><item><title><![CDATA[Creating our Logo]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A new logo is approaching (with a blog redesign)! One of the tasks on our <a href="http://indiebn.com/creating-our-logo/www.hacknplan.com">Hack'n'Plan</a> (a tremendous game planning web app, by the way) which wasn't directly connected to our game was designing a real logo for our studio, Elrel. Actually, many of you</p>]]></description><link>http://indiebn.com/creating-our-logo/</link><guid isPermaLink="false">caef21e2-179e-4888-be53-9447a60d9a25</guid><category><![CDATA[logo]]></category><category><![CDATA[art]]></category><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Sun, 07 Aug 2016 17:32:56 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A new logo is approaching (with a blog redesign)! One of the tasks on our <a href="http://indiebn.com/creating-our-logo/www.hacknplan.com">Hack'n'Plan</a> (a tremendous game planning web app, by the way) which wasn't directly connected to our game was designing a real logo for our studio, Elrel. Actually, many of you may not have heard of the word Elrel yet, because as far as this blog is concerned, it is only written in the footer. It is, however, our twitter handle and on the splash screen of our first game. The logo for our first game was rushed because we really wanted to release it. Thus, it was high time Elrel got a nice logo; one which can be easily recognized.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I want to dedicate a whole entry to the logo's creative process because of this <a href="https://www.reddit.com/r/gamedev/comments/4t1idz/creating_our_logo/">post</a>, which highlights the creative process behind Tiny Phoenix's logo. Despite what some comments say, I think the logo is splendid, and I'm glad the team reached something they liked. Designing a logo is not easy, and I learned that first hand while making our logo. Not all of you will agree with the decisions we made, and some of you may not like the final result. But doing this taught me a lot of things about what goes into a logo, and I think some if it may be useful for you to know. But just to be clear, this isn't a post about logo design. It's about the thought process.</p>

<h3 id="elrel">Elrel</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;What is "elrel"? It's a five letter word that has absolutely no meaning, as far as I can find. It's just what came to mind some 14 years ago when I made a funny sound with my mouth and Joraaver wanted to make the same sound, but couldn't. He just said "elrel." With that origin story in mind, I started making logos. </p>

<h3 id="thelogos">The Logos</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Let me start by saying that if the word means nothing, then starting is difficult. So just let go of your inhibitions and draw randomly. If you feel like, pray for a happy accident, in a Bob Ross sort of way. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I started with some funny box icon thing. Let’s just say that was warm-up. I played with the idea of stick figures fighting or running through the logo. I imagined the animation. It was clicking. I liked that last one of the four. </p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage1.png" alt="Funny Box icon" title=""><span style="font-size: .8em">Funny box things, and then people running.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Then I toyed with the idea of letting the letters hang vertical. “Elrel” is a short enough word for that. Of those, I saw potential in the man standing in the rain, with lightning flashing. Animate that, and something pretty might still come. </p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage2.png" alt="Vertical" title=""><span style="font-size: .8em">Letters hanging vertical.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Then  I dropped the idea of stick figures and put some emphasis on the E. Think of the big old storybooks, where the first letter of the book or the chapter is some gigantic, fancily drawn form. Or look at Valve’s typography. I still wasn’t feeling any attachment to these logos though. Maybe I am not good enough or didn’t try hard enough, but I was not getting the vibe. It was time for something else.</p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage3.png" alt="Like a storybook?" title=""><span style="font-size: .8em">Like a storybook?</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where can you find meaning if the word has no meaning? For some it’s a stretch, but look at your (or your company’s) values or philosophy. What are you trying to achieve? These are ideas we hadn’t thought much about, but we tried to put some words down. At this moment, I thought of <a href="http://www.vlambeer.com/">Vlambeer</a>, the successful creators of Nuclear Throne, Ridiculous Fishing, and more. I hoped to find some insight to the logo of a seemingly random name, but alas, it actually means something. You can read about that <a href="https://www.reddit.com/r/IAmA/comments/1ah6mg/were_the_creators_of_ridiculous_fishing_ask_us/c8xd7nh">here</a>. However, they say that their logo was made "in twenty seconds." To me, that mean "don't sweat it." The logo doesn’t need to be better than sliced bread, just something you can be happy with. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This leads us to the green sprinting foot logo. I think I was thinking of something lame like “live fast and free.” I can’t help it; I’m a Sonic fan. But really, it just looks like the less popular cousin of Adidas. No go. </p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage7.png" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now comes the fist. It has something to do with breaking barriers or new frontiers. I liked it, but it didn’t read all that well. The bird with the marmalade jar was an attempt to lighten up from the whole philosophy idea. It didn’t need to be that deep. It was a nice bird, but a far cry from a nice logo. </p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage4.png" alt="fist and bird" title=""><span style="font-size: .8em">Fist and bird.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ahh, the lava lamps. They are captivating little contraptions which kept me pacified for many hours; perhaps in the way that our games should captivate our audience. We really thought we had something going in the last red logo. We were very close to just stopping and plastering that thing everywhere. Honestly though, we were 90% happy. I know that I said not to sweat it too much, but this logo is going on our games, our site, our lives. No pressure, but we weren’t there yet. </p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage5-3.png" alt="">
<span style="font-size: .8em">Lots of lava lamps (or cryogenic stasis tubes).</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Which leaves us with the dying cats. Now I know this is a tad unfair, but “elrel” isn’t perfectly meaningless. It was given meaning by my 7th grade teacher, who said it sounded like a dying cat when I made the discordant noise in class one day. I hadn’t really thought about it until this point because it was a tenuous connection. But I ran with it. Thus, we ended with the last cat. I like the first cat with bulging eyes more, but it’s too much an imitation for me to use comfortably. When I don’t know how to draw something, I make a blatant copy first (I can’t draw cats). But I digress. That’s our logo! </p>

<p><img src="http://indiebn.com/content/images/2016/08/logo_stage6.png" alt="" title=""><span style="font-size: .8em">Lots of dying cats.</span></p>

<p>Here’s a summary of what I learned: </p>

<h3 id="typesoflogos">Types of Logos</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I believe there are three types of logos, with some icing if you'd like. You could make an icon-based logo, a typography-based logo, or a logo involving both. The icing? Animation. Not necessary and not always right, but good to keep in mind. The point here isn't to limit the type of logos you can make. It's to provide options. Sometimes you see a good logo and think that your logo has to have some funny character alongside a name, but that's not true. I had to keep reminding myself to change styles. Granted, because I’m not the best vector artist, some things were outside my time and ability scope, but I still tried to stretch my wings. </p>

<h3 id="sourceofinspiration">Source of Inspiration</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There are three things to look at when brainstorming: other logos, philosophy, and origin. I looked at Naughty Dog, Vlambeer, Bethesda, and a whole bunch of other studios. I even looked at non-game studios. I read about company values and learned how some studios were formed. There’s a gold nugget somewhere. Just keep looking.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In a final act of complete contradiction, I will say this: it’s perfectly acceptable for your logo to mean absolutely nothing. It could be a flying elephant, while your studio is “Grounded Worms.” All it has to be is recognizable as your brand, and make you happy.</p>

<p>Thanks for reading, and feel free to discuss here or on <a href="http://indiebn.com/creating-our-logo/LINK">reddit</a> !</p>]]></content:encoded></item><item><title><![CDATA[Realm Racer Devlog #5: Get some GUI]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This shouldn’t be very long. As Joraaver noted last week, I managed to design and integrate a decent looking Main Menu into the game. Voila: </p>

<p><img src="http://indiebn.com/content/images/2016/07/main_menu-1.gif" alt="main menu gif" title=""><span style="font-size: .8em">We haven't done any loading screen, which is why you see a funny flash of the tube before the</span></p>]]></description><link>http://indiebn.com/realm-racer-devlog-5-get-some-gui/</link><guid isPermaLink="false">55f3e7c5-63a7-4747-ae8c-d37bd966dd9c</guid><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Fri, 29 Jul 2016 21:14:18 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This shouldn’t be very long. As Joraaver noted last week, I managed to design and integrate a decent looking Main Menu into the game. Voila: </p>

<p><img src="http://indiebn.com/content/images/2016/07/main_menu-1.gif" alt="main menu gif" title=""><span style="font-size: .8em">We haven't done any loading screen, which is why you see a funny flash of the tube before the actual game appears.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To be a little more technical, JME currently has 3 GUI systems in place, either with native support or actively supported by developers. These are: <a href="http://void256.github.io/blog/">nifty GUI</a>, <a href="https://github.com/jPonyEngine/tonegodgui">tonegodgui</a>, and <a href="http://jmonkeyengine-contributions.github.io/Lemur/">Lemur</a>. All three are fine options, but Lemur really shows a tremendous amount of flexibility for very complex GUIs (even 3D). Granted, our GUIs will be simple, but Lemur also boasts CSS like styling, with which I am quite familiar. For this game, we are using Lemur. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Since I’m no UI/UX artist, I went looking for examples or information to help me get started. Here are some of what I found helpful:</p>

<ul>
<li><a href="http://gamesinspiration.com/">http://gamesinspiration.com/</a>     Provides a tremendous number of mobile game screenshots for references</li>
<li><a href="http://gameuis.com/">http://gameuis.com/</a>    Similar concept, but not just mobile games. Still a new site, thus the library isn’t large.</li>
<li><a href="http://www.gamasutra.com/view/feature/4286/game_ui_discoveries_what_players_.php?print=1">What Players Want</a> A rather in-depth look at how UI is a part of the player experience.</li>
</ul>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Like I said, I’ll keep this short. Keep devving! </p>]]></content:encoded></item><item><title><![CDATA[Realm Racer Devlog #4: Moving Rockets!]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apologies for the now almost four-month silence. Suchaaver and I have been busy graduating from college, moving out of our apartments to back home, and taking a vacation. In fact, I write this article from our hotel room overlooking the beach in Waikiki, Hawaii. But</p>]]></description><link>http://indiebn.com/realm-racer-devlog-4-moving-rockets/</link><guid isPermaLink="false">6f2a79e9-3edb-4e4c-926c-b890747fa5ae</guid><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Fri, 22 Jul 2016 18:29:59 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apologies for the now almost four-month silence. Suchaaver and I have been busy graduating from college, moving out of our apartments to back home, and taking a vacation. In fact, I write this article from our hotel room overlooking the beach in Waikiki, Hawaii. But we have an update that I’m glad I’ve gotten through, as it opens up the door for a lot of feature development. Behold, moving rockets as obstacles!</p>

<p><img src="http://indiebn.com/content/images/2016/07/Rockets_Demo-1.gif" alt="Rockets Zooming Demo" title=""><span style="font-size: .8em">Near miss with that second rocket.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Suchaaver modeled a nice prototype rocket for use in our game, and it is now our game’s first moving obstacle. The design of the rocket pays homage to old school spaceships (think Pizza Planet from Toy Story). It’s fun, a bit nostalgic, and most importantly, fits the feel of our game by having a low-poly style to match the player vehicle.</p>

<p><img src="http://indiebn.com/content/images/2016/07/RocketCompare-3.png" alt="Rocket Comparison" title=""><span style="font-size: .8em">Good ol' Pizza Planet providing some inspiration for that rocket.</span></p>

<h4 id="whattooksolong">What took so long?</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It took a lot longer than I anticipated to put the obstacle movement system in place. From the outset of this game, I knew I wanted to create a universal obstacle system that allowed for complex obstacle behaviors. In jMonkeyEngine, behaviors for spatials are manipulated via "controls." In order to enable this complexity without having to give each obstacle unique code, I planned to build the "controls" so they could be swapped or stacked with ease. That way, I can create future behaviors like my hand-drawn diagram below illustrates:</p>

<p><img src="http://indiebn.com/content/images/2016/07/DiagramMovements.jpg" alt="Diagram Obstacles" title=""><span style="font-size: .8em">Possible obstacle movement patterns (and thinking of new obstacles). Under "Circular Moving," that obstacle is a saw, not an eye.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Static", "Forward Moving", and "Circular Moving" are unique patterns, but "Helical Moving" is a stacking of "Circular Moving" and "Forward Moving", and "Sinusoid Moving" is a combination of "Forward Moving" and I guess a "Static Sinusoid Moving" obstacle I didn't draw. As of right now, we have the first two covered in a way that I’m pleased with, since it allows for the evolution of the other obstacles in a Lego-like manner.</p>

<hr>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We will have another update coming next week. Suchaaver didn’t push his code changes to our repository before we left for vacation, so we can’t quite show them yet. Yeah, that’s right. Our resident artist is writing code. Surprising? Well, it shouldn’t be, since he just graduated from UC Berkeley with a degree in Electrical Engineering and Computer Science. But that explanation can wait till next week!</p>]]></content:encoded></item><item><title><![CDATA[Realm Racer Devlog #3: Finally, Shaders]]></title><description><![CDATA[<p>It's the end of spring break for us, which means it's high time for another update. “Update” means pretty pictures, so a gif: </p>

<p><img src="http://indiebn.com/content/images/2016/03/game_with_colors.gif" alt=""></p>

<p>In this post I'll talk about the look development of the whole thing. So let's get started. </p>

<h4 id="fromhumblebeginnings">From Humble Beginnings</h4>

<p><a href="http://indiebn.com/realm-racer-updates/">Last</a> time you saw the game, it</p>]]></description><link>http://indiebn.com/realm-racer-devblog-3-finally-shaders/</link><guid isPermaLink="false">da5ea74a-df34-4c34-9e30-64281551c51e</guid><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Mon, 28 Mar 2016 19:11:27 GMT</pubDate><content:encoded><![CDATA[<p>It's the end of spring break for us, which means it's high time for another update. “Update” means pretty pictures, so a gif: </p>

<p><img src="http://indiebn.com/content/images/2016/03/game_with_colors.gif" alt=""></p>

<p>In this post I'll talk about the look development of the whole thing. So let's get started. </p>

<h4 id="fromhumblebeginnings">From Humble Beginnings</h4>

<p><a href="http://indiebn.com/realm-racer-updates/">Last</a> time you saw the game, it looked like this:</p>

<p><img src="http://indiebn.com/content/images/2016/02/BlogRecording.gif" alt="previous time"></p>

<p>That art was more “placeholder” art. I wanted to make the player feel like he or she is moving very quickly through a tunnel with lights evenly spaced within. Thus, I needed the lines of the tube to darken and lighten evenly. I could have painted a diffuse/color map with light and dark areas, but I decided to lightmap it. Why? Well, 1) with actual lights generating the lightmap the result is more realistic, and 2) I wanted to learn the process. </p>

<p>So I went into Blender, set up a lighting scheme, rendered the textures, and plopped them into the game. The result was this:</p>

<p><img src="http://indiebn.com/content/images/2016/03/Screen-Shot-2016-03-27-at-9-25-33-PM.png" alt="LIGHTMAPPED"></p>

<p>To me, this looked pretty good. But I was bothered by the fact that the lights weren't as bright as I wanted them to be. Something about lightmapping that I hadn't realized was that with basic lightmapping, things don't get brighter. They only get darker. That is because the traditional lightmap is multiplied over the diffuse, such that white on the lightmap acts as a pass-through (value of 1.0) and anything darker reduces the brightness on the diffuse map (read this <a href="http://wiki.polycount.com/wiki/Light_map">polycount</a> article for more). You can manipulate this, however, by defining how the multiply layer effect occurs in your game. If you set 0.5 to be your pass value, then anything above get brighter, and anything below get darker. You have to be aware though, because unless you scale it appropriately, the things that get darker don't get as dark as they would originally. </p>

<p>But where would you even write the code to deal with this?</p>

<h4 id="theanswershaders">The Answer: Shaders</h4>

<p>Ahh yes. What a buzzword. The be-all and end-all of any cool effect ever achieved in a videogame. I always knew when I started learning about graphics and game development that I wanted to learn how to write shaders. I thought my graphics course in college would teach me that. Alas, it taught me many important things which I use right now when I think about this game, but it did not teach me shaders. However, after spending a solid day understanding how shaders work (in general and in jMonkeyEngine), I figured it out. They work the same pretty much everywhere, and honestly, they aren't that complicated. It is true that they can get very complicated, but to learn them isn't so hard. In fact, if you want to learn about them, I recommend <a href="https://notes.underscorediscovery.com/shaders-a-primer/">this article</a>.</p>

<p>But yeah, shaders are where I could define how multiplication would occur. However, it became apparent when playing the game that we wanted it to be much brighter overall. We wanted it to have bright vehicles, bright obstacles, bright lines, and be very vibrant. Thus, I worked to achieve brightness without walking too far way from my initial idea. Which resulted in this:</p>

<p><img src="http://indiebn.com/content/images/2016/03/color_change.gif" alt="COLOR CHANGE"></p>

<p>Pretty colors, right? Let me walk you through the shaders that made this possible:</p>

<h4 id="vertexshader">Vertex Shader</h4>

<pre><code>uniform mat4 g_WorldViewProjectionMatrix;  
attribute vec3 inPosition;  
attribute vec2 inTexCoord;  
uniform float g_Time;  
uniform sampler2D m_LightMap;  
uniform sampler2D m_DiffuseMap;  
varying vec2 uvCoord;


void main(){  
    //Transformation of the object space coordinate to projection space
    //coordinates.
    //- gl_Position is the standard GLSL variable holding projection space
    //position. It must be filled in the vertex shader
    //- To convert position we multiply the worldViewProjectionMatrix by
    //by the position vector.
    //The multiplication must be done in this order.

    uvCoord = inTexCoord;


    gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);

}
</code></pre>

<p>It's a pretty standard vertex shader. By definition, a vertex shader manipulatesw where the vertices of a model end up on screen space. It just takes in the vertex position and converts it to the appropriate screen coordinates. The game time, light map, and diffuse map are passed in to be shared across both the vertex and the fragment shader. The “uniform” declaration means the information is given to the shader from elsewhere, and is shared across both parts. The “varying” declaration means that the variable will be passed from the vertex shader to the fragment shader. The vertex shader also has a bunch of information that comes into it that is related to the current vertex, all prepended with “in”. These are declared as “attributes.” Therefore, you can see the use of inTexCoord (the UV texture coordinate of the current vertex) and inPosition (the 3D position in model space). You can usually look up what information comes into the vertex shader.</p>

<h4 id="fragmentshader">Fragment Shader</h4>

<p>A fragment shader decides the color of each fragment (pixel, less accurately). My fragment shader is much more interesting. Let's take a look: </p>

<pre><code>uniform float g_Time;  
uniform sampler2D m_LightMap;  
uniform sampler2D m_DiffuseMap;  
varying vec2 uvCoord;  
void main(){  
    vec4 df_color = texture2D(m_DiffuseMap, uvCoord);
    vec4 lp_color = texture2D(m_LightMap, uvCoord);
    vec4 cur_color = lp_color * df_color * 2.0;

    vec4  kRGBToYPrime = vec4(0.299, 0.587, 0.114, 0.0);
    vec4  kRGBToI = vec4(0.596, -0.275, -0.321, 0.0);
    vec4  kRGBToQ = vec4(0.212, -0.523, 0.311, 0.0);
    vec4  kYIQToR   = vec4 (1.0, 0.956, 0.621, 0.0);
    vec4  kYIQToG   = vec4 (1.0, -0.272, -0.647, 0.0);
    vec4  kYIQToB   = vec4 (1.0, -1.107, 1.704, 0.0);

    // Convert to YIQ
    float   YPrime  = dot (cur_color, kRGBToYPrime);
    float   I      = dot (cur_color, kRGBToI);
    float   Q      = dot (cur_color, kRGBToQ);

    // Calculate the hue and chroma
    float   hue     = atan (Q, I);
    float   chroma  = sqrt (I * I + Q * Q);

    // Make the user's adjustments
    hue += g_Time;

    // Convert back to YIQ
    Q = chroma * sin (hue);
    I = chroma * cos (hue);

    // Convert back to RGB
    vec4    yIQ   = vec4 (YPrime, I, Q, 0.0);
    cur_color.r = dot (yIQ, kYIQToR);
    cur_color.g = dot (yIQ, kYIQToG);
    cur_color.b = dot (yIQ, kYIQToB);

    // Save the result
    gl_FragColor    = cur_color;
}
</code></pre>

<p>The first two lines are standard—read in the diffuse texture color and the lightmap texture color for this vertex. The third line is where, for a normal lightmap, I would multiply the two colors together. However, I multiply the result by 2. What does this do? If the lightmap were at 50% gray, then the shader treats it as white and keeps the diffuse color. Any higher and the diffuse color is brightened. However, as I said previously, things don't get as dark. Only the blacks stay black (0 multiplied by anything is 0).</p>

<p>The convoluted code below is what changes the hue of the colors over time. Honestly,  I don't understand all the specifics of the algorithm, but it essentially converts the RGB space into an alternate space where one can then simply do a rotation calculation to shift the hue to something else. I do a rotation based on the time. At an even higher level of abstraction, you can see that it's difficult to change the hue of the color in RGB. If you had an HSV representation, you could just change the hue value and be done with it. I recommend reading <a href="http://stackoverflow.com/questions/9234724/how-to-change-hue-of-a-texture-with-glsl">this</a> (it is where I got this code from). I'll be doing more reading about it too. </p>

<h4 id="extrastep">Extra Step</h4>

<p>Now, my next decision was probably completely unnecessary and may not make it into actual gameplay, but I couldn't resist it with my newfound powers. First, I'll show you a new vertex shader (only the last line is different):</p>

<pre><code>uniform mat4 g_WorldViewProjectionMatrix;  
//The attribute inPosition is the Object space position of the vertex
attribute vec3 inPosition;  
attribute vec2 inTexCoord;  
uniform float g_Time;  
uniform sampler2D m_LightMap;  
uniform sampler2D m_DiffuseMap;  
varying vec2 uvCoord;


void main(){  
    //Transformation of the object space coordinate to projection space
    //coordinates.
    //- gl_Position is the standard GLSL variable holding projection space
    //position. It must be filled in the vertex shader
    //- To convert position we multiply the worldViewProjectionMatrix by
    //by the position vector.
    //The multiplication must be done in this order.

    uvCoord = inTexCoord;

    gl_Position = g_WorldViewProjectionMatrix * vec4(sin(g_Time+inPosition.x)*0.5 + inPosition, 1.0);
}
</code></pre>

<p>It simply scales the sine of the addition of the game time and the vertex's x position and adds the result to the current position. Here's what it actually does:</p>

<p><img src="http://indiebn.com/content/images/2016/03/giphy.gif" alt=""></p>

<p>I'm sorry, I just couldn't help myself. Maybe it's cool, and playtesters will love the idea. Or, everyone will say that it just distracts from the actual goal of the game. Either way, I'm just glad I now know enough to do this kind of thing. </p>

<h4 id="inconclusion">In Conclusion</h4>

<p>I don't know how much of this will make it to the final iteration of the game, but regardless I think this spring break was very well spent. Let me know if you have any questions regarding the shaders or any aspect of this post (feel free to correct me if I said something wrong). Maybe I'll let you guys tell me whether or not you think the result is interesting enough to keep!</p>]]></content:encoded></item><item><title><![CDATA[Realm Racer Devlog #2: Aesthetics and Design Patterns]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We haven't done this in a while, but this post is going to present to you all the wonderful updates we have for our game!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I'm quite happy with the progress we've made. It's been considerately motivating, applying different software</p>]]></description><link>http://indiebn.com/realm-racer-updates/</link><guid isPermaLink="false">3ba2e157-bf5a-4870-b567-efe2ae666c5d</guid><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Tue, 16 Feb 2016 17:59:29 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We haven't done this in a while, but this post is going to present to you all the wonderful updates we have for our game!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I'm quite happy with the progress we've made. It's been considerately motivating, applying different software engineering principles and seeing what a difference they make in game. I'll discuss what those changes are and reflect on why they've made me a better coder. </p>

<hr>

<h4 id="aesthetics">Aesthetics</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The gif below sums up most of what the game looks like now:</p>

<p><img src="http://indiebn.com/content/images/2016/02/BlogRecording.gif" alt="gif of game"></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The game has gone from just a bunch of debugging objects to actual art. We tweeted some concept art we had in mind for one possible slice of the game and have, to some degree, implemented that art. The tubes and the car currently reflect that. However,you'll note that the lines on the tube are very large. I had to perform some scaling due to nonstandard sizing of the models. Don't worry, I complained to our artist, and he says he has now standardized the sizes of all the models.</p>

<p><img src="http://indiebn.com/content/images/2016/02/Screen-Shot-2016-02-12-at-11-40-52-AM.png" alt="car model">
<img src="http://indiebn.com/content/images/2016/02/Screen-Shot-2016-02-12-at-11-40-17-AM-1.png" alt="concept art">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The gif doesn't demonstrate the sound of the crash. It's just a royalty free sound, but we will change it later to align with the games feel.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obstacle collision technically records damage to health as well, but there is no GUI for that yet. In fact, there is no GUI at all. Suchaaver is hashing it out, and we'll hopefully have some sense of a GUI in the coming months. If he knows what he's doing, it'll follow his post late last year regarding GUI design. We may even do an analysis of different GUI schemes we drew up and how they rank. I think that would be pretty cool.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Finally, the gif doesn't reveal that it currently works on Android. Have to make sure the target platform supports it, right?</p>

<hr>

<h4 id="code">Code</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;What really excites me are the programming patterns I've implemented. Part of why I make games is to learn how to build  them; making changes so that the code is cleaner, faster, and more scalable is an essential part of that process.</p>

<p><strong>Messaging Queue</strong></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It was becoming harder and harder to manage the interaction between my objects; simple things such as telling my <em>TrackCreationControl</em> to generate a new track piece were no longer easy. However, two pieces of reading kicked in, saving me from horrible code. The first is <a href="http://gameprogrammingpatterns.com/event-queue.html">Game Programming Pattern's page on Event Queues</a>. The article articulates very well when messaging protocols are needed, and my situation definitely called for it*.  GameDev Tuts <a href="http://gamedevelopment.tutsplus.com/tutorials/how-to-implement-and-use-a-message-queue-in-your-game--cms-25407">“How to Implement and use a Message Queue in Your Game"</a> gave me a practical and minimal way to implement the queue. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I introduced a <em>CommunicatingObject</em> interface which any object that needed to throw messages around implemented. Then, in the style of the tutorial, I created a <em>MessageBroker</em> and a <em>Message</em> class. Now, say, the player finishes a turn on the track. The following actions take place:</p>

<ol>
<li><p>The <em>TrackPieceDeletionControl</em> fires off a message to the <em>TrackCreationControl</em> telling it to generate a new piece.</p></li>
<li><p>The <em>TrackPieceDeletionControl</em> deletes the turn piece. 1 &amp; 2 are performed in the code below:</p>

<pre><code>private void delayedDeletion(){
    Message m = new Message(
        "track creation",
        this,
        "deleted",
        -1);
    MessageBroker.getInstance().sendMessage(m);
    obs_destroy = null;
    bas.getPhysicsSpace().remove(track_piece.piece);
    track_piece.piece.removeFromParent();
    bas.getPhysicsSpace().remove(this);
}
</code></pre></li>
<li><p><em>TrackCreationControl</em> receives the message and generates a new piece:</p>

<pre><code>public void onMessage(Message m) {
    if(m.getFrom() instanceof TrackPieceDeletionControl){
        removeDeletionControl((TrackPieceDeletionControl)m.getFrom());
        createPiece();      
    }      
}
</code></pre></li>
</ol>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I may think about adding a relay message back to the <em>TrackPieceDeletionControl</em> to let it know when <em>TrackCreationControl</em> has created the new piece, but that's a redundancy I'll implement if sufficient testing deems it necessary.</p>

<p><strong>Singleton</strong></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is a simpler idea, explained once again by the fabulous <a href="http://gameprogrammingpatterns.com/singleton.html">Game Programming Patterns Singleton article</a>. Right now, the singleton design pattern is being used for my <em>MessageBroker</em> class. It dictates that there only be one <em>MessageBroker</em>, and prevents me from accidentally instantiating another <em>MessageBroker</em> to put a message on a queue. It has a fairly simple use, but it does the job of making me have to think less. That's a plus.</p>

<p><strong>Flyweight</strong></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I didn't have to implement this design pattern because but it is already provided by the jMonkeyEngine API. I just wanted to take a step back and appreciate it. As described by, wait for it,  <a href="http://gameprogrammingpatterns.com/flyweight.html">Game Programming Patterns Flyweight article</a>, the flyweight design involves making objects more lightweight by moving extrinsic data in a single place for more efficient access and usage. In our game's case, each of the barrels is cloned. With no animation, this means they all share the same mesh, optimizing the use of the barrels. Huzzah! These little things under the hood make a difference, especially when developing for mobile.</p>

<p><span style="font-size: .8em">* I'm not foreign to messaging systems. I have worked with RabbitMQ in a larger software setting. But being told to work with something versus deciding for yourself when to implement something are very distinct roles. It can be rewarding to see your decision play out in your favor.</span></p>

<hr>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The updates are done. For now.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The roadmap in the near future involves getting this to a prototype that people can download and test. To get that going, we want to have</p>

<ul>
<li>A GUI of some sort in place</li>
<li>A scoring system</li>
<li>An end to the level</li>
</ul>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When the last bullet point comes to life, then the game becomes a much more modular system, and scaling it will be fun. But we'll cross that bridge when we get to it.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Watch our twitter, and stay tuned!</p>]]></content:encoded></item><item><title><![CDATA[Stumbling Upon Emergent Gameplay]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My friend and I were playing Far Cry 4 last week when we had an experience neither of us will soon forget. We stumbled upon a stellar example of <a href="http://www.gamasutra.com/blogs/JoshBycer/20150916/253682/Examining_Emergent_Gameplay.php">emergent gameplay</a>. I'll tell you the story and then talk a little bit about what I've</p>]]></description><link>http://indiebn.com/a-short-piece-on-emergent-gameplay/</link><guid isPermaLink="false">94216965-8e5c-4eb6-898d-3a2e2737293e</guid><category><![CDATA[mechanic]]></category><category><![CDATA[emergence]]></category><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Thu, 24 Dec 2015 18:26:44 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My friend and I were playing Far Cry 4 last week when we had an experience neither of us will soon forget. We stumbled upon a stellar example of <a href="http://www.gamasutra.com/blogs/JoshBycer/20150916/253682/Examining_Emergent_Gameplay.php">emergent gameplay</a>. I'll tell you the story and then talk a little bit about what I've learned about the concept.</p>

<p><strong>WARNING: There may be a spoiler or two in this article. I'm not saying anything explicit about the game's narrative, but a picture of a map may reveal information you don't want to know (or something like that). Tread carefully.</strong></p>

<h3 id="theencounter">The Encounter</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Far Cry 4, for those unaware, is an open-world first-person game set in the dangerous yet beautiful nation of Kyrat. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When my friend and I play, we go "question mark hunting." All the hidden caves, items, or places on the island that one has not stumbled upon show up as question marks on the map, like so:</p>

<p><img src="http://indiebn.com/content/images/2015/12/Far-Cry--42015-12-19-22-40-29.jpg" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thus, we went on our merry way playing Dora the Explorer. One of us was Dora and the other was Boots. It was all tremendous fun, until we reached our next location. It looked like a hole in the ground covered with boards.</p>

<p><img src="http://indiebn.com/content/images/2015/12/Far-Cry--42015-12-19-22-45-18.jpg" alt=""></p>

<h3 id="thefirsttry">The First Try</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The triangular space allowed me to squeeze through, so I did. I thought I might be able to attach the grappling hook as I fit through, but instead I failed magnificently. I slipped through the hole and fell to my death. In fact, here's a clip of what happened:</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/H4Ssc5PlCE4" frameborder="0" allowfullscreen></iframe>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clearly, dying is not the right way to reach the bottom. My friend crouched down with the intent of attaching the grappling hook first and then jumping down the hole. However, this is how it turned out, from my perspective: </p>

<p><img src="http://indiebn.com/content/images/2015/12/the_struggle.jpg" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The cable wrapped around odd places and he became a contortionist. However, he couldn't get down. Thus, we were left without options. Surely, it couldn't be this hard.</p>

<h3 id="macgyverit">MacGyver It</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My friend had a flash of inspiration.  One of us could pilot a gyrocopter over the hole while the other hung below it via grappling hook. Once the chopper was in position, the man below could potentially lower himself into the hole and all the way to the bottom of the cavern. Here is our trusty method of locomotion: </p>

<p><img src="http://indiebn.com/content/images/2015/12/gyrocopter.jpg" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Though I didn't record it the first time, my friend and I sat down to do a re-run and record it this time. Mind you, it was my first time doing game recording, so you'll have to forgive our occasional banter about that and other random subjects (I now know that "bow" is the front while "stern" and "aft" can both refer to the back of the ship). I also had a bit of a cold. Go to the 2 minute mark if you want to skip some discussion.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/f390fxM1Sxs" frameborder="0" allowfullscreen></iframe>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It was a little complicated, but in the end, it worked. Notice what happened at the end. I shot and broke the boards, and my friend could grapple down easily. In fact we could have done that when we first saw the boards. We were supposed to do that! What took us 25 minutes should have taken us 2. But you know what? I didn't regret a second of it. I'll remember this event for many years, probably because I was having fun. At some level, that's what every game aims to be: fun.</p>

<h3 id="therealization">The Realization</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Besides just being fun, I immediately realized this was a perfect example of <strong>emergent gameplay</strong> (which I promptly described to my friend). I wanted to do some more research regarding emergent gameplay, and so here we are. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Emergent gameplay</strong> is a scenario in which the simple rules or mechanics provided to a player can be utilized such that their combination creates new and/or unintended strategies. Utilizing the grappling hook of the chopper to bypass the destruction of the boards was an unintended method of descending into the hole. That said, my definition might also be a point of contention for some. It's debatable whether or not  emergent gameplay has anything to do with the game designer's input.</p>

<p>For example, if the game designer provided a mechanic whose depth and complexity was massive but fully intended by the designer, is a player's discovery of this complex utility emergent? Some argue that true emergent gameplay arises when no part of the system can explain the complexity of the emergent property (like the rise and fall of market prices)<sup>1</sup>, which has nothing to do with the designer's intentions. In fact, Jochen Fromm theorized four types of emergence<sup>2</sup>, which I briefly review here: </p>

<ul>
<li><p><em>Nominal or intentional emergence</em>, which derives from systems with no feedback or only feedback on the same level. The example used is man-made machinery in which the function is a designed emergent property of the components, but lacks flexibility because of it.</p></li>
<li><p><em>Weak emergence</em> introduces top-down feedback between levels of the system. Flock behavior of birds is an example of such emergence; birds react to the birds in their vicinity yet all of them move as a group. </p></li>
<li><p><em>Multiple emergence</em> describes the complexity when multiple feedback loops interact at different levels of the system, such as in the stock market, or Conway's Game of Life.</p></li>
<li><p><em>Strong emergence</em> is a little tough to immediately agree with, but it describes systems where the highest level of emergence is completely separate from its most atomic particles. The examples used are life as an emergent property of genetic systems and culture as an emergent property of language and writing. I feel the connection is a bit tenuous, but you can form your own opinion with more reading.</p></li>
</ul>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Regardless of how it is defined, emergent gameplay is fascinating because it's difficult to get right. It isn't something you can reverse-engineer or truly plan for. It's also difficult to accurately predict. If one were designing with the dream of emergent gameplay in mind, one  would have to ensure that the game rewards the result and not the method. I'm sure many of you have played a game where you've gotten past some part of a level, but not in the intended way, and so something funny happens, like the enemies in the next sector fail to load (Sonic Heroes, anyone?). That's an example of rewarding method instead of result, and that denies emergence (or freedom, if you view emergence differently). The design can be much more involved than that, but I would suggest reading the second article in the source list below for more.</p>

<h3 id="summary">Summary</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Though this post was more an opportunity for me to tell a story and explore a topic I developed an interest in, I hope it was of some value to you. Emergent gameplay, while difficult, is not something I would write off as immediately out of reach. Next time you are designing some game mechanics, think about how you might relax the rules to provide some feedback or interplay. I've included some sources for further reading because I only scratched the surface here. The comments of the first article are truly engaging; I would  take my time there. The second link is a research article examining emergent gameplay and how game systems can be visualized with UML (Unified Modeling Language). Both are excellent reads.</p>

<h4 id="sources">Sources</h4>

<ol>
<li><p><a href="http://www.gamasutra.com/blogs/JoshBycer/20150916/253682/Examining_Emergent_Gameplay.php">Gamasutra - Examing Emergent Gameplay</a></p></li>
<li><p><a href="http://www.jorisdormans.nl/article.php?ref=visualizinggamedynamics">Research Article - Visualizing Game Dynamics and Emergent Gameplay</a></p></li>
</ol>]]></content:encoded></item><item><title><![CDATA[A Heuristic Analysis of Your Game]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I'm currently taking a course in human-computer interaction (HCI) in which the focus is to create a smooth and exemplary user experience for a smartwatch app by applying the principles we learn in class. One of the only requirements for our app is that it</p>]]></description><link>http://indiebn.com/a-heuristic-analysis-of-your-game/</link><guid isPermaLink="false">86a21274-4cee-4ae8-b0fd-469454d7eea5</guid><category><![CDATA[UI UX testing]]></category><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Thu, 10 Dec 2015 18:42:19 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I'm currently taking a course in human-computer interaction (HCI) in which the focus is to create a smooth and exemplary user experience for a smartwatch app by applying the principles we learn in class. One of the only requirements for our app is that it not be a game. Why? Building a game for a watch is an entirely different beast than building an app, and the "human-computer interaction" part requires a slightly different approach. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; That being said, we recently learned of <a href="http://www.nngroup.com/articles/ten-usability-heuristics/">Nielsen's heuristics for interface design</a> and the method of heuristic analysis in general. I'd like to share with you all how a heuristic analysis is done and why it might be a good thing to do for your game. I also did a heuristic analysis of two games to see what I could learn, and how I could apply those principles in the future.</p>

<h3 id="heuristicanalysis">Heuristic Analysis</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Before I go any further I must say that if you would like to hear an explanation on this topic from the man himself, here is the link: <a href="http://www.nngroup.com/articles/how-to-conduct-a-heuristic-evaluation/">How to Conduct a Heuristic Evaluation</a>. A majority of the quotes I use will be from this site, unless I indicate otherwise.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To be succint, "Heuristic evaluation involves having a small set of evaluators examine the interface and judge its compliance with recognized usability principles (the 'heuristics')." </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Essentially, the evaluators comb through the interface and use the heuristics to bring out any failures in the design. The heuristics make it so the evaluators are not biased in their responses. Different evaluators may feel differently on the subject of design "failures" if left to their own devices, but the heuristics make it so their personal beliefs have minimal contact with the interface and the report. The research indicates that the use of around 4 or 5 evaluators yields the maximum return for the minimum cost (paying evaluators). </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Each violation noted should come with a severity rating (from 0-4, 4 being the most catastrophic). </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Which heuristics do we use? Well, that's a tough one. Some research has focused on creating usability guidelines with regards to gaming, but games are so varied in their design that it may behoove you to make your own heuristics. As for the games I look at in this post, I'm using Nielson's 10 heuristics which I mentioned above. They may not be directly applicable, but I still think it's worth trying.</p>

<h3 id="heuristicsandyourgame">Heuristics and Your Game</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heuristic evaluation is known as a "discount" method in some HCI circles because it can be done on the cheap. You don't need to hire people to help perform a large scale user test or an experiment. You can take your UI, HUD, or whatever screens you would like to evaluate and do the evaluation yourself. That, or someone who didn't design the UI can evaluate it. Either way, you get to iterate on your UI, so that when the user test rolls around, the users can spend more time ripping apart your gameplay and less time ripping apart your UI (the dream). </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I'd like to point out that I am discussing the evaluation of user interfaces and NOT gameplay mechanics/interaction as they relate to games. Gameplay is a whole other beast which has its own research. Check out the sources below to see some research articles regarding the subject, plus some heuristics geared towards gameplay evaluation. </p>

<h3 id="thestudies">The Studies</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; So, which game did I decide to look at? Our own, of course! When I was thinking of which game to examine, I thought tearing apart our own game would actually prove pretty useful for further work. It isn't very complex, but even a simple game can have problems. So, without further ado:</p>

<h4 id="thesharpestblade">The Sharpest Blade</h4>

<p><img src="http://indiebn.com/content/images/2015/11/Screen-Shot-2015-11-25-at-9-03-38-PM.png" alt="Title Screen"></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Here you see the start screen. Immediately, I see a violation of the "Aesthetic and Minimalist Design" heuristic. The design is fairly minimalistic, but what about the aesthetic? Honestly, the font makes me cringe. Is that "The Sharpest Blade," or "The <strong>G</strong>harpest Blade?"</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I would say this problem deserves a severity rating of 2 (minor usability problem, low priority). Some might say it deserves a 1 or 0 because it is purely cosmetic. I argue that the font is used in every screen, including the title of the game, and thus may hinder experience everywhere.</p>

<p><img src="http://indiebn.com/content/images/2015/11/Screen-Shot-2015-11-25-at-8-01-23-PM.png" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is the pause screen. Again, I can see a heuristic violation, namely, "User Control and Freedom." Usually a player would like to unpause after pausing the game. That functionality should be immediately available to the player, but even I, a developer, had to figure it out by scanning the text.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Instead, what is instantly recognizable are the two buttons, "Quit" and "Home." At first, I thought "Quit" would go to the start screen. But then what does "Home" do? Clearly, this is a violation of the "Consistency and Standards" heuristic. After clicking around, I figured out "Home" brings the user to the start/home screen, while "Quit" quits the game. It sounds like common sense, but I hesitated when I first thought about it. There should be no hesitation. That should be fixed. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While everything I have pointed out so far is not an interface disaster, each flaw deserves a severity of about two (minor problem, low priority). It can be argued that the font issue is purely cosmetic, but I believe that since the font is always visible at some point in the game, it deserves more attention.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Now, for contrast, here are some notes on a far more polished game: </p>

<h4 id="hearthstoneheroesofwarcraft">Hearthstone: Heroes of Warcraft</h4>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Since this game saw plenty of design screenings and iterations before launch, I won't have too much to actually critique. I will, however, take note of certain design decisions that I feel are important or interesting. Some of these might be obvious while others not so much. These should make sense even if you have very little knowledge about the game.
<img src="http://indiebn.com/content/images/2015/12/hearthstone_no_close.PNG" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Here is the screen displayed when you click  on "Quest Log." A very simple yet important design decision was made here. To close the dialog one must click anywhere except the Quest Log dialog itself; there is no "X" button to close the dialog. This follows a convention that a lot of mobile apps have been using as of late. Given the limited real estate of a mobile device, hitting a small "X" can be a low percentage shot, resulting in unecessary frustration. Since Hearthstone is on both desktop and mobile platforms, it keeps a consistent UI that follows convention, making the interaction easier on the player. This practice is used for a few other dialogs in the game too, such as the Options dialog.</p>

<p><img src="http://indiebn.com/content/images/2015/12/hearthstone_loading.PNG" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This one is pretty obvious: it's the "loading" screen of Hearthstone's matchmaking system. It's cleverly artistic, but most importantly, it gives the user an indication that something is actually happening. Players crave feedback, whether it's something trivial, such as firing a bullet, or something more serious, like whether the computer has frozen or the level is still loading. It's Nielson's "Visibility of system status" heuristic. Just something to keep in mind.</p>

<p><img src="http://indiebn.com/content/images/2015/12/hearthstone_search.PNG" alt="">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Here is the "My Collection" tab, which allows a player to browse through the decks and cards in his or her posession. I've circled the search bar at the bottom because it adds particular value to the system: flexibility and efficiency of use. This might also be obvious, but when I had a smaller collection I used to flip through the pages until I found what I wanted. It's purpose becomes immediately clear to the more experienced players with larger collections. As Nielson describes this heuristic, "Accelerators -- unseen by the novice user -- may often speed up the interaction for the expert user such that the system can cater to both inexperienced and experienced users. Allow users to tailor frequent actions." These are much akin to macros in Photoshop, for example.</p>

<p><img src="http://indiebn.com/content/images/2015/12/hearthstone_battle_screen.PNG" alt="">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is the battlefield, that is, the screen of the actual combat in the game. The most interesting thing here is that the battlefield is asymmetric. Your hero faces you, as does the enemy hero (and the enemy hero power). It would have been very easy to just develop one symmetric board and display the correct orientation to the player, as many board games do. This one breaks that convention in a way that makes sense. If there's something to learn from this decision, I would say that it's to not be trapped by the convention of the genre of game you are developing. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I don't have a picture for the final design decision because it's an audio decision. When you no longer have enough mana to play any card and you have no other moves you can make, a voice says "Job's done!" A lot of people find it annoying, but for the less experienced players, I feel it eases the burden of determining if one has exhausted all options. It allows for more focus on the next turn. I can't find a decent clip of this actual event occurring, but here's the audio nonetheless: <a href="https://www.youtube.com/watch?v=5r06heQ5HsI">Job's Done!</a></p>

<h3 id="summary">Summary</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Getting your game tested by users is great, but it only works well with a certain level of polish and gameplay. If you aren't there yet or you can't do multiple user test iterations, sometimes you have to test the game yourself. When you do, it helps to have a plan. Approaching your UI/UX design via heuristic analsyis is a cheap yet effective way of testing. If you give it a shot, let me know! I'm interested in hearing how it turns out.</p>

<h5 id="sources">Sources</h5>

<p><a href="http://gaips.inesc-id.pt/videojogos2010/actas/Actas_Videojogos2010_files/VJ2010-FP_P_21-30.pdf">Heuristic Evaluation of 
“FarmVille”</a></p>

<p><a href="http://www.nngroup.com/articles/how-to-conduct-a-heuristic-evaluation/">http://www.nngroup.com/articles/how-to-conduct-a-heuristic-evaluation/</a></p>

<p><a href="http://www.nngroup.com/articles/how-to-rate-the-severity-of-usability-problems/">http://www.nngroup.com/articles/how-to-rate-the-severity-of-usability-problems/</a></p>]]></content:encoded></item><item><title><![CDATA[What's it like to Take a Game Dev Class?]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hey folks. Long time no talk. School's over for me, and the moonlighting profession has been taken up once more. However, I want to wind the clock back to the beginning of my previous quarter at UCLA, during which I enrolled in a class called</p>]]></description><link>http://indiebn.com/whats-it-like-to-take-a-vr-game-dev-class/</link><guid isPermaLink="false">47fac781-d594-44aa-a0b0-fb85c3e6b8ef</guid><category><![CDATA[gamedev]]></category><category><![CDATA[vr]]></category><category><![CDATA[virtual reality]]></category><category><![CDATA[oculus rift]]></category><category><![CDATA[class]]></category><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Thu, 20 Aug 2015 15:49:00 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hey folks. Long time no talk. School's over for me, and the moonlighting profession has been taken up once more. However, I want to wind the clock back to the beginning of my previous quarter at UCLA, during which I enrolled in a class called "Game Development with the Oculus Rift." I couldn't refuse an opportunity to take such a class! In this blog post, I'm going to cover what it is like to take a class in game development, especially with virtual reality in mind, and how a class like this may benefit you or not.</p>

<hr>

<h4 id="whatmakesvirtualrealityanydifferent">What makes Virtual Reality any different?</h4>

<p><img src="http://indiebn.com/content/images/2015/08/dk2-product.jpg" alt="Oculus pic"></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;At first, when we were all coming up with ideas for our games, a lot of them were rejected outright by our professor. The continuity needed in virtual reality requires a different kind of gameplay. There can be no cutscenes, no eye-blinking, no arm movement, no looking at oneself in mirrors—all these things can break the experience. This limited selection caused around eight of our fourteen teams to create horror games. Luckily, our team went a different route, really focusing on how the Oculus Rift allows a new range of movement with the head.</p>

<h6 id="whatdidmyteamdospecifically">What did my team do, specifically?</h6>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We named our game <em>Heighten</em> on the premise that the player has the ability to heighten his senses after focusing on an object. Imagine the game has the player start tied to a chair, and there are two guards talking outside. With the Oculus, the player could swivel his head and focus on the guards. Slowly, his hearing perception increases, and what used to be the quite mumble of the guards now seems as if the guards are whispering in your ear. A picture with a link to a full video below demonstrates our attempt to catpure this experience</p>

<p><img src="http://indiebn.com/content/images/2015/08/Screen-Shot-2015-08-04-at-9-28-27-PM.png" alt="vid">
<span style="font-size: .8em"><a href="https://www.dropbox.com/s/gvvf4g4j2x62ygf/QuickFullPlaythrough.avi?dl=0">Video of the game in action</a></span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The intro should be enough to understand what's going on, but to put it into words, some of the guards holding the player captive are actually on the player's side, helping him escape. Nothing distinguishes them except for the scent that can detected by a very powerful sense of smell, one the player can develop if he focuses. Problem is, focus too long on the wrong guard and he starts to get the feeling that someone is staring him down, and tells the player to get back to work. Through the game, we focus on head movement, AI interaction, and trying to keep the player invested in this "undercover" feeling. The guards that do want to help give you tips to help the player solve the puzzle in each level, granting him access to the next stage. <sup>1</sup></p>

<h5 id="technicaltakeways">Technical Takeways</h5>

<ol>
<li>Always keep your audience in mind.  </li>
<li>Ask for feedback as soon as you can.  </li>
<li>Parallax mapping is a must for detail in VR.  </li>
<li>Use Unreal Engine's Blueprints for prototyping.  </li>
<li>Understand your hardware limitations!</li>
</ol>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The first two go hand in hand. I hade two roomates who could have easily provided instant feedback, since they were my target audience, yet I didn't show them the game until the very end. That was foolish on my part, since I could have changed so many little things much earlier on, like if the heartbeat were too loud, or the focus mechanic took too much time, or whether or not the clues were easy enough to understand. Readers, when you have a chance to receive feedback, take it!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://developer.valvesoftware.com/wiki/Parallax_mapping">Parallax mapping</a> is an enhanced form of bump mapping, giving small depth to textures.
<img src="http://indiebn.com/content/images/2015/08/compare.jpg" alt="parallax">
<span style="font-size: .8em">From <a href="http://graphics.cs.brown.edu/games/SteepParallax/">http://graphics.cs.brown.edu/games/SteepParallax/</a></span></p>

<p>While the effect is minimal, it greatly helps create better immersion with  more realistic objects in VR.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unreal Engine's Blueprint system is phenomenal for GUI based programming. However, the deeper you get, the more complicated all the wiring becomes, and frankly, my team was frustrated at points where we felt the blueprints were limiting our coding. For prototyping, it is amazing, simply because of how fast one can crank out logic. But when classes and entities become necessary, and algorithms are more compilcated than a for loop or two, I feel coding it in C++ would have been a faster approach.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number four is just an Oculus VR thing. At the beginning of the quarter, none of us had a machine with the specs capable of running it, but we managed to MacGyver a solution to get a Windows machine with a good enough graphics card to start development. Do the research beforehand and know the hardware being handled. It never hurts to come prepared, and it always hurts when you don't.</p>

<hr>

<p>Now, for the qualitative analysis.</p>

<h5 id="itistimeconsuming">It is Time-consuming</h5>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Somehow, I thought things would be different. I thought this would be a structured class with both the theoretical and the practical in mind. I thought it would have projects involving different aspects in VR, and that I would have ample time to do it all. I was wrong.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The class consumed both my time and my thoughts. It wasn't very structured in the beginning (were we doing two games or one; was multiplayer a requirement or a plus?) and we only had a grasp of what was expected of us halfway through the course. Our team was working well into the night, and I actually skipped all my classes the final week and pulled 4 all-nighters (3 back to back, with about an hour of sleep total) to work on the project. Life was tough.</p>

<h5 id="itisarecurringtheme">It is a Recurring Theme</h5>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I don't want to perpetuate the idea that game development is a career that demands sleepless nights and a risky future. Maybe it's just that as new developers in a market saturated by the like, we don't learn from each other's mistakes as well as we should. Only problem is, the wise learn from other's mistakes (via postmortems), but the wise realize that learning is doing. So who is wiser? I can't answer that yet, I'm still reading the postmortems.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On the flipside, everyone in the class suffered similar fates and voiced similar concerns, so at least we were all in this together (another recurring theme)! </p>

<h5 id="itisrewarding">It is Rewarding</h5>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Getting week to week homework isn't much of an achievement. But getting a solid demo for a game in ten weeks is greatly rewarding. Being able to physically work with other game developers isn't something new indie developers get the chance to do, so this was a new and exciting experience. We were able to receive continuous feedback from our professor and iterate on the game to the point where experts from Unreal Engine who had come down to take a look at our games were thoroughly impresseed. In game development, it's the feedback developers look most forward too, and to receive such praise from professionals in the field is more than any student could have hoped for. In fact, just last week, our professor gave a forty-five minute lecture on "AI Interactions in VR", including video clips from each of our projects at Siggraph. How many students get that opportunity? I was happy with the class' conclusion, to say the least.</p>

<hr>

<h3 id="conclusion">Conclusion</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Should you take a game development course? I think you should, but only if it offers an interesting experience or one that isn't easy to obtain. For me, being able to use the Oculus Rift sealed the deal. If it were a regular game development class, I may not have taken it. </p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Once you've committed to the class, prepare to sacrifice a large number of hours. That being said, it still is a class; enjoy your time spent, see what others create, and enjoy the experience.</p>

<p><span style="font-size: .8em">1: Forgive the game for any lackluster art or bad voice acting. A budget of $0 and a timeframe of 10 weeks doesn't leave much room for these choices, since the game mechanics were much more important than the stylistic concerns, even though we were dealing with a VR experience.</span></p>]]></content:encoded></item><item><title><![CDATA[Realm Racer Devlog #1: Inspirations and Procedural Generation]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If you've been following our twitter, then you'll know we've been making some progress on our game! If you haven't, well, then you should be <a href="https://twitter.com/Elrel_Studios">following us</a>!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We've done some concept work, and are pretty satisfied with the direction of</p>]]></description><link>http://indiebn.com/game-dev-update-inspirations-and-procedural-generation/</link><guid isPermaLink="false">1405050a-0201-46e5-8be3-36d0f48b4b16</guid><category><![CDATA[update]]></category><category><![CDATA[procedural generation]]></category><category><![CDATA[pg]]></category><category><![CDATA[concept art]]></category><category><![CDATA[inspirations]]></category><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Mon, 23 Mar 2015 16:17:20 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If you've been following our twitter, then you'll know we've been making some progress on our game! If you haven't, well, then you should be <a href="https://twitter.com/Elrel_Studios">following us</a>!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We've done some concept work, and are pretty satisfied with the direction of the game. It's planned to be mobile game—an endless runner, to be exact. However, what excites me most is that it will all be procedurally generated. The whole game. I'm talking the track, the obstacles, the power-ups—everything (even the environment, if we are really good)! It might be slightly hard, trying to balance the game and give the user a fair chance at making some headway, but the challenge will be fun and, more importantly, a learning experience. </p>

<h3 id="conceptartandinspirations">Concept Art and Inspirations</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We drew inspiration from some things that consumed a large part of our childhood: HotWheels!</p>

<p><img src="http://indiebn.com/content/images/2015/03/ConceptArt.png" alt="Concept Art">
<span style="font-size: .8em">Concept art from player view.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To be more specific, <a href="http://en.wikipedia.org/wiki/Hot_Wheels_World_Race"><em>Hot Wheels World Race</em></a>, <a href="http://en.wikipedia.org/wiki/Hot_Wheels_AcceleRacers"><em>Hot Wheels AcceleRacers</em></a>, and <a href="http://en.wikipedia.org/wiki/Hot_Wheels_Velocity_X">Hot Wheels Velocity X</a>. The first two are movies (well, we own the game for the first one as well, but the the movie was the real inspiration), and the last, a game. The main inspiration from the movies is the exhilarating speed at which the drivers move through bizarre environments, all the while surviving dangerous obstacles. </p>

<p><img src="http://indiebn.com/content/images/2015/03/WorldRaceStreetBreed.png" alt="World Race"></p>

<p><img src="http://indiebn.com/content/images/2015/03/NeonPipelineRealm.jpg" alt="Acceleracers">
<span style="font-size: .8em">(Top) Scene from <em>Hot Wheels World Race</em> as the StreetBreed team helps the racers navigate an alternate route on the ice. (Bottom) The Cosmic Realm in <em>HotWheels AcceleRacers</em>.</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The game lends the idea of power-ups, but not quite for the same purpose. In the video game, you have to fight other cars. In ours, you are only trying to drive for as long as possible. </p>

<p><img src="http://indiebn.com/content/images/2015/03/VelocityX.jpg" alt="">
<span style="font-size: .8em">Car with top mounted weapon, approaching another power-up, in HotWheels Velocity X. Picture courtesy of www.gamesdbase.com</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In the end, this game has a lot to do with simply reliving our childhood passions, but through our new passion in game development. What you receive, you must give back, right?</p>

<h3 id="proceduralgeneration">Procedural Generation</h3>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now, I want to give a small explanation for how I built the procedurally generated track. The main gist of the procedural generation is heavily borrowed from <a href="http://gamedevelopment.tutsplus.com/tutorials/bake-your-own-3d-dungeons-with-procedural-recipes--gamedev-14360">this GameDevTut</a>. I'll show you some of the integral parts that makes ours just a tad bit different.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First, a simple picture of one of the main pieces in the prototype of the track:</p>

<p><img src="http://indiebn.com/content/images/2015/03/TrackPieceCurveArrows.png" alt="">
<span style="font-size: .8em">Red is the X axis, green is the Y axis, and blue is the Z axis. </span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You'll notice that I have at the start a node oriented as per the tutorial. The other node is at the green arrow, and it follows the same protocol (you just can't see it because in jME, one can select all the nodes, but only the first one's axes shows up).</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now, after implementing the tutorial's algorithm for connecting pieces, and a little of my own hand waving, we get this cool piece of work:</p>

<p><img src="http://indiebn.com/content/images/2015/03/VelocityYConnections.gif" alt="gif of connecting"></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It took a little extra work in jMonkeyEngine to visualize the correct movement, both position and orientation, of the nodes with respect to the scenegraph. In fact, there is more to this track than meets the eye. If you think about how the current procedural generation works, my track can easily collide with itself within a couple of iterations of the loop, simply because of how my track can turn left or right every time. Three turns and BAM—I've hit my track already! How do I avoid this?</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Well, there are two trains of thought for this. Like many endless runners, I don't need to store the rest of the track behind the user. Therefore, I can destroy the rest of the track behind the user, and that way, any conflicts with it will be avoided.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The only issue with this is its dependence on how far ahead of the player the track is being generated. If it's extremely close, then it'll probably work. However, this means the player might be able to see the track being generated. While, in some games, that mechanic works really nicely (there is a game I saw from <a href="http://www.reddit.com/r/gamedev">/r/gamdev</a>'s Feedback Friday, but I can't recall its name; please link it if you can), we don't think it suits our game too well. While I should still be deleting the track behind the user for memory purposes (it's being culled, but I don't want the camera to even have to think about whether or not to render it), I need another way for the track to not collide with itself.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is easily accomplished with some raycasting techniques. The pseudo code goes something like this:</p>

<pre><code>boolean[] canPlace = new boolean[]{true, true, true};
collidables = track
loop:
    node = Node to attach next piece too.
    left_cast = raycast to the left
    right_cast = raycast to the right
    forward_cast = raycast forward
    left_collisions = new CollisionResults();
    right_collisions = new CollisionResults();
    forward_collisions = new CollisionResults();
    node.collideWith(left_cast,left_collidables);
    node.collideWith(right_cast,right_collidables);
    node.collideWith(forward_cast,forward_collidables);

    if(left_collidables isn't empty) canPlace[0] = false;
    if(right_collidables isn't empty) canPlace[1] = false;
    if(forward_collidables isn't empty) canPlace[2] = false;

    Random number from 0-2. If it's false, repeat. Else, use that as chosen direction, grab appropriate piece.
end
</code></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is slightly naive, since I don't check the distance to my previous track in the collidable, just that it's there, either in front, to the left, or to the right of the current track piece. This means the track will never turn back in the direction of previously laid down track. Instead, I could have checked what the distance to each first collision was, and then made the decision as to what track piece to lay down. That's just only a couple calculations away from what I've done currently, so whether I put that in or not won't affect the code heavily, but it may affect the design of the game.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;See the second half of the image in our concept art? It shows the user on the outside of the track, able to view the environment he is driving through. Currently, the code implementation deletes the track the user has been through and never has the track turn back on itself. But these both mean that the user will never be able to see how far he has come. If you were driving on the inside of the tube, and all of a sudden, jumped to the outside, wouldn't you want to take a second to view the world around you? Take a second to see just where it is you are driving through, and how far you have driven to get there? I know I would, and I hope to build that feeling into the game. There's another reason for this too (more childhood inspiration!), but I'll save that for another post.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You may notice in the gif that an axis object is rotating and translating around the track. That's how I'm moving the player around the track! Think of the player as merely orbiting around this point—that's all it is. That, and some camera adjustments, gives us our latest twitter update:</p>

<p><iframe src="https://vid.me/e/RVmR?loop=1" width="640" height="480" frameborder="0" allowfullscreen webkitallowfullscreen="" mozallowfullscreen="" scrolling="no"></iframe><div><a href="https://vid.me/RVmR?source=embed" style="font-size: 11pt; text-decoration: none;">PrototypePG</a></div></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;That's one hefty update! Hope you enjoyed that!</p>]]></content:encoded></item><item><title><![CDATA[Perspective + Announcement]]></title><description><![CDATA[<p>The announcement is going to be pretty short. Here is the lowdown: I'm going to GDC. That's right--in 2 days I'll be heading on over to SF and taking in all the things the annual event has to offer! </p>

<p>That's all, as far as announcements go. Now for the real</p>]]></description><link>http://indiebn.com/perspective-announcement/</link><guid isPermaLink="false">35a3332a-3b50-446b-87e0-89e607d2eb2a</guid><category><![CDATA[design]]></category><category><![CDATA[process]]></category><category><![CDATA[perspective]]></category><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Thu, 05 Mar 2015 05:47:33 GMT</pubDate><content:encoded><![CDATA[<p>The announcement is going to be pretty short. Here is the lowdown: I'm going to GDC. That's right--in 2 days I'll be heading on over to SF and taking in all the things the annual event has to offer! </p>

<p>That's all, as far as announcements go. Now for the real topic of conversation--</p>

<h3 id="perspective">Perspective</h3>

<p>In a small studio, most people wear multiple hats during the development process. For teams of less than 10 people, game design is often a decision made by multiple members, not all of whom hold the title "game designer." Similarly, a small studio may not hire a specific person to deal with all PR material--it may be a joint venture by some programmers and artists. This is perfectly acceptable given a lack of resources and time. But visual and sound artists as well as programmers have decisions to make too. So why aren't things like game architecture or implementation decisions discussed with people not in the discipline? I believe we can attribute this to a lack of perspective.</p>

<p>In a game jam I recently participated in, I had my first real experience with a game engine (Unity, to be specific). I had written 2 games before in game jams, but they were HTML5 games written with JS libraries. Those aren't exactly engines, if you will. That having been my first real experience, I came across decisions that I thought wouldn't even be relevant in developing the <a href="http://elrel-studios.itch.io/high-roller">game</a>. For example, a score multiplier was received when the player takes the thinner path. How would I know? My initial idea involved checking the collision between the ball and the current platform it is touching to examine the width of the platform. This would occur for every platform, for the rest of the game time. That's a lot of collision checking to do, and probably not a smart idea. So I asked my brother how he might do this, and of course, the answer came to him naturally--create a block at the start and the end of every thin path with the same width as the path, and let them be triggers. If the start block detects a collision, then a score multiplier is given based on the width of that block. When the end block is triggered, the score multiplier is reduced to 1. It was a no mess-solution. Clean and simple.</p>

<p>Why hadn't I thought of that? Because I lacked perspective, and perspective enables a way of thinking. I'm a computer science major, so I'm not new to the rodeo, but where games are concerned, I'm the artist--I never learned the methodologies and thought processes that are involved in designing a game from the code side. We both discuss game design, sure. However, when my brother runs into a coding issue that isn't an error or a bug, but rather a design issue of the architecture--now I can help too. Maybe not immensely or immediately, but experience enables. No part of the pipeline ought to be thought about in isolation. </p>

<p>So what am I trying to say? Should artists learn to code, and progammers learn to create works of art? No, not quite. But I do believe that artists ought to take the effort to see the world of game development through the eyes of the programmer, and vice versa. The programmers can take steps to learn the troubles and decisions of the artists, without having to learn so much about the technical detail. Similarly, artists can learn some of the peculiarities of the engine and tools without learning how to proram. Having people more informed about the decisions other disciplines face in the pipeline leads to more collaborative thought and a distributed burden. Better decisions are made when the programmer isn't the only one thinking about architecture, just as game design is improved when there isn't only one person designing. Game design is a collaborative process; other disciplines ought to be as well.</p>

<p>Now, it is true that I might not have a leg to stand on because, being a programmer, it was very easy for me to understand the other perspective. However, how easy it was doesn't change the value of the lesson learned. I understand how intimidating it can be to program without any knowledge beforehand, especially when trying to make a game. I had to deal with the opposite--learning about the process of 2D and 3D art, when all I knew was programming. What's important is to learn how to think, in ways which your worflow does not involve.</p>

<p>So go forth and learn. Learn about what you don't know. You don't need to learn so much that you could get a job. Just learn enough to gain perspective, so you can be helpful even when you aren't the expert.</p>]]></content:encoded></item><item><title><![CDATA[PacktPub Giveaway Winners!]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I have our winners from the PacktPub givewaway!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In no particular order, the winners are:</p>

<ol>
<li><strong>Charles J. Geringer</strong>, winning <a href="https://www.packtpub.com/game-development/game-jam-survival-guide">The Game Jam Survival Guide</a>  </li>
<li><strong>Jonathon Lewis</strong>, winning <a href="https://www.packtpub.com/game-development/game-data-analysis-%E2%80%93-tools-and-methods">Game Data Analysis, Tools and Methods</a>  </li>
<li><strong>Jenny Allan</strong>, winning <a href="https://www.packtpub.com/game-development/mobile-game-design-essentials">Mobile Game Design Essentials</a></li></ol>]]></description><link>http://indiebn.com/packtpub-giveaway-winners/</link><guid isPermaLink="false">2478408d-1e41-411b-9835-aa672c73c5e8</guid><category><![CDATA[PacktPub]]></category><category><![CDATA[giveaway]]></category><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Tue, 06 Jan 2015 16:49:27 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I have our winners from the PacktPub givewaway!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In no particular order, the winners are:</p>

<ol>
<li><strong>Charles J. Geringer</strong>, winning <a href="https://www.packtpub.com/game-development/game-jam-survival-guide">The Game Jam Survival Guide</a>  </li>
<li><strong>Jonathon Lewis</strong>, winning <a href="https://www.packtpub.com/game-development/game-data-analysis-%E2%80%93-tools-and-methods">Game Data Analysis, Tools and Methods</a>  </li>
<li><strong>Jenny Allan</strong>, winning <a href="https://www.packtpub.com/game-development/mobile-game-design-essentials">Mobile Game Design Essentials</a></li>
</ol>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The winners will receive and email from PacktPub when the book has been put in their PacktPub account (if you do not have an account, PacktPub will help take care of that for you).</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thanks for entering the giveaway everyone, and     congratulations to the winners! </p>]]></content:encoded></item><item><title><![CDATA[PacktPub $5 Deals, Plus a Giveaway for FREE EBooks]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The title says it all! I have been informed by PacktPub that almost all their ebooks are going for $5 or less until January 6th. The main link for the campaign is <a href="http://bit.ly/1uW4pQG">HERE</a>.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is where I got the <u>jMonkeyEngine</u></p>]]></description><link>http://indiebn.com/packtpub-5-deals-until-jan-6-lots-of-game-dev-books/</link><guid isPermaLink="false">568048cf-2d24-4b50-ac9e-206a771c1ad7</guid><category><![CDATA[PacktPub]]></category><category><![CDATA[books]]></category><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Mon, 22 Dec 2014 16:52:03 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The title says it all! I have been informed by PacktPub that almost all their ebooks are going for $5 or less until January 6th. The main link for the campaign is <a href="http://bit.ly/1uW4pQG">HERE</a>.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is where I got the <u>jMonkeyEngine 3.0 CookBook</u> from. PacktPub has a huge <a href="https://www.packtpub.com/game-development">game development library</a>, so if there are any books you want to pickup, now is the time!</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PacktPub has also told me that they are willing to sponsor up to 3 free ebooks ! Therefore, I'll be holding a <strong>giveway</strong> for the ebooks (consider it a late Christmas gift from us)! Send us an email at <strong>indiebynight at elrel.com</strong> with </p>

<ul>
<li>subject: "Giveaway"</li>
<li>body: your name (please don't be greedy and pull any silly tricks). </li>
</ul>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I'll draw three names out of a hat (meaning a random draw, with no repeats) and announce the three lucky winners, as well as email them. <del>The winners can then email me back telling me which book they want. I will then email them the free code to use on PacktPub to get the ebook.</del>
There has been a small change. I've been told I need to pick the three books to give out, so these are the books:</p>

<ul>
<li><a href="https://www.packtpub.com/game-development/game-data-analysis-%E2%80%93-tools-and-methods">Game Data Analysis, Tools and Methods</a></li>
<li><a href="https://www.packtpub.com/game-development/mobile-game-design-essentials">Mobile Game Design Essentials</a></li>
<li><a href="https://www.packtpub.com/game-development/game-jam-survival-guide">The Game Jam Survival Guide</a></li>
</ul>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;These books aren't specific to any game development environment, so they should be of help to all who enter. I will announce the winners after the deadline passes, and the winners will receive an email with the new ebook in their accounts on PackPub soon after.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<del>Remember, <strong><em>the giveaway ends January 4th at 11:59 pm PST (2:59 am EST) !</em></strong></del> <em>The giveaway has ended</em>.</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hope you all had a Merry Christmas and the team here wishes everyone Happy New Year! I hope 2015 makes your indie dev dreams come true!</p>]]></content:encoded></item><item><title><![CDATA[Review of jMonkeyEngine 3.0 Cookbook]]></title><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;College has been quite hectic, but in the midst of it all, I got an email from Packt Publishing, asking if I could review the recently published <u>jMonkeyEngine 3.0 Cookbook</u>. Let me tell you, nothing has ever made me happier while trudging through the</p>]]></description><link>http://indiebn.com/review-of-jmonkeyengine-3-0-cookbook/</link><guid isPermaLink="false">e9fcb994-d8c7-42d9-99e3-c6911e607d56</guid><category><![CDATA[java]]></category><category><![CDATA[jme]]></category><category><![CDATA[book]]></category><category><![CDATA[jMonkeyE]]></category><category><![CDATA[review]]></category><dc:creator><![CDATA[Joraaver Chahal]]></dc:creator><pubDate>Fri, 28 Nov 2014 17:06:22 GMT</pubDate><content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;College has been quite hectic, but in the midst of it all, I got an email from Packt Publishing, asking if I could review the recently published <u>jMonkeyEngine 3.0 Cookbook</u>. Let me tell you, nothing has ever made me happier while trudging through the midterm storm than to get a new book about game development. Well, that and the fact that I was contacted to review a book on game development involving jMonkeyEngine got me going. But enough of that. Here are my thoughts:</p>

<p><img src="http://indiebn.com/content/images/2014/11/jme3cookbok-1.jpg" alt=""></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Disclaimer</strong>: I have not finished reading the book yet, but as I dig deeper, I will update this post to fully reflect my impressions about the book.</p>

<p>First, the "at a glance", or <strong>tl;dr</strong>, version.</p>

<p><em>Pros:</em> </p>

<ul>
<li><p>A ton of recipes. </p></li>
<li><p>All the code for  all the recipes to use in the jMonkeyEngine.</p></li>
<li><p>Full application in real games, across a wide spectrum of games (RTS, RPG, FPS, platformer, etc).</p></li>
</ul>

<p><em>Cons:</em></p>

<ul>
<li><p>Few pictures. Could use a few more to help explain concepts and ideas more concretely.</p></li>
<li><p>Requires a solid grasp of several math-related concepts (trigonometry, vectors, etc.).</p></li>
</ul>

<p>Now, in more depth.</p>

<p>The <u>jMonkeyEngine 3.0 Cookbook</u> is 298 pages, and is divided into nine chapters and two appendices. Chapters are focused on different aspects of game development, such as world generation, artificial intelligence, networking, and physics. I thought the list comprehensive, and couldn't think of anything that was missing. Some areas are in depth for a mid-level developer like me—I have yet to explore the specifics of sub-animations or procedural generation.</p>

<p>To be fair, the book is labeled “progressing” in Packt Publishing's scale for books, so it's more for the intermediate jMonkeyEngine audience. The <u><a href="https://www.packtpub.com/game-development/jmonkeyengine-30-beginners-guide">jMonkeyEngine 3.0 Beginner's Guide</a></u> is for the complete beginners, and should be looked at first to learn jMonkeyEngine before going forward. This book and jMonkeyEngine's own <a href="http://hub.jmonkeyengine.org/wiki/doku.php/jme3:math_for_dummies">Math for Dummies Guide</a> will mitigate some of the math related cons. I had a little difficulty following a few of the vector operations, even though I have done all the math courses for an engineering degree in the United States. This is also where diagrams and pictures might have helped. But as the author, Richard Eden, says in Chapter 2, “No matter which way you choose to do it though, practicing and thus getting a better understanding of these trigonometric problems is always a good idea”. That is a solid work ethic to apply to your code, especially for aspiring game developers.</p>

<p><img src="http://indiebn.com/content/images/2014/11/Euler-s_Formula_c.png" alt="">
<span style="font-size: .8em">Okay, no, the math isn't <em>that</em> hard. You aren't going into the imaginary plane anytime soon.</span></p>

<p>Despite the small bumps in the road with the math, I found the book very useful, practical, and instructive. So many recipes are at the reader's disposal, and they are specific and relevant. I was watching my friend play <a href="http://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Ocarina_of_Time">Legend of Zelda: Ocarina of Time</a>, and I watched as he learned the new mechanic that allowed him to lean around corners to shoot while still covered. Guess what? That's specifically a recipe in this book, with angle of lean and the works! This example just goes to show how applicable almost every recipe is.</p>

<p>So if you are looking to improve your skills with jMonkeyEngine, <a href="https://www.packtpub.com/game-development/jmonkeyengine-30-cookbook">buy this book</a>. If you are looking to understand common techniques used in today's games, from FPS mechanics to RTS unit management to RPG open world design, <a href="https://www.packtpub.com/game-development/jmonkeyengine-30-cookbook">buy this book</a>. Simply put, <a href="https://www.packtpub.com/game-development/jmonkeyengine-30-cookbook">buy this book</a>!</p>

<p><br> <br>
<em>Disclosure: I have no financial interest in this book, and no financial relationship with the author or the publisher.</em></p>

<hr>

<p>P.S. If you are wondering about those other IndieCade "Games in Review" posts, they are in the works! You'll have to forgive my major for not being so forgiving to its students in terms of spare time.</p>]]></content:encoded></item><item><title><![CDATA[Berkeley Game Jam Update]]></title><description><![CDATA[<p>I'm intervening in Joraaver's triple post series to bring you a small update! This past weekend I went to a game jam hosted at Berkeley, and it was a blast. A friend of mine came to help, as well as my little brother. </p>

<p>The result is a game called "The</p>]]></description><link>http://indiebn.com/berkeley-game-jam-update/</link><guid isPermaLink="false">fd6430df-faf0-4413-b855-13628d9e6459</guid><dc:creator><![CDATA[Suchaaver Chahal]]></dc:creator><pubDate>Tue, 11 Nov 2014 08:26:29 GMT</pubDate><content:encoded><![CDATA[<p>I'm intervening in Joraaver's triple post series to bring you a small update! This past weekend I went to a game jam hosted at Berkeley, and it was a blast. A friend of mine came to help, as well as my little brother. </p>

<p>The result is a game called "The Assimilator"; it is a puzzle game that deals with mixing colors. You can play it here: <a href="http://akhillies.github.io/Blending/">The Assimilator</a></p>

<p>For those readers who are colorblind, I understand that the game may not be very playable. I have a colorblind friend who I'll have playtest the game, and hopefully I have time to adjust the game to make it enjoyable by all.</p>

<p>That's about it. As you were! Or not, if you are playing my game :)</p>]]></content:encoded></item></channel></rss>