EDuke32 issueshttps://voidpoint.io/terminx/eduke32/-/issues2023-05-21T14:59:52-07:00https://voidpoint.io/terminx/eduke32/-/issues/251Auto Aim logic error in P_PreFireHitscan2023-05-21T14:59:52-07:00Michelle SleeperAuto Aim logic error in P_PreFireHitscanThere's a logic error in P_PreFireHitscan in player.cpp where the player's auto aim setting is not checked at the right time, causing it to essentially do nothing when shooting the pistol (specifically shooting SHOTSPARK1) and GROWSPARK....There's a logic error in P_PreFireHitscan in player.cpp where the player's auto aim setting is not checked at the right time, causing it to essentially do nothing when shooting the pistol (specifically shooting SHOTSPARK1) and GROWSPARK.
https://www.youtube.com/watch?v=NQCYrQJwX4o
You can see this behavior on display in this test, running the current version as of this post, r10118. You can see I have auto aim fully disabled, but the pistol and Expander both still use it. I didn't capture it in this video but other hitscan weapons (shotgun, ripper) do not behave in this way.
In A_ShootHardcoded, the 3 bullet weapons are fired using this line. This only affects the pistol because the pistol is defined as "SHOTSPARK1", causing the 2nd to last condition to always return 0 for the shotgun and ripper:
` P_PreFireHitscan(spriteNum, playerNum, projecTile, &startPos, &Zvel, &shootAng,
projecTile == SHOTSPARK1__STATIC && !WW2GI, 1);`
And the Expander is fired using this line:
` P_PreFireHitscan(spriteNum, playerNum, projecTile, &startPos, &Zvel, &shootAng, 1, 1);`
Note that custom projectiles are fired when checking for the appropriate auto aim flags, and are also susceptible to this behavior:
` P_PreFireHitscan(spriteNum, playerNum, projecTile, startPos, &zvel, &shootAng,
pProj->workslike & PROJECTILE_ACCURATE_AUTOAIM, !(pProj->workslike & PROJECTILE_ACCURATE));`
The bullet weapon bug could be fixed checking for the other 2 tiles, some thing like:
` P_PreFireHitscan(spriteNum, playerNum, projecTile, &startPos, &Zvel, &shootAng,
(projecTile == SHOTSPARK1__STATIC || projecTile == SHOTGUN__STATIC || projecTile == CHAINGUN__STATIC) && !WW2GI, 1);`
But the real problem is up in P_PreFireHitscan, paraphrased here for readability:
```
static void P_PreFireHitscan(int spriteNum, int playerNum, int projecTile, vec3_t *srcVect, int32_t *zvel, int *shootAng,
int accurateAim, int doSpread)
[. . .]
if (accurateAim)
{
if (!pPlayer->auto_aim)
{
[. . .]
}
if (aimSprite == -1)
goto notarget;
}
else
{
if (aimSprite == -1) // no target
{
notarget:
*zvel = fix16_to_int(F16(100)-pPlayer->q16horiz-pPlayer->q16horizoff)<<5;
}
Proj_MaybeAddSpread(doSpread, zvel, shootAng, zRange, angRange);
}
```
If accurateAim is 1, the code enters the if statement to perform auto aim. But because the player's auto aim setting is 0 (fully disabled), the auto aim code is skipped, but so is the later code where the weapon spread is applied using Proj_MaybeAddSpread.
The simplest solution should be something like modifying this line:
```
if (aimSprite == -1 || !pPlayer->auto_aim)
goto notarget;
```https://voidpoint.io/terminx/eduke32/-/issues/240Duke3D: Accessing a struct member that requires a second array index while th...2022-04-19T00:52:22-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Accessing a struct member that requires a second array index while the struct index is invalid causes a segfaultCON code that demonstrates the crash:
```
var tempA
onevent EVENT_ALTFIRE
set tempA player[30].loogiex 0 //invalid player index
al tempA
endevent
```
Press altfire ingame and the crash will occur. While the CON code is invalid, t...CON code that demonstrates the crash:
```
var tempA
onevent EVENT_ALTFIRE
set tempA player[30].loogiex 0 //invalid player index
al tempA
endevent
```
Press altfire ingame and the crash will occur. While the CON code is invalid, this error should be handled gracefully.
Debugging yields no results because the backtrace is completely empty for some reason.
This only occurs with with struct members that require an array index, e.g. `loogiex`. Using another member, such as `ang`, does not result in the segfault.https://voidpoint.io/terminx/eduke32/-/issues/233Duke3D: No screenfade effect when exiting a level in Polymost/Polymer2022-03-09T22:34:32-08:00Dino Bollingerdino.bollinger@gmail.comDuke3D: No screenfade effect when exiting a level in Polymost/PolymerIn the Classic Mode renderer, after hitting a nukebutton, the game slowly fades out to black, and fades back in on the bonus screen.
This also occurs when beating a boss monster. Note that this means that the cutscenes more easily be acc...In the Classic Mode renderer, after hitting a nukebutton, the game slowly fades out to black, and fades back in on the bonus screen.
This also occurs when beating a boss monster. Note that this means that the cutscenes more easily be accidentally skipped, as the fadeout normally prevents inputs from the player being carried over to cutscenes or the bonus screen.
In Polymost or Polymer, this transition is missing, and the game instead immediately jumps to the bonus screen. Note that this problem is very old, even occurring in eduke32 builds from 2007, before the versioning system was introduced.
(Issue originally raised by: https://forums.duke4.net/topic/11841-no-fade-effect-in-polymost/)https://voidpoint.io/terminx/eduke32/-/issues/232Duke3D: Shrunk state no longer allows SE7 Transport to activate2023-05-21T14:07:03-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Shrunk state no longer allows SE7 Transport to activateStarted with r8568 (86b57410).
In the usermap `leohotel.map`, part of the Urban pack of the [Addons Compilation](https://forums.duke4.net/topic/7640-release-eduke32-addon-compilation/), the player is intended to shrink himself with a bu...Started with r8568 (86b57410).
In the usermap `leohotel.map`, part of the Urban pack of the [Addons Compilation](https://forums.duke4.net/topic/7640-release-eduke32-addon-compilation/), the player is intended to shrink himself with a button puzzle, and then pass through a vent which will instantly teleport him to a new area. This vent contains a SE7 transport, which no longer triggers starting with revision r8568.
![](https://forums.duke4.net/index.php?app=core&module=attach§ion=attach&attach_rel_module=post&attach_id=18278)
Here is a test map that starts you right at the point where the effect is triggered: [leohotel_shrunktele.map](/uploads/824d59bdb8e524ff7e0c8c8e7cedabb3/leohotel_shrunktele.map)
In order to trigger the shrinkblast, you will need to activate all buttons.
This one is very unfortunate, as the commit that causes it is required to make the player able to pass under enemies, and to climb up sprite ladders, both of which are essential to Duke3D and its usermaps.
Corresponding commit message:
```
commit 86b57410c08b722f76ff73949eb4ae15727df2f7
Author: Richard Gobeille <terminx@gmail.com>
Date: Wed Jan 29 11:37:51 2020 +0000
This fixes things like shrunk player behavior at the expense of the return of issues like the player automatically stepping up onto sprite architecture.
From-SVN: r8568
```https://voidpoint.io/terminx/eduke32/-/issues/231Duke3D: Another tight vent that can no longer be entered2023-05-21T14:06:46-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Another tight vent that can no longer be enteredYet another edge case, but I'll record it for completeness' sake:
In `abcstudios.map` (can be found as part of the Urban pack of the Addons Compilation, see https://forums.duke4.net/topic/7640-release-eduke32-addon-compilation/page__vie...Yet another edge case, but I'll record it for completeness' sake:
In `abcstudios.map` (can be found as part of the Urban pack of the Addons Compilation, see https://forums.duke4.net/topic/7640-release-eduke32-addon-compilation/page__view__findpost__p__366218), the following vent could be clipped through prior to r7398 (commit 374bdaaa), but is now blocked off:
![](https://forums.duke4.net/index.php?app=core&module=attach§ion=attach&attach_rel_module=post&attach_id=18148)
Similarly, the following vent in the same map also cannot be entered:
![](https://forums.duke4.net/index.php?app=core&module=attach§ion=attach&attach_rel_module=post&attach_id=18149)
Here's the test map to reproduce the problem: [another_tight_vent.map](/uploads/bbf58fd419ff54cb7f1416e34b9dfe0e/another_tight_vent.map)https://voidpoint.io/terminx/eduke32/-/issues/227Duke3D: Parsing for negated CON labels does not work properly2022-03-09T22:34:32-08:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Parsing for negated CON labels does not work properlyWhile it is currently possible to negate gamevars (and constant integers) inside CON statements as such:
```
mul temp1 -temp2
```
The same is not possible for labels. The following code will throw a warning in the console, indicating th...While it is currently possible to negate gamevars (and constant integers) inside CON statements as such:
```
mul temp1 -temp2
```
The same is not possible for labels. The following code will throw a warning in the console, indicating that the label is being interpreted as a constant due to the negation that's placed in front:
```
define TEST 10
var temp 20 0
onevent EVENT_ALTFIRE
set temp -TEST
al temp
endevent
```
Console output after pressing Altfire:
```
CONLOGVAR: L=6 temp (Global) =0
```
Not only does the parsing fail, it also produces a completely unexpected value.https://voidpoint.io/terminx/eduke32/-/issues/205Exotic crash/freeze with shareware GRP2023-05-21T13:55:00-07:00LeoDExotic crash/freeze with shareware GRPEDuke32 crashes instead of bailing out gracefully, when using the shareware GRP, and a CON file isn't found. The current behaviour has been introduced by svn8178-git4dc2d5bab. The previous behaviour is erroneous as well: a freeze which n...EDuke32 crashes instead of bailing out gracefully, when using the shareware GRP, and a CON file isn't found. The current behaviour has been introduced by svn8178-git4dc2d5bab. The previous behaviour is erroneous as well: a freeze which needs the taskmanager to get rid of. Bisect-compiled to svn5883-gitcc2dfd926. Btw., any idea why the crash.log of my locally compiled exe does not list the according source files?
Attachment: simple 'testsuite' + executables + logs. [shr-grp-crash.7z](/uploads/cca08d6f4fbcd7dcdbb1fafacaadaceb/shr-grp-crash.7z)https://voidpoint.io/terminx/eduke32/-/issues/194Duke3D: CON_SHOWVIEW results in a black screen when used in Polymer2023-05-21T13:50:13-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: CON_SHOWVIEW results in a black screen when used in PolymerAs the title says, as of commit bb01a139, while using the Polymer renderer, the `showview` command correctly renders the screen you define, but it results in the main camera view being entirely black.
Here's a small test script that dis...As the title says, as of commit bb01a139, while using the Polymer renderer, the `showview` command correctly renders the screen you define, but it results in the main camera view being entirely black.
Here's a small test script that displays a rear view window on the top left. Works properly in Classic and Polymost, breaks in Polymer:
[rearview.con](/uploads/e70e3d492025ccfe5459a912c3cd9b3c/rearview.con)https://voidpoint.io/terminx/eduke32/-/issues/187Duke3D: inconsistency with "bind" console command and the mouse controls2023-05-21T13:48:46-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: inconsistency with "bind" console command and the mouse controlsIt appears that using the `bind` console command to set up mouse controls assigns a hidden gamefunc to the mouse button that does not replace the binds in the mouse config menu, but instead takes precedence over them.
For instance, go t...It appears that using the `bind` console command to set up mouse controls assigns a hidden gamefunc to the mouse button that does not replace the binds in the mouse config menu, but instead takes precedence over them.
For instance, go to the mouse config and set the "Left" action to "Move Forward". Then go ingame, type `bind mouse1 gamefunc_fire` in the console, then click the left mouse button. You will notice that you now have primary fire assigned to the left mouse button, but if you visit the mouse config, the menu will still state that it is assigned to "Move Forward".
Moreover, typing `unbind mouse1` removes the `gamefunc_fire` keybind, but leaves the "Move Forward" keybind active.
This is potentially a leftover from older eduke32 builds, as the "mouse1" bind is actually written into "settings.cfg" if defined this way, while the mouse bindings seen in the menu are written to "eduke32.cfg".https://voidpoint.io/terminx/eduke32/-/issues/184Duke3D: Activating a door while opening causes the sound to play at the wrong...2021-08-03T02:33:11-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Activating a door while opening causes the sound to play at the wrong timeThis is an issue that originates from DOS Duke3D.
Hitting "use" on a door that is in the process of opening will cause the sound to play at the endpoint of its motion, instead of on activation. Moreover, if this sound is set to loop, it...This is an issue that originates from DOS Duke3D.
Hitting "use" on a door that is in the process of opening will cause the sound to play at the endpoint of its motion, instead of on activation. Moreover, if this sound is set to loop, it will continue playing indefinitely after the door stopped moving.
[doorsound_bug2.map](/uploads/7c09def7c39ce9f7e5530efd9acb1fd5/doorsound_bug2.map)https://voidpoint.io/terminx/eduke32/-/issues/183Duke3D: Jump-crouch exploit still possible in certain areas2023-05-21T13:48:22-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Jump-crouch exploit still possible in certain areasI mentioned this on Discord, and I'm aware that this is tough, maybe impossible to resolve -- but I wanted to document it anyways.
The original jump-crouch exploit from DOS involved holding both crouch and jump during landing, thus bein...I mentioned this on Discord, and I'm aware that this is tough, maybe impossible to resolve -- but I wanted to document it anyways.
The original jump-crouch exploit from DOS involved holding both crouch and jump during landing, thus being able to pass through incredibly tight spaces. The severity of this has been reduced, however it is still possible to get into certain passages by jumping and holding crouch when landing. Unfortunately, these are usually shrinker passages.
Demonstration (E2L11): https://cdn.discordapp.com/attachments/461290354726010891/870759546459664424/2021-07-30_22-06-40.mp4
Another instance of this can be found in E5L4 (Mirage Barrage) of World Tour, which also involves a shrinker puzzle:
![duke0004](/uploads/387d0fa79362e69c46a01c30217ed696/duke0004.png)
Note that by simply crouching, it is not possible to enter these passages.https://voidpoint.io/terminx/eduke32/-/issues/181Duke3D: Jittery camera movement when on top of stretching sector (SE 20)2021-07-30T07:28:26-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Jittery camera movement when on top of stretching sector (SE 20)This is an issue that dates all the way back to DOS.
Open the test map (from E2L5) activate the keycard panel to make the sector stretch, then jump onto it and strafe in the direction it is extending. You will notice rather jittery came...This is an issue that dates all the way back to DOS.
Open the test map (from E2L5) activate the keycard panel to make the sector stretch, then jump onto it and strafe in the direction it is extending. You will notice rather jittery camera movement while it is active.
Video demonstration: https://cdn.discordapp.com/attachments/461290354726010891/870661445648547880/2021-07-30_15-36-29.mp4
Test map: [jittersector.map](/uploads/c95eed795f03d6a2d41984b0063a5e63/jittersector.map)https://voidpoint.io/terminx/eduke32/-/issues/172Duke3D: Hardcoded guts and scrap entities will collide with non-solid TROR tr...2021-08-01T13:26:12-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Hardcoded guts and scrap entities will collide with non-solid TROR transitionsSimilarly to #171, the hardcoded blood and gore sprites spawned by the `guts` CON command are not TROR-aware, and will collide with non-solid TROR transitions. (simply shoot the commander in the test map while flying to see the problem)
...Similarly to #171, the hardcoded blood and gore sprites spawned by the `guts` CON command are not TROR-aware, and will collide with non-solid TROR transitions. (simply shoot the commander in the test map while flying to see the problem)
![duke0005](/uploads/c115b543580240d2e2d833bf4bef65bb/duke0005.png)
This also applies to the scrap spawned by certain actors and objects. Other effects may also not be TROR-aware.
Test map: [trorcommander.map](/uploads/0eff3ebf65059a2a18358834cde8f09e/trorcommander.map)https://voidpoint.io/terminx/eduke32/-/issues/154Duke3D: Can't throw pipebomb through small opening in Red42023-05-21T13:45:38-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Can't throw pipebomb through small opening in Red4This occurs since r7480 (cdcc13e8), with the behavior changing again in r7484 (eca7133e).
It is no longer possible to throw a pipebomb through the crack in the image below. Instead, it gets stuck inside the crack, and never passes throu...This occurs since r7480 (cdcc13e8), with the behavior changing again in r7484 (eca7133e).
It is no longer possible to throw a pipebomb through the crack in the image below. Instead, it gets stuck inside the crack, and never passes through. Previous to r7480 the pipebomb went through fine. This is essential for level progression in this map.
![duke0008](/uploads/42f8747a9a1965f22e14702fb028298c/duke0008.png)
This is from the map !["Red 4" by Merlijn van Oostrum](http://dnr.duke4.net/maps/Red4:_Boat_Trippin.html). Attached is a cut-down version to demonstrate the problem.
[clipping_crackwall.map](/uploads/ed366e4416cee498e7edfcc62b53159a/clipping_crackwall.map)https://voidpoint.io/terminx/eduke32/-/issues/149Too easy to strafe-run into your own projectiles and damage or kill yourself.2023-05-21T13:45:12-07:00Jordon MossToo easy to strafe-run into your own projectiles and damage or kill yourself.Ever since the projectile collision code has been re-worked, it's been far too easy to strafe-run into your own projectiles (especially slow ones like the RPG, Devastator, and Shrinker), causing you to damage or kill yourself.
Video dem...Ever since the projectile collision code has been re-worked, it's been far too easy to strafe-run into your own projectiles (especially slow ones like the RPG, Devastator, and Shrinker), causing you to damage or kill yourself.
Video demonstrating the issue: http://shadowmavericks.com/files/ShareX/RPGClipping.mp4https://voidpoint.io/terminx/eduke32/-/issues/135Duke3D: Ordering Issue with PROJECTILE_RPG_IMPACT and DAMAGESPRITE events2023-05-21T13:38:31-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Ordering Issue with PROJECTILE_RPG_IMPACT and DAMAGESPRITE eventsThe following block of code is present in `actors.cpp`, inside the function `ACTOR_STATIC void Proj_MoveCustom(int const spriteNum)`, starting at line 3109:
```cpp
A_DamageObject(otherSprite, spriteNum);
...
if (pProj->workslike & PRO...The following block of code is present in `actors.cpp`, inside the function `ACTOR_STATIC void Proj_MoveCustom(int const spriteNum)`, starting at line 3109:
```cpp
A_DamageObject(otherSprite, spriteNum);
...
if (pProj->workslike & PROJECTILE_RPG_IMPACT)
{
actor[otherSprite].owner = pSprite->owner;
actor[otherSprite].picnum = pSprite->picnum;
if (pProj->workslike & PROJECTILE_RPG_IMPACT_DAMAGE)
actor[otherSprite].extra += pProj->extra;
A_DoProjectileEffects(spriteNum, &davect, 0);
if (!(pProj->workslike & PROJECTILE_FORCEIMPACT))
{
A_DeleteSprite(spriteNum);
return;
}
}
```
Note that in the following: `actor[otherSprite].owner == htowner`, `actor[otherSprite].picnum == htpicnum` and `actor[otherSprite].extra == htextra`.
Notice that `A_DamageObject()` handles projectile damage and calls both `EVENT_DAMAGESPRITE` as well as `EVENT_POSTDAMAGESPRITE` respectively at the start and the end of the function. The former event is supposed to be executed before the damage is added to the `htextra` struct member (and also, before `htowner` and `htpicnum` are set), while the latter event is supposed to be executed after these members have been updated.
The above block of code however is executed for any custom projectile that has the `PROJECTILE_RPG_IMPACT` flag, and breaks the assumptions made for `EVENT_POSTDAMAGESPRITE`. Namely, the `htowner` as well as `htpicnum` members are updated a second time, thus preventing them from being changed inside `EVENT_POSTDAMAGESPRITE`, and if the flag `PROJECTILE_RPG_IMPACT_DAMAGE` is also given, then the damage is incremented after the event, meaning that `EVENT_POSTDAMAGESPRITE` does not have access to the full damage the projectile does to the enemy.
As a result, this block of code bypasses any changes made to the overall damage in `EVENT_DAMAGESPRITE`. For example, if we tried to code different damage resistances for certain enemy types, `PROJECTILE_RPG_IMPACT_DAMAGE` would bypass this resistance and apply the full damage, regardless of what is done in the CON code.
However, if we were to reorder this code such that `A_DamageObject()` is executed only after the `PROJECTILE_RPG_IMPACT` block, then we break the assumption about `EVENT_DAMAGESPRITE` instead, as some damage has already been added to `htextra`.https://voidpoint.io/terminx/eduke32/-/issues/133Duke3D: Shrinker projectile cannot enter spaces it previously fit into2023-05-21T13:37:44-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Shrinker projectile cannot enter spaces it previously fit intoThis is another one of those edge-cases that are unusually common with Duke usermaps.
In a 3-episode mod called FM4X, there is a shrinker puzzle that reflects shrinker projectiles in a ring. The passages these projectiles have to enter ...This is another one of those edge-cases that are unusually common with Duke usermaps.
In a 3-episode mod called FM4X, there is a shrinker puzzle that reflects shrinker projectiles in a ring. The passages these projectiles have to enter are quite small, and starting from commit r7461 (48d1db93) the projectiles hit the wall instead of passing through.
Note that r7461 is a bugfix on commit r7409.
The location in question where projectiles are failing to pass through:
![duke0000](/uploads/5ddd84293f2205e6a710a88fd427b11b/duke0000.png)
Map excerpt:
[shrinkersprite_collision.map](/uploads/aac0c72f543e49cceddc6fd3462dbf22/shrinkersprite_collision.map)https://voidpoint.io/terminx/eduke32/-/issues/109Duke3D: Shrunk state allows moving through much tighter spaces than before2023-05-21T13:14:04-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Shrunk state allows moving through much tighter spaces than beforeEver since the big clipping changes, it is now possible to move into much tighter spaces than before while shrunk.
Map to demonstrate:
[tightshrunk.map](/uploads/be9e7a652760cb92da630732314cace8/tightshrunk.map)
The path on the right c...Ever since the big clipping changes, it is now possible to move into much tighter spaces than before while shrunk.
Map to demonstrate:
[tightshrunk.map](/uploads/be9e7a652760cb92da630732314cace8/tightshrunk.map)
The path on the right can be moved through since r7428 (d060ca95).
The path on the left can be moved into since r8568 (86b57410), and this particular path instantly kills the player despite being shrunk.https://voidpoint.io/terminx/eduke32/-/issues/99Duke3D: Clipping problem that prevents progression in Duke Hard2023-05-21T13:53:59-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Clipping problem that prevents progression in Duke HardThe last map of Duke Hard requires you to crouch under a wall-aligned sprite of wires in order to hit a switch.
Unfortunately, as of r7428 (d060ca95) it is no longer possible to do so, thus rendering the map impossible to complete witho...The last map of Duke Hard requires you to crouch under a wall-aligned sprite of wires in order to hit a switch.
Unfortunately, as of r7428 (d060ca95) it is no longer possible to do so, thus rendering the map impossible to complete without cheats.
The attached map has the section in question. Prior to r7428, it was possible to move under these sprites.
[dukehard_clipping.map](/uploads/3a113ce1802338bcb8de7ad02986affb/dukehard_clipping.map)https://voidpoint.io/terminx/eduke32/-/issues/72Duke3D: Minor clipping issue in E1L4 (Toxic Dump)2023-05-21T13:08:21-07:00Dino Bollingerdino.bollinger@gmail.comDuke3D: Minor clipping issue in E1L4 (Toxic Dump)Just another one of these small differences caused by the clipping overhaul. At least this one doesn't break progression.
The following small opening can be entered by simply walking towards it and crouching (normally obscured by a text...Just another one of these small differences caused by the clipping overhaul. At least this one doesn't break progression.
The following small opening can be entered by simply walking towards it and crouching (normally obscured by a texture): https://imgur.com/huSxECf
Caused by 54e67e4b.
Here's a simplified test map: [e1l4_clipping.map](/uploads/fca1fb79387693d2e1f1226e014e0619/e1l4_clipping.map)