ShaneM wrote:
Okay. I now have a perfect understanding of what this EU difference does. I will get into more detail tomorrow when I get up and after I get some free time. In a nutshell, this really doesn't fix any glitch. Rather, if corrects an oversight on the NTSC programmer's part. It is customization, as well as optimization. It has to do with a very specific jump slightly over an enemy, so close to the head that it should be counted as a "stomp" in the NTSC but counts as a player injury if the enemy is #$06 or less. I tried changing the code and specifically testing with an enemy that sets Carry (Lakitu) to verify. The EU separates Cheep-Cheep frenzies from this because on the account of diagonal enemy jumping on their part since their bounding box data is different. I will incorporate this into my SMB2J build; it only takes 1 additional byte and I found an opportunity to optimize code in "KillPlayer" to earn two free bytes. --ShaneM, the Master of ASM
Okay, here is my more in-depth explanation. (Lakitu is my guinea pig in this example, since it will set the MSB thereby not cause the code to branch in ChkInj.)
Picture 1: For this to work, you must be no further from Lakitu than this.
Picture 2: This demonstrates when the code is in action in the NTSC version. See how Mario is not exactly hitting Lakitu's head from the top, though collision is counted as Lakitu being stomped from the 800 pts. above? That's the CMP Enemy_Y_Position,x in action there.
Picture 3: This is what happens when I NOP those nine bytes to see what happens. The player is injured instead of Lakitu being damaged. You can see Mario's swim animation, there. When the player takes damage and shrinks, there are actually two swim animations used in the process.
I used savestates to test this to make sure everything is exactly the same to verify. Look at the timer and Spiny's on the ground. Everything is exact between photo 2 and 3.
The EU version changes it to include all enemies because there are instances where, for example, Goombas are going down stairs while the player is jumping up and Mario/Luigi wrongfully takes damage. It singles out Cheep-Cheeps because they can (and will) jump at a diagonal angle, which causes damage to the player if A still contained #$14 at the time. It was specifically changed to load #$07 with flying Cheep-Cheeps to fix that. (I tried changing the #$07 to a #$14 in the EU version to verify that I was correct.)
The new build is scheduled to be released tomorrow of SMB2J and will add this fix from the EU version. It will be RC5. RC2 of the manual is due tomorrow, too. --ShaneM, The Master of ASM