The start of the Move Willy(3) routine (#8FBC-#8FD0) could be simplified/shortened:
Within that part of the routine, Willy's Direction and Movement Flags variable (#85D0) is loaded up to A twice. (First to check if he's moving left or right - Bit 1 - with a RET to Main Loop if he isn't; then to check which way he's moving, left or right? - via Bit 0 - before deciding which path to proceed through the rest of the routine.)
But in between those two checks, the Rope Status Indicator (#85D6) is loaded up to A and its value tested (with a RET to Main Loop if Willy's on a rope).
If the test of the rope status is put first in that sequence, before
the movement/direction flags are loaded up to A, then you could test Bits 1 and 0 of A in turn (reacting accordingly) via BIT instructions, thus removing the need to reload #85D0 into the Accumulator for a second time. That should provide a modest saving of three bytes.
Edited by IRF, 07 August 2020 - 11:28 PM.