I started thinking about where the intermediate trigger checks should be placed. And the more I thought about it, the more complicated the rules got...
Rule 1: If the lemming moves only horizontally or only vertically, the pixels in the middle are checked.
Hopefully no explanation needed for this rule.
Rule 2: Whenever possible, the pixels checked should not depend whether a lemming moves over the terrain from the right or from the left.
This certainly cannot be satisfied for walls higher than 7 pixels, because climbers move inside the terrain, while fallers move outside. But otherwise we should strive for rule 2 to hold.
Rule 3: A skill-using lemming should check for the same pixels as a walking lemming coming after him.
This is much more restrictive than one would think - see the next rule.
Rule 4: A walker moving one pixel horizontally and one pixel upwards, should have an additional check at (LemX + LemDx, LemY), i.e. after moving one pixel horizontally and none upwards.
Why this? Because builders add terrain pixels at their current position! So if (according to Rule 3) a lemming walking up a builder stair should have the same checks as the builder, one has to check at (LemX + LemDx, LemY), instead of (LemX, LemY - 1).
Rule 5: A walker moving one pixel horizontally and one pixel down, should have an additional check at (LemX, LemY + 1), i.e. after moving just one pixel down.
This follows from applying rule 2 to the movement in rule 4.
Rule 6: Builders should check at (LemX, LemY - 1), (LemX + LemDx, LemY - 1) and (LemX + LemDx, LemY - 1), i.e. move up and then twice a pixel horizontally.
This follows from rule 3, because walkers walking on the final stair have these checks.
Rule 7: Miners should check at (LemX, LemY + 1), (LemX + LemDx, LemY + 1) and (LemX + LemDx, LemY + 1), i.e. move down and then twice a pixel horizontally.
This follows from rule 3, because walkers walking in the final tunnel have these checks.
Rule 8: Bashers should use the same rules as walkers when having a vertical component in their movement.
This again follows from rule 3.
Rule 9: If a builder or miner moved only part of the way before turning around, he should follow the path specified in rule 6 respectively rule 7 as long as possible.
Again implied by rule 3.
From here on the rules allow for a bit of flexibility:
Rule 10: A walker moving one pixel horizontally and two pixel upwards, should have additional checks at (LemX + LemDx, LemY) and (LemX + LemDx, LemY - 1), i.e. first move one pixel horizontally and then twice one pixel upwards.
Reason: Similarity to rule 4. Moreover a climber will move vertically up inside the wall, so it makes sense to finish the movement here with the vertical part.
Rule 11: A walker moving one pixel horizontally and two or three pixel down, should have additional checks at (LemX + LemDx, LemY) and (LemX + LemDx, LemY + 1) (and (LemX + LemDx, LemY + 2) if applicable), i.e. first move one pixel horizontally and then twice or three times one pixel downwards. Note that such a lemming will never transition into a faller.
Reason: Moving two pixels down should mirror the situation of rule 10 (by rule 2). Moving three pixels down is just an extension of the rule for two pixels.
Rule 12: A lemming that ends up as a faller, should first do all horizontal movements and then the vertical movements.
Reason: On a long drop, this feels to be the most natural path for a lemming to take.
Problem: If one shortens a drop from 4 to 3 pixels, the lemming path changes. So the lemmings may now reach a new trigger area or a save from a previously reached trigger area, depending on its position.
Exception to Rule 12: If the newly falling lemming was a miner previously, he should first move down one pixel, then do all the horizontal movements and then down one pixel again.
Reason: This is the closest one gets to satisfy rule 3 in this situation. Unless rule 11 is changed, the miner may reach pixels not lying in the path of walking lemmings (e.g. if moving two pixels down and two pixels horizontally), so rule 3 cannot be satisfied completely.
Rule 13: Swimmers and gliders don't have hard restriction, so they should move in some way that is conveniently to code.
All skills not mentioned here, should be caught by rule 1.
Are there any possible diagonal movements that I forgot? Any logical inconsistencies? And most importantly: Any simplifications?
PS: Contrary to what I wrote in my previous post, calling the trigger area check already in MoveLem seems not a good idea with the current code structure as it would likely mess with the order in which things are done.