Should air-bashing at steel turn climbers? [DISCUSSION]

Started by Nepster, July 01, 2016, 05:33:08 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Nepster

Due to a combination of two different changes in the basher mechanics, it is currently (in the experimental version) no longer possible to turn a climber at a steel wall by air-bashing in front of it.

Change 1: Only destructible terrain determines whether a basher continues after a stroke.
A basher stops after a stroke, if there is no terrain at height 4-6 several pixels in front of him. On the other hand no steel checks are done at height 5-6. So in a situation like "1" in the image, where there is a row of steel 5+6-pixels above the ground, a lemming continues bashing in V1.43. To avoid this, I changed the checks to require at least one destructible pixel at height 4-6 to continue bashing.

Change 2: A lemming checks only directly in front of him for steel to turn around.
The reason of this change was discussed in the thread Bashers turn inconsistently at steel.

As a consequence, there is (in the expermental version) no possibility to turn a climber using a basher in front of a steel wall, cf. setup "2" in the image: When assigning the basher, there are no longer steel checks during the terrain removal frames (cf. change 2). And then (due to change 1) the basher stops without moving even one pixel forward. So he never checks for steel in front of him to turn around.

On the other hand, when placing a bit of destructible terrain behind a thin steel wall (see setup "3" in the image), players still can turn climbers using a basher. The terrain behind the wall suffices that the basher continues, walks forward until reaching the steel wall and turns there by the new steel checks.

So the question is: Should something be changed? If yes, then what would the correct behavior be?

namida

Whatever the behaviour might be, I do think that the behaviour for case 2 and 3 here should be identical.

Perhaps an additional condition should be added when determining whether to continue bashing: "Even if no destructible pixels are found, if an entire column is solid, continue bashing". Exactly how the "entire column" should be determined is a bit less straightforward - should it be the entire height of the bashmask? Just the region checked for solid pixels? Perhaps between the floor (or slightly above it) and the highest checked pixel? I don't know.
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 July 01, 2016, 06:08:23 PM
Whatever the behaviour might be, I do think that the behaviour for case 2 and 3 here should be identical.

I am with this and in both cases the basher should not turn.

Maybe a check: If the basher hits a straight up terrain wall stop + walk on. A basher can only hit a wall if it was indestructible for him = steel.

namida

QuoteI am with this and in both cases the basher should not turn.

Why not? If the basher had bashed through some terrain and reached this, he would turn around. Does it really make sense for his first stroke to be different?
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

Well it doesn't really make sense if 2 and 3 were different and in 2 using a basher as a walker has just led to the holy cow + introduced backroutes -----> make 3 not turn. In 3 he also not goes through terrain first, he hits steel.

namida

The "Holy Cow" trick would still be negated because under current exp. physics, the basher doesn't stop until he's right up against the steel (the same position a walker would have to be in to turn around). Thus, in a level like Holy Cow, the basher would fall into the gap rather than turn around.

However, I would think that if there's no gap, and the basher can move all the way up to the steel, he should do so and then turn around (this is consistent with what would happen if there had been some normal terrain that he bashed first). My second choice would be to disallow the assignment altogether.

Look at it this way - suppose, in situation 3, the lemming came from the right rather than the left. You would expect him to hit the steel and then turn around, without trying to climb the wall (if he were a climber). Do we want a different rule just because he hits the steel during the 1st stroke rather than the 3rd or 4th? The second choice there (of disallowing the assignment) is a smaller deviation - it's a seperate rule of "you can't assign a basher in <situation>", rather than an exception to an otherwise consistent rule.
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)

Proxima

Quote from: namida on July 02, 2016, 07:22:53 PMLook at it this way - suppose, in situation 3, the lemming came from the right rather than the left. You would expect him to hit the steel and then turn around, without trying to climb the wall (if he were a climber).

I agree with this, and so I think in situations 2 and 3, the basher should turn round.

Nepster

I see one problem with turning: What should the rule be to continue bashing? If one of you can propose an easy rule when there is sufficiently much steel to continue, that would be nice.

Otherwise I would prefer to implement a rule without turning: A basher continues only if there is destructible terrain in front of him and no straight steel wall of at least the same height (as the destructible pixel).

namida

Destructive skill users turning around when they hit steel has been a mechanic in virtually every version of Lemmings (the only notable exception I can think of is Lemmini), and many levels exist that make use of it. Without a very good reason, I do not think it would be appropriate to change this.

