Quote from: Airwave on February 27, 2026, 11:07:07 PM...
While writing this I just discovered the replay with 17 saved, which I recorded in version 2.7, doesn't work correctly in 2.8 and becomes unsynchronised. I'll record it again in 2.8 and upload both. It turns out the recording in 2.8 crashes while playing in 2.7. It seems all other replays are fine when played in 2.7 and 2.8 so I can only assume that glitch causes problems with replays.
One last thing, I noticed the replays in this thread from 2021 don't work in RetroLemmini. I guess they only work with older versions. I'm currently using version 2.8 and started saving replays with version 2.7.
Thanks for reporting :)
Quote from: Airwave on February 27, 2026, 11:07:07 PMWhile writing this I just discovered the replay with 17 saved, which I recorded in version 2.7, doesn't work correctly in 2.8 and becomes unsynchronised.
I'm unsure why this is happening. The level itself and the game physics are both identical between 2.7 and 2.8, so this desync bug is fairly concerning. We'll see if it happens with any other levels/replays.
Quote from: Airwave on February 27, 2026, 11:07:07 PMIt turns out the recording in 2.8 crashes while playing in 2.7.
This one's an out-of-bounds exception, these are unfortunately quite common in the Lemmini codebase. I'm working on better error reporting so that we see something like "there are fewer lemmings than expected" rather than a generic error, but it's a one-at-a-time kind of process.
Quote from: Airwave on February 27, 2026, 11:07:07 PMIt seems all other replays are fine when played in 2.7 and 2.8 so I can only assume that glitch causes problems with replays.
It's possible, but the expectation is that all replays should be cross-compatible between all RL versions after 2.6, which was the last time physics was updated.
Quote from: Airwave on February 27, 2026, 11:07:07 PMI noticed the replays in this thread from 2021 don't work in RetroLemmini.
I think I know why this is. The
Flow Control replays from 2021 that you're referring to were created in SuperLemmini 0.104, which didn't have timed bombers. If you play back the replays with timed bombers enabled, the actions will desync. If you disable timed bombers and then load the same replays, they play back as expected. RetroLemmini has fixed this for
newly-created replays (any replay made since RetroLemmini 1.0 accounts for the timed bomber option in the replay), but it may be worth implementing a failsafe if a 0.104 replay is detected - in this case, RetroLemmini should assume untimed bombers rather than defaulting to user option. <---
EDIT - this has now been implemented (https://www.lemmingsforums.net/index.php?msg=108144).
Incidentally, versions 2.7 and 2.8 both report on replay compatibility in the window caption. When you play back a replay, it may show something like this:
(https://i.ibb.co/GQyMTbRL/image.png)
The above indicates that the current RL version is 2.8, the compatibility version is 2.6, and the replay version is 0.104. "Compatibility version" refers to the last physics update, so the general expectation is that replays made since that version should play flawlessly in the current version. The replay version is 0.104, which is well before 2.6, so there's a chance of errors occurring during playback.
I'll look into it and see if there's more that can be done to increase backwards-compatibility, or at least better error feedback.
OK, made a little bit of progress with this today.
Out-of-bounds exceptions for lemming indices are now handled by displaying the expected vs. actual lemming index in the window caption, like this:
(https://i.ibb.co/vCnnHKkZ/image.png)
So, the replay has an action for lemming 11, but there are currently only lemmings 0-5 available in the level.
Also, when loading a replay, RetroLemmini falls back to matching by level name alone if it can't find an exact match for pack title, rating and level name (this has been in effect since 2.7). This does occasionally result in mismatched replays being played, so let's show the expected name + pack title in the caption. The purpose of this is to make it easier to see which level the replay is actually for:
(https://i.ibb.co/8LBzdVFH/image.png)
The replay is for "Take A Running Jump" from Lemmings, But With Lemminas!. This pack can't be found, so RetroLemmini has loaded "Take A Running Jump" from regular Lemmings.
Whilst there's still no guarantee that the replay will play without issues, the above tweaks at least help matters by reducing unhandled exception popups, whilst providing better user feedback so that issues can be more easily identified and fixed.
Meanwhile, I'll keep looking into what can be done to increase backwards compatibility with older replays.
I've now implemented a failsafe for replays made in SuperLemmini versions 0.103 - 0.104a (which have untimed bombers only). Previously, if the "timed/untimed" data was missing from the replay, RetroLemmini would fallback to user option. Now, any replay made in these specific versions will be assumed to have untimed bombers.
Unfortunately, there's no way to account for replays made in SuperLemminiToo because this is when the timed bomber option was first made available but wasn't yet written into the replay (that came about in RetroLemmini 1.0). However, it is still possible to fix these replays manually should anyone wish to do so:
How to fix SuperLemminiToo replays which include Bombers
1) Open the replay in a text editor.
2) Find any line which matches the following:
n, 2, FLAPPER, lem (where "n" is the frame number and "lem" is the lemming index)
3) If the replay was made with the Timed Bomber option enabled, type ", true" at the end of the line. Otherwise, type ", false". Examples:
162, 2, FLAPPER, 0, false (an untimed bomber assigned to lemming 0 at frame 162)
394, 2, FLAPPER, 5, true (a timed bomber assigned to lemming 5 at frame 394)
Done! :)
Implemented in RLPlayer commit 14affaf.