Lemmings Forums

Lix => Lix Main => Topic started by: Simon on December 28, 2022, 04:03:15 PM

Title: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on December 28, 2022, 04:03:15 PM
Hi,

this thread assumes that you've kept checked the option Keep replay after ◀▮ at all times. If you uncheck it permanently or temporarily, also look at topic: Rewind as Undo: Still Preserve a Loaded Replay (https://www.lemmingsforums.net/index.php?topic=6120.msg97537#msg97537).

Quote from: That thread
Rewind is browsing. You keep "Keep Replay After ◀▮" checked at all times. This is the default. You treat the replay functionality like a book, and use framestepping to browse through this book. Only when you're really sure, you cut content by clicking air or by assigning. You accept that Lix occasionally surprises you with unwanted assignments when you forget to cut the replay.

Let's try to improve this style even more. The behavior of Lix 0.10.3 is:
Design hole: In Lix 0.10.3, there is no way to insert new assignments into the replay without cutting the replay.

I'd like to offer replay insert mode. Let's design it. Insert might become a user option (that you toggle from the options menu only, and never during play), it might become a mode during play, or it might even become a default.

In my recent livestream (https://www.twitch.tv/videos/1686053722), I've experimented with a hacked Lix version that inserted all assignments instead of cutting the replay before appending the assignment. This was very useful when many lix had to work together in a tough singleplayer puzzle. But it was annoying on ccx's 100% Built By Lixes: Here, many builder assignments go to a single lix, and each assignment desynchs future assignments to that lix. I got surprised and annoyed from Lix constantly replaying future assignments because I failed to cut them. As a result, I'm considering:

Idea (*): Click air to cut all future. Assign to discard only that lix's future.

Example:
In phyu 100, lix #0 builds.
In phyu 200, lix #1 mines.
   Phyu 300 is now.
In phyu 400, lix #0 digs.
In phyu 500, lix #1 climbs.
In phyu 600, we nuke.


 (Phyu means physics update, a.k.a. physics frame.)

In Lix 0.10.3, when you click air here, Lix cuts the two future assignments and the nuke. Likewise, when you assign to either lix #0, lix #1, or an entirely different lix, Lix cuts the two future assignments and the nuke, then inserts your new assignment for phyu 301. Even with idea (*), when we click air here, Lix cuts the two future assignments and the nuke.

The difference of idea (*) is when we assign. If we assign to lix #0, we discard the assignment in phyu 400 and the nuke, then add an assignment to lix #0 at phyu 301. If, instead, we assign to lix #1, we discard the assignment in phyu 500 and the nuke, then add an assignment to lix #1 at pyhu 301. If, instead, we assign to lix #29, we discard only the nuke.

Is (*) sensible? Or do you see a different way to improve Lix in this direction?

Should we offer (*) as an option, in addition to offering how 0.10.3 always cuts all future actions on assignment? Should it be a user option in the options menu, or should it be a button during play? Either way, should (*) be the default or should 0.10.3's cutting be the default?

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: mobius on December 29, 2022, 01:05:28 AM
Ill replya more in depth later. My initial reaction is I like NL's function; two modes: insert mode and non-mode and being able to switch it on or off during play. While insert mode is super useful it has very specific uses for myself anyway, im more often not using it so it would get annoying
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: namida on December 29, 2022, 04:02:06 AM
I personally would not want this to be always-on. While I do make use of this mode at times in NL, the majority of the time I would have it turned off - it's essentially an "only when I specifically want it" feature for me.

Not sure how I feel about cutting assignments only to that particular lix.
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Dullstar on December 29, 2022, 10:43:56 AM
Many Lix users probably also use NL, so its behavior and defaults may be a good starting point since presumably users will expect it to behave similarly. That said, we also shouldn't chain ourselves to that: if we think we can do better, we should go for it.



I think if you want to default to on, it's *extremely* important to have an easy way to cancel the replay, and I'm not sure clicking the air is the best solution here, as it seems like a very easy misclick. I think a hotkey would be better: still possible to mispress, but I would suspect it to be less likely than accidentally clicking the air next to a Lix.



I also think that there's some promise to cutting some assignments, though I think we can do better. Replay insert mode as implemented in NL is very prone to causing assignment desyncs, as NL has no way to detect that this happened. In many cases when you're using replay insert mode, the assignments are independent enough that they don't interfere, but if there is any amount of interaction between the inserted assignment and lemmings queued to perform assignments in the future, then while sometimes it'll still work out by chance, most of the time those future assignments just become nonsense. I think a simple solution to this in Lix would be to design it such that the replay additionally stores the position and direction of the Lix: if the Lix is not where we expect it to be when it's time to make the assignment, the assignment has become desynced, and should be cut. I think this generalizes better than simply cutting all future assignments to a particular Lix: some might cause few if any problems (e.g. assigning a climber or floater to a Lix that is busy doing multiple queued tasks with no climbing/floating in between), while others (anything that alters the terrain, really) can easily affect the queued assignments of other Lix.


IIRC, the replay system is also closely related to the networking code, specifically, distributing assignments to other players, so this may also help detect desyncs (which I don't think would generally come up except maaaaaaybe with some latency edge cases that ultimately end up getting resolved successfully, but there have been desync bugs in the past, e.g. when there was a hatch assignment bug, though I'm not sure if any of them survived long enough to actually affect a planned multiplayer session). Of course, this doesn't help FIX the desync but it could be helpful diagnostic information (and possibly maybe for automated testing?).
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: geoo on December 29, 2022, 11:04:27 PM
Quote
Ill replya more in depth later. My initial reaction is I like NL's function; two modes: insert mode and non-mode and being able to switch it on or off during play. While insert mode is super useful it has very specific uses for myself anyway, im more often not using it so it would get annoying
Quote
I personally would not want this to be always-on. While I do make use of this mode at times in NL, the majority of the time I would have it turned off - it's essentially an "only when I specifically want it" feature for me. [...]
I think the question to ask here is: why would it be annoying if it was always on? It annoyed Simon when it was still assigning to the Lix whose task you just overwrote, but if the assignments to that Lix were cut, or if all desynched assignments were cut (as Dullstar proposed, something that had come to my mind as well), would there still be instances where it'd be annoying? I think it's hard to know without trying it for a while.
If in the majority of cases this is the behavior you desire, and in the few other cases there's an easy mechanism to cancel the replay, then this is probably good behavior.
Note that I do not see any use case where you actually want to keep the future assignments for the lix whose assignment you just overwrote, because they will be desynched anyway. The one exception is assigning permanent skills, however, you only need to assign them just before they actually take effect, and in that case a desyc of future assignments happens as well. Are there any use cases where you want to keep desynched assignments? If not, Dullstar's proposal is arguably even cleaner, and just cancelling the assignments of the lix you're overwriting is merely a heuristic that is easier to implement (and thus a sensible first step).

It seems cumbersome to me to have it something you turn on and off during play, especially if mentally you need to keep in mind whether it's on or off at a given time. (Tracking a state always takes mental capacity, and to me tracking whether the replay is still going or not is already complex enough, and I don't think I ever consciously look for the visual indicator to check for the state).
Having two different sequences of input actions corresponding to the two seems like it would be less confusing (because it's state-less), and the proposal (simply assign to insert, assign and click somewhere else to cancel) seems to be as simple as it gets and consistent with previous behavior for cancelling replays (and this behaviour will still be needed in the future, e.g. to cancel when backward frame stepping or loading from a savestate).

Also note that if you want to change an assignment to a lix/lemming to a later point in time, this behaviour is already required, as you have to click first to cancel the assignment.
This ties into the discussion in the other topic: https://www.lemmingsforums.net/index.php?topic=6120.0 In the context of option (1), the proposed behavior in this topic is simply a practical implementation of insert mode that is consistent with everything else. In the context of (2), whenever you go back to a previous point in time (rewind, load state, restart), future actions are cancelled, and the whole point of this topic is moot as remembering replays (and therefore insert mode) wouldn't exist.

Quote
I think if you want to default to on, it's *extremely* important to have an easy way to cancel the replay, and I'm not sure clicking the air is the best solution here, as it seems like a very easy misclick. I think a hotkey would be better: still possible to mispress, but I would suspect it to be less likely than accidentally clicking the air next to a Lix.
I disagree here. I really wouldn't like to use another hotkey for this, personally, as keyboard estate is really precious and I'm already out of keys within easy reach with all the other hotkeys. Clicking into air has been in place for ages, and I personally haven't had any issues with misclicking. (Admittedly, when you assign a skill it cancels as well currently, so the cursor position didn't matter and now it would, but I'm having a hard time seeing this a big issue. Given the many hotkeys already in place, I think fatfingering the one in question is more likely to me than misclicking, and that's from a user who's very clumsy with a mouse and prefers keyboard wherever possible.)
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Dullstar on December 30, 2022, 02:21:18 AM
I will say that cancelling assignments corresponding to a specific Lix is a weak heuristic, as while it *does* cover a case where desyncs are likely, many skills are capable of desyncing *other* Lix (i.e. basically anything that alters pathing) and those desyncs are a big part of why replay insert mode can be annoying at times.
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on December 30, 2022, 06:51:04 AM
My main concern is: When improve a default here, we're breaking user patterns with all of L3, L3D, WinLemm, NL, and prior Lix. The margin of improvement must be big enough to convince most players on first sight. The hope is that idea (*), click air to cut all future and assign to cut that lix's future, is unintrusive enough. I'm not so sure now, and I believe we need to add some modes (in a pinch) or options (I'd like those more) regardless of what eventually becomes default.

