;==================================== ; draw pointer ;==================================== draw_pointer: ; point sprite to right location (X,Y) lda CURSOR_X sta XPOS lda CURSOR_Y sta YPOS ; see if inside special region ldy #LOCATION_SPECIAL_EXIT lda (LOCATION_STRUCT_L),Y cmp #$ff beq finger_not_special ; if $ff not special lda DIRECTION and #$f cmp (LOCATION_STRUCT_L),Y bne finger_not_special ; only special if facing right way ; see if X1 < X < X2 lda CURSOR_X ldy #LOCATION_SPECIAL_X1 cmp (LOCATION_STRUCT_L),Y bcc finger_not_special ; blt ldy #LOCATION_SPECIAL_X2 cmp (LOCATION_STRUCT_L),Y bcs finger_not_special ; bge ; see if Y1 < Y < Y2 lda CURSOR_Y ldy #LOCATION_SPECIAL_Y1 cmp (LOCATION_STRUCT_L),Y bcc finger_not_special ; blt ldy #LOCATION_SPECIAL_Y2 cmp (LOCATION_STRUCT_L),Y bcs finger_not_special ; bge ; we made it this far, we are special finger_grab: lda #1 sta IN_SPECIAL lda CURSOR_VISIBLE ; if not visible skip bne really_draw_grab rts really_draw_grab: lda DIRECTION and #DIRECTION_ONLY_POINT bne special_but_point lda #finger_grab_sprite jmp finger_draw special_but_point: jmp finger_point finger_not_special: lda CURSOR_VISIBLE ; if not visible skip bne really_not_special rts really_not_special: ; check for left/right lda CURSOR_X cmp #7 bcc check_cursor_left ; blt cmp #33 bcs check_cursor_right ; bge ; otherwise, finger_point finger_point: lda HOLDING_PAGE beq real_finger_point cmp #HOLDING_BLUE_PAGE beq blue_finger cmp #HOLDING_WHITE_PAGE beq white_finger red_finger: lda #finger_red_page_sprite jmp finger_draw blue_finger: lda #finger_blue_page_sprite jmp finger_draw white_finger: lda #finger_white_page_sprite jmp finger_draw real_finger_point: lda #finger_point_sprite jmp finger_draw check_cursor_left: lda DIRECTION and #$f asl asl asl asl clc ldy #LOCATION_BGS adc (LOCATION_STRUCT_L),Y tay lda direction_lookup,Y and #$f beq finger_point cmp #1 beq finger_left bne finger_uturn_left check_cursor_right: lda DIRECTION and #$f asl asl asl asl clc ldy #LOCATION_BGS adc (LOCATION_STRUCT_L),Y tay lda direction_lookup,Y and #$f0 beq finger_point cmp #$10 beq finger_right bne finger_uturn_right finger_left: lda #1 sta IN_LEFT lda #finger_left_sprite jmp finger_draw finger_right: lda #1 sta IN_RIGHT lda #finger_right_sprite jmp finger_draw finger_uturn_left: lda #2 sta IN_LEFT lda #finger_turn_left_sprite jmp finger_draw finger_uturn_right: lda #2 sta IN_RIGHT lda #finger_turn_right_sprite jmp finger_draw finger_draw: sta INH jsr put_sprite_crop no_draw_pointer: rts ; 0 = point ; 1 = left ; 2 = left u-turn direction_lookup: direction_lookup_n: .byte $00,$00,$22,$22,$01,$01,$21,$21,$10,$10,$12,$12,$11,$11,$11,$11 direction_lookup_s: .byte $00,$02,$20,$22,$10,$12,$10,$12,$01,$01,$21,$21,$11,$11,$11,$11 direction_lookup_e: .byte $00,$01,$10,$11,$22,$21,$12,$11,$00,$01,$10,$11,$22,$21,$12,$11 direction_lookup_w: .byte $00,$10,$01,$11,$00,$10,$01,$11,$22,$12,$21,$11,$22,$12,$21,$11