Whilst making new skills for Midnight Sun, I decided to make Pierce’s animation behave like the Japanese version, it forces the character to wait for the animation to finish before attacking like Sure Shot.
Change the bytes at 0x2B290 and 0x2B482 to 0xA0 to make it wait.
Not waiting is what makes Pierce so glitchy in the American version of FE8 so this will fix all of those glitches.
Nice work! I just tested it out and it worked like a charm! I never noticed that Pierce has a unique sound effect at melee range, but doesn’t use it at range.
Yeah IS is notorious amongst veteran hackers for having jury-rigged code that’s held together by duct tape but this was surprisingly an easy fix although I did have to use some problem solving.
I’m not sure if there’s a thread for specific fixes like this, but there should be (in case anyone wanted to correct these in their eventual projects).
Out of curiosity, both offsets use 0x80 in the retail version, rather than the 0xA0 fix. If 0xA0 means to wait until the animation finishes, any clue what 0x80 was meant to do?
I know exactly what it does.
How do you think I knew to change it to 0xA0?
I don’t really want to explain what it did and how changing it works because it’s technical and complex and you wouldn’t understand unless you know about binary and bitmaps
Wait, we seriously just had to change one byte to get the game to not brick?
Not that it matters to me, no one I’ve seen before recent have made attempts to fix it in the first place. Great job there, I can now use Wyvern Knights without hesitation!
Yeah like it’s a stupidly easy fix, but something this tiny and fix patches of this level of importance should be added to feditor so noobs who run feditor on their rom for the first time would always have the updated fixes. (Not to mention just plain convenience for those of us who use fresh roms fairly often.)
Heck, I kinda wish FEditor would autopatch this fix too.
Well if you really want to know, in the battle data there’s a word long bitmap that’s used to see if all kinds of skills and abilities are active; here Pierce is bit 0x10000 Great Shield is 0x8000 and Sure Shot is 0x4000. When the game wants the Pierce animation, it loads 0x80 and shifts it left by 9 to get to the 0x10000 bit. What I did was I told the game to shift 0xA0 such that the Sure Shot bit is OR’d (0x14000) which apparently works.
I’m basically rewriting the entire skill system in C++ for Alfred right now so those offset values are irrelevant to me since I’m writing it such that you can set the animation later, but I thought it might be a good thing to share with everyone. I have massive amounts of notes that I plan on making public once I’m 100% done with the new skill engine.
Interesting that ORing Sure Shot fixed how pierce works. Thanks for the explanation Brendor, I follow what you did for the fix. Kudos for finding this & good luck on your skill system rewrite!