Viewed from the other side: Let's not expect (*) to be overly intrusive. Sure, the closest analog is NL's blue R, a mode that inserts everything. By design, (*) is already less annoying than inserting everything. namida's reaction is wise: It's too early to tell how annoying it will be.

Dullstar nails an excellent point: The experience hinges on how the game treats replayed assignments that aren't 100 % applicable. In Lix 0.10, assignments are optionally forced left or right, have a lix ID, a skill, and a physics update. An assignment becomes illegal if the lix's direction mismatches, or if the ID'd lix isn't able to accept that skill in that exact frame. Position and other lix are ignored. There is no feedback, e.g., in the tweaker, about which past assignments were legal and which were skipped for illegality. My hunch is that adding more requirements to these assignments will be a physics change, unless I jump through more hoops to not write them into replay files or send them over the network.

I think geoo is correct in that cutting the assigned lix's future is a good first step, and it's easy to implement. I'd really like to ship insert mode (possibly hidden behind options) in a few weeks, to get everybody to try it. :lix-grin: And we can still improve failed/relocated assignments later.

It's conceivable to add hotkeys and checkmark options: A hotkey for cancelling replays, no binding by default. Two checkmarks for what happens when you click the air: Advance physics by 1 frame, cut replay, both (current default), or neither. Hotkey real estate is scarce at 14 skills, potentially 15 or 16 in a few years, and it's customary to have advance-physics and cut-replay bound to the air click. The air click UI is also improvable, e.g., see github #400: Scissors mouse cursor while replaying (https://github.com/SimonN/LixD/issues/400).

