<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3996823333383376319</id><updated>2012-02-16T04:14:20.488-05:00</updated><category term='Tileset'/><category term='Moriandroid'/><category term='Gauntlet'/><category term='Sprite'/><category term='Artwork'/><category term='Video Game'/><category term='Free Stuff'/><category term='Tools'/><category term='Tiles'/><category term='Disasters'/><category term='Movies'/><category term='Game Development'/><category term='Orthello'/><title type='text'>StepWood Games Development</title><subtitle type='html'>A place for members of the StepWood Productions development team to discuss progress on game development tasks.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-5058041145514501413</id><published>2011-08-27T03:51:00.003-04:00</published><updated>2011-08-27T04:25:20.435-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthello'/><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Free Stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Restricting Camera Movement &amp; Invisible Generators</title><content type='html'>There isn't too much in this release. &amp;nbsp;I added a bounds check to the engine so that the camera won't leave the map. &amp;nbsp;I've also put in 3 ghost generators that run a script to pop ghosts into the map every 2, 4, and 5 seconds respectively.&lt;br /&gt;&lt;br /&gt;Besides the restriction on the camera, there was some general cleanup and bug fixes in the code which aren't obvious at first glance. &amp;nbsp;For instance, the map was offset by 8 pixels (half of the block size of the map) due to some math errors on my part.&lt;br /&gt;&lt;br /&gt;I want to give a big call out to the author of &lt;a href="http://www.wyrmtale.com/orthello/what-is-orthello"&gt;Orthello &lt;/a&gt;for a great product. &amp;nbsp;In addition to a very good framework that costs nothing to get started with, the support turn around time has been incredible. &amp;nbsp;I really am looking forward to the release of the professional edition of the tool and the later components as time goes on. &lt;br /&gt;&lt;br /&gt;I'll continue plodding along on the game one day at a time. &amp;nbsp;I hope tomorrow to smooth out my movement a bit (anyone notice that&amp;nbsp;diagonal&amp;nbsp;movement is faster than vertical or horizontal movement?) and maybe add an arrow you can shoot. &amp;nbsp;We'll see what inspires me next.&lt;br /&gt;&lt;br /&gt;You can find my "EnemyGenerator" script on the &lt;a href="http://blog.stepwoodgames.com/p/free-stuff.html"&gt;Free Stuff&lt;/a&gt; page of the blog.&lt;br /&gt;&lt;br /&gt;As always, the demo can be found by clicking "read more" below.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="580" src="http://cpd.stepwoodproductions.com/camera-bounds-and-generators" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-5058041145514501413?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/5058041145514501413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/restrict-map-movement-invisible.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/5058041145514501413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/5058041145514501413'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/restrict-map-movement-invisible.html' title='Restricting Camera Movement &amp; Invisible Generators'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-6491136081775232694</id><published>2011-08-25T00:54:00.002-04:00</published><updated>2011-08-27T04:23:30.893-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Free Stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Ouch, running into walls hurts.</title><content type='html'>I decided to look into collisions again, and decided that for this game a true physics based solution was a bit of an overkill. &amp;nbsp;So, instead, before objects move, they "Sweep" their collision volume ahead of them and try to see if it runs into anything. &amp;nbsp;If it does, then they cut their movement short (or attempt to slide).&lt;br /&gt;&lt;br /&gt;You should be able to run around and not leave the map area. &amp;nbsp;The ghosts should also act as barriers to themselves (not likely to be seen) and the player.&lt;br /&gt;&lt;br /&gt;It isn't much, but it's a start!&lt;br /&gt;&lt;br /&gt;I've also noticed that my "TMX Map" solution is way too slow. &amp;nbsp;It drops the FPS from ~500 to ~50. &amp;nbsp;That's no good. &amp;nbsp;I think it has to do with creating a GameObject per grid location in the map. &amp;nbsp;I'll have to look into optimizing that next or the game won't be very responsive. &amp;nbsp;:)&lt;br /&gt;&lt;br /&gt;I've added a fragment of the code that does the static collision test. &amp;nbsp;It isn't anything super great, but it gives you an approach to doing collision that is more in control of the scripting engine versus the PhysX engine. &amp;nbsp;It's basically sweeping the collider ahead to see if there is a collision and then changing the walk vector apporpriately. &amp;nbsp;I have a set of options that an object can do by overriding the "HitOther" method and returning a value from the enumeration.&lt;br /&gt;&lt;br /&gt;It's not anything super, but I figured it might be of interest to someone that is struggling with their own collision code in a 2d game.&lt;br /&gt;&lt;br /&gt;You can find the fragment of code on the &lt;a href="http://blog.stepwoodgames.com/p/free-stuff.html"&gt;Free Stuff&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;Enjoy the demo by clicking on the "read more" link!&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="580" src="http://cpd.stepwoodproductions.com/collisions" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-6491136081775232694?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/6491136081775232694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/ouch-running-into-walls-hurts.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/6491136081775232694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/6491136081775232694'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/ouch-running-into-walls-hurts.html' title='Ouch, running into walls hurts.'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-1656180547063148079</id><published>2011-08-24T01:25:00.000-04:00</published><updated>2011-08-24T01:25:17.754-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthello'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Struggling with Collisions</title><content type='html'>Just so that people don't think I've&amp;nbsp;abandoned&amp;nbsp;this project, I wanted to post on what I've been doing. &amp;nbsp;Once I got the tile map up and in place, I wanted to handle collisions with the walls. &amp;nbsp;I managed to modify my TMX parser to handle my "collision layer" and build the collision volumes for each wall. &amp;nbsp;I got a collision volume on my main player, great! &amp;nbsp;And then the trouble started...&lt;br /&gt;&lt;br /&gt;I can get the "OnTriggerEnter" message (or the corresponding method from Orthello) to fire, but I'm having difficulty with the math that will stop the penetration from happening and back the sprite up.&lt;br /&gt;&lt;br /&gt;In other words, I can detect that the wall was hit, but I haven't so far been able to get the player to not walk over the top of it. &amp;nbsp;My last attempt was to avoid using rigid bodies and just start doing ray casts when I want to move. &amp;nbsp;However, I think to do that correctly, I'd have to cast 3 rays (from the outside edges of my collision box). &lt;br /&gt;&lt;br /&gt;It's getting late now, so I'm going to attack it again with a fresh pair of eyes tomorrow. &amp;nbsp;Sometimes, you just have to claim defeat and rest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-1656180547063148079?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/1656180547063148079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/struggling-with-collisions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/1656180547063148079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/1656180547063148079'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/struggling-with-collisions.html' title='Struggling with Collisions'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-2933359202801177967</id><published>2011-08-20T02:23:00.001-04:00</published><updated>2011-08-20T02:38:07.595-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthello'/><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Tileset'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>The archer enters the dungeon...</title><content type='html'>"Tomorrow seems like a good time to add a single enemy and a projectile." &amp;nbsp;Or not to. &amp;nbsp;I decided instead to work on getting the archer on a more interesting "map" than a purple dot. &amp;nbsp;I didn't get quite as far as I would have liked. &amp;nbsp;My goal for today was to have the archer be able to be placed into a map and walk around it with collisions, etc. &amp;nbsp;I got the first part, but sadly, I didn't get to the collision detection routines.&lt;br /&gt;&lt;br /&gt;The background is now built with a normal OTSpriteSheet and a TMX file created by Tiled. &amp;nbsp;Marrying the two of them together was an exercise, but resulted in a new script for unity called TmxMap. &amp;nbsp;It is in charge of creating the children sprites that make up the background map and associating the tile set in the TMX file with an OTContainer that satisfies that tile set. &lt;br /&gt;&lt;br /&gt;That last part was a bit tricky for me, but I learned a bit about how to extend the Unity3d editor in the process. &amp;nbsp;Now, during the processing of the TMX file, I build a list of the tile sets. &amp;nbsp;The editor shows those to you and lets you associate a tile set in the TMX file with an OTContainer object. &amp;nbsp;Ideally, those were both built using the same graphical image.&lt;br /&gt;&lt;br /&gt;Things I learned after lots of frustration:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Xsd.exe has some serious limitations. &amp;nbsp;Luckily, it creates source code, so you can edit the generated code when you are done. &amp;nbsp;Not so luckily, when you edit it incorrectly, debugging XmlSerializer.Deserialize can be a very tedious and frustrating experience. &amp;nbsp;&lt;/li&gt;&lt;li&gt;Dictionary won't be saved in Unity3d. &amp;nbsp;It just won't do it. &amp;nbsp;This saddened me, since my use case was a simple look up of name -&amp;gt; OTContainer which fits a Dictionary object perfectly.&lt;/li&gt;&lt;li&gt;List does save in Unity3d. &amp;nbsp;Since the number of tile sets in a TMX should be small, iterating over the list isn't a huge issue. &amp;nbsp;It just hurts my feelings to have to either do an O(n) operation or create a temporary Dictionary for look up purposes.&lt;/li&gt;&lt;li&gt;The GUI functions in Unity3d are odd. &amp;nbsp;I'm not used to an 'inline' GUI system, so I'm still getting used to it. &amp;nbsp;I am starting to see the light with it, slowly.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;That's about it. &amp;nbsp;If you want to walk around a "dungeon", click the read more link below and let yourself be magically transported into a land where walls have no substance and the bounds of the earth are limitless. &amp;nbsp;(Meaning don't expect any collision detection, okay?)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: xx-small;"&gt;Oh, and the Smurf movie was pretty good. &amp;nbsp;Yup, I enjoyed it even as predictable as it was. &amp;nbsp;It didn't destroy my childhood like some other reviewers are saying. &amp;nbsp;I wouldn't give it a 10, but it was a fun 5 or 6 for sure.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="580" src="http://cpd.stepwoodproductions.com/background-tilemaps" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-2933359202801177967?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/2933359202801177967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/archer-enters-dungeon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/2933359202801177967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/2933359202801177967'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/archer-enters-dungeon.html' title='The archer enters the dungeon...'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-4516157154688140665</id><published>2011-08-19T02:31:00.003-04:00</published><updated>2011-08-27T04:12:44.551-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Free Stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>The Archer Lives!</title><content type='html'>Another fruitful day learning Unity has brought me to the point that we have player input! &amp;nbsp;In the new demo, you can move the archer with the arrow keys and press left control to shoot. &amp;nbsp;(There isn't a projectile yet).&lt;br /&gt;&lt;br /&gt;The background is only there so you can see that the archer is moving. &amp;nbsp;We are also using &lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;'s really cool "camera tracking" trick to keep the archer in the center of the screen when we move.&lt;br /&gt;&lt;br /&gt;I did a small update to the "Sparrow" package mentioned in other blog posts. &amp;nbsp;I noticed that the FPS wasn't being set properly on the animations that were being created by the SparrowSpriteSheet behavior. &amp;nbsp;It now has a FPS setting that it populates to the various animations it creates. &amp;nbsp;You can find the links on the "&lt;a href="http://blog.stepwoodgames.com/p/free-stuff.html"&gt;Free Stuff&lt;/a&gt;" page.&lt;br /&gt;&lt;br /&gt;May not seem like much, but we are making progress towards the game. &amp;nbsp;Tomorrow seems like a good time to add a single enemy and a projectile. &lt;br /&gt;&lt;br /&gt;As before, to see the demo, click on the read more link.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="580" src="http://cpd.stepwoodproductions.com/player-movement" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-4516157154688140665?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/4516157154688140665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/archer-lives.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/4516157154688140665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/4516157154688140665'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/archer-lives.html' title='The Archer Lives!'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-6738745107376311762</id><published>2011-08-18T14:35:00.003-04:00</published><updated>2011-08-18T15:00:20.024-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthello'/><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Fixed Sprite Positioning</title><content type='html'>I've fixed the sprite positioning problem with my sparrow package for &lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;. It amounted to the fact that the pivot point was based on a -.5 -&amp;gt; .5 Cartesian&amp;nbsp;coordinate system, and I was expecting it to be a 0 -&amp;gt; 1 system. &amp;nbsp;Easy enough fix to do by just adding .5 to x and y. &amp;nbsp;But, it was still jumping in the Y direction. &amp;nbsp;I then realized that the offsets I had were in standard image coordinates which has the positive Y pointing "down the image". &amp;nbsp;A simple negation later and everything was good.&lt;br /&gt;&lt;br /&gt;In addition to uploading the new animation test demo showing it working, I've also uploaded the files in question. &amp;nbsp;I've provided it as both a zip file and a unity package for you to import and use! &amp;nbsp;I've licensed the files for this under the &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT license&lt;/a&gt;, so enjoy them.&lt;br /&gt;&lt;br /&gt;To use the package, start with Texture Packer. &amp;nbsp;Create a new project and import all your images that represent the various frames of animation to the project. &amp;nbsp;Select "Sparrow" from Data Format and say yes to the Sparrow 1.2 dialog. &amp;nbsp;Put in the data file name and then change any additional settings you want to (including the name of the resulting texture file).&lt;br /&gt;&lt;br /&gt;Once you are done with that, save the project and then publish it. &amp;nbsp;That will generate the 2 files you need (a texture file and an xml file).&lt;br /&gt;&lt;br /&gt;Once in &lt;a href="http://unity3d.com/"&gt;Unity3d&lt;/a&gt;, make sure you have imported both&amp;nbsp;&lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;&amp;nbsp;(available in the asset store for free) and Orthello - Sparrow into your scene. &amp;nbsp;Copy the texture and xml file into the asset folder of your unity project. &amp;nbsp;Then add a SparrowSpriteSheet to the scene. &amp;nbsp;Change the "Sprite Sheet" to the texture that was generated from Texture Mapper. &amp;nbsp;Set the "Sparrow Xml File" property to the text asset that is the Sparrow XML file. &amp;nbsp;Now, add a SparrowGameObject to the scene and select the animation for it (which will auto select the proper container too).&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/a/stepwoodproductions.com/cpd/Orthello-Sparrow.unitypackage?attredirects=0&amp;amp;d=1"&gt;Download "Orthello - Sparrow.unitypackage" by clicking here&lt;/a&gt;.&lt;br /&gt;&lt;a href="https://sites.google.com/a/stepwoodproductions.com/cpd/Orthello-Sparrow.zip?attredirects=0&amp;amp;d=1"&gt;Download "Orthello - Sparrow.zip" by clicking here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once again, to see the demo, click on the read more link.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="560" src="http://cpd.stepwoodproductions.com/animation-test-fixed" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-6738745107376311762?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/6738745107376311762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/fixed-sprite-positioning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/6738745107376311762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/6738745107376311762'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/fixed-sprite-positioning.html' title='Fixed Sprite Positioning'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-8363091476063758143</id><published>2011-08-17T15:19:00.006-04:00</published><updated>2011-08-18T14:40:26.704-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthello'/><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Artwork'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Demo of Orthello Modifications</title><content type='html'>Seeing something is always better than reading about it, so I figured I'd start today by posting a web demo of what I've done so far. &amp;nbsp;It's still very rough and you can see that the images are still "jittering" around during the animation playback. &amp;nbsp;I guess my math is still off a bit on the&amp;nbsp;re-positioning&amp;nbsp;of the sprites.&lt;br /&gt;&lt;br /&gt;Click the link to read more to see the demo page.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="560" src="http://cpd.stepwoodproductions.com/animation-test" width="500"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-8363091476063758143?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/8363091476063758143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/demo-of-orthello-modifications.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/8363091476063758143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/8363091476063758143'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/demo-of-orthello-modifications.html' title='Demo of Orthello Modifications'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-5293372101329440431</id><published>2011-08-17T15:06:00.010-04:00</published><updated>2011-08-18T14:41:46.383-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Disasters'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Moriandroid'/><title type='text'>Thumbdrives and Code Generators</title><content type='html'>For nearly nine months now I've been working on porting the classic rogue-like called Moria to the Android platform.  During that time, I've kept the most recent code on a USB thumbdrive for the simple sake of development convenience.  (Don't worry, I also kept it in the company's source control system.)  This pattern worked very well and allowed me to work on nearly any computer I had available and with or without any network access...  Until the thumbdrive died.&lt;br /&gt;&lt;br /&gt;I spent a pretty serious day of trying to rescue the latest code off of a thumbdrive that no operating system or computer I could find would even admit was plugged in.  What it got me was sadder and sadder about the code lost in the gap between my last checkin and what was on that thumbdrive.  Eventually, including the disassembly of the thumbdrive and at one point the use of a soldering iron, I gave up.  The data was lost and there was nothing I could do about it.&lt;br /&gt;&lt;br /&gt;Naturally this left me thinking about what I had lost.  I realized that most of what I'd lost I kept referring to as "monkey work" since it was repetitive and boring and involved a LOT of code.  Having only missed a single day of coding lost me an amazing 40k of code and I wanted it back, but I didn't want to be the one to have to code it.  This finally caused an "ah ha moment" that led me to the creation of a simple web page based code generator. &lt;br /&gt;&lt;br /&gt;I chose to use HTML and JavaScript because it was simply the fastest way I could think of to get this generator done.  After pretty close to exactly 4 hours of work, my code generator could read a list of class local variables and produce code for a complete constructor, a toString() method, the complete implementation of IMoriaSerializable (six functions, at least two of which represent the biggest part of the lost code), and a tester method for verifying the serialization worked as expected.  This meant that what took me 8 to 10 hours to produce the first time, was now back in the code base with increased consistency and with an admittedly better set of tester functions, in less than 5 hours.  Which was only really that long due to making minor tweaks to the generator.&lt;br /&gt;&lt;br /&gt;Statistically speaking the benefits here are far more impressive than at first glance.  The original 8 to 10 hours was to produce the additional functionality for a mere 4 classes out of the nearly 40 that will eventually need it.  By that logic, it would seem I was looking at roughly 80 to 100 hours of tedious monkey work development to be complete.  After the creation of the code generator however, and with a turn around time for each new class of less than 5 minutes, the entire collection of classes could be completed in something like 8 total hours (including the creation of the generator.)&lt;br /&gt;&lt;br /&gt;Coding professors everywhere will tell you that if you need to do something more than once it's a good idea to turn it into a function.  What they don't mention is that if you have to write dozens or hundreds of functions that follow a specific pattern, it's a good idea to write a code generator to do it for you instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-5293372101329440431?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/5293372101329440431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/thumbdrives-and-code-generators.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/5293372101329440431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/5293372101329440431'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/thumbdrives-and-code-generators.html' title='Thumbdrives and Code Generators'/><author><name>Dave</name><uri>http://www.blogger.com/profile/07305496847411107543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-3178686642013972315</id><published>2011-08-17T03:23:00.003-04:00</published><updated>2011-08-18T14:39:28.444-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orthello'/><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Artwork'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><title type='text'>Combining Orthello and Texture Packer</title><content type='html'>After a day of futzing with things I have a very good start on using &lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt; with &lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;. &amp;nbsp;It isn't perfect yet, and the code needs some cleanup, but it's getting a bit late and I want to wrap it up for today.&lt;br /&gt;&lt;br /&gt;The problem with using the two tools together is that&amp;nbsp;&lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;&amp;nbsp;requires (out of the box) that the frames in a given sprite sheet are fixed size and that the frame numbers are known so you can build animations from them. &amp;nbsp;The advantage of a tool like&amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;&amp;nbsp;starts to disappear under those conditions, so I wanted to marry the two tools together.&lt;br /&gt;&lt;br /&gt;In order to do this, I needed a way to parse one of the multitude of data structures that&amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;&amp;nbsp;writes to. &amp;nbsp;I liked the look of the Sparrow XML the best, so I decided to use that one for my pairing of the tools.&lt;br /&gt;&lt;br /&gt;I loaded up&amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;&amp;nbsp;and generated a sprite sheet with a Sparrow format data output. &amp;nbsp;After telling it that I was okay with "trimmed" sprites (which is one of the major reasons to do this!), I ended up with two files: spritesheet.xml and spritesheet.png. &amp;nbsp;This was pretty cool, so now I had to devise a way to use the new XML file with&amp;nbsp;&lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I loaded the XML file into the MonoDevelop tool that comes with &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt; and selected the Xml-&amp;gt;Create Schema menu option to generate an approximate schema file for the xml data. &amp;nbsp;I then proceeded to use the "xsd.exe" tool (located in your Unity installation directory under Editor\Data\Mono\lib\mono\2.0\xsd.exe) with the "/c" option to create a C# file that could parse the xml file. &amp;nbsp;As expected, all the data members of the new C# class were "strings", so I changed a few of them to int so they were the correct data types. &amp;nbsp;With this, I had the power to read in an xml file using XmlSerializer.&lt;br /&gt;&lt;br /&gt;Now that I could read in the xml file, I needed some way to build the&amp;nbsp;&lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;&amp;nbsp;"container" that would hold the frames. &amp;nbsp;I looked at how the OTSpriteSheet was doing things, and basically used it as a template to create my own SparrowSpriteSheet container object. &amp;nbsp;It's job was to do 3 things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Break the texture into the various "frames" that were available (similar to what OTSpriteSheet did) by using the data in the xml file.&lt;/li&gt;&lt;li&gt;Create a new set of OTAnimation classes that represented the animations in the sprite sheet so that I didn't have to do this by hand, and so that I didn't have to order the frames of animation in any particular order (more on this below).&lt;/li&gt;&lt;li&gt;Store some additional data from the xml file about frame sizes and offsets for later use when positioning and sizing the sprite.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Since Texture Packer has no clue about animations, I had to use a trick to be able to generate the OTAnimation classes. &amp;nbsp;What I settled on was a naming convention for the files. &amp;nbsp;Every source image file was named &amp;lt;AnimationName&amp;gt;&amp;lt;FrameNumber&amp;gt;.png. &amp;nbsp;The xml file stored these names, so I could pull that up when processing the frames. &amp;nbsp;Once I broke apart the name, I could easily build animations from the xml data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I went about renaming all the sources files (most of them already followed this convention, or something close to it) and then noticed another thing. &amp;nbsp;Texture Packer doesn't handle converting background colors to transparent without the paid edition. &amp;nbsp;I tried out the "Heuristic&amp;nbsp;Mask" option, and found it to be lacking for my needs (and only available to me in a paid edition which is off limits for this project), so it was time to do some conversion. &amp;nbsp;I started by loading the gimp and trying my hand at converting the background to alpha. &amp;nbsp;While it was quite capable of doing the job, I was looking at over 1,000 source images to convert. &amp;nbsp;That wasn't something I wanted to do by hand.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I pulled out &lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt; and let it do it's thing. &amp;nbsp;I wrapped the&amp;nbsp;&lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt;&amp;nbsp;command to replace the color in the upper left of the image to a fully transparent color into a dos "for loop" and let it blast over all the files. &amp;nbsp;If you are interested in the the &lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt; command I ran, here it is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;convert sourcefile -alpha on -fill none -draw "color 0,0 replace" destinationfile&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;With that problem conquered, I ran the images through the&amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;&amp;nbsp;again and worked on the SparrowSpriteSheet until it had the results I wanted. &amp;nbsp;The only issue I had was that I had to track that the SparrowSpriteSheet "owned" the OTAnimation in question. &amp;nbsp;With no way to do that directly, I extended the OTAnimation class (making a SparrowAnimation class) that could track that information.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, if parameters changed on the SparrowSpriteSheet, I could regenerate the animations intelligently and if the SparrowSpriteSheet ever disappeared, the animations would go with it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know had a working OTContainer to hold my frames, but unlike the previous version of OTSpriteSheet, the frames weren't the same size! &amp;nbsp;Therefore, I had to modify the size property of the OTSprite every time a frame changed so that it didn't skew the sprite weirdly. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To do that, I created a new MonoBehavior called "ResizeSprite" that has a LateUpdate method. &amp;nbsp;This method would call on the OTSprite component on the same GameObject and adjust it to match the new frames as they changed. &amp;nbsp;This worked pretty well, and now I had sprites that were at least the right size approximately where they should be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why do I say approximate? &amp;nbsp;Well, if you have sprites that are different sizes, then positioning the sprite gets a bit trickier. &amp;nbsp;So, at this point, I had a sprite that "jumped" around a lot and didn't want to stick to one place. &amp;nbsp;I decided to expand my ResizeSprite behavior to also modify the position of the sprite.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And therein I ran into a major issue. &amp;nbsp;The only way I had to modify the sprite's drawing position was to either futz with the transform of the GameObject it was attached to, or rebuild the mesh with a new pivot point that would keep the relative position of the sprite the same.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I started to look at what it would take to do the second one, and decided to try my hand at the first instead. &amp;nbsp;It wasn't too difficult, except that I noticed that while I was modifying the transform, so was OTSprite when you set the position of the sprite on the screen. &amp;nbsp;There wasn't a good way I could find to have both of us control that transform for two different reasons and sort it all out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the end, I settled on a design decision. &amp;nbsp;The GameObject with the OTSprite is going to be a "Child" of my real GameObject. &amp;nbsp;Therefore, the position of the Player, Ghost, etc would be determined by the parent GameObject's transform, and the OTSprite transform is strictly my offset to keep the frames aligned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have this implemented, but I'm pretty sure I missed something in the math since there is a small amount of jitter I haven't gotten rid of yet. &amp;nbsp;That's what I'll look into tomorrow!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I clean the files up a bit, I'll post them for other people to look over and comment on.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-3178686642013972315?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/3178686642013972315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/combining-orthello-and-texture-packer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/3178686642013972315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/3178686642013972315'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/combining-orthello-and-texture-packer.html' title='Combining Orthello and Texture Packer'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-3157444289790506219</id><published>2011-08-16T15:31:00.001-04:00</published><updated>2011-08-17T18:17:47.236-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Artwork'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Learning Orthello</title><content type='html'>Yesterday, I spent most of the day learning a bit about using &lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt; in Unity. &amp;nbsp;I did some trial runs and some work on various things and found out that there are some limitations to &lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt; that will affect my pipeline.&lt;br /&gt;&lt;br /&gt;The two main issues are that &lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;'s sprite sheets are expecting that the sprites are all of the same dimension and that the animation definition uses raw frame numbers, requiring that I know exactly where a frame is in the sprite sheet.&lt;br /&gt;&lt;br /&gt;These are issues with my pipeline due to the default operation of the tool&amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;. &amp;nbsp;Typically, it trims the sprites to get rid of excess and then orders them in a manner on the page to allow it to optimize the use of the texture atlas.&lt;br /&gt;&lt;br /&gt;My concept is to let&amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;&amp;nbsp;do its work and export the data definitions into XML (using Sparrow's format). &amp;nbsp;Then I'll parse the XML and tell&amp;nbsp;&lt;a href="http://www.wyrmtale.com/orthello/"&gt;Orthello&lt;/a&gt;&amp;nbsp;where my frames where. &amp;nbsp;Since I'm still working through the details of that implementation, I wanted to get this post up to explain the progress I've made so far. &amp;nbsp;Hopefully, my next post will detail my solution to this problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-3157444289790506219?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/3157444289790506219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/learning-orthello.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/3157444289790506219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/3157444289790506219'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/learning-orthello.html' title='Learning Orthello'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-7175857414156232358</id><published>2011-08-14T23:00:00.001-04:00</published><updated>2011-08-17T18:17:55.943-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Of Arrows and Bows</title><content type='html'>Now that the artwork is decided upon, the monumental task of picking our tool set was upon us. &amp;nbsp;This has been a major undertaking, and one that I spent months prior to starting this project looking over so I'd be prepared.&lt;br /&gt;&lt;br /&gt;Summary of selected technology:&lt;br /&gt;&lt;a href="http://www.unity3d.com/"&gt;Unity Game Engine&lt;/a&gt;&amp;nbsp;using &lt;a href="http://www.wyrmtale.com/orthello"&gt;Orthello&lt;/a&gt;&amp;nbsp;as a 2D framework.&lt;br /&gt;&lt;a href="http://www.mapeditor.org/"&gt;Tiled Tile Editor&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.texturepacker.com/"&gt;Texture Packer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More details on my decision can be found by clicking below to read more.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Game Engines&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;There is always the option of writing a game engine from scratch. &amp;nbsp;However, I decided against this option for this project, since the time required to get those things working would distract from the project itself. &amp;nbsp;That doesn't mean there won't be issues using an "off the shelf" engine, but they are ones that I'm willing to work through.&lt;br /&gt;&lt;br /&gt;I narrowed the list down to these engines:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt;&amp;nbsp;- This is a major rock star in the independent game scene. &amp;nbsp;It handles porting your games to many platforms (including PS3 and Wii!) and has the power of an AAA game engine without the cost of one. &amp;nbsp;They have a limited feature set available for free for the web, PC and Macintosh . &amp;nbsp;That being said, it isn't a 100% free engine for all features or deployment options and if you are looking towards mobile, it will cost a pretty penny for a small development team. &amp;nbsp;Other than that one small factor, it has a great support forum and a very active set of users willing to answer questions. &amp;nbsp;This is the engine I've ultimately decided upon.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cocos2d-x.org/"&gt;Cocos2D-x&lt;/a&gt;&amp;nbsp;- This is a bit less of an "engine" and more of a C++ library for development of 2D games. &amp;nbsp;I was willing to look at this one, but there was no clear way to develop the game for the web, so without removing that restriction I couldn't use it. &amp;nbsp;However, for later projects that I'm mostly concerned with standalone or mobile games, this is a very strong contender. &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.stonetrip.com/"&gt;Shiva 3D&lt;/a&gt; - I view this as the "big engine that could". &amp;nbsp;It's a very&amp;nbsp;versatile&amp;nbsp;engine and lines up with Unity's feature set very closely. &amp;nbsp;It also has a tremendous advantage - the price. &amp;nbsp;For one cost, you get all the features of the engine and all platforms. The support forums aren't quite as active, but they are pretty quick to answer emails. &amp;nbsp;They have a trial edition available for free, but no "100% free" option similar to Unity's. &amp;nbsp;In the end, I had to discount them due to this fee since this project is a $0 video game project. &amp;nbsp;However, I'd certainly look to Shiva in the future for projects I'm willing to invest in more.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.engine001.com/"&gt;Engine 001&lt;/a&gt; - I was relatively excited about this engine. &amp;nbsp;It is 100% free to start with and only a small subset of features are "subscription only". &amp;nbsp;I know this engine would satisfy the needs of my game and probably make a game quicker than using the 3D engines above. &amp;nbsp;The disadvantages were two fold. &amp;nbsp;First is the subscription model. &amp;nbsp;For a game that I'd like to have the ability to monetize on, a subscription model is not the best option. &amp;nbsp;However, I was willing to overlook that and use the engine since they had a free edition. &amp;nbsp;However, they have no web deployment option and that was something I couldn't live without.&lt;/li&gt;&lt;li&gt;&lt;a href="http://gamesalad.com/"&gt;Game Salad&lt;/a&gt; - Another 2D engine, and it got me very excited. &amp;nbsp;Web development and iPhone development were available and it seems very easy to use. &amp;nbsp;However, it was available only for Macintosh, and unfortunately I dont' have one of those at present. &amp;nbsp;So, that threw them out.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.monkeycoder.co.nz/"&gt;Monkey&lt;/a&gt;&amp;nbsp;- This framework for 2D games is a bit too lightweight at present to be of interest. &amp;nbsp;There are a multitude of things that aren't supported as compared to its competition, but it is one to keep our eyes on. &amp;nbsp;Created by the author of Blitz Max, it is certainly posed to become a very powerful system in time.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.yoyogames.com/gamemaker/windows"&gt;Game Maker&lt;/a&gt;&amp;nbsp;- Decent game engine, and a trial edition is free. &amp;nbsp;However there is no web option at present. &amp;nbsp;There appears to be an HTML5 and even Android publishing option in the works, so it might be worth consideration later!&lt;/li&gt;&lt;li&gt;&lt;a href="http://flixel.org/"&gt;Flixel&lt;/a&gt;&amp;nbsp;and &lt;a href="http://flashpunk.net/"&gt;Flashpunk&lt;/a&gt;&amp;nbsp;- Both good libraries, but I didn't want to be limited to the flash platform.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.andengine.org/"&gt;AndEngine&lt;/a&gt;&amp;nbsp;- Android specific library that looked good, but the LGPL makes it (in my opinion) all but useless on that platform for anything but free software (due to the lack of dynamic libraries)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.e3roid.com/"&gt;E3Roid&lt;/a&gt;&amp;nbsp;- Decent android specific library, but no web deployment option.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Many others were considered, but these were all on my top pick list at the time of selection.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;&lt;i&gt;2D Framework for Unity&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the use of a 3D engine that isn't optimized for 2D games, I decided that getting a framework that helps model 2D games would be helpful. &amp;nbsp;I researched and found these options on Unity:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.wyrmtale.com/orthello"&gt;Orthello&lt;/a&gt;&amp;nbsp;- A bright spot that was released very recently for Unity. &amp;nbsp;It covers camera work, tracking 2D objects, 2D sprite displays, etc. &amp;nbsp;100% free for the basic functionality, and the author plans on releasing additional tools for the Orthello suite for small amounts of money. &amp;nbsp;(Wish he had the tile map support already, but even if he did it looks like that will be included in the first "for pay" package for Orthello).&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.unity3d.com/threads/16763-SpriteManager-draw-lots-of-sprites-in-a-single-draw-call!"&gt;SpriteManager&lt;/a&gt; - The first 2D framework for unity that seems to have been developed. &amp;nbsp;It was given to the community a while back and has basic sprite drawing functions (to drop the number of draw calls to one per texture atlas). &amp;nbsp;A good option if Orthello doesn't work out.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.anbsoft.com/middleware/sm2/"&gt;SpriteManager2&lt;/a&gt; - The grown up version of the free version. &amp;nbsp;This has editors, tile map support, etc. &amp;nbsp;Far more comprehensive than the prior two offerings, but with a price tag this project couldn't afford! &amp;nbsp;Definitely&amp;nbsp;look into this if you are looking at making a 2D game on Unity.&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.unity3d.com/threads/93287-2D-Toolkit-2D-in-Unity-made-simple-RELEASED"&gt;2D Toolkit&lt;/a&gt; - A very similar product to SpriteManager2 and at a&amp;nbsp;comparatively&amp;nbsp;low cost. &amp;nbsp;But even it's cost is too much for a $0 project, so I had to overlook it.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;&lt;i&gt;Level Design Tools&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm still working through this, but with the selection of Unity, I basically have two options:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Use the scene editor in unity directly.&lt;/div&gt;&lt;div&gt;Use &lt;a href="http://www.mapeditor.org/"&gt;Tiled Map Editor&lt;/a&gt;&amp;nbsp;and write some C# code to bridge the 2D framework with the TMX file format.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I chose the 2nd one since it seems like the "right way" to do it, and I don't mind writing some C#.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Artwork and Image Manipulation&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For free tools, &lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt; are hard to beat. &amp;nbsp;I didn't really research beyond that, but if I was more of an artist then some of these might have been of interest:&amp;nbsp;&lt;a href="http://code.google.com/p/grafx2/"&gt;GrafX2 (Free)&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.cosmigo.com/promotion/index.php"&gt;Pro Motion (Commercial)&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm pretty sure I'll use Microsoft Paint a bit too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Spritesheet / TextureAtlas Generator&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While you can use a normal image manipulation program to stitch together the images that compose animations for 2D into a spritesheet, having a program help you is much easier. &amp;nbsp;I was surprised at the lack of these tools and examined a number of them. &amp;nbsp;I won't comment on any of them since I found them all lacking significantly compared to the one I finally found: &amp;nbsp;&lt;a href="http://www.texturepacker.com/"&gt;TexturePacker&lt;/a&gt;. &amp;nbsp;There is no&amp;nbsp;comparison&amp;nbsp;unless you plan on writing your own. &amp;nbsp;Once again, a free version of the tool is available and that is all we need for this project. &amp;nbsp;The extra options in the paid version are likely worth it's very minimal cost for other projects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And that rounds out my selection of tools.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-7175857414156232358?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/7175857414156232358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/of-arrows-and-bows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/7175857414156232358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/7175857414156232358'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/of-arrows-and-bows.html' title='Of Arrows and Bows'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-5223678080238157388</id><published>2011-08-14T14:00:00.001-04:00</published><updated>2011-08-17T18:18:04.675-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Tileset'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Artwork'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tiles'/><title type='text'>Blue Archer's New Clothes...</title><content type='html'>I spent a good part of yesterday looking over various pieces of artwork available for free on the internet that could satisfy the requirements of a Gauntlet clone.&lt;br /&gt;&lt;br /&gt;My selections at this point in the project for the characters are from &lt;a href="http://www.reinerstilesets.de/"&gt;Reiner's Tilesets&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.reinerstilesets.de/2d-grafiken/2d-humans/"&gt;Blue Archer&lt;/a&gt;&amp;nbsp;as the player character.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reinerstilesets.de/2d-grafiken/2d-monsters/"&gt;Ghost&lt;/a&gt;&amp;nbsp;as the first enemy type.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reinerstilesets.de/2d-grafiken/2d-monsters/"&gt;Skel&lt;/a&gt; as the second enemy type.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;For the dungeon walls and floors, I'm going to use various handpicked tiles from both&amp;nbsp;&lt;a href="http://www.reinerstilesets.de/"&gt;Reiner's Tilesets&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.tekepon.net/fsm/modules/refmap/"&gt;First Seed Material&lt;/a&gt;. (To be decided upon which ones during level construction).&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Here are the other sites besides those two that I visited and looked over the resources. &amp;nbsp;Any site that had dubious artwork or unclear licenses was ignored for this project. &amp;nbsp;So, these all (as far as I can tell) have clear copyright licenses and legal ways of using the images in a project.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.spriteworks.com/sworks.html"&gt;Sprite Works&lt;/a&gt;&amp;nbsp;- Ignored since it was a paid library of images. &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forums.tigsource.com/index.php?topic=8952.0"&gt;Various Artists Works&lt;/a&gt;&amp;nbsp;- Ignored since most of those images were clearly marked "non commercial".&lt;/li&gt;&lt;/ul&gt;Here are some resources that aren't related to this project that might be of interest to people looking for video game art:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://david.bellot.free.fr/svg-cards/"&gt;Svg Cards&lt;/a&gt;&amp;nbsp;-&amp;nbsp;This is a great set of playing cards we are using for another project.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.positech.co.uk/content/explosion/explosiongenerator.html"&gt;Explosion Generator&lt;/a&gt;&amp;nbsp;-&amp;nbsp;This is a nice set of explosions and a generator to create more that could be used for something more space like, etc.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;There are many other sites on the internet that have "sprite images", but many of those are ripped from games or are clearly copied art styles from copyrighted material. &amp;nbsp;I've avoided them for this project and any others I work on, so I haven't listed them here.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are an artist and have another site where non copyrighted images are available for use for independent projects, feel free to contact me. &amp;nbsp;I'd love to know about them!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-5223678080238157388?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/5223678080238157388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/blue-archer-needs-artwork-badly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/5223678080238157388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/5223678080238157388'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/blue-archer-needs-artwork-badly.html' title='Blue Archer&apos;s New Clothes...'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3996823333383376319.post-714760749299901886</id><published>2011-08-14T12:17:00.001-04:00</published><updated>2011-08-17T18:18:11.712-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Gauntlet'/><title type='text'>Blue Archer Needs Coding Badly...</title><content type='html'>I've decided to task myself with the development of a very simple version of the old Atari Classic - Gauntlet. &amp;nbsp;To keep things small and interesting to others, here are the conditions that I've put myself under:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The development shouldn't take more than a month of on/off development, with an attempt to bring it together in a week or so of more concentrated development.&lt;/li&gt;&lt;li&gt;The cost of the entire project should be $0.&lt;/li&gt;&lt;li&gt;The project should be able to be sold&amp;nbsp;commercially, but we are willing to allow additional fees to do this.&lt;/li&gt;&lt;li&gt;The project should be able to be run on the web for easy linkage to this blog.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;A secondary concern would be a path to deploy the game on other platforms, especially Android. &amp;nbsp;But that is outside the scope of this development effort, so consider it a bonus if the tools allow it.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Only one player type will be supported.&lt;/li&gt;&lt;li&gt;4 levels will be designed for some variety.&lt;/li&gt;&lt;li&gt;2 enemies will be battled against.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;That's about it, stay tuned for details.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3996823333383376319-714760749299901886?l=blog.stepwoodgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.stepwoodgames.com/feeds/714760749299901886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.stepwoodgames.com/2011/08/blue-archer-needs-coding-badly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/714760749299901886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3996823333383376319/posts/default/714760749299901886'/><link rel='alternate' type='text/html' href='http://blog.stepwoodgames.com/2011/08/blue-archer-needs-coding-badly.html' title='Blue Archer Needs Coding Badly...'/><author><name>Alan</name><uri>http://www.blogger.com/profile/02039528586597336729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
