;$90:87BD PHP REP #$30 LDA $0AAE ;echo index BMI PART_A LDA $0B3E ;speed counter AND #$FF00 CMP #$0400 ;Check if speed boosting BEQ $02 ;If you are PLP ;If not RTS LDA $0AB2 ;Echo 2 X BEQ PART_K ;If doesn't exist LDY #$0002 ;Load index for echo 2 JSR $8855 PART_K: LDA $0AB0 ;Echo 1 X BEQ PART_L ;If doesn't exist LDY #$0000 ;Load index for echo 1 JSR $8855 PART_L: PLP RTS PART_A: LDY #$0002 PART_G: LDA $0AB0,y ;Echo (2,1) X BEQ PART_B ;If absent, check again LDA $0AB8,y ;Echo (2,1) Y (only if X=true) CMP $0AFA ;Compare with samus height BEQ PART_C ;If equal BMI PART_D ;If less (higher) SEC ;If more (lower) SBC #$0002 STA $0AB8,y ;Subtract 2, and put back BRA PART_C PART_D: CLC ;If higher ADC #$0002 STA $0AB8,y ;Add 2, and put back PART_C: LDA $0AC0,y ;Echo (2,1) H speed BMI PART_E LDA $0AB0,y ;Load echo (2,1)'s X ;If going right CLC ADC $0AC0,y ;Add X speed STA $0AB0,y ;Store new value CMP $0AF6 ;Compare new value with Samus X BMI PART_F ;If less than LDA #$0000 ;If more STA $0AB0,y ;Clear echo BRA PART_B ;Check again for echo 1 (only if at 2) PART_E: LDA $0AB0,y ;Load echo (2,1)'s X ;If going Left CLC ADC $0AC0,y ;Add X speed STA $0AB0,y ;Store new value CMP $0AF6 ;Compare new value with Samus X BPL PART_F: ;If more than LDA #$0000 ;If less STA $0AB0,y ;Clear echo BRA PART_B ;Check again for echo 1 (only if at 2) PART_F: JSR $8855 PART_B: DEY ;Decrease Y twice DEY ;if Y is 0 or above BPL PART_G ;run all previous stuff again to check for echo 1 LDA $0AB2 ;load Echo 2 X BNE PART_H ;If echo 2 exists LDA $0AB0 ;load Echo 2 X BNE PART_H ;If echo 1 exists STZ $0AAE ;Clear indexes PART_H: PLP RTS SETECHO: PHY LDA $0A1C ;Load current pose ASL A : ASL A : ASL A ;Multiply by 8 TAX ;Put into X LDA $91B62D,x ;Load value to adjust echo position AND #$00FF STA $12 ;Store variance LDA $0AB0,y ;Load Echo (2,1) X SEC SBC $0911 ;Subtract screen's X position TAX ;Put into X LDA $0AB8,y ;Load Echo (2,1) Y SEC SBC $12 ;Subtract echo variance SBC $0915 ;Subtract screen's Y position BMI PART_I ;If now less than 0, end CMP #$00F8 ;If more than, end BMI $02 PART_I: PLY RTS TAY LDA $0AC8 ;Load tileset for upper half of Samus JSL $8189AE PLY LDA $0ACA ;Load tileset for lower half of Samus BEQ PART_J LDA $0A1C ;Load current pose ASL A : ASL A : ASL A ;Multiply by 8 TAX ;Put into X LDA $91B62D,x ;Load value to adjust echo position AND #$00FF STA $12 ;Store variance PHY LDA $0AB0,y ;Load Echo (2,1) X SEC SBC $0911 ;Subtract screen's X position TAX ;Put into X LDA $0AB8,y ;Load Echo (2,1) Y SEC SBC $12 ;Subtract echo variance SBC $0915 ;Subtract screen's Y position TAY LDA $0ACA ;Load tileset for lower half of Samus JSL $8189AE PLY PART_J: RTS