In the options menu, the game hotkey page is getting crowded, and it's conceivable to open a second page for all non-hotkey options. Or maybe keep all non-replay options on the first page, and move the replay options to the second page.

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on December 31, 2022, 08:34:34 AM
Lix 0.10.3 cuts all future assignments when you assign. This is already annoying in a different way: Any disjoint union, or any two separated lix, will constantly cut each other's assignments. You'll likely want some form of inserting as default on multi-hatch maps. E.g., assignments might cut all future assingments of lix from that same hatch. I still believe (*) is better, but cut-future-of-same-hatch sounds viable enough, too, that I can't easily argue against it.

Extra requirements for assignments (putting more values into the struct): Those I'd rather not add in the next few weeks. But let's keep them in mind to make the inserting even better in the future.

The biggest worry remains that I roll out (*) and everybody gets upset over losing assignment-cuts-global-future. That was a reasonable behavior after all and it annoyed mainly on multi-hatch maps.

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: geoo on December 31, 2022, 10:19:25 AM
I will say that cancelling assignments corresponding to a specific Lix is a weak heuristic, as while it *does* cover a case where desyncs are likely, many skills are capable of desyncing *other* Lix (i.e. basically anything that alters pathing) and those desyncs are a big part of why replay insert mode can be annoying at times.
Certainly doesn't cover all cases, but in practice might serve the purpose reasonably well, espcially if you alter somewhat recent assignments and not assignments at the beginning of the replay. Always depends on the use case, and should certainly be better than nothing.

