keen: better end-of-level handling

This commit is contained in:
Vince Weaver 2024-04-05 23:56:13 -04:00
parent d7724283a3
commit 76254b9729
6 changed files with 84 additions and 53 deletions

View File

@ -28,6 +28,9 @@ game_over:
jsr page_flip
ldy #SFX_GAMEOVERSND
jsr play_sfx
query_game_over:
lda KEYPRESS
bpl query_game_over

View File

@ -154,22 +154,57 @@ no_frame_oflo:
;===========================
lda LEVEL_OVER
beq do_keen_loop
jmp done_with_keen
do_keen_loop:
bne done_with_keen
;===========================
; delay
;===========================
; lda #200
; jsr WAIT
jmp keen_loop
done_with_keen:
bit KEYRESET ; clear keypress
; three reasons we could get here
; NEXT_LEVEL = finished level by exiting door
; GAME_OVER = hit ESC and said Y to QUIT
; TOUCHED_ENEMY = touched an enemy
lda LEVEL_OVER
cmp #NEXT_LEVEL
beq level1_levelover
cmp #GAME_OVER
beq level1_gameover
; got here, touched enemy
ldy #SFX_KEENDIESND
jsr play_sfx
; TODO: ANIMATION
; keen turns to head, flies up screen
; play game over music if out of keens
dec KEENS
bpl level1_levelover
level1_gameover:
; mars plays this
; ldy #SFX_GAMEOVERSND
; jsr play_sfx
lda #GAME_OVER
sta LEVEL_OVER
level1_levelover:
lda #LOAD_MARS
sta WHICH_LOAD

View File

@ -372,16 +372,16 @@ YORP_SEARCH = 2
LEFT = $FF
RIGHT = $1
enemy_data_out: .byte 1, 1, 0, 0, 0, 0, 0, 0,0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0,0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT,RIGHT,LEFT
enemy_data_tilex: .byte 5, 19, 38, 45, 69, 81, 89, 92,100
enemy_data_tiley: .byte 6, 13, 4, 4, 13, 4, 4, 13,10
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0,0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0,0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0,0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8,8
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT,RIGHT,LEFT
enemy_data_tilex: .byte 19, 38, 45, 69, 81, 89, 92, 100
enemy_data_tiley: .byte 13, 4, 4, 13, 4, 4, 13, 10
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; question: when do they activate? When do they move when offscreen?

View File

@ -178,23 +178,20 @@ check_enemy:
bne done_check_enemy
touched_enemy:
dec KEENS
inc LEVEL_OVER
lda #TOUCHED_ENEMY
sta LEVEL_OVER
ldy #SFX_KEENDIESND
jsr play_sfx
; TODO: ANIMATION
; keen turns to head, flies up screen
; play game over music if out of keens
lda KEENS
bpl done_check_enemy
ldy #SFX_GAMEOVERSND
jsr play_sfx
; ldy #SFX_KEENDIESND
; jsr play_sfx
; ; TODO: ANIMATION
; ; keen turns to head, flies up screen
; ; play game over music if out of keens
; lda KEENS
; bpl done_check_enemy
; ldy #SFX_GAMEOVERSND
; jsr play_sfx
done_check_enemy:

View File

@ -38,7 +38,7 @@ mars_start:
sta KEEN_WALKING
sta KEEN_JUMPING
sta LEVEL_OVER
; sta LEVEL_OVER
sta LASER_OUT
sta KEEN_XL
sta KEEN_FALLING
@ -53,6 +53,12 @@ mars_start:
; lda #11
; sta KEEN_Y
; see if returning and it game over
lda LEVEL_OVER
cmp #GAME_OVER
beq return_to_title
;====================================
; load mars background
;====================================
@ -72,6 +78,9 @@ mars_start:
jsr fade_in
lda #0
sta LEVEL_OVER
;====================================
;====================================
; Main loop
@ -165,11 +174,13 @@ done_with_keen:
return_to_title:
ldy #SFX_GAMEOVERSND
jsr play_sfx
jsr game_over
; ldy #SFX_GAMEOVERSND
; jsr play_sfx
lda #LOAD_TITLE
sta WHICH_LOAD

View File

@ -136,25 +136,9 @@ TILEY = $9D
TILE_ODD = $9E
TILEMAP_OFFSET = $9F
;
.if 0
KEEN_FOOT_TILE1 = $A1
KEEN_FOOT_TILE2 = $A2
KEEN_FOOT_BELOW1 = $A3
KEEN_FOOT_BELOW2 = $A4
KEEN_HEAD_TILE1 = $A5
KEEN_HEAD_TILE2 = $A6
KEEN_WALK_TILE_L = $A7
KEEN_WALK_TILE_R = $A8
KEEN_FOOT_POINTER_L = $A9
KEEN_FOOT_POINTER_R = $AA
KEEN_HEAD_POINTER_L = $AB
KEEN_HEAD_POINTER_R = $AC
.endif
MARS_X = $AD
MARS_Y = $AE
INITIAL_SOUND = $AF
MARS_X = $A0
MARS_Y = $A1
INITIAL_SOUND = $A2
@ -171,6 +155,7 @@ GRID_PAGE = $DF
ANIMATE_FRAME = $E0
LEVEL_OVER = $E1
GAME_OVER = $FF
TOUCHED_ENEMY = $80
NEXT_LEVEL = $01
LOCATIONS_L = $E2
LOCATIONS_H = $E3