Fifth generation animated sprites demonstrated in Pokemon FireRed, public release to follow
The fifth generation of Pokemon was always the most impressive in my mind. Blending 3D models with 2D sprites, it in many ways embodies the idea behind Square Enix's HD-2D concept; though it admittedly needs a little help from emulators to look its best. Beyond the overworld though, battles had never felt so alive thanks to each of the games' 649 Pokemon now having a looping animation when out on the field. For the first time, we now get an idea of what this might have looked like on the GBA.
Posted by Reddit user Zyphrost, we get to see an early fight in Pokemon FireRed with a Geodude and Sandshrew being a little more active than usual on-screen. According to their post, every Pokemon available in the third generation has had their animated sprite ported, including their shiny variations. Though back sprites are currently static there are plans to experiment with them, with one notable concern being the sheer amount of space they would take up. Paired with the limited screen space available for back sprites prior to Gen 5, it's easy to see why this might not be trivial.
Zyphrost provides some insight into what went into these sprites in a comment:
Zyphrost said:I think the implementation pipeline should be relatively similar for the backsprites, especially now that I've been able to find out what a lot of the errors were when doing it for the front sprites. I think that the cropping is going to require a lot of manual passes, though. In the case of the front sprites, I didn't crop or downsize anything, and just ported the 96x96 sprites directly. In the case of the backsprites, it might be a little weirder, but still seems reasonable.
The method was actually something I hadn't seen online, which was challenging to figure out because my first pass at implementation was actually running a script to downsize the the 96x96 sprites to 64x64. They looked awful, but they did technically work. But it wasn't worth it aesthetically, and I knew that it would be functionally impossible for me to actually go ahead and manually downsize every single frame of every single Pokemon to 64x64, so I decided to take a swing with the full-size sprites.
Basically, the limitation is that the GBA can only display up to 64x64 pixels as a single object. The front sprites are larger, so I spliced them up into multiple pieces and then fit them together like a jigsaw puzzle. The other limitation is that the Gen V sprites are multiple frames (Pidgey has 22 frames of animation, for example). Since most of the canvas is transparent, I had to optimize for space by storing only the non-empty 8x8 tiles, mapping them to where they are in the grid. So, a typical canvas might have a hundred or so tile positions, but you usually only need 20-40 of them at a time.
This animation data is then packed into different files, one per mon, with a header that contains information for canvas size, frame count, anchoring coordinates, etc., as well as the compressed versions of the frame data. So the game's engine can decompress one frame at a time, converts it to the GBA tile format, and then uploads to VRAM. Every frame repeats this.
The innovation (I think) is the subsprite layout system. This is basically what defines how you're supposed to cut up the 96x96 canvases into smaller pieces with specific tile offsets so that when you stitch them together, it still looks like it's just one sprite. This is also roughly what I did for the HGSS backsprites (barring the animation data) which are 80x80, so those do look noticeably larger than the front sprites.
But yeah. There was a ton of stuff that went wrong in the implementation. For the longest time, there were just these random ass vertical stripes running through all of the sprite data (somehow even leaking into other sprites in the game, not just the battle sprites), and nothing seemed to fix them. But I managed to get that sorted eventually.
Those interested in seeing the sprites in action can find the video and original post linked below. A public release is planned, so you might see these sprites worked into future ROM hacks.















