[Fixed][BUG][Player] Overlapping Blockers with teleporters and pre-placed lems

Started by IchoTolot, April 08, 2018, 03:33:01 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

IchoTolot

Today we found a nice interesting behavior that could be a bug. We had the idea to overlap blockers and their blocker areas using teleporters and pre-placed lemmings - and it worked!

Attached is a test level, with a replay + screenshot. These show an interesting (maybe buggy) behavior that pushes lemmings trapped between 2 blockers out by using a teleported-in third blocker between the initial blockers.

I don't see any levels using this behavior and would like to make Nepster aware of this and we should decide if this is fine or needs some fixing.

So basic question: Is this overlap intended, or are any changes needed here? ???

Nepster


Nepster

The fix for overlapping preplaced blockers is easy: Whenever creating a preplaced blocker at the level start, check whether it overlaps. If so, then ignore the blocker flag and make the preplaced lemming a normal walker.

However the fix for teleporting blockers onto each other is far harder: At the moment my best idea is to check whether the blocker would overlap at the target position (i.e. after coming out of the receiver) and if so, don't teleport him. However this allows using this "feature" as a trick in a level. As this check is not an integral part of a teleporter, therefore not expected by the player and certainly not something one would casually stumble upon, I deem it too hard to find. This really contradicts my vision, that all NeoLemmix levels should be solvable by clever combination of (reasonably) simple and expected rules.
Any ideas or comments?

IchoTolot

My idea would be: If a blocker overlaps the receiver area and therefore the teleported blocker, the blocker skill is not teleporter with the lemming - only the lem itself gets teleported --> he would become a walker again. This is against the rule that skills get teleported as well, but here we could say that the no overlapping blocker rule takes priority.

"don't teleport him" as Nepster suggest would be fine with me as well, but I think the simple not teleporting the skill would lead to less "trick levels".


Proxima

Quote from: IchoTolot on April 22, 2018, 01:22:05 PM
My idea would be: If a blocker overlaps the receiver area and therefore the teleported blocker, the blocker skill is not teleporter with the lemming

That would still be a weird exception, though. I would prefer either "blockers never teleport" or "teleporting blockers always reverts them to walkers" (which fits conceptually with the existing "blockers revert to walkers when they are displaced"). But I don't know whether any existing levels would be disrupted by this change.

IchoTolot

QuoteBut I don't know whether any existing levels would be disrupted by this change.


I have not yet seen a level which needs overlapping blockers. Only teleported skills in basic form.

Edit:

Quote"blockers never teleport"     "teleporting blockers always reverts them to walkers"

That I can confirm will break levels.

Only preventing overlapping blockers I think won't break stuff --> only revert to walker/ not teleport the skill when overlapping.
Also always reverting them or preventing them in general would be another special case too compared to the other skills which will get teleported. So I would not call it simpler and more understandable; and as the overlap is a rare occasion I would still target the fix at the overlap itself rather than the general rule.

Simon

The most exciting thread on the forums this month.

Blockers never teleport: This is a double-special case. Reason: This makes both the blocker special from the teleporter's view -- the teleporter will eat all other activities, but not blockers -- and it makes the teleporter special from the blocker's view -- the blocker would enter exits, traps, ..., but not teleportrers.

Blockers walk after teleporting: This is a single-special case. Only from the teleporter's view, blockers are special. From the blocker's view, nothing is strange; the blocker would also not block after entering exits and traps.

Blockers teleport except when it produces overlap: This is a triple-special case and feels extremely unlikely to be found unless one is bug-hunting. It has some merit still; this removes the overlap (Does it really? Do any corner cases remain?) with as little collateral damage as possible. The downside is that it allows nasty special-case-showcasing levels. (Really? How would one look like?)

Allow this overlap: Specify what should happen when blocker fields overlap, and allow it in this one case. This is consistent with NL assignments in general. You forbid miner assignments when standing on steel, but you can have an old miner walking onto steel and continue. Likewise, you can forbid blocker assignments when they generate overlapping fields, but allow overlapping fields by other means than assignment. The downside is that overlapping fields need a thorough spec and bring new bugs.

-- Simon




Teleported blocker walks if it would produce overlap: I like this better than teleport-blocker-only-when-no-overlap-results. Teleported-blocker-walks-if-it-would-overlap resolves the teleported blockers similarly to Nepster's proposed fix for pre-placed blockers: When two pre-placed blockers overlap, the blocker with the higher ID walks. (Edit; added after Icho's reply #9)

Dullstar

How exactly would blockers never teleporting possibly break levels? It doesn't seem like placing a blocker in a position where it could be teleported would accomplish anything useful, since you could just assign the blocker to lemming that has already been teleported, rather than directly teleporting the blocker by assigning it on the teleporter.

namida

Quote from: Dullstar on April 23, 2018, 03:01:25 AM
How exactly would blockers never teleporting possibly break levels? It doesn't seem like placing a blocker in a position where it could be teleported would accomplish anything useful, since you could just assign the blocker to lemming that has already been teleported, rather than directly teleporting the blocker by assigning it on the teleporter.

