[BUG][PLAYER] Replay Insert Mode ("blue R") silently overwrites

Started by Simon, January 18, 2023, 10:59:05 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Simon

Hi,

This arose from Lix's Replay Insert Mode discussion. Independently, I discussed the NeoLemmix behavior shortly on my twitch livestream a week ago.

nin10doadict describes the problem well:

The bug is:

Quote from: nin10doadict on January 12, 2023, 11:59:28 PM
Consider the example:
Phyu 59: Lem 5 gets a basher.
Phyu 60: Lem 6 gets a builder.

If you go back and insert at phyu 59: Lem 6 gets a builder, then depending on whether we're using Lix or Neolemmix we get different behaviors.

In NeoLemmix the previous assignment to Lem 5 at frame 59 is silently overwritten and won't happen anymore. Could have disastrous effects on the rest of the replay; now any other assignments that were dependent on that one will be in unhelpful locations or fail for one reason or another. I find myself manually shuffling through the frames when using replay-insert to ensure I don't accidentally overwrite something, which seems annoying.

NeoLemmix's insert mode ("blue R") is reasonably hard to access: You'll have to map a hotkey to it, remember the hotkey, and conciously decide to use this mode. Thus, the problem won't hit everybody.

But if you use it, sooner or later, you'll accidentally assign on a same frame and thus ditch a seemingly-random assignment from the middle of your replay. It's a small data loss bug. Granted, it's softened by the ease of recreating the overwritten replay. But it's insidious because you won't notice right away that you overwrote an assignment.

Solution ideas:

Quote from: nin10doadict on January 12, 2023, 11:59:28 PMShould the player have to manage this?

Can the game notify the player that an overwrite has occurred with a sound or visual cue?

Should the game prevent the overwrite altogether? If so, can the player force the overwrite anyway with repeated attempts?

I think that the accidental overwrites should be hard or impossible. A dumb, but robust and easy way is: Flat-out disallow the new assignment and keep the old. If we want to be cheap, then give no feedback besides the obvious failure to insert.

namida, how much energy would you want to invest here? I'd happily chew through some UI suggestions if others pipe up here, and maybe I'll have more insights on my own, too.

-- Simon

namida

Given the data loss aspect, I can justify making some alterations to address this, but I'd rather keep it fairly simple.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

Simon

Same-frame assignments to the same lemming can probably overwrite each other silently and it should be noticeable enough. I believe this will feel like normal replay cancelling. The worst possible annoyance is permanent ability assignment + immediate skill assignment which feels like it should be allowed outright. Or maybe each assignment should discard the future of that lemming, like in Lix, then you have a single answer to all same-lemming questions.

Same-frame assignment to different lemmings: I'm beginning to think that you should allow them.

It's nasty to play around the limitation. I don't know how much to chalk up to UI (we could disallow more glaringly, or warn better) and how much to the fundamental limitation, the gut feeling is that the fundamental limitation weighs more.

It will be possible to make levels that rely on simultaneous assignments, but I don't think that will be a problem in practice. We saw it in Lix once as a joke/proof-of-concept level, and never anybody relied on it since.




If you don't want to allow it, then let's prevent the silent overwriting nonetheless. The constant necessary awareness of the looming silent overwrite feels like writing Python. :lix-scared:

-- Simon

namida

QuoteSame-frame assignment to different lemmings: I'm beginning to think that you should allow them.

A change of this magnitude is out of the question at this stage.

It pretty much comes down to either "keep as is" or "preserve the original assignment instead", possibly with some added visual and/or audio feedback when the collision occurs.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

I've replied to this by way of a suggestion for SLX, as I'll definitely be doing something about this one - no more having to framestep back-and-forth to check for adjacent assignments!

As for NL, I'm more than happy to help look for a solution and provide whatever assistance I can to make the process easier and take off some of the workload.