Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
Another approach to the SNES besides a clock mod is adaptive playback where you intercept the video signal and wait for a certain pixel to appear a certain color. This would work for games like Mega Man X and Battletoads where RNG isn't the issue. For example in Mega Man X I get desyncs around closing text boxes, where due to audio clock randomness there is basically a three frame window where the next action could be taken. In emulator I can easily match the first such event, but there are many of these 3 frame windows throughout the run, and I've had no luck matching them all (these include each refight for example.) This is easily fixed by adapting to when a text box fades or when an explosion ceases. Obviously this wouldn't help for runs that require cycle exact timing between emulator and hardware, but it's a tradeoff with having to mod the system.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
I'm starting to test some of the longer SMW ROM hacks and to my surprise the first one i tried, Super Dram World 2, worked right away after syncing to Morilli's dev build: Link to video So that's pretty cool. I remember base SMW to be pretty finicky, and since this is twice as long as that one I didn't expect it to work. I'll try some of the other ones that are 2MB as well. Since this worked I guess it's worth it to get some 4MB EPROM's for some of the other hacks too. I also retried the homebrew game Jet Pilot Rising, and I was able to get a resync of the run, but was unable to get it to work on console. It desyncs very quickly in the first level. Currently I don't have any heuristic on which games / runs should work or not, it's pure trial and error. EDIT: Thanks to RetroEdit's resync script, I also got Kaizo Mario World 2 to work: Link to video Technology!
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
More notes. Don't hit the yellow switch: Desyncs some time after the voice messages ~ 20 minutes, sensitive to audio frequency. Kaizo Mario World 3: crashes on console when entering the final level. I asked about it on SMW central (the issue is known to them) and opened an issue for it in Ares. The crash is not specific to TAS frame perfect inputs, even just loading a save RAM file and manually proceeding to the last level it still crashes. There is a patched version which apparently doesn't crash, and the TAS does sync to it, but then it desyncs on playback for unknown reasons. Super Metroid: Is resyncable but is extremely sensitive to audio frequency, even going from 32040 to 32045 causes problems, unlikely to make much progress here. Next testing I will do is with 4MB SMW ROM hacks.
GJTASer2018
He/Him
Location: Stafford, NY
Joined: 1/24/2018
Posts: 413
Location: Stafford, NY
Alyosha wrote:
Don't hit the yellow switch: Desyncs in emulator around 15 minutes in, it's pretty boring so I didn't look more into it.
Looking back in the discussion thread of that submission, I noticed that around 15 minutes in is when the music stops playing, so that's probably when the desync occurs. Timing changes?
c-square wrote:
Yes, standard runs are needed and very appreciated here too
Dylon Stejakoski wrote:
Me and the boys starting over our games of choice for the infinityieth time in a row because of just-found optimizations
^ Why I don't have any submissions despite being on the forums for years now...
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
GJTASer2018 wrote:
Alyosha wrote:
Don't hit the yellow switch: Desyncs in emulator around 15 minutes in, it's pretty boring so I didn't look more into it.
Looking back in the discussion thread of that submission, I noticed that around 15 minutes in is when the music stops playing, so that's probably when the desync occurs. Timing changes?
Oh, my mistake, 25 not 15, Mario hits the switch at 25:11 when I change the audio clock from 32040 to 32045, though nothing obviously desynced before then. EDIT: got it to sync in emulator but desyncs on console, presumably due to the voice message loading / playback.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
I got a 4MB cart working (this one: https://www.muramasaentertainment.com/product/snes-advanced-dip42-4mb/ ) I tried This Hack Needs a Name, but it desyncs after the first level, seems like an extra poll happens before save finishes. Tried default BSNES115 settings and my console tuned settings, no difference. I think this is the end of the road for this round of SNES testing. Further progress needs something new. EDIT: Extra notes: Nonsense: Timing sensitive, RNG on 1st boss? Celeste: Resync didn't seem to work, default settings desynced
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
I saw Super Metroid HISHE pop up a while ago and I finally got around to testing it, after a few tries, it surprisingly worked; Link to video This uses my console tuned setting and it took a few tries, but it's encouraging to see something Super Metroid related actually sync.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
I resynced the last NTSC Super Metroid ACE to bsnes115. It wasn't too hard, depending on apu frequency you have to add a frame at the last elevator before starting the moonfall in order to line up the collision check counter at RAM 5B6, but otherwise nothing needs to be changed. EDIT: movie removed, superceded I currently don't have the right cables to test this so I'm just leaving this here for future notes. Seems like it should work though with enough tries.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
I tested Battletoads a bit more with my console tuned parameters. I'm leaving some notes here about it. I am getting a desync now at the very start of the run, at the first jump the toads make. I tried adding and subtracting polls, and have verified that the initial starting and menuing are happening at the correct time all the way up to loading into the first stage. Small changes in initial parameters do not effect the loading times or other relevant behaviors. Once loading is done and the toads start to warp in, the game uses a counter at RAM 0x41 to determine when to give control to the player. The counter starts at 0 and the player gains control at 0xC0. By adding a poll before the first accepted input, I can get sync to happen at least past level 1. The game actually starts automatically polling before loading is finished however. It turns on autopolling at scanline 0xE5 (229), at horizontal position 0xB0 (176), 16 frames before loading is done. Loading ends at scanline 0x94 (148) with a WAI instruction, so there is plenty of time until the next frame. This initial activation of the auto-polling is currently not recognized as a poll by the emulator. I have to imagine that it is however recognized by the console and this is where my missing poll is. So either loading up to this point is taking too long and the enable is happening too late compared to console, or the enable should be recognized as creating a polling event. EDIT: Audio loading happens directly before polling enable, and changing audio frequency does indeed add in the extra poll I need. So my console is probably slightly faster than 32045, but not quite 32046.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
Link to video After crafting some multi-tap cables and with some help from TASbot folks I was able to verify Super Metroid GEG (the most recent NTSC run anyway since I don't have any PAL stuff.) Normally I wouldn't bother with obsoleted runs but I was pretty interested in this one and it seemed just on the edge of what careful tuning to console could accomplish. Even with fine tuning APU frequency and start up offset, I estimate the overall likely hood of success to be only ~1/10. I doubt any significantly longer run could work. I also had to swap controller pairs like controllers 1,2 became 3,4 on console, but maybe that's just the state of the I/O pin or something. So it's pretty cool that worked out, and now I have known good multi-tap cables to work with (I also ran the SMW snake / pong one successfully), a pretty productive round of testing.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4573)
Location: US
Joined: 11/30/2014
Posts: 2990
Location: US
I tried a couple additional games, here are the results: Super Star Wars: RNG is very sensitive to audio frequency, doesn't seem doable. Aladdin: Resyncable but lag is very dependent on audio frequency. The game uses auto polling so if the lag is in the wrong spot it will break, which will happen very quickly in the first level. A good candidate for my adaptive bot in the future.