So I'm working on a TAS of Harvest Moon (SNES). For those that don't know, it has a fishing mini game with some very difficult RNG.
In a nut shell, with proper RNG values I can prevent an "Extra" Trip up the mountains to handle item collection, netting a frame savings of 4,800-5,600 frames. I've been trying for nearly two weeks to brute force the propper event with some results. I started with some 2,300 frames in fishing RNG manipulation, and have steadily been working it down. But now I'm running into a brick wall that I need help with. Namely in working with, and understanding RAM watch to find the values or events that cause fishing RNG to permutate out of controll.
So far my best outcome is I spend approximately 650 frames in dialouge screens to achieve the results I need. But under the right conditions it could be very easy to cut down to less than 100. Another 600 frames could be potentially shaved off the mini-game itself with "perfect" fishing. Changing the time to snag a fish from an average of 150 frames, down to a minimum of approximately 25-35 frames.
Some of the Animation Timers for the fishing event have been found for the game (which I've posted below), but I can't seem to work or understand the Ram Search function to find what triggers the time required to get a "Snag" on the fishing line.
Here is what I know (Or rather, very seriously suspect):
* A Fishing "Hardwall" script may exist. If you try to fish too quickly, or show up on the mountain within a certain period during the daylight timer - you can get hardwalled. Creating a situtation where the game will not allow you pull up a fish under any circumstances untill a minimum total number of frames has passed on the system clock. This can be bypassed and returned to the normal RNG by waiting inside a building or inside a convo screen.
* Fishing seeds for the NEXT trip up the mountain seem to be determined by something before going up the mountain. Once on the mountain, the seed seems to stabilize.
* Even if frame counts remain the same, both when you put your rod in the water and when you pull up your fish can change the fishing seed the next time you start fishing.
* The "Minimum" time to fish can be manipulated to some extent by changing the fram at wich you touch the docks.
* There is an "On Hit" frame perfect chance to shorten the current minimum time to fish that can be determined after sitting at the docks, and depends on when you drop your rod. Usually it shows up in the first 10-15 frames of sitting on the docks if this short cycle is available (Sometimes it is not).
Considering all the variables involved, it is incredibly time consuming to brute force my way through these RNG permutations. If I change anything earlier in the run, it throws off all the RNG after that point (many times even if it's frame neutral, but not allways). Changing the frame I sit at the docks, sometimes changes both the minimum time to fish and for certain the "Short Cycle" frame. Changing when a fish is caught changes the fishing seed for the next fishing cycle. So changing a frame, and then searching 10-20 "On Hits" to get the necessary maximum frames to get 4 fish in one day (or rather 3 fish + power berries), can take 1-2 hours per fishing session. Meaning a single "Day" of fishing after a change somewhere earlier in the run, can take up to 8 hours to find an acceptable result, which also causes desynch issues on other parts of the run and forces you to reroll any fishing that comes after that point. So changing anything on day 2, forces me to completely re-do the 6 fishing events on day 3 and 4 (which can be another 4-16 hours of brute forcing).
I need to pull up 9 total fish, and I know It's possible to shave another 600 frames off this sucker and theoretically, move a power berry from Day 4 to Day 2 (which changes my current routing optimizations).
In Ram Watch I've tried searching frames against a known value (# of frames required to snag a fish), but either I don't know what I'm looking for, or that's not the right variable I'm looking for.
How do I narrow down and find the values and trigger variables generated throughout this Fishing RNG process?