I think I’ve got the first issue sorted out:
So I keep track of the “Current Wall” and when I stop wallrunning it sets a “Last Wall” variable. The != node compares the Hit Actors of the Last Wall and the Current Wall. I created an IsValidHit macro just to verify the Hit Results are not null. Then I have a “Has Landed” boolean that starts true and gets reset to false on a valid wallrun, so we are able to wallrun if the Current Wall is different from the Last Wall OR we have landed at some point between the walls.
Now, there was also a weird Race Condition that would rapidly toggle the Branch, resetting it to true before actually touching the wall again, but instead of figuring that out just added a delay before resetting the Last Wall to NULL which I do by setting it to an unset variable. The side effect is that if I hang onto a wall for longer than a second it’ll wallrun again, but I can accept this.
Still no idea how to address the corner hopping. I might just end up designing levels around this exploit to minimize its impact. No corners without ceilings above them or something. That’ll be rough if I ever want to make a cityscape.
