Sunday, September 12, 2010

Sunday, August 22, 2010

Thing A Day update 1

So today I noticed that yellow.wood.goblin finally updated the Wood R4 source code on the woodrpg GoogleCode page, and as far as I can tell, this revision is fully up-to-date with the latest release (v1.12), so I've been compiling for the last 2 hours, hoping that my patch will build fine with the latest source.

I've had a few bumps along the way. The changelog for v1.11 indicated that the update included fixes for building on the latest toolchain, so I finally went ahead and updated my devkitARM and libnds to the latest versions and tried building the latest source. About 20 seconds in I had my first fatal build error. So the Wood firmwares are still not playing nice with the latest toolchain. I tried just downgrading libnds, hoping that the changelog wasn't mistaken and that at least I could build with the latest devkitARM, even if my libraries weren't entirely up-to-date. 20 minutes into the build and it seems to be going well, no problems yet.

...and then just as I finished typing that I ran into an error. Strangely, it's a permission denied error, which indicates the problem is one of those really weird ones that just decides to rear its ugly head for no apparent reason. Darn. Well, I need to go to bed, since I have work tomorrow.

Update: After reverting my toolchain to the older version, it built fine, and I'm up and running on Wood R4 v1.12 w/my 3in1+ patch :)

Also, I created a really awesome Super Metroid skin for Wood R4, since I couldn't find a single Metroid skin for the Acekard/Wood firmware.



My Super Metroid Ak2/Wood skin

Wednesday, August 18, 2010

Thing A Day

I realized recently that I have a ton of random projects started that I tend to work on for awhile and then abandon or I get too busy and forget about them.  I also spend a lot of time online just browsing through internet forums (mostly PortableApps and GBATemp).  So rather than continuing to waste so much time just reading random postings online, I've decided to compile a list of my current projects and then do my best to commit to spend time doing at least one thing on that list every day.  In homage to Jonathan Coulton's Thing A Week project, I've decided to name my project Thing A Day.  Unlike Thing A Week, the goal here isn't to force myself to complete a project in a specified timeframe, only to set aside time that I would otherwise most likely waste and instead actually accomplish something.

Here's the current list (in no particular order).

Start a blog (check)
Create a cool banner image for my new blog
Update my U3 applications
Recode my U3 appstop from scratch
Figure out the specs for the Rock Band 2 pan files
Figure out the stupid endianness of the Rock Band 2 milo files
Generate lipsync animations for all of the Guitar Hero games from World Tour and up for RawkSD
Create a venue track for Inimitable's Crystal Flash chart
Rock Band Worship Team charts
Finish (or at least continue) my Super Metroid sprite sheet
Finish my 3in1+ patch for the Wood R4 firmware
Create Ocarina codes to remap buttons in Wii VC titles
Create a standalone VC launcher that will patch my VC titles with the remapped buttons
Modify an existing WAD packer (probably CustomizeMii) to enable AHBPROT

Start a blog:
Well, that one's pretty self-explanatory.  Also, it is obviously completed.

Create a cool banner image for my new blog:
I won't give away any details other than it involves the digital rain effect from The Matrix, and that it's gonna be sweet.

Update My U3 applications:
I have a software project hosted on SourceForge.net where I take applications and build launchers for them so they can be run from SanDisk's now-dead U3 platform, which allows you to install the program on to your U3-enabled flash drive and carry it with you to any PC.  Unfortunately, most of my apps are really out-of-date, and I need to update them.

Recode my U3 appstop from scratch:
One part of the U3 program is that you have to be able to close the program automatically if the user ejects the flash drive.  I wrote an app that handles this, but now that I actually know the difference between good code and bad code, it's become painfully obvious just how terrible that app really is.  Also, I've lost the source code to that particular version of the app, technically leaving me in violation of my own license for it (GPLv2).  So it would seem it is time to start from scratch and actually do a decent job this time around.

Figure out the specs for the Rock Band 2 pan files:
The best I can tell, the pan files handle stereo pan and audio leveling for the audio files in Rock Band.  However, the RawkSD devs don't currently utilize the pan files because they don't care to figure out how they work, and instead it seems they handle volume control by adjusting the gain on each channel during transcoding.  It would be way better to actually be able to generate these pan files instead of changing the gain during transcoding, because then you can change the pan values without having to further degrade the audio.

Figure out the stupid endianness of the Rock Band 2 milo files:
This one has bugged me for awhile.  I want to be able to generate lipsync animations for my Rock Band custom songs.  The only way to do this is using the official song compiler from Harmonix called Magma.  Magma generates files targeted for the XBox 360, and I need them for the Wii.  They are almost identical files, except that a section in the middle of the file needs to be endian-swapped.  Unfortunately, I can't make heads or tails of the file header to figure out where that section starts and ends (although I do understand the structure of the section itself, thankfully).  So I want to be able to convert the lipsync animation file from the XBox format to the Wii format.  Yes, AerialX of the RawkSD team has already written an app to do that, but I want to integrate it into a slightly more complicated app instead of having to run separate command-line apps to do each of the separate steps.

