Author Topic: Turning builder at blocker separates builder from crowd  (Read 1391 times)

0 Members and 1 Guest are viewing this topic.

Offline Nepster

  • Posts: 1291
    • View Profile
Turning builder at blocker separates builder from crowd
« on: June 25, 2016, 10:11:06 am »
In D-Lix you can turn a builder by blocking another lix at the end of the lastest brick. However this (consistently) separates the builder from all other lix, because they will turn at the blocker even before stepping onto the brick with the blocker.
This is absolutely consistent with the general game mechanics, but I wonder whether we want to keep this behavior or instead allow the crowd to walk up as well?

Online Simon

  • Administrator
  • Posts: 1864
    • View Profile
    • Lix
Re: Turning builder at blocker separates builder from crowd
« Reply #1 on: June 26, 2016, 05:03:58 am »
This separation has bugged me for years. The builder and blocker work as obvious as I believe I can make them, yet they separate the builder from the crowd.

I'd like to do more research in Lix, NL, and L1. Any fix must strike a careful balance between special casing and altering the general building or blocking.

-- Simon

Offline ccexplore

  • Administrator
  • Posts: 4673
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #2 on: September 15, 2016, 10:11:40 pm »
I have not looked at the video to see the precise details, but based on what I think is happening, isn't it just because the builder is already closer to the blocker than the crowd ever could, when the blocker was assigned?  Wouldn't it be the case that if there happened to be other walkers standing at the exact same position where the builder was, they would've turned around as well?  The rest of crowd cannot follow because the blocker's arm extends beyond where the builder was when it was turned, making it impossible for the crowd to come close enough to the blocker to get up to the rest of the bridge.

Yes, it's probably surprising initially when you see it, but it seems to follow logically from all the expected basic behaviors of the respective skills.  More to the point, not really sure how you could change things to completely avoid this.  Unless maybe you don't turn the builder because it's deemed too close to the blocker already when the blocker was assigned?  But I wonder if such a behavior change may deviate too much from what people are used to already.

Incidentally, is it possible in lix to set the blocker far enough to the edge of the build brick so that the crowd can follow as well?  In L1 I believe it is possible in some setups, but mainly because of its goofy grid implementation for trigger areas.  Don't remember off top of the head whether it'd still be possible in L1 if trigger areas are pixel-based rather than grid-cell based.