Perhaps the rule should be - a basher continues bashing (this is only in terms of "do I stay as a basher or revert to a walker due to lack of terrain?" - the current steel check would remain for if he actually is hard up against it) if either (a) any pixels in the current check are destroyable terrain, or (b) at any X position within the current check zone, there is solid terrain from the top of the check zone down to (LemY-1). This is basically what I was suggesting here, just in more technical terms this time.

Quote"Even if no destructible pixels are found, if an entire column is solid, continue bashing"

This is quite a tricky one, as while it's easy to define in human terms what should happen, it's much harder to define it in technical terms.
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)

Nepster

I did, what I should already have done two days ago, namely reading the precise basher mechanics again. As it turns out, after a basher stroke he even continues being a basher if there is only a steel pixel at height 4 pixels. However when moving forward and reaching this pixel, he will turn around, which would not happen at height 5 pixels.

So what goes wrong in the example above? All checks for continuing bashing are only made 8-14 pixels in front of the lemming, because he will move 5 pixels and then stand 3 pixels away from the end of the miner tunnel. So the terrain check is geared towards the basher mask on the next stroke. However in the examples above, the steel piece is too thin. So when standing within the nearest 5 pixels (so that the basher will hit the steel wall when moving forward), he will no longer "see" this terrain and stop.

This gives us an easy alternative solution:
  Instead of checking 8-14 pixels in front of the lemming for new terrain, check the whole range of 1-14 pixels in front of him.

What do you think?

mobius

#10
Although I know this is probably going to add more tedium to level testing (simple because of changes); I think I prefer checking more pixels for steel; it just feels more right.

I vote to go with consistency as much as possible, therefore I also prefer destructive skills turning around at steel; as Proxima made an argument elsewhere there are already very few ways to turn them around, using builders being one of the few if only ways if these type of rules are not in place.

In #2 and 3 I would expect a basher to turn around when coming from the left always. And basher turning should not rely on the spot at which he's made basher (within a reasonably distance from the obstacle).


# 1 is a more difficult issue. On one hand, I think I'd prefer the lemming turn when he hits it initially but then the matter becomes more complicated if he's inside the obstacle when he starts bashing. I attached a level with examples.
Obviously in the lower left example you'd prefer the lemming to bash through, but maybe in the top left you'd rather have him turn around.
In this case the problem can be solved I think with good level design. I prefer the lemming to always turn. A level designer can usually easily make the bashable path higher so there is no conflict here.
Can someone give examples how this would be a problem?

The examples on the right is something I discovered recently; On the top the lemming will stop and turn around, but on the bottom he'll continue even though not bashing through anything but steel. The latter I find totally wrong and should not happen. If I understand the thread correctly then this issue should be fixed if the new rule is instituted.



EDIT: It occurs to me that diggers behave very differently but I think I prefer it that way. Overall the current digger behavior works nice imo although it's not super-consistent with this [if changes are made]
everything by me: https://www.lemmingsforums.net/index.php?topic=5982.msg96035#msg96035

"Not knowing how near the truth is, we seek it far away."
-Hakuin Ekaku

"I have seen a heap of trouble in my life, and most of it has never come to pass" - Mark Twain


Nepster

#11
Here is a first idea how to modify the basher behavior:
1) Continue bashing if one of the following two conditions is satisfied:
1a) There is removable terrain withing the next (14-5*n) pixels (and at the correct height), where n is the number of previous bashes that haven't removed any terrain.
1b) There is steel within the next 4 pixels (and at the correct height) and one of the last three bashes has removed at least one terrain pixel (if only one or two bashes are done, this would always count as being true)
2) Always allow assignment of bashers. Currently one cannot assign bashers within 4 pixels of a steel wall.