In the future, the same considerations will also need to be applied to the replay tweaker, i.e. desyncs caused by adjusting the frame of an assignment.

Quote
E.g., assignments might cut all future assignments of lix from that same hatch. I still believe (*) is better, but cut-future-of-same-hatch sounds viable enough, too, that I can't easily argue against it.
For single-hatch levels, that's basically having no insert mode. Usually, as a single-hatch level progresses, some worker lix are separated and operate essentially independently (and independent of the crowd), and so there are good use cases for insert mode.

Quote
The biggest worry remains that I roll out (*) and everybody gets upset over losing assignment-cuts-global-future. That was a reasonable behavior after all and it annoyed mainly on multi-hatch maps.
For a prototype, having an option in the options menu to enable/disable sounds like a good start, it allows people to experiment while being able to disable it if they get fed up. At the same time, you don't have to worry about in-level UI yet.
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on January 01, 2023, 07:54:04 PM
Attached is Windows 64-bit executable that inserts all assignments, but cuts future assignments to same lix and future nukes. Warning: It's experimental, I haven't tested it much.

On Linux: Build branch repinsert Build the normal master branch from my unstable Lix repository (https://github.com/SimonN/lix-unstable).

There is no new option yet. You can't toggle this insert mode; as long as you're replaying, you'll insert, cutting only that same lix's future. The next step for me will be creating these options.

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Dullstar on January 02, 2023, 05:28:53 PM
Dullstar nails an excellent point: The experience hinges on how the game treats replayed assignments that aren't 100 % applicable. In Lix 0.10, assignments are optionally forced left or right, have a lix ID, a skill, and a physics update. An assignment becomes illegal if the lix's direction mismatches, or if the ID'd lix isn't able to accept that skill in that exact frame. Position and other lix are ignored.
Having a check for direction is already a good start, I think. Position is probably sufficient additional information to ship the feature as on-by-default, I think (I'd want to test it more, but I also suspect it could be enough to make an option unnecessary). Considering other Lix could be convenient but I could also reasonably see it being annoying, and honestly it's not important. In general, though, I'd probably rather it drop too many assignments (within reason) than not enough assignments.

Cutting future assignments as a heuristic is probably fine, but I don't think it's sufficient. Including other Lix from the same hatch feels a bit hacky -- it might be more convenient to program than improving the detection of desynced assignments, and at the very least it does reduce the probability of random junk assignments, but it reduces the usefulness of the mode and doesn't 100% eliminate them. And while it makes perfect sense on a technical level why NL keeps the junk assignments in its replay insert mode, I don't think it's good UX.
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Ramon on January 03, 2023, 09:33:43 AM
My personal preference for this would be to have a hotkey such that holding it while clicking a Lix (similarly to force direction) would "insert" a skill rather than cut off the rest of the replay. I do however agree that the hotkey assignments are getting quite crowded and I have no proper suggestions on a clean solution.
Just curious though, are the "Control" and "Alt" keys not used for any ingame (level play mode) functions at all? I can maybe see randomly hitting Alt+F4 being a reason.
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: mobius on January 03, 2023, 11:54:00 PM
My personal preference for this would be to have a hotkey such that holding it while clicking a Lix (similarly to force direction) would "insert" a skill rather than cut off the rest of the replay. I do however agree that the hotkey assignments are getting quite crowded and I have no proper suggestions on a clean solution.
Just curious though, are the "Control" and "Alt" keys not used for any ingame (level play mode) functions at all? I can maybe see randomly hitting Alt+F4 being a reason.

Honestly I really like this idea; sounds very reasonable to me. This is the most often way in which I use insert mode in NL: inserting only a few skills, not major changes.
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on January 06, 2023, 01:09:02 AM
Option in 0.10.4: Lix 0.10.4 will have a single new checkmark option for insert mode. By default, this is off, and you get the old behavior: New assignments first cut the replay, then add the assignment. If you switch it on, it'll be permanently on during play. You'll get (*): All your assignments during replay first cut the same lix's assignments, then add your assignment.

This is mainly to ship 0.10.4 within a week, and to reconcile all experimental work with the stable version. Most likely, I'll change the feature over the months/years.



UI findings from streams: During my livestreams in January 2023, I had (*) active at all times. I got to be the front-line guinea pig of a potential UI revamp.

Insert mode has grown on me, I'd really like to keep playing with (*), and I'd like to improve it even more. There will probably be new hotkeys. There will be options about what those keys do.

Suddenly, air misclicks have become a problem. Now, I'd rather cut the replay with a more explicit action, not merely by clicking the air. Reason: I'm often deep inside the replay, and I'm solving most multitasking levels completely out of their normal timeline. I insert many skills, and each assignment is a click with the deliberate choice to keep other lix' futures.

Dullstar, you've foreseen correctly that, with insert mode, we would probably want a more explicit way to cut replays. I doff my hat.

But if you don't insert habitually, then airclicks are so very very nice to cut replays, and they're deeply rooted in tradition since L3, L3D, NL, earlier Lix, ... I'd like to continue to offer airclick as a way to cancel the replays, and that's why we need options.

Furthermore, at times, I would have liked to cut a single lix's future without assigning a new skill. There is no good way to do that. You'll have to guess the lix's ID, then erase all her future assignments in the replay tweaker one-by-one. I'm beginning to want a future-cutting skill.

Here's a UI idea. Everybody, feel free to shred it to pieces.
I'd still like to encourage everybody to try insert-by-default, but if you really don't want, you don't have to throw away tradition or your muscle memory.

Feedback in the UI can also become better regardless of insert-by-default or cut-replay-by-default. For example, when you tweak a lot, you'll want to see a hovered lix's ID printed somewhere.

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on January 12, 2023, 01:52:24 AM
I still play with always-insert. I misclicked air again, this time during Think Inside the Box. Rage! Had to redo most of the replay, luckily I still had it in my mind.

If I design the scissors button, it might get a third usage (item #2 in the following list) that would have been helpful in Think Inside the Box:
Remember: This ingame button is still pure theory. I'd offer the scissors button only when you selected insert-by-default in the options menu. If you selected cut-by-default, you'd instead get an insert button.

So much to do!

And so much Lix and also Lemmings these days. What a wonderful time.

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: nin10doadict on January 12, 2023, 11:59:28 PM
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?
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on January 18, 2023, 11:16:44 PM
Moved the NeoLemmix issue into a new thread: Replay Insert Mode ("blue R") silently overwrites (https://www.lemmingsforums.net/index.php?topic=6130). 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
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Dullstar on February 04, 2023, 03:30:11 PM
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).
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on February 21, 2023, 08:39:26 PM
(https://cdn0.iconfinder.com/data/icons/flat-design-database-set-4/24/table-row-insert-256.png)

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/ (https://duckduckgo.com/?t=ffab&q=paste+icon&iax=images&ia=images)
search://insert icon/ (https://duckduckgo.com/?q=insert+icon&t=ffab&iar=images&iax=images&ia=images)

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
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on March 04, 2023, 11:18:40 PM
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.
The third option (rewind as undo) has existed for years. I'd like to keep rewind-as-undo and possibly improve it (https://www.lemmingsforums.net/index.php?topic=6120.0).

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

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on March 08, 2023, 10:17:26 PM
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
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on March 21, 2023, 08:51:28 AM
(https://www.lixgame.com/etc/lix-with-d-2023-03-20.png)

(https://www.lixgame.com/etc/lix-with-d-2023-03-21.png)

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 (https://www.lemmingsforums.net/index.php?topic=6245.0)

-- Simon
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on May 27, 2023, 08:40:51 AM
(https://www.lixgame.com/etc/lix-with-d-2023-05-27.png)

Radical new plan. We'll ditch the scissors button again. Reasons:
The design insights that suggest other solutions:
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.

(https://www.lixgame.com/etc/lix-with-d-2023-05-26.png)

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:
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
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on June 16, 2023, 08:40:04 PM
(https://www.lixgame.com/etc/lix-with-d-2023-06-14.png)

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
Title: Re: Replay Insert Mode for Lix (like NeoLemmix's "blue R")
Post by: Simon on November 14, 2023, 03:11:25 PM
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