SID is set sometime after you press A at the last line, not sure when but it was ~80 frames for me too iirc.
The best way is just to figure out what SID you are getting and how far away it is from your desired SID, then advancing accordingly, I don't think I've had any problems that way.
EDIT: How are you checking your SID? I just read something about you trying to catch a zigzagoon, you should be using RSEdecode or Enciclopedia Pokemon (or even a code).
That is the point it's determined in R/S. Remember to compare the 16bit high at the start of the save state with the SID to determine the offset (pause, load the state, hold A, resume the game for consistency). From there it's just advancing the frame to the correct point.
You must just be unlucky then :/
And if you're impatient to go for higher spreads I would suggest going into a battle and letting the frame advance in there if you aren't already, it usually skips every other frame for me which essentially cuts waiting time in half, just keep the lua script open and paste the current seed and previous seed into RNG reporter and search for your target spread to see if it's working, there should be a 2 frame difference between the two.
Not really sure what you're saying, but if you reset enough or don't care about absolute perfection you can find stuff <5000000 no problem.
All you need to do is savestate before you set your name, then proceed until the last line and check the frame with a lua script, plug that into RNG reporter and search for whatever you're going for, if you find something then savestate and abuse your SID, if not go back to the first state and set your name again for another seed.
Pretty much. There is a certain amount of frames it will take after pressing A for the SID to be generated but by comparing the frame you were on at the save state with the SID you got you can figure it out.
The seed always starts at 0 except when the TID is generated upon starting a new game. So you would have to pick any PRNG value before the encounter and use that as the starting seed, or save and reset then do stuff.
Oh right to make sure the memory address I gave you was the correct one check it by the researcher. Run it with a seed of 0, reset the game, and check the value one frame at a time. The 8 digit hex number should match the first column exactly for each frame.
Oh yeah easiest way to find a SID that works is to plug in the TID and PID (in decimal) into Pokegen and hit generate shiny SID. There are 8 SIDs that work and they're all in sequence (ie. 00000 to 00007).
Oh you have to find a Method 1 spread and take that PID to go with the TID for the SID you need. So other than finding the spread you want you don't need to worry about anything else for the Pokemon itself yet.
TID is determined once you enter your name on the name entry screen (it cannot be predicted in advance). SID is determined after Birch's last line of dialogue in the intro. Basically get to that point, take the current PRNG value, put it into RNG reporter's Researcher tool under the default settings, and the 16bit high column would display values that can become the SID. Find one that works with the TID (make a save state then get into the game) and the PID and there you go.
Uh... to find the current PRNG value you'll want a script from here (requires VBA-RR) or just do a RAM watch at 0x03005D80 I think... The script is a lot more useful though. Grab the last one from that thread.