<?xml version="1.0" ?><rss version="2.0">
    <channel>
        <title>DM: News</title>
        <description>Dueling Monkeys News</description>
        <link>http://www.duelingmonkeys.com/</link>
        <ttl>15</ttl>
        <pubDate>Thu, 29 Jul 2010 07:37:22 EDT</pubDate>
                <item>
            <title>Get ready to RIOT! - Jul 12th 2010</title>
            <description><![CDATA[<p>Most exciting news: Paul and I have completed Karma Riot phase 2! Woo hoo! We are winners!</p>

<p>We originally defined the things that would be in phase 2 as the bare minimum stuff we thought would be required to make the game ready for release on <a href="http://www.xbox.com/en-US/games/community/default.htm" target="new">Xbox Live Indie Games</a>. As it turns out, we didn't need some of the stuff on the original list so we cut it, but we felt we needed some other things before really being ready to ship to joe gamer, which we did not add to the phase. The result of all this is that we don't think it's ready to ship yet. However, it's still worth talking about all of the awesome stuff we did accomplish for the milestone.</p>

<p>Here are some of the things we added in phase 2 (in no particular order):</p>
<ul>
<li>AI drivers</li>
<li>"Race Circuit" (/Grand Prix) mode</li>
<li>12 tracks</li>
<li>3 track themes (jungle/mud, mountain/ice, monastery)</li>
<li>3 "speeds" for levels of racing experience</li>
<li>Animated sprite effects</li>
<li>Cell shaded and outlined sprites</li>
<li>5 custom songs in soundtrack</li>
<li>Engine and tire sounds</li>
<li>General bug fixin'</li>
<li>Game balancin'</li>
<li>General polish</li>
</ul>
<p>Some of my favorite accomplishments for this phase came in the tools I made to support generating content for the game. Particularly, I'm quite proud of how the <a href="http://www.duelingmonkeys.com/news/archive/2010/03/14/298" target="new">BitmapToTiles</a> and <a href="http://www.duelingmonkeys.com/news/archive/2010/04/16/299" target="new">Sprite Maker</a> turned out. They were both a lot of fun to work on and turned out to be tremendously useful.</p>

<p style="text-align: center;"><img style="border: thin solid;" src="/filespace/mike/karmariot_phase2.png"><br/><i>Here's the obligatory screenshot</i></p>

<p>Anyway, enough blabbering from me, there's more details, more screenshots, and a juicy download link all available from the games page: <a href="/games/karmariotv2" target="new">Karma Riot v2</a>!</p>

<p>I'm going to take a break for a few weeks now, but almost as exciting as being done with phase 2 is that I now get to decide what to work on next.</p>

<p>Here are some development stats:</p>
<ul>
<li>Phase 2 calendar time: 26 weeks</li>
<li>Phase 2 initial task time estimates: 126 hours</li>
<li>Phase 2 actual implementation time (combined): 168 hours</li>
<li>Phase 2 average hours per week (combined): 6.5</li>
</ul>
<br/> - Mike Daly]]></description>
            <link>http://www.duelingmonkeys.com/news/archive/2010/07/12/302</link>
            <pubDate>Mon, 12 July 2010 22:57:20 EDT</pubDate>
        </item>
                <item>
            <title>E3 2010 - Jun 23rd 2010</title>
            <description><![CDATA[<p>Hey guys, there's been some interesting stuff going on lately. I've been so busy I haven't taken the time to make an update, but if I don't do it now I'm going to start forgetting stuff, so here I go.</p>

<p>Last week I went to <a href="http://www.e3expo.com/" target="new">E3</a> for the first time. I only got half a day there, but I still got to see a lot of cool stuff. I'll boil down my experience into a few conventient bullets:</p>

<ul>
<li>Microsoft's <a href="http://www.xbox.com/en-US/kinect" target="new">Kinect</a> is a bad idea and would we totally pointless if it weren't for the impressive <a href="http://www.xbox.com/en-US/games/splash/d/dancecentral/" target="new">Dance Central</a></li>
<li>I can find no reason whatsoever to get excited about Sony's <a href="http://us.playstation.com/ps3/playstation-move/index.htm" target="new">Move</a>. It is a more expensive Wii that doesn't have any games to back it up. The Wii has already demonstrated that motion control based experiences are shallow.</li>
<li>Nintendo's <a href="http://e3.nintendo.com/3ds/" target="new">3DS</a> seemed to steal the show in terms of interest. It looks like it has a ton of potential. Now if someone could only convince Nintendo to use <a href="http://en.wikipedia.org/wiki/Shader" target="new">modern graphics techniques</a> they would have a real winner on their hands.</li>
<li>I'm not that interested in the big games that were shown, but I was most impressed by the graphics in Sega's <a href="http://www.sega.com/games/vanquish" target="new">Vanquish</a>.</li>
<li>All of the things that got me genuinely excited were downloadable (XBLA, PSN) games, as listed below.</li>
</ul>

<p>There were a few games that I saw that I got really excited about. It is no coincidence that they are all smaller downloadable games that support multiplayer co-op. None of them seem to be getting a lot of press, so this may be news to you even if you were following E3. I got a little lazy and just decided to embed the trailers; take a look: (games are displayed in no particular order)</p>

<p style="text-align: center">
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/5FwD6ZeOPpE&hl=en_US&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5FwD6ZeOPpE&hl=en_US&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
<br/><i>Castlevania: Harmony of Despair</i></p>

<p style="text-align: center">
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/iA0r9E46IGU&hl=en_US&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/iA0r9E46IGU&hl=en_US&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
<br/><i>Necromachina</i></p>

<p style="text-align: center">
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/yAY4vNJd7A8&hl=en_US&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/yAY4vNJd7A8&hl=en_US&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
<br/><i>Scott Pilgrim vs. The World</i></p>

<h3>Glide</h3>

<p>So Glide development is still coming along at work quite nicely, although only getting to work one day a week on it (and Friday at that) makes progress quite slow. Despite all of that, we took this video after about 6 days of effort was put in. I think we've come a really long way. This project is a team effort, but the stuff that I specifically contributed were flight mechanics, camera mechanics, landing coordination, and level design. Sadly, youtube took a big crap when I tried to upload it, so you'll need to download the video and hope you have whatever obscure codec I used. Check it out:</p>

<ul>
<li><a href="/filespace/mike/glide_100607.mp4" target="new">Glide demo video</a></li>
</ul>

<p>Well, that's about enough embedded videos for one month. Maybe next month I'll go back to nice old fashioned static pictures. Later!</p><br/> - Mike Daly]]></description>
            <link>http://www.duelingmonkeys.com/news/archive/2010/06/23/301</link>
            <pubDate>Wed, 23 June 2010 00:56:07 EDT</pubDate>
        </item>
                <item>
            <title>Glide - May 22nd 2010</title>
            <description><![CDATA[<p>So at work (I work on <a href="http://www.emergent.net" target="new">Gamebryo</a> in case you didn't know), we've started a project where the development team spends one day per week working on game prototypes using our engine. This is a pretty useful exersize for us for a few reasons:</p>

<ul>
<li>We can (kind of) see our product from an end user's perspecive - we are eating our own dog-food as they say</li>
<li>We are testing the upcoming release of Gamebryo in a way that directed and automated testing does not</li>
<li>Team members are working with systems they are unfamiliar with which is helping with knowledge transfer and redundancy</li>
<li>It gives us a creative outlet, which is always fun</li>
<li>It breaks up the soul-draining monotony of finalizing a release (all testing, bug-fixing, documentation, and paperwork)</li>
<li>Probably some other reasons</li>
</ul>

<p>I was really happy with how good of a turnout we got for project proposals. In the end, we had to settle down to two projects to divide the team between and my proposal was one of the ones that got voted on. My proposal (entitled "Glide") was to make a game where players control a skydiver that can deploy or retract hang-gliding wings at any time. The goal is to get the highest score you can on a single drop where contributing factors are how smooth your landing was, the value of the landing platform you ended up on, how many floating rings you passed through on the way down, and any bonus objectives. You can think of it as combining the relaxing pace and exploration of <a href="http://en.wikipedia.org/wiki/Pilotwings" target="new">Pilotwings</a> with the reward mechanisms and social aspects of <a href="http://en.wikipedia.org/wiki/Super_Monkey_Ball" target="new">Monkey Target</a>.</p>

<p>I made some concept sketches that I'll subject you to, but not without first disclaiming that I'm a terrible artist. You've been warned.</p>

<p style="text-align: center;"><img src="/filespace/mike/glidemockups.png" style="border: thin solid;"><br/><i>The game must feature a Pterodactyl</i></p>

<p>So that's fun. I'm still cranking away on <a href="/games/karmariot" target="new">Karma Riot</a>, although making effects required a lot of iteration which slowed things down a lot. In order to keep up the pace, I've decided to put effects on the back burner and concentrate on more pressing features. I did sit down for two hours this week and crank out a new song for the sound track. Now we have one song per track type, which will probably be enough to get away with for this phase. Check it out:</p>

<p><a href="/filespace/mike/opus23.mp3" target="new">Opus 23</a></p>

<p>Later</p><br/> - Mike Daly]]></description>
            <link>http://www.duelingmonkeys.com/news/archive/2010/05/22/300</link>
            <pubDate>Sat, 22 May 2010 00:19:54 EDT</pubDate>
        </item>
                <item>
            <title>Sprite Maker - Apr 16th 2010</title>
            <description><![CDATA[Sprite Maker

<p>One of my stylistic goals of <a href="/games/karmariot" target="new">Karma Riot</a> is to have all the things in the game look like hand-made sprites. I would also like to have things viewable from many angles and have smooth animation. Since there are so many pixels that need to be produced to accomplish this latter goal, manually making each frame for each sprite is pretty much out the window. Instead I've decided to create 3d models and animations then try processing them so that they look like old hand-made sprites.</p>

<p>Behold; the sprite maker:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/spritemaker1.png" sytle="border: thin solid;"><br/><i>The UI for Sprite Maker</i></p>

<p>Sprite Maker is a utility that runs inside of <a href="http://en.wikipedia.org/wiki/3ds_max" target="new">3ds Max</a>. I wrote it in Max's built-in scripting language, MaxScript. I'm not going to go on about every little feature it has; just look at the options and use your imagination. The main point of the tool is that once I've created and animated a 3d scene:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/spritemaker2.png" sytle="border: thin solid;"><br/><i>source scene in Max</i></p>

<p>I tell this thing to go and it automatically takes rendered frames of the scene for each frame of animation in the sequence, each camera angle, and then composites the results into a single image, giving you something like this:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/spritemaker3.png" sytle="border: thin solid;"><br/><i>The frame and angle counts are lowered here just to make the sheet fit nicely on the web</i></p>

<p>In order to make the resulting sprite sheet look more like classic sprites, the Sprite Maker just passes the resulting image off to the Post Process Manager - another custom tool. The Post Process Manager simply takes in a config file and uses the config file to determine what external operations to perform on the input file. I've currently created two operations; the first is 'palettize':</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/spritemaker4.png" sytle="border: thin solid;"><br/><i>Getting there</i></p>

<p>You can re-use the same configuration file for many sprites or create a custom configuration for some sprites that you want to process differently than others. All of the Sprite Manager settings including the configuration file to use are stored in the Max file. Anyway, here's the second image processor; the 'outliner':</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/spritemaker5.png" sytle="border: thin solid;"><br/><i>Now we are cooking with fire</i></p>

<p>To get a sprite in the game, it's a matter of adding an entry to an XML file that indicates how many cells wide and high the sheet is along with a few other handy parameters. Now that my pipeline is complete, I should be able to start churning out effects.</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/spritemaker6.gif" sytle="border: thin solid;"><br/><i>A 2x zoom of the result</i></p>

<p>Later</p><br/> - Mike Daly]]></description>
            <link>http://www.duelingmonkeys.com/news/archive/2010/04/16/299</link>
            <pubDate>Fri, 16 April 2010 22:33:55 EDT</pubDate>
        </item>
                <item>
            <title>BitmapToTiles - Mar 14th 2010</title>
            <description><![CDATA[<p>I've been doing a lot of work lately on homemade content tools for <a href="/games/karmariot" target="new">Karma Riot</a>. It's really rewarding to create a tool and see it working, especially since I know other people can get the benefit from it too. Today, I'd like to go over some of the tools I've made for creating race tracks.</p>

<p>It's no secret that KR is directly inspired by <a href="http://en.wikipedia.org/wiki/Super_Mario_Kart" target="new">Super Mario Kart</a>. In SMK, if you take a look at the tracks from a top-down perspective and overlay a grid, you can see that the tracks are actually constructed out of a 128 by 128 grid of 8 by 8 pixel tiles.</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_compileexample_smk.png" style="border: thin solid;"><br><i>Exhibit A: 2x zoom of Mario Circuit 2 in the Mushroom Cup</i><br></p>

<p>I want to do this as well. This way each track simply uses a 1024 by 1024 texture for rendering, so the challenge is how do we construct this texture from individual tiles?</p>

<p>Instead of creating a custom level editor, I decided to have track authors instead create a 128 by 128 image where each pixel in the image represents a tile the the full sized map. The images would use a small fixed palette of colors where each color represents a type of terrain. Basically, you just create the layout in MS Paint, or your image editor of choice. Creating the basic shape of maps in this way has a lot of advantages:</p>

<ul>
<li>Everyone already has a map editor</li>
<li>Everyone already knows how to use the editor - no learning curve</li>
<li>The editing process is simple and intuitive - just draw out a shape</li>
<li>The editor comes with tools like undo, flood fill, lines, curves, shapes, and selection</li>
<li>Some editors come with tools like magic wand, layers, and clone stamp (very useful)</li>
<li>The editor reliably handles a known filetype - little to no chance of corruption, instability, or version mismatches</li>
<li>I didn't have to create an editor that does any of these things</li>
</ul>

<p>Once this image has been created, I have a processing tool that 'compiles' it into a high-resolution image. The compiler can make intelligent decisions about what tiles to use in each location based off of what the neighboring terrain types are. However, instead of just coding in a bunch of specific conditions that match a fixed tileset, I decided to make it data driven. The compiler is provided two things: a rule set, and a tile set.</p>

<p>The tile set is simply an image that contains an atlas of 8 by 8 tiles that you want to be used in the construction of your map. The tile set author can provide as many or as few tiles as they want and arrange them in any way they want. For example:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_mountaintiles.png"  style="border: thin solid;"><br><i>Exhibit B: 2x zoom of KR's "mountains" tile set</i><br></p>

<p>The rule set is an XML file that contains an arbitrary number of rules where each rule basically just says: for the terrain type of this pixel and given a particular configuration of neighboring tiles, use this set of tiles from the associated tile set. I'm not going to get into the nitty gritty of how these patterns are defined but I am quite happy with the solution that I came up with. Rules are fairly compact and easy to read but also flexible enough where you can describe a lot of situations and you don't need a ton of rule duplication to describe similar situations. At the same time I made it very verbose about anything it encounters that is out of the usual, so it identifies any rule parsing errors and while processing the track clearly identifies any situations that aren't covered by the rules you gave it.</p>

<p>So with the compiler (called BitmapToTiles), you give it an input image, a rule set (which references a corresponding tile set), and an output filename and it churns away. Let's take another look at the SMK example segment from earlier:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_compileexample_base.png" style="border: thin solid;"><br><i>Exhibit C: 16x zoom of how you would represent that track in the base layout image</i><br></p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_compileexample_mountains.png" style="border: thin solid;"><br><i>Exhibit D: 2x zoom of the compiled result</i><br></p>

<p>Now the cool thing about using a compiler is that if you play the level and you want to make some quick edits, rebuilding is trivial - just change the base layout (which is also used for the game's driving simulation) and the high res image can be kept in sync. Another handy feature is that you can change track types easily. Here I've changed the same example to use the "jungle" tile set, which actually has a completely different layout and set of rules for how terrain types interact with each other:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_compileexample_jungle.png" style="border: thin solid;"><br><i>Exhibit E: 2x zoom of the jungle version</i><br></p>

<p>The BitmapToTiles program itself is fairly generic; it doesn't have any KR-specific assumptions. Each track also has an XML file that sets its name, tile set, numberof laps, music, etc. By creating another wrapper program for BitmapToTiles, I can just crawl through the track's XML and its references to figure out all of the arguments that need to be passed into BitmapToTiles. This wrapper, called TrackToTiles, only takes in the track XML file as a command line arg, which is mainly a convenience for compiling tracks. To further add to the convenience, I added it to my right click menu for XML files, so that compiling a track is super-easy!</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_compileexample_menu.png" style="border: thin solid;"><br><i>So easy!</i><br></p>

<p>I had a blast making these tools, and I'm really proud of how they turned out. That being said, I realize that there would be tons and tons of additional work to get the tools and the tilesets to a point where I could just give them to some stranger and expect them to be able to make a map for the game. Fortunately, that's not a requirement (for now). In closing, I'll leave you with a preview of one of the tracks I put together. You'll have to use your imagination to figure out what it looks like in game:</p>

<p style="text-align: center; display: block;"><img src="/filespace/mike/karmariot_jungle1_layout.png" style="border: thin solid;"><br><i>2x zoom of "Jungle Rumble I" (tentative title) base layout</i><br></p><br/> - Mike Daly]]></description>
            <link>http://www.duelingmonkeys.com/news/archive/2010/03/14/298</link>
            <pubDate>Sun, 14 March 2010 01:12:01 EST</pubDate>
        </item>
            </channel>
</rss>
