Great, great, great!!!
Thank you very much for all these Offsets, tehaxor69!
With this info at hand it's possible to make Bowser hard enough to be worthy as the final boss, so not necessary to find any more things for him.
Now only Hookbill and Raphael are missing.
*Edit*
How difficult would it be to make a custom locked door, actually?
It would work exactly as each other locked door (Sprite 0x131), with the difference, that, when it's unlocked, it loads a value into an unused RAM address instead of item memory flag, so all Sprites, which are the same are unlocked at the same time, since it checks that address and if the value is set, it's unlocked.
The code must be copied to another place and slightly altered, plus tilemap stuff and table-related Sprite Settings...
*Edit2*
Upon changing PC 0x182E7 to [D4 A0 02] (PC 0x122D4) and PC 0x18815 to [30 A3 02] (PC 0x12530), Sprite 0x4D turns into an almost identic copy of Sprite 0x131. That is, the behaviour and ASM code pointers of Sprite 0x4D are changed to point to 0x131's code. The only thing this lacks is the tilemaps; at the moment the locked status of the door consists of two closed doors and hovers above the ground. It also sets the item memory flag, which makes Sprite 0x93 spawn instead of 0x131 in its default state, if set.
So, the only changes necessary are the minor code change plus tilemap change. I could try to isolate Sprite 0x131's code, but I got no clue about the tilemaps, so, help please, anybody?
Everytime you press upwards while you are before a locked door in locked status (since while unlocked, it's a different Sprite), the game checks whether there's a key in the "egg slots" of Yoshi. If yes, the game sets the flag and activates the screen exit + door animation. If not, the game just plays a sound effect. So, RAM addresses must be compared to the "key" value in an egg slot and then branch; this way it shouldn't be too hard to find that part of the code. Finding the item memory check shouldn't be too hard, too, since there should be a LDA #$0093 somewhere, which actually loads a normal door instead of a locked door in case the flag is set (should be a branch, too).
*Edit3*
As I thought!
PC 0x122DF is [A9 93 00], so it's [LDA #$0093]. Changing the value to another Sprite will create that other Sprite. In case it's one of the door Sprites, however, it will act like a normal door. In case it's some other Sprite, it will be displayed glitchy.
0x122D4 is [JSL $03D3F8] and after that there is [BNE #$05], which directly branches towards the [LDA #$0093] code, so I assume the item memory check is at PC 0x1D5F8. Changing the [BNE #$05] to [BRA #$05] will always unlock the door, even if the flag is not set, so chances are super high I found the check.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31