[BUG][PLAYER] Zombies don't always infect Blockers

Started by Crane, September 25, 2019, 03:08:29 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Crane

If a Blocker is on a 45-degree slope, zombies walking downhill towards it will get turned around, but will not turn the Blocker into a zombie (unlike what happens if the Blocker is on flat ground).

My suggestion here to fix it, so as to not mess up some of the more precise levels when it comes to their field of influence, is to make an exceptional check... if a zombie is to be turned around by a Blocker's force field, it will always infect the Blocker that owns it.

Crane

Here's a level showcasing it.  Also, there might be another bug there... look at the Walker icon.

namida

I'm aware of (and have already fixed, in the source code) the Walker icon bug: https://www.lemmingsforums.net/index.php?topic=4385.0

I actually quite like your proposed solution here. I don't believe there are - or at least, there shouldn't be - any levels that already rely on the "blocker doesn't get infected" behaviour; and if there are, I feel they fall into "you really obviously shouldn't do this, so I'm not too worried if the level that does so breaks". The only question is how easy it would be to implement, as currently, a blocker check doesn't go as far as "which blocker turned the lemming around?", though the lack of ability to overlap blockers should make this easy enough to figure out.
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)

Crane

I dare say, I thought that a Blocker and its force fields are intrinsically tied together, since you have to make sure you remove the force fields if the Blocker ceases to be one (granted, just because something like TBlocker.LeftField exists doesn't mean that TField.Owner exists).

namida

QuoteI dare say, I thought that a Blocker and its force fields are intrinsically tied together, since you have to make sure you remove the force fields if the Blocker ceases to be one (granted, just because something like TBlocker.LeftField exists doesn't mean that TField.Owner exists).

Not as linked as you're thinking. The blocker map just consists of "turn left here", "turn right here" or "can't assign blockers here but don't change direction of lemmings" data for each pixel. Removing a blocker field would simply be done by clearing the entire blocker map, then re-writing all fields of remaining blockers to it.
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)

namida

Fixed in commit c31015c (though the previous commit lays most of the groundwork for it).

The fix is done via a new rule: "When a zombie turns on a blocker, that blocker gets infected regardless of zombie trigger areas."
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)