Zane Avernathy Posted October 26, 2017 Share Posted October 26, 2017 This is a crosspost from FEU. While working on my FE5 project I had figured it'd be nice to rip the map sprites, because I can't find a unified sheet of them anywhere. Although the data is ripped using the class data table, there might be errors. If anything's odd about these, let me know. FE5 Map Sprites Here's an example: Spoiler Each class gets its own sheet. Some sheets have some strange things going on, such as: Some mage classes have incorrect sprites, probably due to the correct sprites being set in character data Some mage classes have other mages in their battle sprites The High Priest and Priest have some strange things going on There's that weird Baron class More stuff, probably Unused sprites and stuff may be added later, but any sprites that aren't referenced are not included yet. Quote Link to comment Share on other sites More sharing options...
xiaohong Posted December 11, 2017 Share Posted December 11, 2017 wow, it's awesome! I only like fe5 Quote Link to comment Share on other sites More sharing options...
Zane Avernathy Posted December 12, 2017 Author Share Posted December 12, 2017 Here's a writeup of how you'd go about extracting these yourself: Map sprites in FE5 are comprised of four pieces: An unknown moving sprite, a set of 3 idle sprites, a set of 16 moving sprites, and a variable number of combat sprites. I'll be going into detail for each of these. Each class within the game's class data has a byte for that class's default map sprite. The uppermost bit of this byte is a flag for whether the class uses mounted sprites. The unknown, moving, and combat sprites are selected by using this byte as an index for another table, but the idle sprites use this byte more directly. The formula to get this index from the default map sprite byte is: if default < 0x80: index = byte at 0x363AD+default else: index = byte at 0x363AD+((default&0x7F)+0x4B) If this index happens to be above 0x69, it is set to 1. To get the unknown sprite, the formula is: offset = 0x190000+(0x200*(index-1)) Each is a 32x32-pixel uncompressed 4bpp SNES image cut into four rows of four tiles each. Here's an example of how they're formatted within the ROM, scaled x4. In the ROM, the order of these rows is 1, 3, 2, 4, where row 1 is the top row. Each unknown sprite takes up 0x200 bytes. To get the idle sprites, the formula is: if default < 0x80: offset = 0x388000+(default*0x180) sprite is 16x16 pixels else: offset = 0x398000+((default&0x7F)*0x240) sprite is 16x24 pixels Both are 4bpp uncompressed SNES images. Here's an example of how the smaller sprites are formatted: And the larger ones: As you can see, these larger sprites are in the order 2, 3, 1. Moving sprites are where things start to get complicated. First, we get a short pointer to an animation data table: pointer_offset = 0x51D23+(2*index) The routines that read these short pointers expect the animation data table to be in the same bank, 0x8A (mapped). Each entry in this table consists of two long pointers followed by a byte. The first pointer is to the graphics, the second is for the animation's script. The byte determines the direction that the unit faces when initially selected. Possible values are: 00 - Left 01 - Right 02 - Down 03 - Up Graphics are compressed 4bpp SNES images. Format is the same as the unknown sprite, but repeated for each of the 16 moving sprites. Finally, there are the combat sprites. I don't actually know the specifics of these. The sprite index is used to select an entry in a short pointer table: pointer_offset = 0x26A89+(index*2) Like the moving sprites, the routines involved expect the animation data table in the same bank, 0x84 (mapped). Each entry is a set of 8 long pointers, one for each cardinal and diagonal direction. The graphics are compressed 4bpp SNES images. Their format varies, and I haven't gone looking for whatever determines how they're displayed. Quote Link to comment Share on other sites More sharing options...
Xamad Posted July 10, 2020 Share Posted July 10, 2020 The rips seem to have the Bow Knight and Arch Knight sprites swapped (Arch is labeled Bow, Bow is labeled Arch). Got me a bit tripped up when trying to animate them, so that might be useful to know. Quote Link to comment Share on other sites More sharing options...
Xamad Posted September 6, 2020 Share Posted September 6, 2020 (edited) Since Zane gave me the OK, here's the palettes for the class sprites. From top to bottom it's player, enemy, NPC, turn used/petrified. (yes it's that small, but it should do the job for palette swap purposes) Edited February 15, 2021 by Xamad Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.