keen: fix up laser support

This commit is contained in:
Vince Weaver 2024-04-06 00:49:24 -04:00
parent 5dbbd383ff
commit 2fd7d7d96a
5 changed files with 57 additions and 46 deletions

View File

@ -51,7 +51,7 @@ check_shooting_right:
draw_shooting_right:
ldx #<keen_sprite_shooting_right
lda #>keen_sprite_shooting_right
dec KEEN_SHOOTING
;dec KEEN_SHOOTING
jmp actually_draw_keen
check_walking_right:
@ -98,7 +98,7 @@ check_shooting_left:
draw_shooting_left:
ldx #<keen_sprite_shooting_left
lda #>keen_sprite_shooting_left
dec KEEN_SHOOTING
; dec KEEN_SHOOTING
jmp actually_draw_keen
check_walking_left:

View File

@ -10,34 +10,25 @@ move_laser:
lda LASER_OUT
beq done_move_laser
lda LASER_X
lda LASER_TILEX
clc
adc LASER_DIRECTION
sta LASER_X
sta LASER_TILEX
laser_check_tiles:
; collision detect with tiles
; laser location is roughly
; (y/4)*16 + (x/2) - 2
lda LASER_Y
lsr
lsr
asl
asl
asl
asl
sta LASER_TILE
lda LASER_X
lsr
clc
adc LASER_TILE
sec
sbc #2
sta LASER_TILE
lda LASER_TILEY
adc #>big_tilemap
sta INH
lda LASER_TILEX
sta INL
ldx LASER_TILE
lda tilemap,X
ldy #0
lda (INL),Y
cmp #ALLHARD_TILES
bcs destroy_laser
@ -45,20 +36,24 @@ laser_check_tiles:
laser_check_enemies:
; collision detect with enemies
jsr laser_enemies
; jsr laser_enemies
; detect if off screen
laser_check_right:
lda LASER_X
cmp #31
sec
lda LASER_TILEX
sbc TILEMAP_X
cmp #21
bcc laser_check_left ; not_too_far_right
bcs destroy_laser
laser_check_left:
cmp #6
bcs done_move_laser
bcc destroy_laser
sec
lda LASER_TILEX
sbc TILEMAP_X
bpl done_move_laser
; bmi destroy_laser
destroy_laser:
lda #0
@ -67,6 +62,7 @@ destroy_laser:
done_move_laser:
rts
;====================
; draw laser
;====================
@ -76,13 +72,18 @@ draw_laser:
lda LASER_OUT
beq done_draw_laser
lda LASER_X
sta XPOS
lda LASER_Y
sec
lda LASER_TILEY
sbc TILEMAP_Y
asl
asl
sta YPOS
; lda LASER_DIRECTION
sec
lda LASER_TILEX
sbc TILEMAP_X
asl
sta XPOS
lda #<laser_sideways_sprite
sta INL

View File

@ -122,6 +122,7 @@ left_pressed:
lda #4
sta KEEN_WALKING
jmp done_left_pressed
left_facing_right:
@ -138,6 +139,9 @@ left_not_walking:
sta KEEN_DIRECTION
done_left_pressed:
lda #0
sta KEEN_SHOOTING
jmp done_keypress
check_right:
@ -176,6 +180,9 @@ right_not_walking:
done_right_pressed:
lda #0
sta KEEN_SHOOTING
jmp done_keypress
check_jump_right:
@ -282,6 +289,9 @@ check_comma:
comma_pressed:
; check if we have any shots left
lda #2 ; draw us shooting even if out of ammo
sta KEEN_SHOOTING
lda RAYGUNS
beq done_comma
@ -295,34 +305,29 @@ comma_pressed:
ldy #SFX_GUNCLICK
jsr play_sfx
; jsr laser_noise
lda KEEN_DIRECTION
sta LASER_DIRECTION
lda #2
sta KEEN_SHOOTING
cmp #1
beq laser_right
laser_left:
lda KEEN_X
lda KEEN_TILEX
sec
sbc #1
jmp laser_assign
laser_right:
lda KEEN_X
lda KEEN_TILEX
clc
adc #2
laser_assign:
sta LASER_X
sta LASER_TILEX
lda KEEN_Y
lda KEEN_TILEY
clc
adc #4
sta LASER_Y
adc #1
sta LASER_TILEY
inc LASER_OUT

View File

@ -42,6 +42,11 @@ keen_start:
sta KEEN_SHOOTING
sta KEYCARDS
; debug
; lda #9
; sta RAYGUNS
lda #4
sta DRAW_PAGE

View File

@ -102,8 +102,8 @@ KEEN_WALKING = $89
KEEN_JUMPING = $8A
LASER_OUT = $8B
LASER_X = $8C
LASER_Y = $8D
LASER_TILEX = $8C
LASER_TILEY = $8D
LASER_DIRECTION = $8E
RAYGUNS = $8F