User:Fmp/Ancillae Schtuff

From ALttP Speedrunning Wiki
Jump to: navigation, search

Last update: Monday 29 July 2019 at 19:42 (changes)

Pinkus Last Thursday at 10:22 AM
my brain hurts
"I'll give up for now"

6 minutes later
"Okay, i've been successful" - Pinkus 2019 (preliminary explanation) (lua script) (bizhawk version) (technical explanation)

standing a certain distance from wall, and throwing boom, will set 0C54-0C59 (slot 0-5) to one of the values we need (3C, 13 or 0A)
then use lantern in slot 1 while facing left, and 03C4 is set to 0x10
then fill up slot 0-4 (or 0-1 for bombs), then spawn the ancilla
the code will find a spot outside of the ancilla array, at index 0xA to 0xF
and it will not check or know that its out of bounds, and will write X coords, random timer stuff, oam stuff, all over the wrong memory
mostly overwriting other ancillae, but possibly other things too
the possibilities are endless. but how to even approach such a thing
Man, what a rabbit hole, but found the underlying issue. I think it's possible better applications exist!

Setup is:
- WallHit ancilla (0x6) needs to be in slot X.
- Hookshot (1F) needs to be in slot Y where Y = X-5 lol.

So 5 slots apart from each other. Still kinda theory though.
Relevant RAM

$039F[0x0A] -   Special Effect Timers

$03A4[0x0?]  -  Referenced in receive item initializer

039F is probably used to alternate animation of boom hitting wall or something.

03A4 idk what it's used for, but by setting it, you enable the LDA $EE : EOR #$01 : STA $EE.
As you can see, the two arrays overlap
If 03C4 is let's say 0x10, it will do LDA $0C4A, X where X will be 0xF on the first iteration, which points to $0C59, which is a different array entirely. This array can be manipulated by using a boom for example, maybe other things too. Doing this, you can in fact even make it so it seems like there's a replaceable item there. The routine will think "yay we found a replacable ancilla" and returns 0xF to the caller. The ancilla is then installed in slot 15. Which is nonexistent slot.
Bank0F, Ancilla_CheckForAvailableSlot

in this state (5 fake somaria blocks on screen):
- Boom doesn't go back when it hits screen edge, but continues to the wall before going back
- Hook gives me EG
- Sometimes can shoot out 2 hooks in normal slots
- Getting hit while throwing fake somaria block gives Sword Up pose in air
ancilla related glitches
* uninitialized altitude
  * spooky
* despawn
  * heart despawn glitch
* misslotted ancilla
  * hook clip, alternating layers (mire bk shortcut, gtower basement left side skip; I think its possible to go into EG with this too)
  * hook clip, opposite layer (can go into EG with this)
  * hook eg (you go into EG immediately)
  * hook juke/push (Link moves quickly in one direction, clipping through things in his way)
  * extended boom (red boom goes longer than screen limit)
  * [carolinum] bomb (bomb exploding indefinitely)

* in both hook clips, you can hit sprites. like hitting the switch in spooky 1.
"hook clip, alternating layers" is the one we're discussing for nmg
we basically have 3 levels of manipulating ancilla

Level 1 = Despawning things by just occupying every slot. this is kinda harmless, probably happens in runs all the time by accident
Level 2 = Putting things into ANCILLA slots, but ones they were not really coded to be in (like bombs is coded to be in 0 or 1, but the new discovery has made it possible to put it in slot 2-9 as well)
Level 3 = This, where I'm installing ancilla into slots that have nothing to do with ancillae. basically just writing values to ram "at will"
found a way to make the 9 misslot free. might not work for all setups, also it is slower than the current standard method of popping somaria, dash buffer then putting down somaria..

But face a wall, with some room behind you. Boom backwards and switch to somaria. Hold word, pop the somaria and then put down a new somaria. Getting it 20 times in a row with this since you get to press Y in the first 11 frames where it works (if you spam really fast it wont work since 3C will not be present yet, so just need a slight delay)
instead of boom, you can use a bomb too

Heart skip

ok, so definitive setup for armos and lanmolas heart skip while still getting the pendant:

at 7E03C4, the value will get changed based on your arrow usage. it will remain unchanged until you have 3 arrow shafts on screen (stuck into enemies or walls). then it will cycle 0x04, 0x03, 0x02 for each arrow you shoot. it will only cycle while 3 shafts are onscreen, so some may despawn while you fire, which causes some inconsistency. thus there's no way to know what value you'll have.

in order to heart skip and get the pendant, we need that value to be 0x02. to get that, you want to use lamp 3 times quickly (as in 3 lamp fires onscreen at once). the lamp uses 2 other bytes before 7E03C4. while your facing does affect what value gets put from using the lamp, it is irrelevant for our purposes here. using the lamp in this way resets the cycle from shooting arrows.

