<?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'><id>tag:blogger.com,1999:blog-6997440551610060560</id><updated>2009-11-02T15:27:43.650-06:00</updated><title type='text'>Nathan's Game Development Blog</title><subtitle type='html'>I started by blogging the process of porting &lt;a href="http://www.tolberts.net/anguna"&gt;Anguna&lt;/a&gt; from the Gameboy Advance to the Nintendo DS.  Now that that's done, we'll see what's next....</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default?start-index=26&amp;max-results=25'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-6205595907289632336</id><published>2009-11-02T15:27:00.000-06:00</published><updated>2009-11-02T15:27:43.657-06:00</updated><title type='text'>Lack of graphics....</title><content type='html'>Well, after that exciting start that I blogged about, I've stalled rather quickly.&amp;nbsp; That's a bit discouraging.&amp;nbsp; I haven't done much work on the "next game" for a few weeks.&amp;nbsp; Why?&lt;br /&gt;&lt;br /&gt;Two reasons, really.&amp;nbsp; First, I've just been busy.&amp;nbsp; I haven't had as much spare time in the evenings.&lt;br /&gt;&lt;br /&gt;But the bigger reason is that I haven't gotten confirmation from an artist for the game.&amp;nbsp; Chris (that did Anguna's art) had expressed an interest, which was enough to get me excited and started, but he's been pretty busy and had some other stuff going on in life, so I'm not sure he'll be able to contribute.&amp;nbsp; A couple of other leads have come up, but nothing solid.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Without graphics, there's not really a game, so I'm waiting and dragging my feet on the development side of things for now.&amp;nbsp; I guess I could use some free-to-use resources from the web or something to get started, but it's just not very motivating.&amp;nbsp; So that's where I'm at now.&amp;nbsp; Maybe I'll hear from Chris or someone soon, and get geared up again later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-6205595907289632336?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/6205595907289632336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=6205595907289632336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6205595907289632336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6205595907289632336'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/11/lack-of-graphics.html' title='Lack of graphics....'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-1906562087960232951</id><published>2009-10-14T15:33:00.000-05:00</published><updated>2009-10-14T15:33:34.779-05:00</updated><title type='text'>Review:  Strider for nes</title><content type='html'>Well, after I got excited and started work, I haven't actually done much recently.&amp;nbsp; I've been reworking the level loading code from Anguna, but there's still a good bit to do.&amp;nbsp; I'd really like to get some sample graphics into the engine so I can visualize things better, but that will still be awhile before any graphics are ready.&lt;br /&gt;&lt;br /&gt;So until then, I'm still playing old nes games.&amp;nbsp; The most recent was Strider.&amp;nbsp; Strider is an interesting game:&amp;nbsp; it has a great concept, cool story and mechanics, a fun almost detective-style "find the next file of information to see where you can go next" thing.&amp;nbsp; Unfortunately, the game is riddled with problems.&amp;nbsp; The play control is glitchy and awful -- if you jump near a wall, often your jump immediately ends and you fall to the ground.&amp;nbsp; The hit detection is completely wacky.&amp;nbsp; In most cases, it doesn't really pay off to fight carefully, because you never know when the game will think you've made contact with the enemy, or if it's made contact with you and damaged you.&amp;nbsp; So you basically run around swinging your little sword thing (the game calls it a "cipher") and hoping you don't die.&amp;nbsp; This REALLY puts a damper on the fun factor.....it's neat exploring new areas and figuring out where to go next, but it's no fun when you actually get there.&lt;br /&gt;&lt;br /&gt;Overall, I enjoyed the game somewhat, but it was also moderately painful, fighting bosses that I had no idea if I was hitting, not being able to make jumps that should be easily jumped, etc.&amp;nbsp; The game was also a little bit too short for my liking, but that's ok. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_IcbJcQlnj8Y/StY1h62-1FI/AAAAAAAAAFw/8dgyMkRAhm0/s1600-h/Strider_NES.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_IcbJcQlnj8Y/StY1h62-1FI/AAAAAAAAAFw/8dgyMkRAhm0/s320/Strider_NES.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So, things I've learned:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The whole "multiple completely separate areas with a hub screen to determine where you go" concept can be pretty fun.&amp;nbsp; (Assuming the game doesn't hold your hand TOO much, which Strider balances quite well)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The actual action gameplay has to be fun, or the game isn't fun.&amp;nbsp; Any single killer mistake (too high difficulty (see super pitfall), bad play control, bad hit detection)...any of these can ruin the game.&amp;nbsp; &lt;/li&gt;&lt;li&gt;It's good to limit how many times a player has to run through a particular area over and over again.&amp;nbsp; In Strider, most of the areas are visited once or twice, but you keep returning to Kazakh.&amp;nbsp; And each time, you have to play through a pretty boring couple of hallways to get where you are going.&amp;nbsp; I like the general idea of returning to areas once you've got something new, but I got really sick of Kazakh.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-1906562087960232951?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/1906562087960232951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=1906562087960232951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/1906562087960232951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/1906562087960232951'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/10/review-strider-for-nes.html' title='Review:  Strider for nes'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_IcbJcQlnj8Y/StY1h62-1FI/AAAAAAAAAFw/8dgyMkRAhm0/s72-c/Strider_NES.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-921701352317705537</id><published>2009-09-11T23:13:00.000-05:00</published><updated>2009-09-11T23:13:56.671-05:00</updated><title type='text'>More on the asset pipeline</title><content type='html'>So I'm still trying to figure out what my asset pipeline is going to be like.&amp;nbsp; What makes it particularly interesting is this:&amp;nbsp; the GBA doesn't support files (there are hacks out there to simulate it, but I'd prefer not to use them).&amp;nbsp; Everything gets packed as data into the single game rom, and run.&amp;nbsp; The DS, on the other hand (at least for homebrew) has a usable filesystem.&amp;nbsp; Now you can ignore the filesystem and pack things into the rom like I did for the DS release of Anguna, but working with files can sometimes be a lot nicer -- it sure makes the edit/build/test cycle a lot easier, as you don't have to go through a separate compile step.&lt;br /&gt;&lt;br /&gt;The tricky part is thinking about how I might implement both of these.&amp;nbsp; The core of my existing engine assumes everything exists as structs in C, and references to other data is just via pointers.&amp;nbsp; (Which is easy when the compiler does all the work for you).&amp;nbsp; But if I use files, I'll basically need to write a file parser, which will then populate those structs, and create all the pointers between the new structs based on text symbols in the files.&amp;nbsp; Definitely doable, but a bit more work.&amp;nbsp; Is it worth it to go to files for the DS but not for GBA?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;The other side of the coin is the argument that, realistically, when editing assets, I'll already have to jump through some hoops to save/export it properly using whatever tool I use.&amp;nbsp; Why not just make sure my tool also recompiles everything during that step, and let the C compiler do all the work of parsing, populating structs, and creating the pointers?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-921701352317705537?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/921701352317705537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=921701352317705537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/921701352317705537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/921701352317705537'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/09/more-on-asset-pipeline.html' title='More on the asset pipeline'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-3969437038640785494</id><published>2009-09-11T10:40:00.001-05:00</published><updated>2009-09-11T10:41:57.444-05:00</updated><title type='text'>Review:  Super Pitfall</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Super_Pitfall"&gt;Super Pitfall &lt;/a&gt;for the nes is TERRIBLE.&amp;nbsp; Completely awful.&amp;nbsp; Interestingly enough, it's given me quite a bit of thought about game design for my next project.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_IcbJcQlnj8Y/SqnKbdrpz2I/AAAAAAAAAEg/ymMyoGiNbz4/s1600-h/Super_Pitfall_screenshot%5B1%5D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_IcbJcQlnj8Y/SqnKbdrpz2I/AAAAAAAAAEg/ymMyoGiNbz4/s320/Super_Pitfall_screenshot%5B1%5D.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I've spent the past 22 years trying really hard to like this game. I mean, this game had the potential to be awesome.&amp;nbsp; It was a huge world that you could explore freely.&amp;nbsp; Dungeons and spikes and non-linearity and ladders and treasure.&amp;nbsp; What could go wrong?&amp;nbsp; Well, everything.&amp;nbsp; No matter how much I tried, I always came to the same conclusion:&amp;nbsp; this game was no fun.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So, to be productive, I'll try to think about why it wasn't fun, and what could be done about it.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;First, the challenge level was way off.&amp;nbsp; There are numerous frustrating cheap kills near the beginning of the game.&amp;nbsp; And there's a ridiculously long time you have to wait between dying and when you get to play again...it's something like 10 seconds of waiting.&amp;nbsp; Considering your first life may only last about 4 or 5 seconds, it's really annoying to have to wait 10 more before you can play.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Also very frustrating is the fact that, although it's a big open world to explore, you find very little compelling or interesting things.&amp;nbsp; You wander around collecting gold bars that do nothing.&amp;nbsp; Scattered around are special items (playing card suits?) that are invisible until you jump in a certain correct spot.&amp;nbsp; But even when you grab them, there's very little sense of accomplishment.&amp;nbsp; Why did I grab that?&amp;nbsp; What's it for?&amp;nbsp; And do I really have to jump at every single inch of the huge world to see if there's an item hidden nearby?&amp;nbsp; Overall, I get this feeling of a big huge empty world, filled with nothing but ladders and traps.&amp;nbsp; I've heard that if you are patient enough to map out the world, it all comes together and the game gets interesting.&amp;nbsp; But I was never patient enough.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So, theoretically, this game could have been fun if:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- There were fewer cheap kills, and the challenge curve&amp;nbsp; had been a little more appropriate&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- Your goals were a little more obvious, so you felt you were making progress or discovering something interesting&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- There was a minimap (I love minimaps) to help you keep track of where you've been and where you are.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So the things I should learn from Super Pitfall:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- A huge world to explore is just frustrating if there's no obvious reward for exploring.&amp;nbsp; This is the trouble I ran into with the overworld in Anguna.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- A huge world is confusing if there's nothing to help organize your brain.&amp;nbsp; Forcing players to hand-draw a map is a bad plan -- provide a minimap.&amp;nbsp; This one is relatively obvious these days, as almost all adventure games do this. (and it was forgivable back then to not have one)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- Have someone else playtest a little to make sure the difficulty curve isn't insane.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;- Make sure that secrets aren't hidden in obtuse and stupid ways that just require tons of tedium in trying every single square/block.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-3969437038640785494?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/3969437038640785494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=3969437038640785494' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/3969437038640785494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/3969437038640785494'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/09/review-super-pitfall.html' title='Review:  Super Pitfall'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_IcbJcQlnj8Y/SqnKbdrpz2I/AAAAAAAAAEg/ymMyoGiNbz4/s72-c/Super_Pitfall_screenshot%5B1%5D.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-1501765148824546176</id><published>2009-09-10T22:12:00.001-05:00</published><updated>2009-09-10T22:14:09.116-05:00</updated><title type='text'>Overhauling the Anguna engine</title><content type='html'>The nice thing about doing another GBA/DS game is that I already have a working game engine.&amp;nbsp; There's plenty that I want to change, and a lot that I'd like to clean up (see the previous postmordem posts), but it's nice to have working code that takes care of a lot of the grunt work.&lt;br /&gt;&lt;br /&gt;So the past few weeks I've been giving some needed love to the code that drove Anguna.&amp;nbsp; The first goal was to merge the gba and ds codebases into a single source tree, and just have different make files for the different platforms.&amp;nbsp; Not for Anguna's sake, but to reuse for the next game.&amp;nbsp; Of course, some of the stuff (hud, menus, all the code for the DS's second screen) will have to be a bit different for the two platforms, but the majority will be the same.&lt;br /&gt;&lt;br /&gt;The next task has been pulling out stuff bit by bit and reorganizing it, reducing coupling when needed, and generally making things less "icky".&amp;nbsp; Unfortunately, this also means breaking things, so I'm back to that crazy point where I cheer every time I get a sprite to appear correctly on the screen.&amp;nbsp; It's a bit tedious (especially because I've done this all before), but it's nice to know that as I get this all cleaned up, I'll have a ton of the work done towards my next game (even though I'm still not sure about all the details of said game).&amp;nbsp; So tonight I managed to get a "&lt;a href="http://rampantgames.com/blog/2004/10/black-triangle.html"&gt;black triangle&lt;/a&gt;" onto the screen.&amp;nbsp; It's ugly, but it made me happy:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_IcbJcQlnj8Y/Sqm_RVAtKqI/AAAAAAAAAEY/H-yHr9ISyi8/s1600-h/sophia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_IcbJcQlnj8Y/Sqm_RVAtKqI/AAAAAAAAAEY/H-yHr9ISyi8/s320/sophia.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This, my friends, is my black triangle:&amp;nbsp; That nasty green background is an ugly "level" that properly got loaded by my level loader and screen drawing code.&amp;nbsp; (Despite the fact that I didn't bother to find good looking tiles to test with).&amp;nbsp; The green toady guy from Anguna is a stand-in to make sure my character/sprite code still works.&amp;nbsp; Which it does.&amp;nbsp; The fun part is that I hadn't even tested the DS version, but just now, while typing this, I compiled the DS build, and ran it, and it showed the exact same thing!&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;On a completely different note, I've been playing through a lot of the old-school 2d side-scrolling adventure games (mostly for NES, but some others), trying to get ideas for what works well and what doesn't, for what I like and don't like.&amp;nbsp; So I might have a few posts here basically just reviewing some of the old games, which will help me organize my thoughts.&lt;/div&gt;&lt;br /&gt;&lt;span id="goog_1252638070513"&gt;&lt;/span&gt;&lt;span id="goog_1252638070514"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-1501765148824546176?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/1501765148824546176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=1501765148824546176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/1501765148824546176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/1501765148824546176'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/09/overhauling-anguna-engine.html' title='Overhauling the Anguna engine'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_IcbJcQlnj8Y/Sqm_RVAtKqI/AAAAAAAAAEY/H-yHr9ISyi8/s72-c/sophia.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-4518584512319556893</id><published>2009-08-31T13:38:00.000-05:00</published><updated>2009-08-31T13:38:58.956-05:00</updated><title type='text'>Next Project</title><content type='html'>Ok, on to what my next project might be.&amp;nbsp; I'm not content unless I've got a project I'm working on, so there's not really an option of "no project".&amp;nbsp; While working on Anguna, I had lots of ideas of things that I might want to work on next.&lt;br /&gt;&lt;br /&gt;I've considered doing some sort of 3d OpenGL-based game on the PC to learn what I'm doing with 3d game programming.&amp;nbsp; I've messed around with 3d before, but nothing more than little demos. Other things I've considered include some sort of NES homebrew, dreamcast homebrew, Atari 2600 homebrew, making an iphone game, doing a flash game, and finishing a digital scrapbooking tool for my wife. I also bought an &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt; and decided to try to make a simple robot with it.&amp;nbsp; So that's been occupying a good bit of my hobby time.&amp;nbsp; (Maybe I'll post some pictures/thoughts about the robot building at some point).&lt;br /&gt;&lt;br /&gt;Really, though, the answer to "what's next" seems to be coming down to a few things:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp; Whatever I make, I want people to actually play or use it.&amp;nbsp; I made an RPG engine for the PC once a long time ago that didn't really have a target market.&amp;nbsp; It was a fun project, but not very satisfying in the end, when there was nobody using it.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp; There's already a HUGE pool of existing games out there on the PC (freeware games, or flash games, or whatnot).&amp;nbsp; If I made another one, the chance of getting my game played is pretty small.&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp; Although iphone game development would be fun, I don't feel like investing the money to buy a quality mac as well as an iphone or touch.&amp;nbsp; That's somewhere around $1000 to $1500 to drop.&amp;nbsp; I'm too cheap to pay that kind of money unless I'm REALLY sure that's what I want to do.&lt;br /&gt;&lt;br /&gt;All of those seem to point to doing another console homebrew game.&amp;nbsp; It's a small enough niche to get noticed, and it's fun to see games running on the actual console.&amp;nbsp; As far as what system to develop for?&amp;nbsp; Dreamcast has a lot of overhead (emulators are poor, so I'd have to be tied down to testing on the physical console, which needs a TV).&amp;nbsp; Atari development is nasty hard (your code has to prepare and render EACH SCANLINE separately), and I'd have to brush up on my 6502 assembler.&amp;nbsp; I'd like to do a NES game -- I think I have a good enough grasp of how to program for it that I could learn it fairly quickly.&amp;nbsp; But it'd probably need to be in assembler also, which would limit my progress.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;So I'm leaning right now towards another GBA/DS game.&amp;nbsp; When I started on Anguna, I had debated between a Zelda clone, or a &lt;a href="http://www.gamespite.net/toastywiki/index.php/Games/Metroidvania"&gt;Metroidvania&lt;/a&gt;-style game.&amp;nbsp; (sorry for the cheesy label, but that describes it well).&amp;nbsp; I eventually settled on the Zelda clone, but I've still got some ideas for a side-scrolling adventure that I'd like to eventually work on.&amp;nbsp; So that's likely to be the next project.&lt;br /&gt;&lt;br /&gt;More specifically, I'm thinking about doing something based loosely on &lt;a href="http://en.wikipedia.org/wiki/Blaster_Master"&gt;Blaster Master&lt;/a&gt;.&amp;nbsp; I'm still debating exactly what that would mean and what it would look like, but that's the direction I'm looking.&amp;nbsp; I've been reading some reviews of older 2d side-scrolling adventure games, and playing through a few of them (Super Metroid, Symphony of the Night, etc) trying to boil down what I like and don't like about each of them.&amp;nbsp; Like Anguna, my goal will be to make the game that I want to play.&amp;nbsp; We'll see where it goes.&amp;nbsp; Especially considering I tend to start lots of hobby projects, and only finish the really interesting ones....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-4518584512319556893?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/4518584512319556893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=4518584512319556893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4518584512319556893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4518584512319556893'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/08/next-project.html' title='Next Project'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-6807778009312888626</id><published>2009-08-25T11:04:00.002-05:00</published><updated>2009-08-25T13:44:19.533-05:00</updated><title type='text'>Looking back and looking forward</title><content type='html'>&lt;span style="font-family:arial;"&gt;I guess now that I haven't posted anything in quite awhile, and Anguna's been all finished for what seems like forever (it's only been a few months?), it's time to do a post-mortem and then figure out what's next.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I've got a lot of rambling thoughts, so I may spread this into a few posts.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;First, looking back at Anguna.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Overall, I'd call it a success.  For the most part, I made the game I set out to make.  The addition of Chris's graphical magic transformed it into something that was actually capable of attracting attention, and feeling like a "real game" as opposed to a toy project.  The game wasn't quite as long as I'd like it to be, but it was good enough.  A few thousand people downloaded the game (from my site, no clue about the total numbers), people played through it, and seemed to like it.  It's currently ranked as the 19th most popular gba game on gbadev.org.  I couldn't ask for better.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The biggest complaints or criticisms that I saw were:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;1.  It needed towns, or more people to talk to&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;2.  It needed more story, or the story was lame.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;These made me chuckle a little, as this was purely by design.  I really enjoy action-adventure games, but I always get bored when I have to spend a lot of time in a town talking to people, or watching cut scenes.  So I purposely made a game with no towns, very few people, and a cheesy plot.   I guess there's not too many of us that want that sort of thing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;3.  Once you get out of the first dungeon, you don't know where to go, and wander aimlessly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This is true.  It was partially by design, but I didn't implement it well.  Again, I wanted to go back to that "big world to explore, and who knows what I might find?" feeling that some of the older adventures games had.  Newer games that hold your hand, tell you where to go, or force you to uncover the world one piece at a time don't have that feeling for me.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;That being said, when I was playtesting, I found that it was a little too easy to wander around and find nothing.  The world was a little too empty or something.  I added the purchasable maps to help combat this, and I think it helped a little, but not enough.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;4.  It was too short.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I agree.  But I've learned two things from this:  First, that level design (even for a simple game like this) is tedious, time consuming, and difficult.  Second, that the quality of level design tools makes a HUGE difference.  If/when I do my next game, I'll invest more coding time making (or google time finding) better tools.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;5.  Bugs or other hardware-related issues&lt;/span&gt;&lt;span style="font-family:arial;"&gt; (not sleeping properly on the DS, glitches, places you could get stuck, etc)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;There were a lot of bugs.  That's pretty par for the course on this sort of project.  I'm not sure I'd handle it much differently had I to do it over again.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;So that's it for the things other people mentioned.  Now for my own observations:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;1.  Crufty, ugly code. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Looking back at the code, there's quite a few places that's it's ugly.  It's not decoupled properly in many places.  This is all a mixture of a laziness during development, inexperience, and my iterative design process.  It's rare to finish a large project and NOT find spots that are ugly (I tend to find that any large body of code that I wrote more than 18 months ago is ugly), but it still bothers me.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Specifically, I tied my sprite management system too closely to the sprite hardware.  The same with background graphics.  Small bits of platform-specific code were scattered through various places instead of all wrapped up nicely.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;2.  Separate GBA and DS codebases&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I'm not going to go as far as to call this a mistake (because the cleanup required to integrate them might not have been worth it), but it was really annoying.  The code is 90 or 95% the same between the two versions.  I really should have made it one codebase with two different builds.  This will be the plan for the future.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;3. Cumbersome  Graphics Asset Pipeline&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was really annoying.  I didn't have a standardized and easy way of getting graphics assets into the game.  Level graphics had to be hand-massaged in a tedious and error-prone way to get them in.  Enemy graphics had to be dumped out a certain way.  Splash screens a different way.  All by hand.  I learned my lesson halfway through, so enemy portraits were automated as part of the build process.  In any future games, I need to automate away as much of the asset preparation pipeline as possible.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.  Martin Korth is still missing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And I'm still annoyed about it.  He's the guy that made the best debugging tool for the DS.  But he didn't set up any reasonable way of purchasing it without interacting with him directly.  And he's disappeared.  So there's no good debugging tools available for DS.  That really stinks.&lt;br /&gt;&lt;br /&gt;That's all I can think of at the moment.  There will likely be more later.&lt;br /&gt;&lt;br /&gt;The other thing that I learned from Anguna was just how helpful people are.  I was amazed at how many people provided help, code snippets, hardware, testing, etc.  It was fun working with everyone who was happy to help.&lt;br /&gt;&lt;br /&gt;Ok, that's enough typing for now.  Next will be another rambling post about what might come next after Anguna.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-6807778009312888626?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/6807778009312888626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=6807778009312888626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6807778009312888626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6807778009312888626'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/08/looking-back-and-looking-forward.html' title='Looking back and looking forward'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-8392858018181983937</id><published>2009-02-26T14:58:00.003-06:00</published><updated>2009-02-26T15:19:03.687-06:00</updated><title type='text'>Open sourcing Anguna?</title><content type='html'>So I've been thinking for awhile about open sourcing Anguna.  I had forgotten about it then until  other day when my brother mentioned OSS and Anguna in his blog. &lt;br /&gt;&lt;br /&gt;So, anybody out there have thoughts about the idea?  I'm debating mostly between:&lt;br /&gt;1.  Doing nothing because I'm lazy and don't want to clean up the source and put it somewhere.&lt;br /&gt;2.  Pulling the core engine code out and open-sourcing that.&lt;br /&gt;3.  Open-sourcing the whole shebang, code, assets (graphics, level maps, etc) and all.&lt;br /&gt;&lt;br /&gt;Opening the engine wouldn't practically be all that useful -- realistically, is anybody going to use my mediocre engine instead of some better engine, or instead of doing the fun work of making a new one?&lt;br /&gt;&lt;br /&gt;Opening the assets means I need to check with everyone that made assets.  Daydream made most of the graphics, so his will be easy to check on.  But the music and some of the other graphics already have their own licenses attached, so I might not be able to include everything.  Is it worth including some but not all?  Is it worth the effort of sorting it all out?&lt;br /&gt;&lt;br /&gt;I guess a lot of it depends on conversations with Daydream.  Which I should have with him instead of here.  Anyway, those are my rambling thoughts.  Please chime in if you have advice or opinions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-8392858018181983937?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/8392858018181983937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=8392858018181983937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/8392858018181983937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/8392858018181983937'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2009/02/open-sourcing-anguna.html' title='Open sourcing Anguna?'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-4483434105787145384</id><published>2008-12-09T21:54:00.002-06:00</published><updated>2008-12-09T21:58:28.904-06:00</updated><title type='text'>Version 1.02</title><content type='html'>I made a few bug fixes, and released &lt;a href="http://www.tolberts.net/anguna/download/angunaDS.zip"&gt;version 1.02&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Changes include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The save filename was changed from anguna.sav (which conflicts with the R4's autosave feature) to anguna.dat&lt;/li&gt;&lt;li&gt;Rearranged where graphics data was stored, to see if it makes a difference in the nasty unreproducible bug where occasionally the main character sprite becomes a giant solid-colored square.&lt;/li&gt;&lt;li&gt;Fixed a few sections of the overworld map where edges between rooms didn't transition nicely, allowing the player to get stuck.&lt;/li&gt;&lt;/ul&gt;Thanks to everyone that submitted bugs about these things!&lt;br /&gt;&lt;br /&gt;If you update versions, your old save file will still work, but your character's location will be reset to the first overworld room, outside the prison dungeon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-4483434105787145384?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/4483434105787145384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=4483434105787145384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4483434105787145384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4483434105787145384'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/12/version-102.html' title='Version 1.02'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-6709411235097874549</id><published>2008-12-02T22:15:00.002-06:00</published><updated>2008-12-02T22:19:36.576-06:00</updated><title type='text'>Version 1.01</title><content type='html'>Sverx reported a couple bugs, so I've posted an updated version (&lt;a href="http://www.tolberts.net/anguna/download/angunaDS_1.01.zip"&gt;AngunaDS version 1.01&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;There was an effect in the main theme xm file that LibXM7 didn't support, so I changed that.  Also, there'd been a bug for awhile where occasionally the main character could get covered by a big solid-colored square after you continued from dying.  It had been reported before, but I haven't been able to find out how to reproduce it.  I finally got enough details from Sverx that, although I still can't reproduce it, I have a pretty good theory about what was causing it, and, if that's the case, I can prevented it from occuring again.  Let's see if that holds true...if anyone happens to see that behavior in this 1.01 release, please let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-6709411235097874549?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/6709411235097874549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=6709411235097874549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6709411235097874549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6709411235097874549'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/12/version-101.html' title='Version 1.01'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-4119258490309515894</id><published>2008-12-01T22:25:00.004-06:00</published><updated>2008-12-02T22:15:39.113-06:00</updated><title type='text'>AngunaDS v 1.0</title><content type='html'>Ok, I'm proud to announce &lt;a href="http://www.tolberts.net/anguna/download/angunaDS_1.01.zip"&gt;AngunaDS version 1.01&lt;/a&gt;.  (edit:  because I updated to a 1.01 version, I'm changing this link for now to point to the updated version)&lt;br /&gt;&lt;br /&gt;Thanks go out to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Artwork:&lt;/span&gt;&lt;br /&gt;   &lt;a style="font-style: italic;" href="http://spriteattack.cator.de/"&gt;Chris Hildenbrand (Daydream) &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Music:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Jessie Tracer (Electric Keet),&lt;/span&gt;&lt;br /&gt;   &lt;a style="font-style: italic;" href="http://fred.dsimprove.be/index2.php"&gt;Fred Scalliet &lt;/a&gt;&lt;span style="font-style: italic;"&gt;(Magic Fred /TFL-TDV)    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Audio Engine:&lt;/span&gt;&lt;br /&gt;   &lt;a style="font-style: italic;" href="http://www.teleion.it/users/cgq/nds/libxm7/"&gt;LibXM7 &lt;/a&gt;&lt;span style="font-style: italic;"&gt;by Sverx (version 0.59 beta)       &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DS Hardware for testing donated by:&lt;/span&gt;&lt;br /&gt;   &lt;a style="font-style: italic;" href="http://www.electrobee.com/"&gt;Electrobee&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Tim Dudek&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Also thanks to:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;a style="font-style: italic;" href="http://www.tekepon.net/fsm"&gt;Refmap project&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Additional art&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;a style="font-style: italic;" href="http://www.coronac.com/"&gt;Jasper Vijn (Cearn) &lt;/a&gt;       &lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Usenti, Tonc,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Code samples, and general awesomeness&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    And all you testers:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    12th&amp;amp;Saturn,Chris Lomaka, Mukunda Johnson, Sverx, Tim Dudek&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Jong Lee, Dennis Tseng, Irashtar,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Eric Chiz, Max Neweklowsky, Stevan Baird, Eric Wells,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Alphanoob, another world, Jeremy Gunkel, John Seabaugh, Spiridow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, there were a few features/fixes that I ended up cutting at the end:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can't use the touchscreen to navigate subscreen menus&lt;/li&gt;&lt;li&gt;Sleep mode when closing the lid only partially turns things off, and thus still drains the battery faster than it should&lt;/li&gt;&lt;li&gt;The main theme song (Hurtless by Magic Fred) is using a few XM effects that LibXM7 doesn't yet support.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I didn't add a cool stairs animation like I would have liked&lt;/li&gt;&lt;/ul&gt;Anyway, as there are most likely still some bugs floating through it, please email me (nathantolbert at google's mail service) if you find any problems.&lt;br /&gt;&lt;br /&gt;Enjoy, and thanks for following along!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-4119258490309515894?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/4119258490309515894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=4119258490309515894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4119258490309515894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4119258490309515894'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/12/angunads-v-10.html' title='AngunaDS v 1.0'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-129210383480660898</id><published>2008-11-20T21:49:00.003-06:00</published><updated>2008-11-20T21:52:13.920-06:00</updated><title type='text'>Everything seems to be working</title><content type='html'>Ok, back to the content that I originally started to post before I realized that my audio wasn't working on hardware.  Which is:  I think I'm pretty much done! (again...didn't I say that before?)&lt;br /&gt;&lt;br /&gt;Turns out (for those of you interested in the details) that something somewhere was sending some dummy messages over the IPC FIFO (the mechanism by which the arm9 and arm7 processor communicate).  Because the only messages that I send over it were instructions to play songs, I assumed any messages received were instructions to play songs, and it was trying to play a nonexistent song.  Better sanity checking on the commands coming through IPC fixed that.&lt;br /&gt;&lt;br /&gt;So now I've made a test build.  I'll sanity check it over the next day or two, then send it out to anyone interested in helping test.  Then call this thing done!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-129210383480660898?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/129210383480660898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=129210383480660898' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/129210383480660898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/129210383480660898'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/11/everything-seems-to-be-working.html' title='Everything seems to be working'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-6001284479408642265</id><published>2008-11-20T16:00:00.005-06:00</published><updated>2008-11-20T16:39:05.775-06:00</updated><title type='text'>Still working on audio</title><content type='html'>Well, I finally gave up (for now, at least) waiting on eKid's audio library, and instead used a new library (&lt;a href="http://www.teleion.it/users/cgq/nds/libxm7/"&gt;LIBXM7&lt;/a&gt;) that sverx from the &lt;a href="http://forum.gbadev.org/"&gt;gbadev forums &lt;/a&gt;recently released.  And it works perfectly -- well, on the emulator.  I thought it worked right on hardware, but turns out I was using the wrong build.  So there's more work to do -- either waiting on eKid, or getting this LIBXM7 to work right on hardware....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-6001284479408642265?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/6001284479408642265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=6001284479408642265' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6001284479408642265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6001284479408642265'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/11/rc1.html' title='Still working on audio'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-2819923456705125373</id><published>2008-11-13T21:31:00.002-06:00</published><updated>2008-11-13T21:34:09.720-06:00</updated><title type='text'>Title screen graphics</title><content type='html'>I promised a screenshot of the amazing new title screen that Chris made. Of course, the screenshot doesn't capture the alpha-blend fade or anything, but it still looks cool:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IcbJcQlnj8Y/SRzxeCddtVI/AAAAAAAAABU/4yxccf7FL0M/s1600-h/Screenshot-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 207px; height: 320px;" src="http://4.bp.blogspot.com/_IcbJcQlnj8Y/SRzxeCddtVI/AAAAAAAAABU/4yxccf7FL0M/s320/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5268351162475459922" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-2819923456705125373?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/2819923456705125373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=2819923456705125373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2819923456705125373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2819923456705125373'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/11/title-screen-graphics.html' title='Title screen graphics'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IcbJcQlnj8Y/SRzxeCddtVI/AAAAAAAAABU/4yxccf7FL0M/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-2372517108016142858</id><published>2008-11-13T14:19:00.002-06:00</published><updated>2008-11-13T14:26:01.112-06:00</updated><title type='text'>Hurry up and Wait</title><content type='html'>I was on such a roll for awhile, but now everything has slowed down, unfortunately.  I added the power-saving features that I mentioned last time, and debugged a whole bunch of minor issues that testers had found for me.&lt;br /&gt;&lt;br /&gt;Chris (the artist) sent me an amazing new title screen, which I just finished adding, completely with a cool alpha-blend fade-in of the title. (Which I'd show a picture of, except I forgot to check in one of the source files into subversion, so I can't build it from this computer right now). &lt;br /&gt;&lt;br /&gt;Now, I'm just left with replacing the audio engine.  One of the people testing for me (ekid) told me he's finishing up a new audio engine that's supposed to be pretty good.  Based on one of his test builds, it actually properly plays all 3 of my songs from Anguna (where my current solution completely fails on one of them, and butchers a few notes from one of the others).  Hopefully he'll finish that soon, and I can pull it in easily. &lt;br /&gt;&lt;br /&gt;So I'm still advancing, slowly.  But doing a bit of waiting at this point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-2372517108016142858?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/2372517108016142858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=2372517108016142858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2372517108016142858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2372517108016142858'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/11/hurry-up-and-wait.html' title='Hurry up and Wait'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-6020772228121352815</id><published>2008-10-22T20:38:00.003-05:00</published><updated>2008-10-22T20:44:29.930-05:00</updated><title type='text'>Still here</title><content type='html'>I've been quiet for the past couple weeks.  I'm still here, I promise, and still working on Anguna.&lt;br /&gt;&lt;br /&gt;I found a few volunteers, who have been incredible in finding lots of little (and some not so little) bugs for me to fix.  I've gotten through most of them, but there's still a couple more to go before I call the thing "done."  They also brought it to my attention that to play nicely, I should support going to low power mode when the DS lid is closed.  I guess that's a pretty standard thing to do (I don't know, about the only thing I use my DS for is developing Anguna, and playing occasional homebrew games for 5 minutes at a time (you can probably guess what else I'm doing during those 5 minutes)), but it doesn't automatically happen...you have to program it in:  detect the lid closing, turn off the video, put the ARM9 processor in lower power mode, do the same for the ARM7, set up interrupts so the processors come back on when the lid opens, etc.  Bleh.&lt;br /&gt;&lt;br /&gt;Also, during testing, I've found that mikmod just isn't reliable enough....I've been getting all sorts of glitches in sound.  So I need to replace that with something else.  So the hunt is on to find a better XM player. &lt;br /&gt;&lt;br /&gt;Ok, that's all.  Just wanted to keep the world (both of you) posted, and aware that I'm still working on this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-6020772228121352815?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/6020772228121352815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=6020772228121352815' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6020772228121352815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/6020772228121352815'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/10/still-here.html' title='Still here'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-7452296246313927601</id><published>2008-10-07T22:47:00.002-05:00</published><updated>2008-10-07T23:02:21.318-05:00</updated><title type='text'>Main development finished?</title><content type='html'>Wow, I've gotten here faster than I thought.&lt;br /&gt;&lt;br /&gt;Today I managed to knock out a bunch of little stuff:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;cleaning up warnings&lt;/li&gt;&lt;li&gt;fixing the enemy database text entries&lt;/li&gt;&lt;li&gt;cleaning up game over screens and some transitional screens&lt;/li&gt;&lt;li&gt;further testing/cleanup of saving and loading&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Which really means that I'm pretty much done! &lt;br /&gt;&lt;br /&gt;Although I must tell the story of when I was at this point on the GBA version of Anguna, I told my wife Sara that I was "done with the development" after 3 years of working on it.  But when I spent the next month testing, fixing random bugs, and then fixing bugs that other people in internet land found, she started laughing at my concept of "done."  So, with that being said, stuff that's left:&lt;br /&gt;&lt;br /&gt;1.  Update the credits.  I'm not using Kusma's awesome Pimpmobile audio player anymore (since there's no DS version), but switched to LibMikMod (which, despite the fact that I'm incredibly happy that it exists, I'm not as impressed with).  I also want to mention Electrobee and Tim Dudek in there, for donating hardware stuff to make this thing happen.  And I ended up pulling out 1 one my 3 songs that I used, as it didn't work with LibMikMod, so I guess I need to un-credit Magic Fred who composed it.  (Sorry Fred! (For those of you who might think I'm blowing off Fred's work, he didn't compose the song for Anguna, but made it freely available for people like me to use))  So if anyone wants to compose a cool intro song for Anguna, feel free!&lt;br /&gt;&lt;br /&gt;1.5  Decide if I want to try to actively search for a replacement intro song, or a composer for it.  Probably not, but I'll think about it.&lt;br /&gt;&lt;br /&gt;2.  Updating documentation/readme files, etc.  LibMikMod is LGPL, which is a pain, as I have to include all their licensing documentation, make object files available, etc. &lt;br /&gt;&lt;br /&gt;3.  Chris (the guy who did the graphics) has said that he might want to create some cool new eye-candy splash screen/cut scene type stuff.  If he does, I'll need to figure out how and where to add that in.&lt;br /&gt;&lt;br /&gt;4.  Test.  And test. And bug fix.  And test some more.  And get other people to test for me.  At some point soon I'm going to try to recruit some people to playtest for me before I publicly release the thing, so if anyone is interested, please let me know.&lt;br /&gt;&lt;br /&gt;5.  Test some more.&lt;br /&gt;&lt;br /&gt;6.  Test.&lt;br /&gt;&lt;br /&gt;7.  Release AngunaDS, and bask in the glory of being done!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-7452296246313927601?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/7452296246313927601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=7452296246313927601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/7452296246313927601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/7452296246313927601'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/10/main-development-finished.html' title='Main development finished?'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-1957695029269868150</id><published>2008-10-06T22:24:00.003-05:00</published><updated>2008-10-06T22:59:39.593-05:00</updated><title type='text'>Saving game data</title><content type='html'>So I recently ventured into the world of saving progress on the DS.  And, like sound, it opened up a whole can of worms.  (To be fair, I knew this can of worms was coming, but I kept putting it off). &lt;br /&gt;&lt;br /&gt;So, the background, for all you people that don't do DS development: &lt;br /&gt;&lt;br /&gt;In the olden days, cartridge-based games used battery-backed ram to save data.  Which was still the case in certain GBA games.  But in some GBA games, and as far as I know, all commercial DS games, save data is stored using EEPROM.  The homebrew DS cards, though, from everything I've read, don't properly support EEPROM (at least accessing it via homebrew methods), but instead, we have a file system to work with, for reading and writing data.  But it's not quite as simple as that.&lt;br /&gt;&lt;br /&gt;All the homebrew cards are slightly different, but most of them adapt between a micro SD card and the DS.  BUT the underlying way to read/write the filesystem on the SD card differs between the different homebrew cards.  Enter some smart guy called Chishm and his awesome libfat/DLDI.  This guy wrote a file access library (libfat) and a fancy system of patching compiled games with drivers for the different cards.  So you write your game using libfat, and if somebody wants to play it on card XYZ, they run the patcher with the XYZ driver. &lt;br /&gt;&lt;br /&gt;There's all sorts of other crazy and cool ways of dealing with it all, like people have written other utilities that stuff a whole file system into data appended in your executable file, so the whole DS game and save data and whatnot can be shoved into one file.&lt;br /&gt;&lt;br /&gt;OK, enough of the 10-second crash course on libfat and DLDI.  So I read up on this stuff, got libfat set up, and it all seems to be working.  I toyed with using EFS, which does an appended file system like I mentioned above, but eventually decided against it, as I want it to be easy for people to update the main game file (like when I release bug fixes) without losing their save data.  The other annoyance is that using basic libfat stuff, it crashes my emulator.  It works fine on the actual hardware, so it's not a huge deal, and the emulators always have the ability to save state, so they don't really need a save file, but I need to go in and make sure it at least doesn't crash.&lt;br /&gt;&lt;br /&gt;Other than that, and a couple minor bugs (I'm not rebuilding the initial level screen correctly after loading a saved game), saving and loading is working (at least on the M3 that I'm testing on...Electrobee also gave me an Edge card, so I need to make sure the saving/loading works correctly on it as well).&lt;br /&gt;&lt;br /&gt;Once I get this done, the only things left are small cosmetic changes:  getting the end-of-game splash screens and credits looking all nice, making sure all the transitions between splash screens, game over screens, menus, etc are all good, finding better intro music, fixing the flavor text on enemy portraits, and testing testing testing.   Oh, and I've noticed I have a bunch of warnings in my code about improper pointer conversions.  I need to go through and fix all those...I'm one of those people that doesn't want to see a single warning in my code when I compile....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-1957695029269868150?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/1957695029269868150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=1957695029269868150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/1957695029269868150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/1957695029269868150'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/10/saving-game-data.html' title='Saving game data'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-4414270822260498534</id><published>2008-09-30T22:38:00.002-05:00</published><updated>2008-09-30T22:43:42.692-05:00</updated><title type='text'>Better memory copy/set</title><content type='html'>Once again, Cearn is my hero.  The fast assembly routines he sent for doing memory copies and sets are wonderful -- they just worked, and are nice and fast.  I don't have to deal with the oddities that come with DMA, and it's a whole lot faster than the simple memory copies implemented in C.   This means that transitions in general are a lot smoother -- between splash screens, between game rooms, etc.   Good stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-4414270822260498534?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/4414270822260498534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=4414270822260498534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4414270822260498534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/4414270822260498534'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/better-memory-copyset.html' title='Better memory copy/set'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-2110086686883121210</id><published>2008-09-29T22:53:00.004-05:00</published><updated>2008-09-29T23:11:20.510-05:00</updated><title type='text'>Getting stuff done</title><content type='html'>I finally got inspired to buckle down and get more done tonight.  Partially because &lt;a href="http://spriteattack.cator.de/"&gt;Chris&lt;/a&gt; (The amazing guy who did the graphics for Anguna) asked me today how it was going, which always reminds me to get to work. It sounds like he's interested in possibly doing  some new fancier splash/cut scenes and enemy artwork for the DS port, which would be cool.&lt;br /&gt;&lt;br /&gt;Sound effects are now completely working.  The last little thing I had to do was deal with the fact that my effects needed to be played at different frequencies...on the GBA, my audio player handled that for me somehow, but here I needed to tell it what frequency to play at.&lt;br /&gt;&lt;br /&gt;I unfortunately spent an hour or so fighting with MikMod about how it loads song data into memory.  I really need to dig into the source of that library and see what it is doing, because it appears that I can overwrite my song data by loading background tiles into vram.   That certainly shouldn't be right, but through trial and error, I've determined that if I load tiles at a certain point in my code, the song is corrupted and won't play.  If I don't load the tiles, the song is fine.  I've got a workaround in place now, but it doesn't make me happy.  And I left my microSD writer at work, so I can't test my workaround on the DS until tomorrow.&lt;br /&gt;&lt;br /&gt;The other bummer is that MikMod refuses to play the song that I previously used as intro music.  (&lt;a href="http://fred.dsimprove.be/index2.php?menu=122"&gt;Hurtless by Magic Fred&lt;/a&gt;)  I'm not sure how much time to spend fiddling with the song file to see if I can get it to play, or ditch the song and just use the 2 other pieces, or if I should try to find a different song to use for opening music.  I'll have to think about that.&lt;br /&gt;&lt;br /&gt;I also fixed my minimap bug, which turned out to be not one, but two different bugs.  One was that I wasn't loading enough graphical data for the overworld minimap.  The other was that somewhere along the line of refactoring things, I had a function that infinitely recursively called itself (when it was supposed to be calling something else).  Silly me.&lt;br /&gt;&lt;br /&gt;I finished up the evening by fiddling with the opening splash screens....putting my "Bite the chili" logo on the top screen while Chris's SpriteAttack logo is on the bottom screen, and getting everything cleaned up to work happily on the DS.&lt;br /&gt;&lt;br /&gt;The other fun news is that Cearn sent me some assembly routines for doing fast fill/copies.  I mentioned before that I needed to switch to assembly, as DMA was driving me crazy, so this should do the trick.  I'll see if I can get those working and integrated next....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-2110086686883121210?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/2110086686883121210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=2110086686883121210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2110086686883121210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2110086686883121210'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/getting-stuff-done.html' title='Getting stuff done'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-2062729176770094828</id><published>2008-09-23T22:06:00.005-05:00</published><updated>2008-09-23T22:10:48.952-05:00</updated><title type='text'>Sound (mostly) working</title><content type='html'>Well, I ditched the bin2o rules that came with the devkitPro toolchain, and used a separate bin2o program, and now I can properly access my binary audio data.  I'm sure that I was doing something slightly wrong (data alignment?  wrong section?  wrong arm/thumb compilation?) as it works for other people, and for the examples that I've looked at.&lt;br /&gt;&lt;br /&gt;But what I have now works, and that's good enough for me.  Sound is almost finished.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-2062729176770094828?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/2062729176770094828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=2062729176770094828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2062729176770094828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2062729176770094828'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/sound-mostly-working.html' title='Sound (mostly) working'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-8926340080581436457</id><published>2008-09-22T22:52:00.004-05:00</published><updated>2008-09-23T16:06:25.421-05:00</updated><title type='text'>Sound and multiple processors</title><content type='html'>I've been quiet on here...partially because I haven't had a lot of time for Anguna the past week, and partially because I've started on sound, which meant I had to do a bit of reading before proceeding.&lt;br /&gt;&lt;br /&gt;Turns out, there's all sorts of funky stuff you learn when you get into sound on the DS.  For example, the DS has two processors:  an ARM7 and and ARM9.  The GBA had an ARM7, so the ARM7 is used when playing GBA games on the DS.  And the ARM9 is the "main" processor used by the DS for DS games.  But the fun part is that you can use both processors from your DS code.  But unlike fancy desktop computer programming, it's not as simple as forking or creating a new thread from your code.  You actually have to write it as two separate programs.  One runs on the ARM9, and one runs on the ARM7.  The DS has facilities for them to communicate with each other, so your two processes can talk to each other.  The other oddness is that certain hardware features can or can't be accessed from the different processors.  The full range of audio hardware can (as far as I can tell, which may be wrong) only be accessed from the ARM7.  The video stuff can only be accessed from the ARM9.  Weird.&lt;br /&gt;&lt;br /&gt;So far, I've been writing everything on the ARM9, because you can do most "normal" simple stuff from it.  But now that I'm diving into the audio stuff, I've had to use the ARM7 as well.&lt;br /&gt;&lt;br /&gt;The good news is that I've found an audio library (&lt;a href="http://code.google.com/p/tetattds/downloads/list"&gt;mikmod for ds&lt;/a&gt;) that will do a lot of the audio work for me.  So although I'm running on both processors now, I don't have to touch and learn a lot of the nitty-gritty of audio programming and inter-processor communication. &lt;br /&gt;&lt;br /&gt;So far, my music (which come from .xm files, which are a type of mod file (which is a file format for sequencing music out of audio samples)) is working quite well.  Sound effects are a slightly different story.  The code for &lt;span style="font-style: italic;"&gt;playing&lt;/span&gt; them seems to be fine, but I've been running into problems when I compile and link them in:  somehow the start and ending points for them got messed up, so when you try to play one effect, you might get another, or you might hear all 10 of them played back to back.  So I'll need to figure out what's going on there.  Hopefully the wonderful community at the &lt;a href="http://forum.gbadev.org"&gt;gbadev.org forums&lt;/a&gt; can help out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-8926340080581436457?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/8926340080581436457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=8926340080581436457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/8926340080581436457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/8926340080581436457'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/sound-and-multiple-processors.html' title='Sound and multiple processors'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-2921405391845238107</id><published>2008-09-14T22:51:00.004-05:00</published><updated>2008-09-14T23:02:05.616-05:00</updated><title type='text'>Shopkeer and healer</title><content type='html'>I managed to get the shopkeeper and healer UIs done tonight.  Those should have been really easy, as nothing much has changed from before, BUT I just tonight remembered that they shared a lot of basic UI code with all the subscreen framework....and I changed the subscreen framework to use the bottom screen (forgetting that this stuff would still be on the top screen).&lt;br /&gt;&lt;br /&gt;So basically, now, parts of the framework had to work on both screens.  So I ended up refactoring things to work with both screens.  It was a quick-and-dirty job, so not quite as elegant or clean as I'd really like, but it works.  Really, I keep running into the question of whether to proliferate a top-or-bottom-screen parameter through half of my functions, or whether to make two differently named functions that do the same thing, only for each screen.  The problem is that there are places where it seems to make sense to do it the first way, and other places where it makes sense the second way.  And now I'm mixing and matching, which I'm not really happy about. &lt;br /&gt;&lt;br /&gt;On another note, I found a nasty bug with my minimap where some rooms won't draw correctly, and the game will lock up if you try to pause view the minimap details for those rooms.  Nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-2921405391845238107?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/2921405391845238107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=2921405391845238107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2921405391845238107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/2921405391845238107'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/shopkeer-and-healer.html' title='Shopkeer and healer'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-9177736886331575725</id><published>2008-09-10T22:21:00.002-05:00</published><updated>2008-09-10T22:27:02.389-05:00</updated><title type='text'>Darkness and cave backgrounds done</title><content type='html'>Last night I used my downtime to play video games instead of working on Anguna.  But tonight was back to work.  I tackled some of the easier items this time.&lt;br /&gt;&lt;br /&gt;Darkness/lanterns was easy:  like blending, I just had to update register names from my GBA version.  I also was using macros to do all the bitwise operations to write the registers, so I changed them into first class functions, which makes me feel less dirty.  It worked the first try.&lt;br /&gt;&lt;br /&gt;The black space in the backgrounds in caves had decided to be a rather ugly teal color, so that was the other thing that needed fixed.   Another easy one...I had two different functions for applying the correct palette to backgrounds:  one for dungeons, one for overworlds and caves.  And I had only updated the dungeon one.  Just needed to make a tiny update to the overworld one, and it was all good.&lt;br /&gt;&lt;br /&gt;If only all changes could be this simple.  (Actually, it's late and I'm tired, so I haven't tested these on hardware, but after that last mess I got into trusting my emulators, I won't guarantee that this was simple until I know it works on the hardware).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-9177736886331575725?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/9177736886331575725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=9177736886331575725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/9177736886331575725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/9177736886331575725'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/darkness-and-cave-backgrounds-done.html' title='Darkness and cave backgrounds done'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6997440551610060560.post-8941223778967980297</id><published>2008-09-08T22:24:00.000-05:00</published><updated>2008-09-08T22:44:38.543-05:00</updated><title type='text'>#5 Fixed (or Hot Squash Burn)</title><content type='html'>I finally, after much anger, figured out the problem.  The anger only resulted slightly from the actual problem.  It (the anger) started when I got home, and suddenly my laptop (after locking up and being rebooted at least once) would no longer mount my card reader.  So I took it to the other windows laptop, which would no longer read it either.  So figured the card got corrupted, and tried to reformat it.  But that failed also.  Then my DS suddenly decided not to turn on anymore.  About that time, Sara asked me to come blend the hot boiled squash she was cooking for baby food.  Somehow I managed to not have the lid on right, and splattered boiling squash all over everything, including me.  So let me just say Nathan wasn't the happiest man around.&lt;br /&gt;&lt;br /&gt;Well, I finally dug out another card reader, which is working for now (I assume the other one just gave up the ghost?).   Sara "fixed" my DS by waving her hands over it and saying "avada kedavra", so it works again (I still don't know what was up with that).  And we even got the hot boiling squash off of everything, including me.  And I only suffered mild first degree burns from the whole ordeal.&lt;br /&gt;&lt;br /&gt;And now for the actual Anguna-related talk: In retrospect, I'm amazed at how much abuse in the form of wrong code you can throw at the GBA.  The problem was a small section of code where I assume that each "map object" (the name I give to scenery sprites) has an array of two pointers to sprite info, and I write changes to both of them.  Well, sometimes (like in the case of the small bushes) there's only 1 sprite, not two!  Since C doesn't really protect you from your own stupidity, I was reading off the end of the array to some garbage pointer, and writing to a random location in memory.  And the game boy was happy with that!  (So were all the DS emulators I used).  It makes me shudder to think that these few really nasty bugs made it into "production" code of the GBA Anguna, and I never noticed them because it somehow just worked.&lt;br /&gt;&lt;br /&gt;Well, now, other than a small glitch in the background tile initialization for a room, (which is probably caused by another stupid instance of memory/pointer abuse), the actual on-hardware version works just like the emulated version.  Which means I can go back to getting stuff done off the todo list.  But first I'm going to bed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6997440551610060560-8941223778967980297?l=anguna-dev.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anguna-dev.blogspot.com/feeds/8941223778967980297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6997440551610060560&amp;postID=8941223778967980297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/8941223778967980297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6997440551610060560/posts/default/8941223778967980297'/><link rel='alternate' type='text/html' href='http://anguna-dev.blogspot.com/2008/09/5-fixed-or-hot-squash-burn.html' title='#5 Fixed (or Hot Squash Burn)'/><author><name>Nathan</name><uri>http://www.blogger.com/profile/14248157226095069791</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11804585558026217539'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>