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 jsr page_flip
ldy #SFX_GAMEOVERSND
jsr play_sfx
query_game_over: query_game_over:
lda KEYPRESS lda KEYPRESS
bpl query_game_over bpl query_game_over

View File

@ -154,22 +154,57 @@ no_frame_oflo:
;=========================== ;===========================
lda LEVEL_OVER lda LEVEL_OVER
beq do_keen_loop bne done_with_keen
jmp done_with_keen
do_keen_loop:
;===========================
; delay ; delay
;===========================
; lda #200 ; lda #200
; jsr WAIT ; jsr WAIT
jmp keen_loop jmp keen_loop
done_with_keen: done_with_keen:
bit KEYRESET ; clear keypress 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 lda #LOAD_MARS
sta WHICH_LOAD sta WHICH_LOAD

View File

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

View File

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

View File

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

View File

@ -136,25 +136,9 @@ TILEY = $9D
TILE_ODD = $9E TILE_ODD = $9E
TILEMAP_OFFSET = $9F TILEMAP_OFFSET = $9F
; MARS_X = $A0
MARS_Y = $A1
.if 0 INITIAL_SOUND = $A2
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
@ -171,6 +155,7 @@ GRID_PAGE = $DF
ANIMATE_FRAME = $E0 ANIMATE_FRAME = $E0
LEVEL_OVER = $E1 LEVEL_OVER = $E1
GAME_OVER = $FF GAME_OVER = $FF
TOUCHED_ENEMY = $80
NEXT_LEVEL = $01 NEXT_LEVEL = $01
LOCATIONS_L = $E2 LOCATIONS_L = $E2
LOCATIONS_H = $E3 LOCATIONS_H = $E3