<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Phuce</title>
    <link>http://phuce.com</link>
    <language>en</language>
    <webMaster>noonat@phuce.com (noonat)</webMaster>
    <lastBuildDate>Wed, 03 Jan 2018 22:32:31 +0000</lastBuildDate>
    <pubDate>Sat, 30 Jul 2011 00:00:00 +0000</pubDate>
    <copyright>Copyright 2007-2018</copyright>
    <ttl>60</ttl>
    <description>kakakakaPOW</description>
    
    <item>
      <title>Blipzkrieg Postmortem</title>
      <link>http://phuce.com/2011/07/30/blipzkrieg-postmortem/</link>
      <pubDate>Sat, 30 Jul 2011 00:00:00 +0000</pubDate>
      <guid>http://phuce.com/2011/07/30/blipzkrieg-postmortem/</guid>
      <description><![CDATA[<p>Game development has been a hobby for years, but <a href="http://blipzkrieg.com">Blipzkrieg</a> is the first
<em>real</em> game that I’ve done – one that wasn’t made in a weekend, and actually
has a full, playable experience. My co-workers here at <a href="http://gameclay.com">GameClay</a> have been
in the industry for a while, but this was a first for me. I learned a ton from
working on the game, and thought I should write a post-mortem while it’s all
fresh in my mind.</p>

<h3 id="prototyping">Prototyping</h3>

<div class="image right">
  <img src="https://phuce.com/images/blipzkrieg-postmortem/pathfinding.png" alt="Pathfinding" /><br />
  <span>Early pathfinding wasn't exactly... efficient.</span>
</div>

<p>Blipzkrieg started as a very different game than it is today. The initial
concept was a reverse tower defense game with an island theme. We thought we
wanted to start with Flash, and take it to iPad afterwards.</p>

<p>In the first version, you created spawn points, and your units pathed to the
heart of the enemy base. Your goal was to find the safest paths for your
attackers. When we found that boring, <a href="http://www.blamfantastico.com/">Mark</a> suggested adding <a href="http://www.red3d.com/cwr/boids/">flocking</a>.
Soon we had little troops wandering around the game.</p>

<p>The troops did what they were supposed to, but were fairly stupid. We
considered making them smarter, but realized that watching them wander to
their doom was more entertaining. In fact, we had real trouble finding a way
to make it into a game instead of a flocking simulation. It was neat to watch
guys wander around the level, but it wasn’t <em>playable</em>.</p>

<p>Adding leaders was a huge help. Now the player had a presence, and a direct
influence on the troops. Early versions had the player <a href="https://phuce.com/images/blipzkrieg-postmortem/too-many-leaders.mov">controlling multiple
leaders</a>, with different effects. One leader made troops better at attacking,
another tossed troops in a direction, and so forth.</p>

<p>Unfortunately, we found multiple leaders to be unwieldy. Players tended to
move one somewhere and then just leave him there. They became stationary troop
influencers, and the player lost that sense of presence in the world. We
decided to limit the player to one leader, which solved that.</p>

<p>Something still didn’t feel right, but we weren’t quite sure what. The game
felt too <em>slow</em> somehow. We spent quite a while trying to figure out what was
wrong, until <a href="http://www.blamfantastico.com/">Mark</a> made the magic tweak and drastically increased the damage
on the laser towers. Before, lasers had to fire on a single unit for a few
seconds to kill him. Now your forces could be decimated in the same amount of
time. It was the change we needed: the towers became absolutely terrifying,
and your job as a leader became more important.</p>

<p>The gameplay never really changed after this point. The rest of development
was spent on building levels (which I talk about below), and polish polish
polish.</p>

<h3 id="what-went-right">What went right?</h3>

<div class="image right">
  <a href="http://dribbble.com/shots/222785-Blipzkrieg"><img src="https://phuce.com/images/blipzkrieg-postmortem/peek.png" alt="War is Heck" /></a><br />
  <span>Mark's art rocks.</span>
</div>

<p>I find looking at what went wrong far more useful, but there were a number of
things that definitely helped us:</p>

<ol>
  <li><strong><a href="http://www.blamfantastico.com/">Mark</a> made the programmer art beautiful.</strong> God, the first prototype of
the game was awful looking. But then Mark got his hands on it, and somehow
managed to distill the look and feel into something beautiful. I am
completely jealous of his skills.</li>
  <li><strong>FlashPunk was awesome for prototyping.</strong> It does a great job at getting
out of your way, and works with you instead of against you. It also doesn’t
make any assumptions about the type of game you want to make.</li>
  <li><strong>Flocking and steering did wonderful things for us.</strong> You can create some
really unique behavior with just a few simple algorithms.</li>
  <li><strong>We added components and signals to FlashPunk.</strong> This was really helpful
for creating reusable behaviors that we could share between many entities.
You can find an implementation of this in <a href="https://github.com/noonat/FlashPunk">my FlashPunk fork</a>.</li>
  <li><strong>Dynamically loading assets allowed us to tweak without recompiling.</strong> I
blogged about the way we <a href="http://ltslashgt.com/2011/03/26/loading-embedded-as3-assets-at-runtime/">loaded embedded assets at runtime</a> on my coding
blog. This was a huge time saver while polishing and building maps.</li>
</ol>

<h3 id="what-went-wrong">What went wrong?</h3>

<h3 id="level-design-problems">1. Level Design Problems</h3>

<div class="image left">
  <a href="https://phuce.com/images/blipzkrieg-postmortem/war-is-heck.png"><img src="https://phuce.com/images/blipzkrieg-postmortem/war-is-heck-thumbnail.png" alt="War is Heck" /></a><br />
  <span>Early <em>War is Heck</em>. It hasn't changed much.</span>
</div>

<p>Once we were done prototyping gameplay, <em>War is Heck</em> (level 24 in the
finished game) was our only level. We were happy with it: it was hard, but
fun, and we kept finding different ways to beat it. But when we tried to
replicate that experience with more levels, we ran into problems…</p>

<p>It was at this point that we realized that none of us had much experience with
level design. Oops. Worse yet, we couldn’t find many other games that played
like ours to learn from.</p>

<p>This was by far the most painful part of building this game, and by far the
most educating. It came down to brute force it: one of us would churn out as
many horrible levels as we could, and the others would play and try to get
ideas from them. We would get one or two good levels out of it, then repeat
the process ad nauseam. We ended up with 35 levels or so that we were happy
with, but the process was an utter grind.</p>

<p>One of the reasons this was so difficult was our lack of a real narrative in
the game. We had an internal picture of the world, and who the player was,
but we didn’t directly tell that story to the player. The art is also very
abstract, which we love, but which made it hard for us to communicate some of
these things to players. By the time we realized that was a problem, we were
too deep into development to really change direction.</p>

<h3 id="time-to-fun-problems">2. Time to Fun Problems</h3>

<p>In early versions of the game, the learning curve was very steep. We added a
number of tutorial levels to help this. That took the game a bit too far in the
other direction: players got bored in the early levels, and never got to the
fun ones later on. We cut a bunch of levels, and tweaked the early ones to
teach faster, which seemed to fix it.</p>

<p>However, it seems like we didn’t go quite far enough. There is a steep falloff
in player retention at a specific point in our early levels. This is reflected
in some of the comments by confused players who think the game is just about
running away from things. We lose their interest at that point and they don’t
come back.</p>

<p><a href="http://www.blamfantastico.com/">Mark</a> had the idea of merging the tutorials into a single bootcamp level, and
I do think that would fix this problem. However, we didn’t think about that
until we were up for bidding on <a href="http://flashgamelicense.com">FGL</a>. It was far too late to be making such
drastic changes.</p>

<h3 id="control-problems">3. Control Problems</h3>

<p>We knew from the start that we wanted to take the game to iOS, and this
heavily influenced our decisions on controls. We made a conscious decision to
use the mouse for input, and try not to use any keyboard input at all, so the
game could translate directly to a touch device.</p>

<p>In hindsight, this was probably a bad idea. The gameplay is being altered for
iOS anyway, and the input method (while novel) is a bit clunky on trackpads
and on some of the levels that require fine control. I would like to try
keyboard controls in a future version.</p>

<h3 id="collision-detection-problems">4. Collision Detection Problems</h3>

<p>We used <a href="http://flashpunk.net/">FlashPunk</a> to build the game. I absolutely love FlashPunk, and
remain happy with that choice. That said, we ran into big performance issues
with the collision detection. FlashPunk doesn’t have a broadphase or any
spatial partitioning. When you’re doing neighbor lookups for <a href="http://www.red3d.com/cwr/boids/">flocking</a> and
<a href="http://www.red3d.com/cwr/steer/">steering</a>, things can get expensive really quickly. It also doesn’t have a
raycast, which was a must for us.</p>

<p>We ended up rewriting much of the collision ourselves. I tried a quad-tree
first, but the recursion cost for querying the tree was too high. In the end,
I used a uniform grid, which fit our world well: we already used tiles, and
the entities are all smaller than the tiles. Uniform grids also work very well
for raycasts.</p>

<p>We also ported our customized FlashPunk into <a href="http://haxe.org/">HaXe</a> so that we could inline
many of the function calls. This was a huge performance boost for us. I made
the mistake of not searching around first, and didn’t find Matt Tuttle’s
<a href="http://haxepunk.com/">HaxePunk</a> until <em>after</em> I had ported everything (doh). I’d definitely
recommend looking at his port if you need to squeeze some performance out of
your FlashPunk game.</p>

<p>I should say that we also looked at using <a href="http://code.google.com/p/nape/">NAPE</a>: it was super fast, but the
physics in our game were very touchy, as the flocking behavior is all balanced
around it. As a result, it wasn’t really feasible for us to replace FlashPunk’s
physics with NAPE so late in the game.</p>

<h3 id="learning-from-the-experience">Learning from the experience</h3>

<p>In the end, I’m very happy with what we have. I think we could have built it
faster if we hadn’t run into the level design block, but I think we’ll do
better with that in the future. Iteration seems to be the key there.
Iteration, and lots of tears.</p>

<p>We could have done more, but we wanted to get the game out there and see what
people thought of the idea. The feedback has been great. Some problems we
suspected have been confirmed, and we’ve found others we didn’t realize.
People seem to like the gameplay overall, and it sounds like they want more.</p>

<p>We’re working on porting the game to Unity for the iOS version now. We had to
cut lots of ideas to get the Flash version done, and I hope we can work these
back into the mobile version. <a href="http://www.blamfantastico.com/">Mark</a> is doing all new art for the game, and
it’s beautiful. I’ll leave you with a <em>very, very early</em> preview of what’s
to come:</p>

<div class="image">
  <a href="https://phuce.com/images/blipzkrieg-postmortem/preview.png"><img src="https://phuce.com/images/blipzkrieg-postmortem/preview-thumbnail.png" /></a>
</div>

<style type="text/css">
div.image {
  line-height: 1.2;
  text-align: center;
}
div.image.left {
  float: left;
  margin: 0 1.5em 0 0;
}
div.image.right {
  float: right;
  margin: 0 0 0 1.5em;
}
div.image a {
  border: 0;
  text-decoration: none;
}
div.image a img {
  border: 0;
}
div.image span {
  color: #999;
  font-size: 11px;
}
</style>

]]></description>
      
      <category domain="http://phuce.com/tags/#games">games</category>
      
      <category domain="http://phuce.com/tags/#blipzkrieg">blipzkrieg</category>
      
      <dc:creator>noonat</dc:creator>
    </item>
    
    <item>
      <title>Blipzkrieg</title>
      <link>http://phuce.com/2011/07/29/blipzkrieg/</link>
      <pubDate>Fri, 29 Jul 2011 00:00:00 +0000</pubDate>
      <guid>http://phuce.com/2011/07/29/blipzkrieg/</guid>
      <description><![CDATA[<iframe src="http://player.vimeo.com/video/25172803?title=0&amp;byline=0&amp;portrait=0" width="640" height="480" frameborder="0">&nbsp;</iframe>

<div class="blipzkrieg-definition">
  <p>
    <b>blipzkrieg</b>
    <em>&nbsp;\blips-kreeg\&nbsp;&nbsp;&mdash; noun</em>
  </p>
  <ol>
    <li>A swift intensive military attack, esp. using lasers, circles, and rapid
        clicking. Designed to defeat squares quickly.</li>
    <li>A fast-paced, arcade strategy game.</li>
  </ol>
</div>

<p>New game: <a href="http://armorgames.com/play/12123/blipzkrieg">Blipzkrieg</a>! Lead your followers to victory against the evil laser
panzers, and try not to get zapped by laser towers or gibbed by a missile.</p>

<p>I quit my day job at the end of last year, and joined my friends at <a href="http://www.gameclay.com">GameClay</a>
to work on games full time. It’s been a blast, and this is our first original
title. The original idea was a reverse tower defense game, but it morphed over
time into more of a lightweight tactics arcade game. Expect to see a mobile
version of this in the vaguely near future.</p>

<p>You can <a href="http://armorgames.com/play/12123/blipzkrieg">play it on ArmorGames</a> or <a href="http://blipzkrieg.com">peruse screenshots</a>
on the official site.</p>

<style type="text/css">
.blipzkrieg-definition {
  margin: 0 0 1em 0;
}
.blipzkrieg-definition p {
  margin: 0;
  padding: 0;
}
.blipzkrieg-definition ol {
  margin: 0;
}
.blipzkrieg-definition p b {
  font-size: 16px;
}
.blipzkrieg-definition p em {
  color: #666;
  font-style: normal;
}
</style>

]]></description>
      
      <category domain="http://phuce.com/tags/#games">games</category>
      
      <category domain="http://phuce.com/tags/#blipzkrieg">blipzkrieg</category>
      
      <dc:creator>noonat</dc:creator>
    </item>
    
    <item>
      <title>Legions Weapons</title>
      <link>http://phuce.com/2011/02/25/legions-weapons/</link>
      <pubDate>Fri, 25 Feb 2011 00:00:00 +0000</pubDate>
      <guid>http://phuce.com/2011/02/25/legions-weapons/</guid>
      <description><![CDATA[<p><a href="https://phuce.com/images/Legions_Laser_Rifle_by_Matt_Ostgard__1080h.jpg" title="Laser Rifle for Fallen Empire: Legions"><img src="https://phuce.com/images/Legions_Laser_Rifle_by_Matt_Ostgard__620w.jpg" alt="laserRifle_small" title="Laser Rifle for Fallen Empire: Legions" /></a><br />
<a href="https://phuce.com/images/Legions_Grenade_Launcher_by_Matt_Ostgard__1080h.jpg" title="Grenade Launcher for Fallen Empire: Legions"><img src="https://phuce.com/images/Legions_Grenade_Launcher_by_Matt_Ostgard__310w.jpg" alt="grenadeLauncher_small" title="Grenade Launcher for Fallen Empire: Legions" /></a>
<a href="https://phuce.com/images/Legions_Rocket_Launcher_by_Matt_Ostgard__1080h.jpg" title="Rocket Launcher for Fallen Empire: Legions"><img src="https://phuce.com/images/Legions_Rocket_Launcher_by_Matt_Ostgard__310w.jpg" alt="rocketLauncher_small" title="Rocket Launcher for Fallen Empire: Legions" /></a></p>

<p>Here are some weapons I created for Fallen Empire: Legions, a FPS web browser game.</p>

<p>This game has a pretty rough development history. It was stopped and restarted multiple times with many internal disagreements of what it should be. This final iteration of Legions was developed by a skeleton crew of myself and 4 others with a short deadline of 4 months.</p>

<p>A year after its release, IAC shutdown InstantAction and the game almost went with it. Thankfully, it was saved by some very dedicated community members who managed to get a distribution agreement from IAC. Legions is still alive and kicking, being mantained and developed by the community.</p>

<p>You can now play Legions for free over at <a href="http://www.legionsoverdrive.com/">LegionsOverdrive.com</a>.</p>

]]></description>
      
      <category domain="http://phuce.com/tags/#games">games</category>
      
      <category domain="http://phuce.com/tags/#art">art</category>
      
      <dc:creator>Matt Ostgard</dc:creator>
    </item>
    
    <item>
      <title>Airship Armada Units</title>
      <link>http://phuce.com/2011/02/21/airship-armada-units/</link>
      <pubDate>Mon, 21 Feb 2011 00:00:00 +0000</pubDate>
      <guid>http://phuce.com/2011/02/21/airship-armada-units/</guid>
      <description><![CDATA[<p><a href="https://phuce.com/images/Airship_Armada_Ships_by_Matt_Ostgard__1080h.jpg" title="Airship Armada Units"><img src="https://phuce.com/images/Airship_Armada_Ships_by_Matt_Ostgard__620w.jpg" alt="airships_small" title="Airship Armada Units" /></a></p>

<p>Airship Armada was an awesome TBS mobile/web game I worked on while at InstantAction (aka GarageGames) that never saw the light of day. :(</p>

<p>Ships that are grayed out were completely done by <a href="http://www.deforrest-ink.com/">Kelle Deforrest</a>.  Some of the texture work was also by Kelle.  All of the ships were based on concept by <a href="http://www.linkedin.com/pub/nate-feyma/5/99/4a9">Nate Feyma</a>.</p>

]]></description>
      
      <category domain="http://phuce.com/tags/#games">games</category>
      
      <category domain="http://phuce.com/tags/#art">art</category>
      
      <dc:creator>Matt Ostgard</dc:creator>
    </item>
    
    <item>
      <title>Refuge</title>
      <link>http://phuce.com/2009/09/06/refuge/</link>
      <pubDate>Sun, 06 Sep 2009 00:00:00 +0000</pubDate>
      <guid>http://phuce.com/2009/09/06/refuge/</guid>
      <description><![CDATA[<p>
  <a href="https://phuce.com/games/refuge" style="margin-right: 6px;"><img src="https://phuce.com/games/refuge/screenshot1.png" alt="Screenshot 1" width="320" height="427" border="0" /></a>
  <a href="https://phuce.com/games/refuge"><img src="https://phuce.com/games/refuge/screenshot2.png" alt="Screenshot 2" width="320" height="427" border="0" /></a>
</p>

<p><a href="https://phuce.com/games/refuge">New game!</a></p>

<p>The world has been overrun by alien invaders, and humans have taken to the
depths of the earth to escape the scourge. When the aliens find your last
refuge, you and your turret are the only hope for the hidden human city.</p>

<p>Refuge is a game I developed for <a href="http://www.ludumdare.com/compo/category/ld15/">Ludum Dare 15</a>. The theme for the compo was
“caverns”. I like to describe it as Space Invaders with a dash of Puzzle
Bobble. The game was developed in 48-hours using <a href="http://flixel.org/">flixel</a> and <a href="http://www.cyd.liu.se/~tompe573/hp/project_sfxr.html">sfxr</a>. I’ve done
some more patching and hacking on it this weekend and decided to toss it
up here.</p>

<p>You can <a href="https://phuce.com/games/refuge">play it online here</a>.</p>

]]></description>
      
      <category domain="http://phuce.com/tags/#games">games</category>
      
      <category domain="http://phuce.com/tags/#refuge">refuge</category>
      
      <dc:creator>noonat</dc:creator>
    </item>
    
    <item>
      <title>Our little man is all growns up</title>
      <link>http://phuce.com/2009/07/09/our-little-man-is-all-growns-up/</link>
      <pubDate>Thu, 09 Jul 2009 00:00:00 +0000</pubDate>
      <guid>http://phuce.com/2009/07/09/our-little-man-is-all-growns-up/</guid>
      <description><![CDATA[<p><a href="https://phuce.com/games/queens">Queens</a> gets a montage from <a href="http://www.bytejacker.com/">ByteJacker</a> in the <a href="http://www.bytejacker.com/episodes/044">latest episode</a>. MONTAAAGE!</p>

]]></description>
      
      <category domain="http://phuce.com/tags/#links">links</category>
      
      <category domain="http://phuce.com/tags/#queens">queens</category>
      
      <dc:creator>noonat</dc:creator>
    </item>
    
  </channel>
</rss>