So how would this affect various scenarios? Let's check...
a) Assignment within the first 5 pixels of a steel wall: The basher would bash once, then move forward and turn.
b) Assignment within within the first 10 pixels of a steel wall: The basher would bash once, then move forward 5 pixels, then continue bashing due to rule 1b), and move forward one last time due to rule 1b) and finally turn at the steel wall. The basher would bash once, then has no steel pixels directly in front of him and stop. He would not turn.
c) Assignment farther than 10 pixels from a steel wall: The basher would bash once, then stop and walk forward towards the steel wall.
d) In the setup of "righmost part of image attached to first post", the usual terrain behind the steel wall would usually not influence the behavior: Only if the steel wall is n<=3 pixels thick and we assign the basher at least 10 pixels from the wall, but at most 14-n pixels from it, it would make a difference. With the terrain, the basher would continue until hitting the steel wall, while without the terrain, he would simply bash once and then stop. Even in the setup b) the usual terrain would make a difference, so this is much more problematic, than I first thought...
e) möbius' top left example: No change, because the steel is too high to count as terrain.
f) möbius' bottom left example: No change, because the usual terrain works the same as before.
g) möbius' top right example: The lemming will still turn around, because of the low steel pieces, but now one could assign the basher at more places.
h) möbius' bottom right example: Here the movement depends on the precise set-up. Likely the lemming would see sufficiently low steel pixels to continue, but be low enough not to turn at them. So he would probably bash three times and move forward twice until stopping bashing.
i) möbius' bottom right example with additional usual terrain at the bottom: This is actually the only setup where rule 1a) gives a different outcome to always checking for usual terrain pixels within the next 14 pixels. In the naive non-1a) rule, the basher would be able to make three strokes within the steel area and then additional two more air-strokes until reaching the usual terrain, giving 5 air-strokes in total. But with the rule 1a) above, the basher would stop at the same place as in the case h). So: If we turn the lemming into a basher within 14 pixels of the usual terrain, he will continue bashing into the usual terrain. If we make him a basher before that, he will make at most three strokes and never ever reach the usual terrain as a basher, regardless of the precise steel placement.

namida

mobius - if you want to test if the already-made changes have fixed your issue, try the latest experimental versions. They already implement all changes prior to your post, if I'm not mistaken.
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)

Nepster

Quote from: namida on August 31, 2016, 02:44:14 AM
mobius - if you want to test if the already-made changes have fixed your issue, try the latest experimental versions. They already implement all changes prior to your post, if I'm not mistaken.
The problem is, that these newly made changes introduced the non-desired behavior that möbius found.


In my previous suggestion (two posts above), I made a mistake in analyzing setups b) and d). These are now corrected. Unfortunately this means that this suggestion is not as good as it sounded at first, because we reintroduce problems regarding the right-most setup in the image in the first post.

Here another suggestion (disadvantages are discussed below):
1') Assume the last n basher strokes have not removed any terrain. Then continue bashing if there is either usual terrain or steel withing the next (14-5*n) pixels (and at the correct height).
2) Always allow assignment of bashers. Currently one cannot assign bashers within 4 pixels of a steel wall.

The advantage is, that this basher behaves properly even in setups b) and d).
But there are two disadvantages:
x) Currently one can start bashers 14 pixels in front of the wall and he will continue bashing into the wall. With the new rule 1'), the basher can only start up to 9 pixels in front of the wall.
y) Having multiple bashers in the same basher tunnel is now much harder with rule 1'), because to continue all bashers have to remove terrain. So if the first basher to remove terrain is in the front of the others, he will be the only basher to actually ever remove terrain pixels. Hence the other bashers would stop soon. So one has to be careful how to place the bashers...
Note that the problem y) already happens for rule 1a) above.

I don't have any solution to all of this, so any suggestions are more than welcome.

IchoTolot

Quote from: Nepster on September 01, 2016, 05:07:51 PM
In my previous suggestion (two posts above), I made a mistake in analyzing setups b) and d). These are now corrected. Unfortunately this means that this suggestion is not as good as it sounded at first, because we reintroduce problems regarding the right-most setup in the image in the first post.

Here another suggestion (disadvantages are discussed below):
1') Assume the last n basher strokes have not removed any terrain. Then continue bashing if there is either usual terrain or steel withing the next (14-5*n) pixels (and at the correct height).
2) Always allow assignment of bashers. Currently one cannot assign bashers within 4 pixels of a steel wall.

The advantage is, that this basher behaves properly even in setups b) and d).
But there are two disadvantages:
x) Currently one can start bashers 14 pixels in front of the wall and he will continue bashing into the wall. With the new rule 1'), the basher can only start up to 9 pixels in front of the wall.
y) Having multiple bashers in the same basher tunnel is now much harder with rule 1'), because to continue all bashers have to remove terrain. So if the first basher to remove terrain is in the front of the others, he will be the only basher to actually ever remove terrain pixels. Hence the other bashers would stop soon. So one has to be careful how to place the bashers...
Note that the problem y) already happens for rule 1a) above.

I don't have any solution to all of this, so any suggestions are more than welcome.

b and d are definitly cases which should be avoided, but x and y are desired machanics. x eases creating a  timing of Lemmings in very common cases (+ is certainly used in a lot of replays). y is used sometimes in puzzles, but it is still possible as you described.

To prevent b and d and keep behavior x my suggestion would be a special case for the first 2 basher strokes (yes this sounds bad, but it could be a solution).
If x can be kept with the extra rule for the first basher strokes and y is still possible, but only needs some replay fixing in a few cases this could work.