Two lemmings walk past a teleporter at the same time. Lemming that doesn't get teleported blocks, and remains a blocker after teleporting. How that's useful is up to the level designer.
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)

IchoTolot

Quote from: Dullstar on April 23, 2018, 03:01:25 AM
How exactly would blockers never teleporting possibly break levels?

Let's say after it was decided that teleporters do transport the skill, I took it for granted and made some experiments and found ways to use this for puzzle purposes. ;)

@ Simon: What about Blockers walk after teleporting when it produces overlap? This would be a double-special case that's also unlikely to be found, at least with my thinking.

I still think this is less likely to affect the game than allowing overlapp or not transporting the skill correctly when no overlap is there. This behavior is a very special case that's not worth a big hassle of changing overlap or skill transport mechanics in general in my opinion.
The Blockers never teleport and Blockers walk after teleporting is way more likely to affect things than relying on the overlap happening at the same time and I can't think of a way to create levels relying on Blockers walk after teleporting when it produces overlap.

Also I really don't like the blocker clusters you would be able to make with the overlap allowed. I think it's clearer now with the restriction active. I really would hate allowing overlap to be honest!

Nepster

Quote from: Simon on April 23, 2018, 01:18:04 AM
Blockers teleport except when it produces overlap: [...] The downside is that it allows nasty special-case-showcasing levels. (Really? How would one look like?)
Here is such a level and a replay, that will only work after this change. I am fairly sure this level is impossible in the current NeoLemmix version.

Simon

Quote from: IchoTolot on April 23, 2018, 07:30:32 AM
@ Simon: What about Blockers walk after teleporting when it produces overlap? This would be a double-special case that's also unlikely to be found, at least with my thinking.

I like that better than teleport-blocker-only-when-no-overlap-results. Teleported-blocker-walks-if-it-would-overlap resolves the teleported blockers similarly to (Nepster's proposed fix for pre-placed blockers: When two pre-placed blockers overlap, the blocker with the higher ID walks).

Still, no solution (among the 4 from my reply #6 and teleported-blocker-walks-if-it-would-overlap) clearly springs to mind as an obvious easy answer.

Quote from: NepsterHere is such a level and a replay

Nice. I agree with the push for fewer special cases, or at least for less glaring exceptions to the normal rules.




It might be nice to find a rule that doesn't mention teleporters at all. The issue is overlapping blocker fields. Teleporters merely happen to be the easiest way to create overlaps. This suggests that the rule should allow the teleportation and fix the problem afterwards.

-- Simon

namida

Quote(Nepster's proposed fix for pre-placed blockers: When two pre-placed blockers overlap, the blocker with the higher ID walks).

This could be generalised to "When two blockers overlap, the one that's been a blocker for the least amount of time walks" - if we see it as that, since the lower-ID preplaced lemmings get placed first, they've been a blocker for a nanosecond longer.

And thus, this rule could then be applied to if this situation arises mid-game as well. It could lead to some messy results, but it does provide a consistent rule that absolutely prevents blocker overlap, and leaves teleport-blocker allowed. Possible implementation: Have a variable that keeps track of which frame a blocker was assigned to the lemming on. In the case of two overlapping blocker fields, the later-assigned one walks.

I can think of one way such a mechanic could be abused to create a level with a very obscure solution, but I would think this situation would be so difficult to set up that it probably wouldn't happen in practice outside of a test case, or a level that makes it very obvious that the trick is being used.

The one other solution I could think of that would still be fairly consistent, is "treat teleporters the same way as exits, in terms of what can or can't go through them" - IIRC, blockers cannot exit (whereas other skills you'd generally want to pass through a teleporter, such as a builder or basher, can). Instead of creating a new special case, this simply applies an existing one to another situation, and this somewhat makes sense as most teleporter designs convey the impression that, in-universe, a lemming would need to actively choose to enter it, just like they would with an exit. This will, however, break any level that requires on blocker teleporting (or perhaps faller / floater / glider / falling-ohnoer teleporting). Nevermind, seems blockers can exit, so this wouldn't be consistent.
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)

IchoTolot

Quote from: namida on April 23, 2018, 10:18:44 PM
(or perhaps faller / floater / glider / falling-ohnoer teleporting).

I actually saw quite a few levels using teleported fallers or floaters.

Therefore I would still vote for the "When two blockers overlap, the one that's been a blocker for the least amount of time walks" (or in the teleporter case "Blockers walk after teleporting when it produces overlap") rule.

Edit: Actually blockers can exit! Simply place one on a locked exit and open it afterwards --> blocker gets freed and exits.

Nepster

Quote(Nepster's proposed fix for pre-placed blockers: When two pre-placed blockers overlap, the blocker with the higher ID walks).
I don't think this should have any impact on the discussion what to do for teleporting blockers. Players will never ever see this rule in action, because the only time it is applied is before the level even starts. So it is only a safe-guard against level designers messing up.