From 76254b97294dd6986876494e433315e794c473cc Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 5 Apr 2024 23:56:13 -0400 Subject: [PATCH] keen: better end-of-level handling --- games/keen/game_over.s | 3 +++ games/keen/level1.s | 45 ++++++++++++++++++++++++++++++++----- games/keen/level1_enemies.s | 20 ++++++++--------- games/keen/level1_items.s | 27 ++++++++++------------ games/keen/mars.s | 19 ++++++++++++---- games/keen/zp.inc | 23 ++++--------------- 6 files changed, 84 insertions(+), 53 deletions(-) diff --git a/games/keen/game_over.s b/games/keen/game_over.s index 344333b3..ea2f2704 100644 --- a/games/keen/game_over.s +++ b/games/keen/game_over.s @@ -28,6 +28,9 @@ game_over: jsr page_flip + ldy #SFX_GAMEOVERSND + jsr play_sfx + query_game_over: lda KEYPRESS bpl query_game_over diff --git a/games/keen/level1.s b/games/keen/level1.s index 72f05415..cf6de56e 100644 --- a/games/keen/level1.s +++ b/games/keen/level1.s @@ -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 diff --git a/games/keen/level1_enemies.s b/games/keen/level1_enemies.s index c4b4311c..bb37b36b 100644 --- a/games/keen/level1_enemies.s +++ b/games/keen/level1_enemies.s @@ -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? diff --git a/games/keen/level1_items.s b/games/keen/level1_items.s index de715982..f8df738a 100644 --- a/games/keen/level1_items.s +++ b/games/keen/level1_items.s @@ -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: diff --git a/games/keen/mars.s b/games/keen/mars.s index f8e63509..e60f4c06 100644 --- a/games/keen/mars.s +++ b/games/keen/mars.s @@ -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 diff --git a/games/keen/zp.inc b/games/keen/zp.inc index df9fc221..eb916222 100644 --- a/games/keen/zp.inc +++ b/games/keen/zp.inc @@ -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