with the cycle reset, now you can shoot 6 arrows into the wall to guarantee a 0x02 value. 3 to stick in the wall, and then 3 more to go 0x04 > 0x03 > 0x02. this also leaves 3 arrow shafts stuck into the wall, filling up the slots we need such that you only need 2 lamps to skip the heart container.
or in simpler terms. lamp 3 times quick, shoot 6 arrows into the wall, lamp 2 times and get heart.
the best is to place the somaria block in the middle of the room, then get next to the heart and canedash into it

the next best is to set up $03C4 with a value of 0x02, then shoot 3 arrows into a wall, sword beam, and dashbuffer at least twice into the heart.

Wonkavator shot

Break point: Bank07: DEC $0C5E, X : BPL BRANCH_ZETA

Pinkus's explanation is great. tbh setup is too lazy,
1. set boomerang to slot 8 and hit a wall. then becomes fake red boom
2. set som block to slot 9
3. do sword beam for $C5E
4. then hookshot
I feel like sword beams facing direction effects hook probably...
Hook push RTA method:
- Misslot somaria to 9:
  * Lamp 3 times west
  * Start charging sword
  * Put down somaria block & pop it
  * Dash for Boots dust (unless sword beam is on screen)
  * Put down somaria block again (should be slightly glitched gfx)
- Set up memory for hook push
  * Put down somaria in slot 3 (Dash then Y)
  * Pop somaria
  * Sword beams in the direction you want to hook push
  * Wait for ancilla to clear up
  * Throw boom
  * Dash then sword beams again (somaria should be jumping up/down)
- perform a hook push
  * hook anything. sometimes you go into EG, sometimes wall stops you, sometimes you clip like crazy
Hook push method:
- Misslot somaria to 9:
  01. Lamp 3 times west
  02. Charge sword up
  03. Put down somaria block & pop it
  04. Dash for Boots dust
  05. Put down somaria block again (should be slightly glitched gfx/Link can move through it)
      You can release your sword now.
- Set up memory for hook push ($0C5E-$0C51)
  06. Put down somaria in slot 3 (Dash then Y)
  07. Pop somaria
  08. Sword beams in the direction you want to hook push, while all 4 sparks are on screen.
      You can use fire rod too. Results might be different, espeically in OW.
      You might need the beam to travel a certain distance, not sure.
  09. Wait for ancilla to clear up
  10. Throw boom
  11. Dash then sword beams again (somaria should be bouncing up/down now)
- Perform a hook push
  12. Hook anything and see what happens.
      Your exact coordinate will matter here. To avoid getting into EG, you often need to make sure
      your coordinate is good first.

Hookpush w/hook misslot. 2 methods:

