diff --git a/games/keen/TODO b/games/keen/TODO index d86d4bc6..8814916f 100644 --- a/games/keen/TODO +++ b/games/keen/TODO @@ -5,10 +5,11 @@ lo-res version + animate enemies? + check raygun count before shooting + fix background tile when get item -+ fix keybindings ++ fix keybindings/help menu + play jingle entering/leaving level + implement leaving level + animate death ++ game over screen if out of lives hi-res version ~~~~~~~~~~~~~~ diff --git a/games/keen/item_level1.s b/games/keen/item_level1.s index 6ff25b46..f9adbb16 100644 --- a/games/keen/item_level1.s +++ b/games/keen/item_level1.s @@ -1,11 +1,28 @@ + ;====================== + ; check touching things + ;====================== + ; do head, than foot + ; FIXME: should we check both head/feet? +check_items: + jsr check_door + + ldx KEEN_HEAD_POINTER + jsr check_item + + ldx KEEN_FOOT_POINTER + ; fallthrough ;================== ; check for items ;================== - ; A holds tile value to check check_item: + lda tilemap,X +do_check_enemy: + + +do_check_item: cmp #27 bcc done_check_item ; not an item cmp #32 @@ -45,16 +62,14 @@ get_keycard: done_item_pickup: - ; erase - - ; FIXME: only erases small tilemap - ; also need to update big + ; erase small tilemap lda #1 ; plain tile sta tilemap,X ; big tilemap: - ; tilemap + ; to find... urgh + ; X is currently (KEEN_Y/4)*20)+(KEEN_X/2) lda KEEN_Y ; divide by 4 as tile 4 blocks tall lsr @@ -71,7 +86,7 @@ done_item_pickup: lda KEEN_X lsr tay - iny ; why add 1???? +; iny ; why add 1???? lda #0 ; background tile btc_smc: @@ -80,49 +95,27 @@ btc_smc: ; play sound jsr pickup_noise -.if 0 -check_red_key: - lda tilemap,X - cmp #31 ; red key - bne check_blue_key - jsr pickup_noise - lda INVENTORY - ora #INV_RED_KEY - sta INVENTORY - - ; erase red key (304,96) - lda #0 - sta $A938 ; hack - - jsr copy_tilemap_subset - - jsr update_status_bar - - jmp done_check_item - -check_blue_key: - cmp #30 ; blue key - bne done_check_item - - jsr pickup_noise - lda INVENTORY - ora #INV_BLUE_KEY - sta INVENTORY - - ; erase blue key - lda #0 - sta $970c ; hack - - jsr copy_tilemap_subset - - jsr update_status_bar - - jmp keen_check_head -.endif done_check_item: rts + ;========================== + ; check if feet at door + ;========================== +check_door: + lda KEEN_FOOT_TILE1 + cmp #11 ; door tile + beq at_door + lda KEEN_FOOT_TILE2 + cmp #11 + bne done_check_door + +at_door: + inc LEVEL_OVER + ; TODO: mark level complete somehow + jsr exit_music +done_check_door: + rts score_lookup: .byte $00,$01,$10,$05,$02,$50 ; BCD diff --git a/games/keen/keen_mars.s b/games/keen/keen_mars.s index b4f04362..2c8dbc1a 100644 --- a/games/keen/keen_mars.s +++ b/games/keen/keen_mars.s @@ -44,10 +44,10 @@ keen_start: lda #4 sta DRAW_PAGE - lda #18 - sta KEEN_X - lda #11 - sta KEEN_Y +; lda #18 +; sta KEEN_X +; lda #11 +; sta KEEN_Y ;==================================== ; load mars background @@ -178,15 +178,15 @@ parts_zx02: ; D32 draw_keen: - lda KEEN_Y + lda MARS_Y and #1 beq draw_keen_even draw_keen_odd: - ; calculate address of KEEN_Y/2 + ; calculate address of MARS_Y/2 - lda KEEN_Y + lda MARS_Y and #$FE tay lda gr_offsets,Y @@ -196,14 +196,14 @@ draw_keen_odd: adc DRAW_PAGE sta OUTH - ldy KEEN_X + ldy MARS_X lda (OUTL),Y and #$0f ora #$D0 sta (OUTL),Y - lda KEEN_Y + lda MARS_Y clc adc #2 @@ -216,7 +216,7 @@ draw_keen_odd: adc DRAW_PAGE sta OUTH - ldy KEEN_X + ldy MARS_X lda #$23 sta (OUTL),Y @@ -227,7 +227,7 @@ draw_keen_odd: draw_keen_even: - lda KEEN_Y + lda MARS_Y ; and #$FE ; no need to mask, know bottom bit is 0 tay lda gr_offsets,Y @@ -236,12 +236,12 @@ draw_keen_even: clc adc DRAW_PAGE sta OUTH - ldy KEEN_X ; adjust with Xpos + ldy MARS_X ; adjust with Xpos lda #$3D sta (OUTL),Y - lda KEEN_Y + lda MARS_Y clc adc #2 ; and #$FE ; no need to mask @@ -252,7 +252,7 @@ draw_keen_even: clc adc DRAW_PAGE sta OUTH - ldy KEEN_X ; adjust with Xpos + ldy MARS_X ; adjust with Xpos lda (OUTL),Y and #$F0 @@ -374,12 +374,12 @@ check_left: bne check_right left_pressed: - ldy KEEN_X + ldy MARS_X dey - ldx KEEN_Y + ldx MARS_Y jsr check_valid_feet bcc done_left_pressed - dec KEEN_X + dec MARS_X done_left_pressed: jmp done_keypress @@ -390,12 +390,12 @@ check_right: bne check_up right_pressed: - ldy KEEN_X + ldy MARS_X iny - ldx KEEN_Y + ldx MARS_Y jsr check_valid_feet bcc done_right_pressed - inc KEEN_X + inc MARS_X done_right_pressed: jmp done_keypress @@ -406,12 +406,12 @@ check_up: bne check_down up_pressed: - ldy KEEN_X - ldx KEEN_Y + ldy MARS_X + ldx MARS_Y dex jsr check_valid_feet bcc done_up_pressed - dec KEEN_Y + dec MARS_Y done_up_pressed: jmp done_keypress @@ -421,12 +421,12 @@ check_down: cmp #$0A bne check_space down_pressed: - ldy KEEN_X - ldx KEEN_Y + ldy MARS_X + ldx MARS_Y inx jsr check_valid_feet bcc done_up_pressed - inc KEEN_Y + inc MARS_Y done_down_pressed: jmp done_keypress @@ -554,7 +554,7 @@ done_parts: do_action: - lda KEEN_X + lda MARS_X cmp #15 bcc do_nothing ; blt @@ -571,7 +571,7 @@ do_nothing: maybe_ship: - lda KEEN_Y + lda MARS_Y cmp #16 bcc do_nothing cmp #24 diff --git a/games/keen/keen_title.s b/games/keen/keen_title.s index 412fdc4b..18ab261c 100644 --- a/games/keen/keen_title.s +++ b/games/keen/keen_title.s @@ -203,6 +203,11 @@ init_vars: ;============================ ; set up initial location + lda #18 + sta MARS_X + lda #11 + sta MARS_Y + lda #LOAD_MARS sta WHICH_LOAD ; start at first level diff --git a/games/keen/move_keen.s b/games/keen/move_keen.s index f07ecdcf..51ac4874 100644 --- a/games/keen/move_keen.s +++ b/games/keen/move_keen.s @@ -133,12 +133,9 @@ keen_collide: ;================== ; check for item ;================== -keen_check_item: - lda KEEN_HEAD_TILE1 +keen_check_items: - jsr check_item - - ; TODO: do this again for KEEN_HEAD_TILE2? + jsr check_items ;=================== ; collide with head @@ -408,6 +405,7 @@ keen_get_feet_even: sta KEEN_HEAD_TILE1 lda tilemap+1,X sta KEEN_HEAD_TILE2 + stx KEEN_HEAD_POINTER txa ; restore pointer to tile of head clc @@ -420,6 +418,7 @@ keen_get_feet_even: lda tilemap+1,X sta KEEN_FOOT_TILE2 sta KEEN_WALK_TILE_R + stx KEEN_FOOT_POINTER txa ; restore pointer to tile of foot clc @@ -444,6 +443,7 @@ keen_get_feet_odd: lda tilemap+1,X ; put tilemap value in place sta KEEN_HEAD_TILE1 sta KEEN_HEAD_TILE2 + stx KEEN_HEAD_POINTER txa clc @@ -457,6 +457,7 @@ keen_get_feet_odd: sta KEEN_FOOT_TILE2 lda tilemap+2,X sta KEEN_WALK_TILE_R + stx KEEN_FOOT_POINTER txa clc diff --git a/games/keen/zp.inc b/games/keen/zp.inc index 1b225146..74cb2d5c 100644 --- a/games/keen/zp.inc +++ b/games/keen/zp.inc @@ -144,8 +144,12 @@ KEEN_HEAD_TILE1 = $A5 KEEN_HEAD_TILE2 = $A6 KEEN_WALK_TILE_L = $A7 KEEN_WALK_TILE_R = $A8 +KEEN_FOOT_POINTER = $A9 +KEEN_HEAD_POINTER = $AA +MARS_X = $AB +MARS_Y = $AC + -; done game puzzle state WHICH_SLOT = $DA