sb: can now damage strongbad

This commit is contained in:
Vince Weaver 2023-06-10 23:44:58 -04:00
parent 447b21d420
commit d64015eae6
2 changed files with 84 additions and 7 deletions

View File

@ -142,6 +142,7 @@ load_background:
lda #1 lda #1
sta STRONGBAD_DIR sta STRONGBAD_DIR
sta BULLET_YDIR
lda #SHIELD_DOWN lda #SHIELD_DOWN
sta SHIELD_POSITION sta SHIELD_POSITION
@ -274,11 +275,28 @@ walls_out:
walls_good: walls_good:
; move bullet Y
lda BULLET_YDIR
bne bullet_down
bullet_up:
dec BULLET_Y
jmp bullet_y_done
bullet_down:
inc BULLET_Y inc BULLET_Y
bullet_y_done:
; see if off end
lda BULLET_Y lda BULLET_Y
cmp #17 cmp #17
bcc bullet_still_good bcc bullet_still_good
; reset to top
lda #0 lda #0
sta BULLET_Y sta BULLET_Y
bullet_still_good: bullet_still_good:
@ -291,7 +309,7 @@ bullet_still_good:
; check player ; check player
; if (bullet_x > player_x+2) && ; if (bullet_x > player_x+2) &&
; (bullet_x<player_x+6) ; (bullet_x<player_x+6)
; if 2 < px - bx < 6 ??? ; if 2 < bx - px < 6 ???
; 012345678 ; 012345678
; b-p ; b-p
@ -320,6 +338,64 @@ check_player_collide:
skip_check_player_collide: skip_check_player_collide:
;===========================
; check shield
; only if Y=15 and YDIR=1
check_shield_collide:
lda BULLET_Y
cmp #15
bne skip_check_shield_collide
lda SHIELD_POSITION
beq skip_check_shield_collide ; 0 means DOWN
; flip dir
; TODO: sound
lda #0
sta BULLET_YDIR
skip_check_shield_collide:
;===========================
; check head
; only if Y=0 and YDIR=0
lda BULLET_Y
bne done_check_head
lda BULLET_YDIR
bne done_check_head
check_head_collide:
sec
lda BULLET_X
sbc STRONGBAD_X
cmp #0
bcc skip_check_head_collide ; blt
cmp #6
bcs skip_check_head_collide
inc HEAD_DAMAGE ; increase head damage
lda HEAD_DAMAGE
cmp #5
bcc skip_check_head_collide
lda #0 ; reset
sta HEAD_DAMAGE
skip_check_head_collide:
lda #1
sta BULLET_YDIR ; bounce
done_check_head:
;========================== ;==========================
; draw bullet ; draw bullet
;=========================== ;===========================
@ -363,8 +439,8 @@ check_keypress:
and #$df ; convert lowercase to upper and #$df ; convert lowercase to upper
cmp #'Q' ; cmp #'Q'
beq done_game ; beq done_game
cmp #27 ; escape cmp #27 ; escape
beq done_game beq done_game
@ -376,8 +452,8 @@ check_keypress:
cmp #'D' ; shield right cmp #'D' ; shield right
beq shield_right beq shield_right
cmp #'X' ; cmp #'X'
beq asplode_asplode ; beq asplode_asplode
cmp #8 ; left cmp #8 ; left
beq move_left beq move_left
@ -525,8 +601,8 @@ bullet_sprite_h:
.byte >bullet_done_sprite .byte >bullet_done_sprite
bullet_sprite_y: bullet_sprite_y:
.byte 90,94,98,102 .byte 83,88,93,98
.byte 106,110,114,118 .byte 103,108,113,118
.byte 123,128,133,138 .byte 123,128,133,138
.byte 143,148,153,158 .byte 143,148,153,158
.byte 163 .byte 163

View File

@ -77,6 +77,7 @@ BULLET_Y = $72
HEAD_DAMAGE = $73 HEAD_DAMAGE = $73
BULLET_X_VEL = $74 BULLET_X_VEL = $74
BULLET_X_VEL_L = $75 BULLET_X_VEL_L = $75
BULLET_YDIR = $76
.if 0 .if 0
REGISTER_DUMP = $70 REGISTER_DUMP = $70