
;TEST TO SEE IF THE PLAYER CAN MOVE IN THE CURRENT DIRECTION, AND IF SO UPDATE HIS POSITION

MOVEDATA1:
    .DB $00, $00
MOVEDATA2:
    .DB $01, $FF
    .DB $00, $00

MOVEPLAYER:
    STX <ROW                   ;DIRECTION NUMBER

    JSR BGTEST                 ;DO BACKGROUND COLLISION DETECTION

    TAX

    LDA $0600, X
    AND #$FC
    CMP #$40                   ;METATILE NUMBERS 3 OR HIGHER CANNOT BE WALKED ON
    BCS EXITMOVEPLAYER         ;CANT MOVE THERE, SO EXIT WITH CARRY SET

    LDA <ROW                   ;DIRECTION NUMBER
    STA <$61                   ;STORE IT HERE

    LDA <COLUMN
    STA <METATILE              ;SAVE THIS FOR TESTING LATER

;   JSR LDC44                  ;DO SPRITE COLLISION DETECTION I THINK
    LDA <$03                   ;PLAYER X
    STA <$42                   ;PLAYER X
    STA $0430                  ;SPRITE 0 X (PLAYER)

    LDA <$04                   ;PLAYER Y
    STA <$43                   ;PLAYER Y
    STA $0448                  ;SPRITE 0 Y (PLAYER)

    CLC                        ;EXIT WITH CARRY CLEAR
EXITMOVEPLAYER:
    RTS

;DO A COLLISION TEST WITH THE BACKGROUND WHERE PLAYER IS TRYING TO MOVE

    .DB $01, $FF
    .DB $FE, $02

BGTEST:
    LDA $0448                  ;PLAYER Y
    CLC
    ADC MOVEDATA1 - $80, X     ;MOVE THE PLAYER Y POS
    STA <$04                   ;SAVE IT

    TAY

    LDA $0430                  ;PLAYER X
    CLC
    ADC MOVEDATA2 - $80, X     ;MOVE THE PLAYER X POS
    STA <$03                   ;SAVE IT

    JSR GETMAPOFFSET           ;CALCULATE OFFSET INTO SCREEN MAP
    LDA $0500, Y               ;GET METATILE NUMBER WHERE PLAYER IS TRYING TO MOVE TO

    RTS

;CALCULATE THE POSITION INTO THE 2-D SCREEN MAP

GETMAPOFFSET:
    AND #$0F                   ;SAME AS MODULO DIVIDE BY 16
    STA <$02                   ;SAVE X OFFSET

    TYA                        ;GET Y COORDINATE

    ASL A
    ASL A
    ASL A
    ASL A                      ;MULTIPLY BY 16

    ORA <$02                   ;ADD X OFFSET TO IT
    TAY                        ;Y HOLDS SCREEN MAP OFFSET

    RTS

