Bird's behavior looks VERY random and smart, but in fact it's plain stupid:
If above Ryu, decrement Y, else increment Y.
If on the left from Ryu, increment X subpixel speed, else decrement it.
Here's the code. I will then make a script that predicts bird trajectory based on the current Ryu's position. Stay tuna.
Language: asm6502
; id = bird
$DD9C: LDA ID,X @ $0407 = #$0B
$DD9F: ASL
$DDA0: TAY
; read proc pointer
$DDA1: LDA $C195,Y @ $C1AB = #$35
$DDA4: STA $0070 = #$35
$DDA6: LDA $C196,Y @ $C1AC = #$C7
$DDA9: STA $0071 = #$C7
; store temp facing
$DDAB: LDA facing,X @ $0447 = #$40
$DDAE: STA $007A = #$40
$DDB0: JSR $E243
; common stuff
$E243: LDA $0410,X @ $0417 = #$01
$E246: ASL
$E247: TAY
$E248: LDA ($70),Y @ $C737 = #$5D
$E24A: STA $0000 = #$06
$E24C: INY
$E24D: LDA ($70),Y @ $C738 = #$C7
$E24F: STA $0001 = #$F8
$E251: JMP ($0000) = $C75D
; HANDLE BIRD
; compare Y with Ryu's
$C75D: SEC
$C75E: LDA YposRyu = #$C0
$C760: SBC Ypos,X @ $0487 = #$8C
; above Ryu ? decrement Y : increment Y
$C763: BCC $C76A
$C765: INC Ypos,X @ $0487 = #$8C
$C768: BNE $C76D
; compare X with Ryu's
$C76D: SEC
$C76E: LDA Xpos,X @ $0467 = #$B3
$C771: SBC XposRyu = #$80
; right from Ryu ? decrement XsubSpeed : increment XsubSpeed
$C773: BCC $C78D
$C775: SEC
$C776: LDA XsubSpeed,X @ $044F = #$40
$C779: SBC #$10
$C77B: STA XsubSpeed,X @ $044F = #$40
$C77E: LDA Xspeed,X @ $0457 = #$FD
$C781: SBC #$00
$C783: STA Xspeed,X @ $0457 = #$FD
; update facing
$C786: LDA $007A = #$40
$C788: ORA #$40
$C78A: STA $007A = #$40
$C78C: RTS (from $E243) -----------------------------------
$DDB3: BIT $0079 = #$C0
$DDB5: BMI $DDC3
$DDC3: JSR $E024
$E024: BIT $0079 = #$C0
$E026: BMI $E070
$E070: BVC $E038
$E072: JSR $E054
; apply Xsub
$E054: CLC
$E055: LDA Xsub,X @ $045F = #$A0
$E058: ADC XsubSpeed,X @ $044F = #$30
$E05B: STA Xsub,X @ $045F = #$A0
$E05E: LDA Xpos,X @ $0467 = #$B3
$E061: ADC Xspeed,X @ $0457 = #$FD
; if X out of bounds, flush object
$E064: CMP #$08
$E066: BCC $E078
$E068: CMP #$F8
$E06A: BCS $E078
; else apply X
$E06C: STA Xpos,X @ $0467 = #$B3
$E06F: RTS (from $E054) ---------------------------------