Offline ccexplore

  • Administrator
  • Posts: 4673
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #3 on: September 15, 2016, 10:23:03 pm »
This reminds me, L1 actually enables a stranger variant of this:  because there is a delay between the build brick being made into solid terrain and the builder stepping up and forward onto said laid brick, you can time the blocker assignment so that it happens after the brick became solid (and laid down in the original rather than the turned direction) but before the lemming steps up onto it.  In L1 the result is that the builder will step up in the opposite direction (because of being turned by the blocker) from the brick that was laid down.  This makes it possible for the next brick being laid to be disconnected from the rest of the bridge altogether, because effectively the lemming steps up onto thin air and lays the next brick there (more precisely, the pixel of the next brick is diagonally adjacent to a pixel of the rest of the bridge, but of course in L1 physics you can't walk up a purely diagonal pixel-adjacency).

I have never yet tested it in Lix (or get well-versed enough in its fine details offhand) to know if such a thing can happen in Lix as well.

Offline mobius

  • Posts: 1904
  • I am like the blue rose
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #4 on: September 15, 2016, 10:32:29 pm »
in the old days, this was achievable but very difficult, it was much easier in DOS to place the blocker such that everyone continues upward [follows builder]. This, the former (current Lix) behavior was very unexpected to me, and apparently to others, I remember geoo being stuck on the level
Spoiler (click to show/hide)
for a very long time by his standards, which utilizes this very behavior.

At some point in SuperLemmini's existence, this was the standard and I don't believe lemmings following the builder up was possible.

I personally vote for the latter behavior; letting lemmings follow the builder. It seems much more natural than the former.
Spoiler (click to show/hide)
level was the only one I've ever heard of to use this behavior.
The former behavior should either be an option or left out entirely. It does have uses but more behaviors lead to more confusion etc.

Online Simon

  • Administrator
  • Posts: 1864
    • View Profile
    • Lix
Re: Turning builder at blocker separates builder from crowd
« Reply #5 on: January 19, 2017, 08:20:40 am »
0.6.19 is the stable version with can't-follow-blocked-builder, which is the problem from the first post. I tried this physics change for 0.7.1: Builder generates the brick further ahead of herself by 2 hi-res pixels = 1 lo-res pixel. Like this:



But this doesn't fix can't-follow-blocked-builder. There are several possible outcomes, one of them is can't-follow-blocked-builder. Even worse, 0.7.1 allows some turned builders to leave a gap:



Quote
you can time the blocker assignment so that it happens after the brick became solid (and laid down in the original rather than the turned direction) but before the lemming steps up onto it

This generates the above gap in Lix 0.7.1.

Is the blocker field too wide? Is the builder's movement at fault? I have no idea yet. This gap should occur in NL, but it doesn't. I'm confused.

I've attached Windows Lix 0.7.1 in case you want to test. Tell me if you need the source, it's only a wild debugging build, didn't push this to github. Levels aren't guaranteed solvable in 0.7.1.

-- Simon
« Last Edit: January 19, 2017, 08:33:07 am by Simon »

Offline namida

  • Administrator
  • Posts: 7889
    • View Profile
    • NeoLemmix Website
Re: Turning builder at blocker separates builder from crowd
« Reply #6 on: January 19, 2017, 11:31:59 am »
This doesn't occur in NL because a special rule exists to avoid it:

Suppose a builder places a brick while standing at point X, and facing to the right. We will call this brick Y.
After placing this brick, a blocker is placed such that the builder turns around. (Alternatively, a cloner is used to create a duplicate lemming which is facing the other direction; the rule applies in both cases.)
In such a circumstance, a new brick is placed, equivalent to what the builder would place while standing at point X if he were facing to the left. Brick Y also continues to exist.

The rule is also applied to Platformers (and I think Stackers, though I'm not 100% sure on this one; at any rate Stackers only have a one frame window in which this could apply, unlike Builders and Platformers which have a few frames of space to do this), but is far less visible due to that the brick would most often be overlapping an existing one. However, it can be observed at least with Platformers when the rule is triggered due to Cloner usage during placement of the first step. In fact, if I'm not mistaken, in newer builds Nepster has made such a rule apply to destructive skills as well.
« Last Edit: January 19, 2017, 11:37:28 am by namida »

Offline ccexplore

  • Administrator
  • Posts: 4673
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #7 on: January 19, 2017, 06:44:21 pm »
In such a circumstance, a new brick is placed, equivalent to what the builder would place while standing at point X if he were facing to the left. Brick Y also continues to exist.

Interesting, does this "extra" brick counts against the 12-brick total per builder or is it free?  Is the new brick being placed during the following cycle of animation, or does it just suddenly appear during the frame when the turnaround occurs?

Is the blocker field too wide? Is the builder's movement at fault? I have no idea yet. This gap should occur in NL, but it doesn't. I'm confused.

I haven't looked at this build and can't really comment on specifics when it comes to Lix mechanics.  In Lemmings, the blocker field is 12 (lo-res) pixels wide.  So ignoring the alignment aspect of things, the field would've extend 5-6 pixels away from the position of the blocker.  6 pixels is also the width of a build brick.  So I guess that probably makes it kind of easy for can't-follow-blocked-builder to happen.  It does help slightly though that in Lemmings the central 4-pixel column of the field is inert (ie. doesn't affect the lemmings' direction), so the blocker at least can't be too close to the builder to turn it.  With that aspect in play, I think the math might work out such that namida's rule (or something similar) might be just barely enough to prevent can't-follow-blocked-builder.

Shrinking the extend of the blocker field should also help matters, although that does have the annoying side effect of likely breaking a lot of existing replays (due to altering the timing of lemmings who ran into a blocker at some point), even though in most cases it probably won't actually break the solvability of a solution.
« Last Edit: January 19, 2017, 09:32:41 pm by ccexplore »

Offline ccexplore

  • Administrator
  • Posts: 4673
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #8 on: January 19, 2017, 09:31:58 pm »
It does help slightly though that in Lemmings the central 4-pixel column of the field is inert, so the blocker at least can't be too close to the builder to turn it.

This (width of an inert central column within the field) is something that might be worth highlighting as yet another detail you can potentially tweak to help with this effort, as it establishes a minimum required distance between the blocker and the builder in order for the turnaround to even happen, in effect reducing the distance the field can extend past the builder's position to cause the issue.  And unlike reducing the extent of the field, it is also less likely to break replays.  But arguably having a central column of inert field is itself not fully intuitive either? :-\

Offline namida

  • Administrator
  • Posts: 7889
    • View Profile
    • NeoLemmix Website
Re: Turning builder at blocker separates builder from crowd
« Reply #9 on: January 21, 2017, 07:10:55 am »
Quote
Interesting, does this "extra" brick counts against the 12-brick total per builder or is it free?  Is the new brick being placed during the following cycle of animation, or does it just suddenly appear during the frame when the turnaround occurs?

The extra brick is instant and free. You can see the behaviour in this video at about 1:30.

Online Simon

  • Administrator
  • Posts: 1864
    • View Profile
    • Lix
Re: Turning builder at blocker separates builder from crowd
« Reply #10 on: January 21, 2017, 10:53:31 am »
Great ideas, thanks.

I prefer the 0.7.1 brick placement over the 0.6.x brick placement. Reasons: Builder becomes more powerful in multiplayer. And I don't like to generate terrain behind the lemming; in 0.6.x, you could seal climbable ledges by building immediately after hoisting. Proxima suggested strongly the 0.7.1 brick some years ago.

A different blocker field can't fix the gap. Proof: You can always block a builder in whatever builder frame you choose, and following lixes have no effect on the gap.

A different blocker field can nonetheless fix can't-follow-blocked-builder.

Considering that I want 0.7.1 bricks, I should fix the gap first, then consider can't-follow-blocked-builder again. We've discussed the NL brick-doubling when it was introduced for cloned lemmings. We settled on a special rule, even though we would have liked to avoid one. Hmm.

-- Simon

Offline ccexplore

  • Administrator
  • Posts: 4673
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #11 on: January 21, 2017, 12:03:14 pm »
DOS Lemmings does 0.7.1-style placement when facing right and 0.6.x-style placement when facing left, so the gap is not quite as pronounced (you get a diagonal adjacency) but still functionally a gap.

The gap basically happens because the builder blindly proceeds to step forward (and up) onto the brick it thought it had laid, when the brick actually laid is in fact now in the opposite direction, and with 0.7.1 brick placement, any movement in the wrong direction immediately moves you off the laid brick.

Without the brick-doubling hack (which admittedly doesn't actually look too bad in the video), perhaps a special rule to consider when it comes to the gap issue, is to simply not do the vertical component of the "step-up" movement when it's detected that the builder no longer faces the same direction as the brick it most recently laid?  This would result in shifting the top (ie. turned) portion of the build bridge downwards so it now touches the bottom portion.  (Granted, other strangeness can result if we're talking about the first brick being laid; for now I'll ignore that case.)  So you don't have the gap, and may even be able to minimize can't-follow.  (In effect, I believe this is sort of like brick doubling, except not actually doubling--so not instantaneous and not free.)  Other potential variations to examine would be to eliminate just the horizontal component or both components of the step-up.

Offline namida

  • Administrator
  • Posts: 7889
    • View Profile
    • NeoLemmix Website
Re: Turning builder at blocker separates builder from crowd
« Reply #12 on: January 21, 2017, 12:22:21 pm »
Quote
We've discussed the NL brick-doubling when it was introduced for cloned lemmings. We settled on a special rule, even though we would have liked to avoid one. Hmm.

It should be noted that one argument that could have been (and very well may have been; I don't remember too clearly) presented in favor of this in NL for cloners, is that it already existed for the blocker interaction. Although strictly speaking, that level can in fact be solved without the special case occurring, the case usually would occur, and this level in fact predates the Cloner skill altogether.

Online Simon

  • Administrator
  • Posts: 1864
    • View Profile
    • Lix
Re: Turning builder at blocker separates builder from crowd
« Reply #13 on: May 10, 2017, 02:01:38 am »
I haven't got fresh ideas. Both the 0.6 or 0.7.1 brick placement bring design problems.

I'll probably introduce 0.7.1 bricks, with brick doubling on blocker turning  builder. It sounds weird at first, why should you get bonus terrain from the blocker, but the doubling is surprisingly nonintrusive and feels appropriate. The blocked bridge is nicely traversable.

-- Simon

Online Simon

  • Administrator
  • Posts: 1864
    • View Profile
    • Lix
Re: Turning builder at blocker separates builder from crowd
« Reply #14 on: May 13, 2017, 08:37:38 pm »
In NL: Assume lem A builds, lem B blocks on A's stairs while A still has many bricks left to build. No other skill assignments. After A has turned and built many more bricks, the crowd tries to follow up the resulting staircase, turning at B.

In this scenario, will the crowd always move up all the stairs to where A is now? Can the crowd ever be separated, therefore stuck in the lower half of the stairs? I.e., are there frames/positions for B's blocker assignment such that the crowd is separated in NL?

-- Simon
« Last Edit: May 13, 2017, 08:47:04 pm by Simon »

Offline Nepster

  • Posts: 1291
    • View Profile
Re: Turning builder at blocker separates builder from crowd
« Reply #15 on: May 13, 2017, 08:55:22 pm »
No, I am 99% sure that there is no way to separate the builder from the crowd. And if there is, then this would be a bug that has to be fixed. :P