Adventures in Programming: GBA Homebrew

October 19th, 2008

I was clearing out some old files from my old laptop earlier today and discovered some of my old game programming work that I did for fun during college.  The most ambitious of the projects was a console based roguelike game that was one of my finer examples of organized code, but my personal favorite projects where some of the hackish Game Boy Advance homebrew programs that I worked on.

GBA Pong

gba homebrew

My first project was mainly just to wrap my head around the concept of developing for a device without any sort of sdk and only a technical spec showing what memory addresses related to different functions.  It took me a very long time to be comfortable enough to get into GBA development, but thankfully I was able to learn a lot of the basic environment set up  needed from this tutorial.

The gameplay is simple but I was pretty happy with how this turned out overall.  First to five points wins and pressing B will restart the game when it is over.

Project Good Game

Project Good GameProject Good Game was my first attempt to create something a little bit more complex.  While it never made it far enough to have a visual pass, the technology that controlled the level loading was by far my greatest technical achievement on the system.

While there are a few ways to manage memory on the GBA, the one that provided the greatest number of layers only gave the developer slightly more than one screens worth of memory per layer.  To get around this, PGG dynamically loads chunks of the level into the memory as needed.  This means the only real limit to the size of the map is the storage size of the cartridge.

Ok so It is not that high-tech, but the method has been used in professionally released games for the GBA so I know the underlying idea is sound.  The game is far from finished and is more of a basic tech demo than anything else, but I still think that it is a cool thing to show off to people who are interested in game development.

Affine Sprites Demo

AFFINE spritesAs I worked on Project Good Game, I often created various testbeds to test new functionality that I wanted to add to the game.  Most of my information of advanced hardware knowledge was coming from this site.

This demo shows off some of the built in hardware sprite functionality including: scaling, rotation, movement, and mosaic blurring.  Nothing too special about it, but I always thought it was interesting hands-on way to view some of the limitations that developers have worked around when creating larger sprite characters on the system.

Download

I have compressed the above demos for download here:

GBA Demos

They should run fine either on an emulator or on the native hardware itself.  Enjoy!

Rant: The Ipod Touch Post 2.0

October 3rd, 2008

When iPhone 3G fever hit the web, I took notice and brushed the dust off of my old 8 gig touch.  The device had been reduced to nothing more than playing music in my car before I started listening talk radio in the morning to help wake me up on the way to work in the morning.  As time went on, I used the thing less and less but that was about to change!  I could make much better use of it via the appstore!

At the initial launch, many of the free apps that had caught my attention were associated with different web sites and services. Since most of the value of the 2.0 firmware for me came from these apps, The internet connectivity of the iPod Touch has suddenly became much more important.  That was only the start of the issues though.

Unlike the iPhone, the iPod touch has no speaker, no mic, no camera, and a full breadth of other missing features.  Instantly I felt cheated that while I struggled for a day to throw my $20 at apple to get the firmware I would also be unable to use the full line of apps being released.

Note to apple:  I can understand that you may not think the touch is making you money on a regular scedule so that is why you charge for firmware.   I never had buyers remorse for the product before 2.0 came out, but I sure do now.  Because of that I have not been spending money on the itunes music store like I used to as well.  I plan to get an iPhone when my contract is over and I expect a pretty large invoice in my inbox from apple the next day once I can fully enjoy the new functionality.

JSLife Featured on Ajaxian.com

October 3rd, 2008

A special thanks to the folks at ajaxian, a javascript and web 2.0 news site, for posting a blurb and a link to my JSLife project.  Check out the story below:

Life:  The game in Canvas

Adventures in Programming: JSLife

July 14th, 2008

One of my primary passions of the last year has been learning the ins-and-outs of the most misunderstood programming language, JavaScript.  I recently was looking at some of the changes in the HTML 5 spec and I decided to dive head first into learning canvas since it is being added to the spec.  For those that have not had experience with canvas, it provides developers with a much needed client side programmable way of creating graphics in the browser.  While canvas isn’t exactly new, I have always avoided learning in in the past due to the lack of cross browser support in IE.  Even without official IE support, there is now a great work around thanks to ExplorerCanvas so I felt like the timing to learn it was right.

My first thoughts on projects were all game related, but I wanted something that I could easily finish in my down time over the weekend.  So I settled on coding up a version of Conway’s Game of Life, since I have been interested in that for a long time.  You can check out the project here:

JSLife

I think it turned out very well overall.  I had to axe IE support because the VML that excanvas/IE uses does not scale as well as canvas and only updated a step every five seconds or so.  I am planning on adding more features and writing a more in depth postmortem as another entry down the road.

Hello World!

June 13th, 2008

After a long lapse in my obsession of documenting my life, I have at long last decided to return to blogging as means in organizing my thoughts and ideas. This decision was largely inspired by the return of my friend’s blog and the desire to have a place to post my musings about technologies.

Most of the blogs that I have started in the past have tended to fade before I manage to get them off the ground. This is largely due to the fact that I normally feel the need to write my own proprietary software solution whenever I feel the itch to write. This time around I have opted to go with WordPress just so I can focus on content over coding… that and godaddy’s troublesome modrewrite support didn’t play too nicely with my experimental YAML blog using Code Igniter (Props to Cam on introducing me to those as well). I guess I will just keep playing with that one locally for now.