Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
I've been given a userfile for SMB3 that sets up the SRAM needed to ACE in SMB1. However, the savestate I got didn't exactly match the one used in the movie - and when I try to replay based off of my savestate, my BizHawk freezes up with no signs of life. Looking for someone else to verify the SRAM movie for me.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
What libTAS does is patch all calls to the system RNG function. I would imagine that Minecraft uses system RNG and thus an external tool could get away with fewer patches needed for RNG.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
That was it - I had foreground_sleep_ms 2, while you had foreground_sleep_ms 5. Not sure why it makes a difference for this game, maybe it has to do with the game's weird no-draw frames.
Thank you!
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
While judging #8702: Merl_'s PICO8 You Have to Burn the Rope in 00:23.37, I realized that the executable has literally nothing to do with the actual game. All game-specific data is stored in the data.pod file, and the executable is a just generic PICO-8 runner that can run any game. That means that the executable will have the same hash no matter which game you export it with.
This raises some questions as to whether we should catalog the runner hashes or the hashes of the actual game data itself, but that's another discussion.
By cross-referencing the hashes catalogued in #7687: ikuyo's PICO8 Star Anise Chronicles: Oh No Wheres Twig?? in 03:05.50, I figured out that the executable used in this submission was not PICO-8 v0.2.5g as you told me, but in fact v0.2.5c. (The version is also visible in the encode, and in the encode you provided, it says v0.2.5c.)
So after getting the Linux executable for PICO-8 v0.2.5c, the game will sync past the title screen. However, it desyncs at the second jump. The player character presses jump one frame too late, and that's probably related to the fact that this game seems to have some no-draw frame weirdness. Either the game sometimes has no-draw frames for no apparent reason, or the framerate of the movie is wrong, but I don't know which possibility it is.
I can remove one frame after the first jump and before the second jump to get it to sync past the second jump, but then it desyncs somewhere in the next room.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
An MD5 hash is a type of hash. In general, a hash is a sequence of characters that uniquely identifies a string of data, such as a file. MD5 is a certain specification of a hash, and the important thing here is that libTAS stores the MD5 hash of the executable in the movie file, and will warn you if the hash of the executable you run and the stored hash are different. On TASVideos, we also use the MD5 and SHA1 hashes to identify specific versions of files in game catalogs.
By "Linux binary" here I am just referring to the Linux executable. A "binary" in this context is just an executable file.
The yellow highlights are the MD5 hashes of the files. What I'm saying is that the executable files I'm generating and the file you used to make this movie are not the same. And I don't know how exactly to generate the same file.
I tried generating the file by running the Windows version of PICO-8 in WINE, but it produces a Linux binary with the exact same hash. So I guess I would have to see if running it natively would change anything? I would have to do that later, though.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
Transcription since Discord CDN links will soon start expiring:
Yes, I used the export command. However, the MD5 of the Linux binary is 6a21562c88a5f475272814d20e5145de whereas the MD5 of the binary used in the submission is b3edd6e3b0ef8dd2377b87db14e0d2e7. Also, like I said, it doesn't sync.
It might have to do with the version of PICO-8. Which version did you use? I used v0.2.5g_amd64.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
Yes, those were the two links I found.
I don't see a download link on the Itch page. I can download the cart off of the Lexaloffle BBS, but it doesn't sync if I run it directly from the PICO-8 binary; neither do the checksums match if I create my own standalone binary nor does that binary sync.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
I added 120 frames of blank input to the beginning, but the game now desyncs in Level 2. Same issue with Unity loading? And yes, I've been launching it with -force-gfx-direct. Otherwise, each frame takes an eternity to advance for whatever reason.
I also keep running into an issue that inconsistently happens where the game stalls on frame 5, 6, or 7, and refuses to advance time any more. This makes testing very annoying.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
Thanks, that should probably be in the instructions too.
After getting past that hurdle, the movie doesn't sync. It seems to start playing way too early before the "Broken Breakout" splash screen fades out and Level 1 fades in.
In the temporary encode, Level 1 fades in at 5 seconds in, but when I play back the movie, it fades in at 6 seconds in.
Is there any known reason for this discrepancy?
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
I'm having trouble with the instructions to port the macOS build to Linux.
When I do this, 7zip only recognizes one file named Payload~ inside. Extracting it is massive and running file on it says ASCII cpio archive (pre-SVR4 or odc).
I'm unsure of how to open a .pkg. Is 7zip even meant to be able to open .pkgs or is there another, more appropriate tool for the job?
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
libTAS will automatically bypass the launcher (by refusing to load ScreenSelector.so), so they should still work unless the porting process breaks libTAS's bypass.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
Link?
And this is not the sort of specious, pedantic argument I'm making. Cosmic rays and temperature changes don't make for deterministic playback even on real hardware.
In Yo! Noid 2, on "original hardware" (i.e. outside of libTAS), the game works completely fine. The desyncs affect movement and desync the TAS by making the player character move in slightly different directions. To an RTA runner, it wouldn't matter, because they would adjust accordingly, but a TAS cannot do that.
I would assume this is because it's deterministic. Which isn't much of a significant point; of course it would work, even for RTA.
If I remember correctly, it's because the desyncs happen whenever the game loads and transitions between levels.
Please do take a look at Unity and see if you can figure something out.
In theory, you're right that small configuration changes in the OS can affect the replay (which could be why it never synced for EZGames69 or fsvgm777), but in practice, I had to keep playing the TAS over and over before I got a run that would sync. And I'm pretty sure I didn't make any configuration changes to my OS between runs.
Experienced Forum User, Judge, Moderator, Player
(200)
Joined: 7/15/2021
Posts: 112
Location: United States
This does not reassure me. Game development is full of buggy code. If your argument is that "programs wouldn't do this because it would result in bugs", well that's already a very tenuous argument in the best of circumstances, but these are games we are talking about. Games are full of bugs and extremely bad programming practices because developers care more about finishing their game than being correct and clean.
For a counterexample to your argument, consider any game made with Unity, a notorious engine known for inexplicable desyncs due to the many threads it spawns. Just look at how hard #7822: rythin's MacOS Yo! Noid 2: Enter the Void in 07:59.83 was to sync for publishers. After I accepted it, I needed to dump the game myself because no publisher was able to sync it.