Update take 2. Just copy the files into the dkongjre folder.
I fixed a couple of errors in my disassembly, this fixes the getting stuck on vines bug.
I've tweaked the anti-camping logic a bit. I've added a bit of randomization to the timing of the multiplying blue sparks and also to the bird patterns. Fairly subtle stuff that a casual player probably wouldn't even notice, but it reduces pattern play.
You guys are not going to believe this, though. I spent a lot of time yesterday trying to track down where the joystick inputs influence the bird patterns... ...and there is no deliberate code that does this! I finally figured it out and found where it happens, though.
It's totally accidental and caused by a typo in the original code! The birds were intended to have fixed patterns.
;bird flight pattern logic is here
l4cb9: ld a,(ix+$05)
cp $58
jr z,l4cec
l4cc0: cp $60
ld c,$02 ;load 2 position in C
jr z,l4cdd
cp $68
ld c,$05 ;load 5 position in C
jr z,l4cdd
cp $70
ld c,$03 ;load 3 position in C
jr z,l4cdd
l4cd2: ld a,(ix+$05)
cp $78
jp z,l4c1a
jp l2e96
l4cdd: ld a,c
cp b
jp z,l4c1a
ld a,b
sub $05
cp c
jp z,l4c1a
jp l2e96
l4cec: ld a,($6227)
cp $03
jr nz,l4cf8
ld a,(ix+$05)
jr l4cc0
l4cf8: ld a,$04 ;load 4 position in... A? Oops.
jr l4cdd ;A actually gets clobbered right after jumping to l4cdd, so ld a,$04 does *nothing*
At the point where $04 is accidentally loaded into A instead of C, C happens to contain the joystick/button inputs (from about a dozen subroutines back. It's only pure luck that some other in-between subroutine didn't clobber the contents of C.) So instead of passing 2,3,4 or 5 to the bird flight pattern, it passes 2,3,joystick,5 instead, which affects the flight patterns.