ootw: laser: start making movement code generic

This commit is contained in:
Vince Weaver 2019-08-22 12:28:01 -04:00
parent 33738a7cc9
commit 57ff1da4e6

View File

@ -35,7 +35,7 @@ laser_direction:
laser0_direction: .byte $0 laser0_direction: .byte $0
laser1_direction: .byte $0 laser1_direction: .byte $0
laser_cout: laser_count:
laser0_count: .byte $0 laser0_count: .byte $0
laser1_count: .byte $0 laser1_count: .byte $0
@ -169,20 +169,23 @@ done_draw_laser:
; move laser ; move laser
;=================== ;===================
move_laser: move_laser:
lda laser0_out ldx #0
move_laser_loop:
lda laser_out,X
beq done_move_laser beq done_move_laser
; slow down laser ; slow down laser
lda laser0_count lda laser_count,X
and #$3 and #$3
bne no_move_laser bne no_move_laser
lda laser0_direction lda laser_direction,X
bne move_laser_right bne move_laser_right
move_laser_left: move_laser_left:
lda laser0_count lda laser_count,X
cmp #4 cmp #4
bcc still_starting_left bcc still_starting_left
cmp #8 cmp #8
@ -191,72 +194,72 @@ move_laser_left:
continue_shooting_left: continue_shooting_left:
still_shooting_left: still_shooting_left:
lda laser0_end lda laser_end,X
sec sec
sbc #10 sbc #10
sta laser0_end sta laser_end,X
still_starting_left: still_starting_left:
lda laser0_start lda laser_start,X
sec sec
sbc #10 sbc #10
sta laser0_start sta laser_start,X
laser_edge_detect_left: laser_edge_detect_left:
lda laser0_end lda laser_end,X
cmp LEFT_SHOOT_LIMIT cmp LEFT_SHOOT_LIMIT
bmi disable_laser_left bmi disable_laser_left
lda laser0_start lda laser_start,X
cmp LEFT_SHOOT_LIMIT cmp LEFT_SHOOT_LIMIT
bpl no_move_laser bpl no_move_laser
lda LEFT_SHOOT_LIMIT lda LEFT_SHOOT_LIMIT
sta laser0_start sta laser_start,X
jmp no_move_laser jmp no_move_laser
move_laser_right: move_laser_right:
lda laser0_count lda laser_count,X
cmp #4 cmp #4
bcc still_starting_right bcc still_starting_right
cmp #8 cmp #8
bcc still_shooting_right bcc still_shooting_right
continue_shooting_right: continue_shooting_right:
lda laser0_start lda laser_start,X
clc clc
adc #10 adc #10
sta laser0_start sta laser_start,X
still_shooting_right: still_shooting_right:
lda laser0_end lda laser_end,X
clc clc
adc #10 adc #10
sta laser0_end sta laser_end,X
still_starting_right: still_starting_right:
laser_edge_detect_right: laser_edge_detect_right:
; detect if totally off screen ; detect if totally off screen
lda laser0_start lda laser_start,X
cmp RIGHT_SHOOT_LIMIT cmp RIGHT_SHOOT_LIMIT
bcs disable_laser_right bcs disable_laser_right
lda laser0_end lda laser_end,X
cmp RIGHT_SHOOT_LIMIT cmp RIGHT_SHOOT_LIMIT
bcc no_move_laser bcc no_move_laser
lda RIGHT_SHOOT_LIMIT lda RIGHT_SHOOT_LIMIT
sta laser0_end sta laser_end,X
no_move_laser: no_move_laser:
inc laser0_count inc laser_count,X
done_move_laser: done_move_laser:
@ -281,12 +284,15 @@ disable_laser_right:
; hit something, common ; hit something, common
;====================== ;======================
hit_something_common: hit_something_common:
pha
; disable laser ; disable laser
ldx #0 lda #0
stx laser0_out sta laser_out,X
tax pla
tay
and #$f0 and #$f0
cmp #TARGET_ALIEN cmp #TARGET_ALIEN
@ -301,15 +307,15 @@ hit_something_common:
laser_hit_alien: laser_hit_alien:
txa tya
and #$f and #$f
tax tay
lda #A_DISINTEGRATING lda #A_DISINTEGRATING
sta alien_state,X sta alien_state,Y
lda #0 lda #0
sta alien_gait,X sta alien_gait,Y
jmp done_hit_something jmp done_hit_something