Replay Insert Mode for Lix (like NeoLemmix's "blue R")

Started by Simon, December 28, 2022, 04:03:15 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

nin10doadict

I've been wondering about "hanging assignments" that can result from inserting assignments into a replay that now make future assignments already in the replay fail.
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. Should 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?

In Lix, which allows multiple assignments on the same phyu, both assignments at phyu 59 will succeed, and because of the queuing mechanic for builders, Lix 6 will now use two builder skills.

There are several ways we could end up with "hanging" assignments. Due to inserting assignments earlier in the replay, we could end up attempting to give permanent skills to Lems that already have them, try assigning skills to Lems that are no longer in the level, or try assigning skills to Lems that can't use them because they are busy doing something else. These seem benign, but one potentially troubling "hanging" assignment comes from trying to assign skills when we don't have any more of that skill available in the skill panel. If you only have 5 platformers available for the whole level and have assigned them all, then go back and insert platformer assignments before they have been "used," then the future assignments will now fail. Again, should the player have to keep track of this, or is it better to have the game do it for us? If there is a "hanging" assignment at a past section in the replay, should the game remove it or leave it there?

Simon

Moved the NeoLemmix issue into a new thread: Replay Insert Mode ("blue R") silently overwrites. Thanks for your good description!

Hanging assignments, I'd like to keep them in the replay at least for a while during play. Reason: You might be tweaking X, thereby break Y, and re-tweak X to repair Y. You might do this even from the future, when both X and Y are in the past. Thus, even hanging assignments in the past should remain in the replay for a while.

Assigning a 6th platformer when you only have 5, but some of the 5 will only be assigned in the future: I agree that this is annoying. I have no good solution for this. The future assignments might be garbage (hanging assignments from when we tried stuff 20 minutes ago and forgot about them), but they might also be vital.

Maybe the skill panel should price in both valid past assignments and all future assignments (valid or invalid). Invalid past assignments, Lix's panel has never priced those in. But then: If the skill panel prices in future assignments, then when you replay through such an assignment and it turns out invalid, you get +1 in the panel because now it's a past invalid assignment. Hmmmm, maybe that's okay.

-- Simon

Dullstar

If you do hold onto hanging assignments, perhaps they should be dropped from the replay when it is saved? Lix would need to keep track of which assignments these are, however. (similarly, for doing the positional verification without breaking the format, the game could keep track of them during play and then just not save them to the replay: I doubt loading a replay and then editing it is a particularly common use case, so you could probably just have the game check to see if it knows where the assignment should go, and if so, check if it matches, and if not, fill it in -- if someone really needed to edit a loaded replay and the desyncs were unacceptable they could let it play out once to let the game fill in all that info, if that can't already be automated similar to how the replay checker works).

Simon



When you choose cut-by-default in the user options, you get a panel button for insert mode. What should be the icon for insert mode?

Above image is the most obvious I could find, but it's not so simple, especially when I want to make the grid (the grey part in above icon's background) into a filmstrip. Other ideas?

search://paste icon/
search://insert icon/

Yeah, Dullstar's ideas (about pruning hanging assignments) are good, will have to keep that in mind, but it's not top priority. Please nag me eventually about it.

-- Simon

Simon

More thought on offering sensible defaults. Insert mode is so natural for me, it would be nice to incorporate it in the default somehow.

Make a new page in the user options menu for replaying options. Offer the following three binary options.
  • Level starts in insert mode, use a button to cut (default),
  • Level starts in cut mode, use a button to insert.
  • Air clicks always cancel the global future (default),
  • Air clicks cancel the global future only in cut mode. Air clicks do nothing in insert mode. (I'll use this myself, but I doubt that I can inflict it on everybody. Anybody else who hasn't read this topic will probably get confused.
  • Keep rewound assignments in the replay (default),
  • Erase rewound assignments, a.k.a., rewind is undo.
The third option (rewind as undo) has existed for years. I'd like to keep rewind-as-undo and possibly improve it.

Still not 100 % sure if (level starts in insert mode) should be default.

-- Simon

Simon

I want to add exactly one button to the panel: A button to toggle between cut and insert.

Now, my biggest UI worry these days is: This button does nothing unless you're replaying. New users won't be replaying when they first discover the cut/insert button. I don't want a button that does nothing most of the time, but sits openly in the panel.

I can't gray-out buttons in Lix. (Lix's handrolled UI toolkit doesn't feature graying out; also, how exactly should the button look different then.) I can swap the icon. I can show and hide the button. I can move it to non-panel space and show/hide it there, but I don't like buttons that roll in and out, that's distracting.

It's possible to put the button into the tweaker. The tweaker -- see attached image -- is an on-demand menu at the right side of the screen, listing the contents of the replay for you to tweak. Then I'll have an invisible button that nonetheless reacts to a hotkey (what I probably want, not sure), which breaks a UI convention. Also makes the button harder to discover.

A do-nothing button in the panel begins to look like the least worst option. (Click "Start" to shut down Windows 95. Everything else proved worse in Microsoft's UI testing.)

-- Simon

Simon





The scissors button has the caption "Cut", I'll eventually draw a nice scissors icon. Its activation is mutually exclusive with the skill buttons' activation: Either you're in scissors mode or you're assigning skills. That's why scissors button sits next to the skills, is sized like a skill button, and plays the same skill-button-activating sound.

The insert button would sit in the same place, but its activation is not mutually exclusive with skills. You can toggle insert mode independently from the selected skill. That's the only way it makes sense because you're inserting skills.

Multiplayer won't have either button. Should singleplayer have narrower skill butons than multiplayer to accomodate the extra button?

I've removed the zoom button from the panel. The tape recorder button area has a blank space. That's not nice to release, I'll keep pondering. One obvious idea is to put the insert button into this space, but then the scissors button still leaves the gap (from the zoom button). And the scissors button doesn't feel right unless it's sitting full-height next to the skills.

The panel buttons to the right prompt a fresh topic:
De-Cluttering the Panel: Fewer Non-Skill Buttons

-- Simon

Simon



Radical new plan. We'll ditch the scissors button again. Reasons:
  • Wasn't nice in my own playtesting on stream.
  • Behaves like a skill (mutual toggling, only one of those buttons can ever be active), thus goes into the skillbar. But feels alien in the skillbar.
  • Unclear what you can do with it on first sight.
  • I have other solutions for the design problems that prompted me to create the scissors button.
The design insights that suggest other solutions:
  • I want to avoid air misclicks during insert mode that cut the replay and thus lose data. We can do that by disallowing { air clicks cut replay } at certain times. We don't necessarily need a new button.
  • I see a lix on the map and want to erase her future. We can support that by better association between lix and their tweaker lines. E.g., we can highlight lines of the hovered lix (will be in 0.10.10). We can also highlight the lix of a hovered line (not implemented). It's not 100 % necessary to click the on lix to erase the assignments, we can also click on the assignments in the tweaker, which should also feel nicer.
  • In a multi-hatch level, especially in a disjoint union, I want to see which assignments go to which hatch, or to which level component. We can solve that by re-labeling the lix: Instead of a running count across all hatches, we can label the lix <hatchID><runningCountFromThatHatch> (not implemented). E.g., with three hatches, we'll get lix a0, b0, c0, a1, b1, c1, a2, ...
In Lix 0.10.10, we only have the highlighting of tweaker rows for the hovered lix. That's a standalone improvement. I'm happy to add that ahead of time, regardless of what we'll eventually implement for inserting.



If I don't want a scissors button, then how do we choose between cutting and inserting? We can tie the insert mode to user options. I believe that I want to be in insert mode 90 % of the time. With the options in this screenshot, I'd check both of the bottom Insert Mode options.

The downside is that it's harder to discover, and I'll need tooltips.

I haven't tried an insert button yet, I merely know that the scissors button is not so nice. It would be another option (good default?) to have an option for an insert button. I.e., replace the bottom two bool opions in the screenshot with radio buttons:
  • Never insert,
  • always insert,
  • insert only when tweaker is open,
  • insert only when insert button active, which starts off by default. And you get the button in the panel only when you pick this option. This can be default.
Odd thing though and more elaborate to tie the panel button layout to user options.

We can even consider a button that only cuts the replay, without creating new modes. Heretic idea! What a waste of panel space! But after all this design pondering, it doesn't sound as far-fetched as before. I still don't want to make one yet.

-- Simon

Simon



Revamp of the 4 boolean options. This looks reasonable enough to ship.

Icho told me: He doesn't know what Tweaker means from reading it. He hasn't used the tweaker before. Sometimes, he uses the NL equivalent which can only erase skills, not tweak them. The tooltips will explain how you show/hide the tweaker, but still, long-term, I think I'll put the filmstrip icon near "When Tweaker Is Shown".

Proxima: What capitalization should I use in these options? Title case, or only capitalize nouns, or something else entirely?

-- Simon

Simon

Some insights, a few months down the road.

Air clicks should always interrupt. When I set Lix to not interrupt, e.g., while the tweaker is open, Lix annoys me because I can't cut by air click; I have to kill the assignments one by one in the tweaker.

Air clicks interrupt by default, both when tweaker open and when tweaker is closed. Thus at least the default options are fine. That's soothing.

Why did I want insurance against accidental cancelling ... I played Box Set with lots of replay inserting. Then I wanted to free a lix who was stuck in a cube. She was oscillating between facing left and right. I forced a direction (choose only right-facing lix) and clicked on the left-facing lix (who had no right-facing lix near her). This click found no targets, and thus cancelled over 20 future assignments from the replay. I raged.

Now I believe: The solution isn't explicit replay cancelling; explicit replay cancelling has proven annoying. The solution is to distinguish air clicks from clicks into a bunch of lix who merely have all fallen through the assignment-candidate filter. E.g., I force right-facing, they're all left-facing. E.g., I want to assign climber, they're all climbers already. Those aren't air clicks. My disasterous click in Box Set was not an air click either, but still it cut the replay.

And I want a scissors-shaped mouse cursor for true air clicks. The cursor must be clearly different from both the open and closed crosshair cursor.

-- Simon