UPDATE:
A heap manip has been found but it might be a bit too difficult to do RTA. This gives me hope for the future though! It shows that it's at least possible to achieve a heap with the necessary characteristics.
Original Description:
So I've been working very hard off and on the past month trying to wrack my brain and poring through assembly code to see if this credits warp was possible on English (US 1.0 version). Everybody said it wasn't but I was thinking "but it's ACE, we're supposed to be able to do *anything*".
Well a couple days ago I finally found filenames that we can type with the limited English character set that would work, but the tradeoff is it requires an *extremely* constrained heap manip. Normally all we care about is that one of the pots is 0x80 higher than the Moon's Tear in memory, and that the Moon's Tear draw function is earlier than 0x410000. The additional constraint I had to add is that the Moon's Tear itself must load in at exactly 0x40f390, which is an enormous constraint, so the heap manip is probably going to be very bad if it's even possible.
I had to do this because I'm unable to create the address of the entrance index the normal way (add 0xca to whatever is in register S2), since we can't even reach register S2 in I-type instructions in the english charset. Not to mention that 0xca is an impossible value to send in the english charset as well, but I may have been able to work around that one if I was at least able to use S2.
So the alternative solution I found is this. Register A2 always has 0x00010000 in it when execution jumps to Link's angles. Likewise, register S0 (as well as A0) contain the address of the Moon's Tear. If we can force the Moon's Tear to load in at precisely 0x10000 above the entrance index address (floored to the nearest 0x10, since that's the alignment of the heap), then I can simply jump to some code already in RAM that stores a byte with an offset of +0xa to the passed-in address. This would give an address of 0x3ff39a which is the entrance index address on English.
Please note a couple of things. First, the heap manip that would make this work has not been found yet, but a test run of Kyle/fullgrowngaming's heap simulator, Project Oceanside, was done without the Less Than 0x410000 draw function constraint, and it was able to find a solution. The second is that there's effectively 0 chance English will ever be faster than Japanese in this category due to the constrained filenames which I'm making work by transferring most of that constraint onto the heap manip. The only reason for this is to show it's possible, and also so that people who only have the English version of the game will be able to run Any%.
Also note: I checked PAL as well, and it's actually 100% impossible. This is because on PAL, Link loads in to the heap at 0x3F7XX0, and this is too close to the next 0x010000 interval (0x400000), such that Link and Tatl take up the entire heap up to that point. This means there will never be an actor whose draw function we can manipulate to be in the 0x3FXXXX range. For an ACE credits warp like this to work on PAL, we'd need to use something other than Link's angles, such as the angle you throw Zora fins at. That setup sounds like a nightmare to do on n64 though because of the unzeroed cardinals, in addition to the slowness of getting Zora mask, in addition to being PAL being 50Hz instead of 60Hz anyway (and thus slower), so I don't plan to work on it.
Filenames:
playing: 8Kit26GZ (hex 08142C37 02061023)
[replacing the "i" with a "q" also works because the international releases have 2 copies of the created file in memory for some reason. Maybe something to do with owl saves? no idea.]
created: 84AQcd0q (hex 08040A1A 26270034)
SRM Angle:
1) Target the double boxes for an initial angle of 0x8000.
2) Do 17 ESS right for a final angle of 0x0878.
3) Shield drop pot.
Last Targeted angle:
1) Put on Deku mask.
2) Target the wall with the clock for an initial angle of 0xd554.
3) Buffer 1 frame of Deku bubble left to 0xd8cb.
4) Do 27 ESS right for a final angle of 0x1af3.
5) Target and walk onto the last plank before the tunnel.
Facing angle:
1) Do 2 ESS right to 0x0ce3
2) Buffer 2 frames of c-up left to 0x1463
3) Do 1 Deku spin to 0x1283
4) Buffer 5 frames of Deku bubble right to 0x0126
5) Buffer 2 frames of Deku bubble left to 0x0814
Unculling the Moon's Tear:
1) Remove Deku mask.
2) Pull ocarina.
3) Play SoT.
4) Select yes.
Ещё видео!