CE 1.0.1
NL 12.14
During Insert Mode between physics updates N and N+1, when you insert a skill assignment to lemming A that will affect physics update N+1: First erase the future of A in the replay (erase all assignments to A at N+1, N+2, N+3, ...), then assign to A.
This will fix two problems at once:
- The garbage will be automatically deleted. In existing NL, the player must now either go to the replay editor to delete the garbage by hand, or, worse, let it clutter the replay and hope.
- You naturally allow same-frame-same-lemming overwriting. CE 1.0.1 blocks same-frame-same-lemming, which is the most annoying type of failed assignment because the intention is clear.
If you're concerned about losing data, we can talk. The hunch is that you shouldn't worry, but I'm happy to be convinced otherwise.
Armani and I have already argued for this in Improve same-frame assignment behaviour in Replay Insert mode (https://www.lemmingsforums.net/index.php?topic=6130.0), which is now closed. That thread, anyway, became more about the sound for failed assignments and whether to advance physics on failed assignment.
-- Simon
Quote from: Simon on November 02, 2025, 02:59:32 PMArmani and I have already argued for this in Improve same-frame assignment behaviour in Replay Insert mode (https://www.lemmingsforums.net/index.php?topic=6130.0), which is now closed.
Not sure why the topic was closed as it hasn't yet been resolved and is still in the Bugs & Sugs board. Anyways, I've re-opened it.
Quote from: Simon on November 02, 2025, 02:59:32 PMFirst erase the future of A in the replay (erase all assignments to A at N+1, N+2, N+3, ...), then assign to A.
...
CE 1.0.1 blocks same-frame-same-lemming, which is the most annoying type of failed assignment because the intention is clear.
My instinct with this is (and always has been) that we shouldn't erase replay actions invisibly; if the player wishes to erase all future actions for this lemming, it should ideally be done via the replay editor where the player can see exactly what's happening.
Regarding the second point, IMO the benefit of {not accidentally overwriting a previous action unintentionally} outweighs the annoyance of having to either (a) move to another frame to make the desired assignment, or (b) manually delete the existing action (and future, if desired) via the replay editor.
The whole point of Replay Insert mode is that it preserves all existing actions. The OP is suggesting a third mode, which preserves all existing actions {except these}. Further complication of the replay system, more for new players to learn, potential for mess/bugs in the code.
Bottom line is that the engine is ultimately meant to be a game. The replay editing features are a nice bonus, and should of course be as sophisticated as we can possibly make them. But in-game actions such as skill assignments should have completely visible (or audible) results; nothing should be happening that the player doesn't know about (i.e. deleting future assignments).
Possible solution:A hold-during-assignment hotkey which means "I want to delete" might be the best compromise here? We'd also change the cursor whilst it's held.
Quote(a) move to another frame to make the desired assignment
On a same-lemming assignment? If you add your new assignment after/before the existing assignment, you waste a skill, or you produce garbage that's going to waste a skill on the next frame and cancel your worker lemming. (a) doesn't work around a same-lemming clash; this is different than for a different-lemming clash.
Quote(b) manually delete the existing action (and future, if desired) via the replay editor.
Obviously we disagree here.
I'll write more in late November 2025 because I'll be short on time these days. Until then, focus on other bugs.
In the meantime: I encourage other players to join.
-- Simon
I'll have time to look at the code together on Saturday, November 29th. Does that suit you? I'll have time all day and you can pick the time.
-- Simon
Quote from: Simon on November 18, 2025, 05:36:10 AMI'll have time to look at the code together on Saturday, November 29th. Does that suit you? I'll have time all day and you can pick the time.
Apologies Simon, I missed this message. I'd be happy to look at this with you again at some point in the next few weeks.
Hi! Thanks for coming back to this.
Time is tight these weeks. I can offer you: [some dates, WillLem picked Saturday, 7th]. Time of day is your choice, ideally in the atfernoon or early European evening.
This is mainly to look at the NL source to look at the existing infrastructure, and to rule out potential bugs that would arise from the implicit cutting of same-lemming future.
-- Simon
Quote from: Simon on March 02, 2026, 06:31:08 PMI can offer you: Saturday, March 7, or Sunday, March 8
Both are fine for me, let's go for 3pm CET (2pm UTC) on Saturday. We should only need a couple of hours. See you then :)
All right, I've noted Saturday, March 7th, 15:00 CET (14:00 UTC). See you!
-- Simon
Implementing the function from voice chat.
I can't build Delphi here to test. There will probably be many small errors.
How wise is cutting future nukes when we cut an assignee's assignment future? I think it's correct to cut the future nuke. If you disagree, put Continue; instead of the empty statement ;. I erase future nukes in Lix, got no negative feedback, and most NL levels behave like Lix levels in this regard. Nuke levels are rare and you can always re-insert the nuke. Inserting a nuke shouldn't cut future assignments of anybody.
procedure TReplay.EraseLemSkillAssignment(
L: TLemming;
aFrame: Integer;
DoCutFuture: Boolean);
var
Item: TBaseReplayItem;
i: Integer;
begin
for i := fAssignments.Count - 1 downto 0 do
begin
Item := fAssignments.Items[i];
if (Item.Frame < aFrame or (Item.Frame <> aFrame and not DoCutFuture)) then
Continue;
if (Item is TReplayNuke) then
; // Always delete a future nuke, like in Lix. Okay in NeoLemmix or not?
else if (Item is TReplaySkillAssignment) then
if ((Item as TReplaySkillAssignment).LemmingIndex = L.LemIndex) then
Continue;
fAssignments.Delete(i);
end;
end;
-- Simon
Thanks, Simon.
Your modified version of the method compiles with the following tweaks (see condition brackets, no ";" for the empty statement, and updated L.LemIndex check from "=" to "<>"):
procedure TReplay.EraseLemSkillAssignment(
L: TLemming;
aFrame: Integer;
DoCutFuture: Boolean);
var
Item: TBaseReplayItem;
i: Integer;
begin
for i := fAssignments.Count - 1 downto 0 do
begin
Item := fAssignments.Items[i];
if ((Item.Frame < aFrame) or ((Item.Frame <> aFrame) and not DoCutFuture)) then
Continue;
if (Item is TReplayNuke) then
// Always delete a future nuke
else if (Item is TReplaySkillAssignment) then
if ((Item as TReplaySkillAssignment).LemmingIndex <> L.LemIndex) then
Continue;
fAssignments.Delete(i);
end;
end;
I need community feedback before deciding on the following:
1) Should we allow same-lem-same-frame assignment in Replay Insert mode?
2) Should we always erase the lem's future existing assignments when making an assignment, regardless of replay mode?
3) Should we erase future nuke when making an assignment in Replay Insert mode?
I'll give this a minimum of 1 month from today to generate discussion.
Your silence = I will probably mostly go ahead and follow Simon's advice, i.e. we'll allow same-frame-same-lemming overwrite even in Replay Insert mode, and will also erase the future assignments of that lemming. I'll also probably make this behaviour optional in Settings; having thought over the proposed hotkey, it's probably asking too much of players to press a key every time they want to make an assignment if they know they always want the same behaviour. Meanwhile, I probably won't erase the nuke, but Simon may convince me otherwise next time we meet.
So:
1) Yes, optionally 2) Yes, optionally 3) Maybe, but probably not.
I'll steelman a case for the restrictive behavior 2) No, and weakly 1) No:
You have 50 lemmings in a dense pack. The replay contains a future builder assignment for one of them, followed by a largely-completed 10-skill route (he's a main worker). Now you want to bash with one of the 50 lemmings in the dense pack. You click into the middle of the pack. If you're unlucky and bash with the soon-to-be builder, you lose the builder's future, i.e., you cut the 10-skill route from the replay.
In Lix, this risk is reduced because Lix (under default options) is in insert mode whenever the tweaker is open. In the tweaker, you see the hovered lix's future assignments highlit. You'll think twice before you click. NL doesn't have this default behavior and indeed warrants separate risk-vs-annoyance balance.
Ideal would be: 1)-2) Yes, and some previewing power into the replay/click, and an undo stack for changes to the replay. Such undo is expensive to implement. Will and I consider undo out of scope of this issue here.
Please participate in WillLem's call for feedback (in the post before this)!
-- Simon
Task: Design 1)+2) Yes in a way that prevents my above post's worry of 50-lemming lottery.
Idea: In insert mode, whenever you hover over a lemming, show the number of future assignments that will be cut if we click. You'll know it even in a dense pack, and even without looking at any replay listing. I'll see when I find the time to implement this in Lix.
-- Simon
Quote from: Simon on March 09, 2026, 07:53:10 PMIdea: In insert mode, whenever you hover over a lemming, show the number of future assignments that will be cut if we click.
I like the idea for sure. Visual feedback which lets the user know that future assignments will be erased is pretty much essential for this feature.
The question becomes "where?"
Panel info (far left: "ATHLETE", "BUILDER", "ZOMBIE", etc) is already busy... we'd probably have to decide which is more important; showing lemming action info, or showing future assignment info (e.g. "CUT 7 ACTIONS"). I'd suggest the latter is more important.
We can paint something above the lemming's head? More onscreen clutter, I'd probably prefer not to do it this way.
Suggestions welcome.
It's been one week. Could do with some feedback on this (https://www.lemmingsforums.net/index.php?msg=108221) from anybody that uses NeoLemmix. Thanks :)
Meanwhile, how's this for "erase future assignments" feedback?
(https://i.ibb.co/S49GmPw5/image.png)
OK, I'm going ahead and marking this one as resolved for now. The feature is present in CE 1.1; we can make tweaks depending on user feedback, and of course Simon is welcome to suggest further refinements if necessary.
You've released CE 1.1 with this in time for Level of the Year 2025, thanks! This June 2026, I'll solve on livestream with CE 1.1 and will report here.
-- Simon
Here is the promised feedback after solving harder levels for a few days with CE 1.1.1.
The new behavior is: In insert mode, when you want to assign, you first implicitly delete the future of the assignee, then assign. You're prevented from assigning over a different lemming's same-physics-update assignment.
In CE 1.1.1, you must first enable this behavior in the options menu. I.e., the default is: In insert mode, you preserve same-lemming future, and you're prevented from assigning over an existing assignment (same or different lemming) on the same physics update.
I have no feeling which of the two behaviors should be default. I assume that WillLem prefers to play with the total blocking behavior and Armani wants to play with the implicit cutting of same-lemming future. But nobody spoke during the few weeks of "Your silence = I will probably mostly go ahead and follow Simon's advice". Is WillLem really the only one to prefer the total block against same-physics-update assignments even of same lemming?
I've found zero bugs with how the new assigning behavior affects replay content. Thank you!
The "Cut 2 tasks" feature works well and I believe it's going to absorb a lot of subconcious concern.
I've found one bug with the "Cut 2 tasks" display in the bottom left hand corner: When you view a physics update with a freshly assigned lemming, you see, during this single physics update only, that lemming's information instead of what I expect, i.e., instead of the number of to-be-cut assignments, and that information is printed in purple like the number of to-be-cut assignments would be. Video of this "Cut 2 tasks" display bug (https://www.lixgame.com/etc/ce-1.1.1-cut-2-tasks.mp4) -- a benign bug, purely a visual oddity. Continued in separate topic: 'Cut tasks' not displayed for 1 frame in Insert Mode (https://www.lemmingsforums.net/index.php?topic=7476).
I didn't have yet to work around garbage nukes that remain in the replay after an inserted assignment. No strong feeling either way.
Several times, I wanted to cut during insert mode by air click. Neither option allows cutting by air click. I had to exit insert mode and cut.
I conjecture that ultimate truth will be found in merging regular replay mode with insert mode. But that will be a separate topic for the future. This topic here (Insert Mode: Same-Lemming-Overwrite) is about making insert mode better without touching regular replay mode.
-- Simon
Quote from: Simon on June 14, 2026, 07:19:29 PMI've found one bug with the "Cut 2 tasks" display in the bottom left hand corner
Started this topic (https://www.lemmingsforums.net/index.php?topic=7476.msg109038;topicseen#msg109038) for this bug, thanks for reporting.
Quote from: Simon on June 14, 2026, 07:19:29 PMSeveral times, I wanted to cut during insert mode by air click. Neither option allows cutting by air click. I had to exit insert mode and cut.
I conjecture that ultimate truth will be found in merging regular replay mode with insert mode.
You're probably right, but let's start a new topic for this.
Still no hunch about keeping or cutting the nuke. From one viewpoint, it's part of the future of every
lix lemming. From another viewpoint: NL has nuke levels. On some nuke levels, you'll nuke first, then insert skills around the nuke. Hard to say how many nuke levels need the nuke preserved. I'll let you know when I have further insight.
In my stream today, again I wanted to be in insert mode by default. I imagine the following development progress.
- I implement always-insert in Lix.
- I playtest that on livestream with Nepsterlix, Clamlix, or Rubix's pack.
- I'll summarize results. Maybe I'll have confused myself with always-insert.
- I'll make a new topic about NL-CE.
Of course, other forumers are free to make a case for always-insert in CE before I finish my investigation in Lix. If you think that I'm on the right track, spearhead the discussion, I'll be happy. And if you think that I'm insane, make your case against it.
-- Simon
Feedback from the Level of the Year 2025 streams:
The "Cut 2 tasks" text has been surprisingly helpful. I was working on the early parts of a solution and two workers were coming out of the crowd. I wanted to re-do one worker's future, but I forgot which worker was which. It helped to see "Cut 2 tasks" vs. "Cut 8 tasks". I immediately knew which lemming's future to cut.
-- Simon