Generate lipsync animations for all of the Guitar Hero games from World Tour and up for RawkSD:
The purpose of the afformentioned "slightly more complicated app" that involves converting lipsync animation files will be to generate those animation files for the Guitar Hero games, which can be imported into Rock Band 2 via RawkSD.  This can be done for all of the Guitar Hero games after and including World Tour (GH4), because they have vocal charts and separate audio stems for the vocals.  However, generating the animations for each of the songs is going to be a very involved process, so I would like to make the process more automated by way of the milo converter from the previous project on the list.

Create a venue track for Inimitable's Crystal Flash chart:
Inimitable, who has charted many a Rock Band custom, has charted a Super Metroid mega-mix called Crystal Flash.  Unfortunately, it is too long to pass through Magma, so he was unable to generate default animations for it, so it's really boring because as you play you just watch your drummer sitting there and nobody's playing their instruments and there are no lighting effects or camera movements.  Just boring.  I am in the process of charting those animations and camera and lighting events in order to make this epic song just that much better.

Rock Band Worship Team charts:
At the suggestion of my pastor at OIT, Billy Redd, I am currently working on a project to chart 5-6 worship songs for Rock Band, so we can do a week of Rock Band worship for the Sunday morning Chi Alpha service.  I am currently working on "I Am Free" by Newsboys, which I have finished charting on expert difficulty (although the drum chart needs some serious cleanup), and "In the Secret (I Want To Know You)" by SONICFLOOd.  If I can actually finish the charts, it should be a blast.

Finish (or at least continue) my Super Metroid sprite sheet:
Last summer I started ripping a bunch of sprites from Super Metroid in order to convert them to Windows cursor files.  I have a much more complete set of Samus sprites than any video game sprite site I've ever found.  It's fun, but tedious work.  I'd like to fill out the sprite sheet some more, perhaps with some enemies as well instead of just Samus.

Finish my 3in1+ patch for the Wood R4 firmware:
The R4 flashcart was basically the first all-in-one solution for Nintendo DS backup loading.  Unfortunately, they got sued by Nintendo and got their warehouses raided.  The R4 team ceased to manufacture the carts and stopped updating their firmware and basically the R4 just became obsolete in the light of newer carts like the Acekard 2.1/2i.  However, along came a developer by the username yellow.wood.goblin, who was working on a custom firmware for the Acekard RPG.  He decided that there was no reason his custom firmware couldn't also be made to run on the R4.  And so, Wood R4 was born, giving new life to the old cart.  However, yellow.wood.goblin only added support for the one GBA expansion kit he owned, an original v1 EZ-Flash 3in1.  The 3in1 is arguably the best GBA expansion out there, but there have been 2 updates to the hardware since the v1, but neither the v2 nor the v3 are supported on Wood R4.  Turns out, the 3in1 that Margaret owns is the v3.  So she was out of luck and unable to play her GBA games until I came across a post on the EZ-Flash forums regarding updated source code that was supposed to enable support for the new expansions (the EZ-Flash team released these updates along with the hardware so developers could support the new hardware).  The source code didn't seem too complicated, so I grabbed the Wood R4 source and the EZ-Flash team update and set out to add 3in1+ (v3) support to Wood R4.  I was surprised how easy the patch really was.  At this point, my patch is about 85% working, I'm just trying to iron out one last issue involving the Nintendo DS web browser ROM.  Once I get the patch working, yellow.wood.goblin has indicated that he intends to merge my patch into the official release.  This is good news not only for the fact that it's cool to have my work recognized, but also because if he is interested in my work he may be able to assist me with the remaining bug.  Also, Normatt has offered some advice, so between the two of them I'm in good hands.

Create Ocarina codes to remap buttons in Wii VC titles:
Margaret recently bought me this awesome game controller adapter that has ports for the NES/SNES/N64/Sega Genesis controllers and on the other end it plugs into a GameCube controller port.  This means I can use original controllers on my Wii to play games on their respective emulators using the original controllers.  Unfortunately, due to the design of the GameCube controller, some of the N64 buttons are not properly mapped (specifically the Z and L buttons), so I'm trying to figure out if it's possible to modify the button mapping to fix this issue.  I've seen button remapping ocarina codes before, but they seemed to be game-specific.  This one's going to take some serious work as well as making contact with someone who owns a USB Gecko and has experience generating codes.

Create a standalone VC launcher that will patch my VC titles with the remapped buttons:
If I can actually manage to get ahold of button remapping codes, I'm going to need a launcher that will load the game with the codes enabled.  For the time being there are loaders out there that will do that, but I'd like something a bit more transparent.  I am looking into converting my VC titles into hidden channels, then creating a loader that will take the VC title's place in the menu and seamlessly load the ocarina codes and then launch the hidden title... not sure if it's possible, but it's a cool idea.


Modify an existing WAD packer (probably CustomizeMii) to enable AHBPROT:
The latest version of the Homebrew Channel for Wii has done away with DVDX for hardware access to the DVD drive, and instead accesses the hardware directly using a method known as AHBPROT, which basically means setting a permissions flag which gives access to every single piece of hardware in the console all from the PPC side.  This functionality requires both the loader and the application itself to support it, and current WAD packers don't set this flag.  I would like to figure out how to get a WAD packer to set this flag, or else try setting it in a single WAD and using that WAD as a base and see if the flag stays set after repacking.  Either way, I would just really like to update all of my custom channels with AHBPROT.


Well, that's all for now.  At least all that I can remember.  So you can see, I do manage to keep myself busy.