1. Misslot hook (from now on called hook#1)
2. Do normal hook (hook#2) before hook#1 hits its target.
3. The hook#1 will hit the pot or w/e which drags Link to it.
   At the same time, hook#2 is interrupted.
4. Once Link arrives at his target (via hook#1), hook#2 is activated again
5. You simply start a hook before hook#2 hits the pullable target. Can be towards air, doesn't matter. But it can't hit a pullable target before hook#2 does.

1. Misslot hook
2. Misslot hook again, before hook#1 hits target.
3. hook#1 hits the target and hook#2 should be frozen in-air.
4. You now have hookpush armed. Move to some cool place and use your hookshot for hookpush.

For both methods, you will often hit the "barrier" problem due to the nature of this application. So some setups will require you to do the last hook on a pixel perfect place.

Hook EG

Break point: Bank07 LDA $03A4, X : BEQ BRANCH_OMICRON

1. Throw red boomerang to wall
2. Face to right and use lantern to set 7 for $0x03C4
3. Spawn ancilla and decrement $0x03C4 to 6
4. Be careful to not change value at $0x03C4, dash and use lantern.
5. Use hookshot to pot or something before red boomerang makes flipping ancilla
6. While finishing to pulled by hookshot, if describe flipping ancilla, then Link gets into EG.

    LDA $044A : CMP.b #$02 : BEQ BRANCH_RHO

    LDA $EE : EOR.b #$01 : STA $EE

^ this is why strong eg is needed (044A is the strong eg variable)
so basically, to summarize:

slot 9 boom
- hitting sprites
- sometimes hooking different layers (mostly from bridges)
- getting out of EG in glitched categories by hooking into a different layer (this is the same point as above, just you don't have the ledge-problem here)

slot 8 boom
- hooking through one tile, bypassing it and possibly hooking to a target on the same layer
- 1/4 chance of also hooking into a different layer (but again, mostly/only from bridges)

Both will hit any sprites in their path, regardless of layer. Or possibly LINK has to be in the same layer as the sprite, but the glitched eghook doesn't seem to matter at least.

Quantum Tunneling (

This is just beautiful:

ok I got it now with the setup I used before. It's pretty simple too, can be done RTA.

1. Put down somaria in center of room
2. Hold your sword out (need the sparks) and immediately bust the somaria block.
3. Change to whatever you want to put in slot 9
4. Dash then Y
also I found an easier setup for rta.

0. Lantern west 3 times
1. Hold sword out from the start
2. Put down 3 arrows in wall
3. Put down 2 bombs
4. Simply use bow, and it will be put into slot 9, 8 or 7; usually 9.
I think maybe in 4, we can put another object in 9, then bow to 8 perhaps
but we should find a way to set up 03C4 to 9 consistently..
I think ice skip does not work with slot 8 method?
1. Lamp 3 times left (sets 03C4 to 0x10)
2. Start holding sword out and immediately do 3 arrows into a wall
3. Switch to bombs and put down 2 bombs (slots 0-5 should be occupied now)
4. Switch to fire rod and shoot one shot (should replace sword spark in slot 9 into a rod charge, setting 03C4 to 9)
5. Switch to boom, move backwards, and shoot boom (it should be blue and put into slot 8)
6. Press A to dash, which seems to almost always stop the boom from moving.
7. Switch to hook. Find your target. Press A for boots dust in slot 4, then hook clip (hook needs slot 3).
03A7 is the memory to watch
it is what enables hook clip
boom sets it constantly. I think if non zero then hook goes through wall
when zero then it will collide
something like that
different boom patterns sets it differently
maybe direction of boom matters
whether it hit walls or not matters
whether it is going back to link matters
red/blue is different too
- C4A,X (X = hookshot slot, need to be boomslot -  5) This we already knew and is the reason why sometimes hook clip works other times not, especially when red sparks are on screen it can be hard to get to slot 4.
- 3A4,X (X = hookshot slot, so 3A8 if slot 4). This is what decides if hook goes through wrong layer or not. For slot 7 and 9 its 100% always wrong layer I think (??). For slot 8 it's wrong layer 3 out of 4 frames.
I think blue boom after wall in slot 7 or 8 is same as blue boom in slot 9.
For both hook clip methods:
- If everything goes according to plan, you can do the hook clip by either a) holding sword out then using hookshot or b) kick up some dust before using hookshot. If that doesnt work, try holding your sword out AND kicking up dust, before hookshotting. If THAT doesn't work, try to hold out your sword, do a fire rod charge, kick up dust, THEN hookshot. If that doesn't work, reset.

GTower hook clip (bombs):
- Set $03C4 to 0x10
  01. Place down somaria right as you enter the room
  02. Walk up to the top wall, left enough that you won't get hit by fire dispenser
      (Can be done on other walls too, this is just an example)
  03. Do 2 lamp charges leftwards quickly
- Misslot fire rod charge to 9
  04. Face up (in this case) & hold sword out
  05. Shoot 3 arrows into wall
  06. Use 1 bomb
  07. Shoot with fire rod once
- Misslot boom charge to 8
  08. Throw your boom leftwards immediately
  09. Start walking down, and tap A until the boom stops returning to Link.
- Do the clip
  10. Release your spin
  11. Do the hook clip

Mire BK shortcut:
- Set $03C4 to 0x10
  01. Walk down to the bottom, left of the door
  02. Do 3 lamp charges leftwards quickly
- Misslot fire rod charge to 9
  03. Face down & hold sword out
  04. 3 arrows into the wall
  05. Use 2 bombs
  06. Fire rod once
- Misslot boom to 8
  07. Boom towards the right of the door
  08. Start moving out through the door
  09. Before the boom returns, usually tapping A makes it stop
- Do the clip
  10. Get out before the bombs explode
  11. Do the hook clip

Carolinum Bombs

His companion, a less imaginative type, sat with his legs spread wide over the long, coffin-shaped box which contained in its compartments the three atomic bombs, the new bombs that would continue to explode indefinitely and which no one so far had ever seen in action. Hitherto Carolinum, their essential substance, had been tested only in almost infinitesimal quantities within steel chambers embedded in lead. Beyond the thought of great destruction slumbering in the black spheres between his legs, and a keen resolve to follow out very exactly the instructions that had been given him, the man’s mind was a blank. His aquiline profile against the starlight expressed nothing but a profound gloom.

H.G. Wells, The World Set Free

(See [editor's note: incorrect name]
- Set $03C4 to 0x10
  01. Place down somaria
  02. Do 2 lamp charges leftwards quickly
- Misslot bombs to 9
  03. Face into wall & hold sword out 
  04. Shoot 3 arrows
  05. Put down 2 bombs. The last one will be misslotted to 9.
- Explode forever
  06. You can now extend how long it takes for the bomb to start exploding,
      and how long it will explode, by shooting sword beams or using hookshot.
      Also, your hookshot will go through walls now.

Arbitrary RAM