After much tinkering and experimentation, I think I've found the sweet spot for Ballooner assignability and collision!
At the point of assignment, Ballooners now check for 9 vertical pixels - if they find 9 or less, they "ascend" along it until their feet meet the top, then the balloon pops and they begin walking - ideal for getting a lem up shorter pillars/steps/blocks.
If they find
10 or more vertical pixels, the effect is now that the Ballooner is
turned and pushed away from the wall as the balloon inflates. What this means in practice is that Ballooners can now be assigned whilst lems are adjacent to vertical walls
without the Balloon immediately popping due to contact with the wall:
This means that assigning Ballooners to Climbers and Sliders now results in the lem Ballooning away from the wall, which is perhaps the most reasonable expectation for this interaction. Yes, we lose the ability to use a Ballooner to cancel a Climbing or Sliding lem, but since Jumpers and Shimmiers can both be used for this particular purpose, it seems a waste to limit Ballooners to this as well.
I tried various iterations of this behaviour, with different interactions for Hoisters/Dehoisters (these were scrapped due to bugs/inconsistency), different terrain checks, etc, and this is the most consistent, predicatable and well-behaved version I could settle on. It's been tested for bugs and alongside various different terrain setups, and I'm about 99% confident that this is the one!
Let's give it a good try out in 2.7 and see if we like it!
(
Commit 4c15b8918 implements the final version of this behaviour after several experimental commits)