diff --git a/games/keen/NOTES b/games/keen/NOTES index cfd81976..5cf9dd58 100644 --- a/games/keen/NOTES +++ b/games/keen/NOTES @@ -42,11 +42,13 @@ Status: * 11223344 * 20000 * 5 * N * +Level1: + in png: X=80 to 543, Y=12 to 80 (tiles 4x4) + x=0 to 116 Y=0..17 + start position: in png 88,65 + tile position = 0,5 + keen position = 2,24 (remember, tiles 2 bytes high) - - - - - + tilemap copies diff --git a/games/keen/keen_level1.s b/games/keen/keen_level1.s index 0d0487c1..22a6ba81 100644 --- a/games/keen/keen_level1.s +++ b/games/keen/keen_level1.s @@ -60,25 +60,24 @@ keen_start: lda #1 sta FIREPOWER -; lda #2 ; draw twice (both pages) -; sta UPDATE_STATUS - ; lda #7 ; sta HEALTH lda #4 sta DRAW_PAGE - lda #18 + ; Level 1 + ; start at 2,24 (remember tiles 2 bytes high even though 4 pixels) + ; but with reference to starting tilemap (0,5) should be + ; 2,8? + + lda #2 sta KEEN_X - lda #0 + lda #24 sta KEEN_Y lda #1 sta KEEN_DIRECTION - -; jsr update_status_bar - ;==================================== ; load level1 background ;==================================== @@ -107,15 +106,14 @@ keen_start: ;==================================== ; copy in tilemap subset ;==================================== - ; copies local 16x10 tilemap to $bc00 - ; we start out assuming position is 28,0 + ; we copy in full screen, 40x48 = 20x12 tiles + ; we start out assuming position is 0,5 + - ; note 16x10 is 32*40 - ; if we want full screen it should be 40x48 = 20x12 - lda #28 - sta TILEMAP_X lda #0 + sta TILEMAP_X + lda #5 sta TILEMAP_Y jsr copy_tilemap_subset @@ -128,10 +126,6 @@ keen_start: keen_loop: - ; copy over background - -; jsr gr_copy_to_current - ; draw tilemap jsr draw_tilemap @@ -152,10 +146,6 @@ keen_loop: ; jsr check_open_door - ; draw a status bar - -; jsr draw_status_bar - jsr page_flip jsr handle_keypress @@ -185,9 +175,6 @@ no_frame_oflo: jmp done_with_keen - - - do_keen_loop: ; delay @@ -201,7 +188,7 @@ done_with_keen: bit KEYRESET ; clear keypress - lda #LOAD_TITLE + lda #LOAD_MARS sta WHICH_LOAD rts ; exit back diff --git a/games/keen/keyboard.s b/games/keen/keyboard.s index 68a64ee6..59539f6d 100644 --- a/games/keen/keyboard.s +++ b/games/keen/keyboard.s @@ -110,19 +110,32 @@ check_left: bne check_right left_pressed: + ;=============================== + ; left pressed + ; if facing left, walk left + ; if facing right and walking, stop + ; if facing right and not walking, face left + lda KEEN_DIRECTION cmp #$ff ; check if facing left - bne face_left + bne left_facing_right - lda #1 + lda #4 sta KEEN_WALKING jmp done_left_pressed -face_left: - lda #$ff - sta KEEN_DIRECTION +left_facing_right: + lda KEEN_WALKING + beq left_not_walking + lda #0 sta KEEN_WALKING + beq done_left_pressed ; bra + +left_not_walking: + + lda #$ff + sta KEEN_DIRECTION done_left_pressed: jmp done_keypress @@ -131,25 +144,65 @@ check_right: cmp #'D' beq right_pressed cmp #$15 ; right key - bne check_up + bne check_jump_right + + + ;=============================== + ; right pressed + ; if facing right, walk right + ; if facing left and walking, stop + ; if facing left and not walking, face right + right_pressed: lda KEEN_DIRECTION cmp #$1 ; check if facing right - bne face_right + bne right_facing_left - lda #1 + lda #4 sta KEEN_WALKING jmp done_left_pressed -face_right: - lda #$1 - sta KEEN_DIRECTION +right_facing_left: + lda KEEN_WALKING + beq right_not_walking + lda #0 sta KEEN_WALKING + beq done_right_pressed ; bra + +right_not_walking: + lda #$1 + sta KEEN_DIRECTION + done_right_pressed: jmp done_keypress +check_jump_right: + cmp #'E' + bne check_up + +jump_right: + + ; jump + lda KEEN_JUMPING + bne done_right_pressed ; don't jump if already jumping + + lda KEEN_FALLING + bne done_right_pressed ; don't jump if falling + + lda #JUMP_HEIGHT + sta KEEN_JUMPING + + jsr jump_noise + + lda #1 + sta KEEN_DIRECTION + lda #10 + sta KEEN_WALKING + + jmp done_keypress + check_up: cmp #'W' beq up_pressed diff --git a/games/keen/move_keen.s b/games/keen/move_keen.s index 0638f49f..c462a75b 100644 --- a/games/keen/move_keen.s +++ b/games/keen/move_keen.s @@ -14,7 +14,7 @@ TILE_COLS = 20 move_keen: lda #0 - sta SUPPRESS_WALK + sta SUPPRESS_WALK ; ???? jsr keen_get_feet_location ; get location of feet @@ -24,60 +24,64 @@ move_keen: jsr handle_jumping ; handle jumping - lda KEEN_WALKING + + lda KEEN_WALKING ; if not walking, we're done beq done_move_keen - lda SUPPRESS_WALK + dec KEEN_WALKING ; decrement walk count + + lda SUPPRESS_WALK ; why???? bne done_move_keen - lda KEEN_DIRECTION + lda KEEN_DIRECTION ; check direction bmi move_left - lda KEEN_X - cmp #22 + lda KEEN_X ; if X more than 22 + cmp #22 ; scroll screen rather than keen bcc keen_walk_right keen_scroll_right: - clc + clc ; location is 8:8 fixed point lda KEEN_XL - adc #KEEN_SPEED + adc #KEEN_SPEED ; add in speed sta KEEN_XL - bcc skip_keen_scroll_right + bcc skip_keen_scroll_right ; if carry out we scroll - inc TILEMAP_X + inc TILEMAP_X ; scroll screen to right - jsr copy_tilemap_subset + jsr copy_tilemap_subset ; update tilemap skip_keen_scroll_right: jmp done_move_keen keen_walk_right: - lda KEEN_XL + lda KEEN_XL ; get 8:8 fixed clc - adc #KEEN_SPEED + adc #KEEN_SPEED ; add in speed sta KEEN_XL - bcc dwr_noflo - inc KEEN_X + + bcc dwr_noflo ; if no overflow + inc KEEN_X ; otherwise update X dwr_noflo: jmp done_move_keen move_left: - lda KEEN_X + lda KEEN_X ; get current X cmp #14 - bcs keen_walk_left + bcs keen_walk_left ; bge ; if >=14 walk -keen_scroll_left: +keen_scroll_left: ; otherwise scroll - sec + sec ; 8.8 fixed point lda KEEN_XL sbc #KEEN_SPEED sta KEEN_XL bcs skip_keen_scroll_left - dec TILEMAP_X + dec TILEMAP_X ; scroll left jsr copy_tilemap_subset @@ -151,7 +155,7 @@ collide_left_right: ;=================== lda KEEN_DIRECTION - beq done_keen_collide + beq done_keen_collide ; ? bmi check_left_collide