diff --git a/games/keen/handle_laser.s b/games/keen/handle_laser.s index 56cbf802..4cd481d9 100644 --- a/games/keen/handle_laser.s +++ b/games/keen/handle_laser.s @@ -28,7 +28,7 @@ laser_check_tiles: sta INH lda tilemap_lookup_low,Y clc - adc LASTER_TILEX + adc LASER_TILEX sta INL diff --git a/games/keen/level1_data.inc b/games/keen/level1_data.inc index bb118b43..9e2479dd 100644 --- a/games/keen/level1_data.inc +++ b/games/keen/level1_data.inc @@ -1,7 +1,7 @@ ; Level 1 (Border Town) -MAX_TILE_X = 96 ; 116 - 20 -MAX_TILE_Y = 5 ; (34 - 24)/2 (maybe?) +MAX_TILE_X = 116 ; 116 wide +MAX_TILE_Y = 16 ; 16 tall START_KEEN_TILEX = 1 START_KEEN_TILEY = 13 @@ -10,3 +10,6 @@ START_TILEMAP_X = 0 START_TILEMAP_Y = 5 NUM_ENEMIES = 8 + +HARDTOP_TILES = 32 ; start at 32 +ALLHARD_TILES = 40 ; start at 40 diff --git a/games/keen/level2_data.inc b/games/keen/level2_data.inc index 75819a7e..f38db175 100644 --- a/games/keen/level2_data.inc +++ b/games/keen/level2_data.inc @@ -1,7 +1,7 @@ ; Level 2 (First Shrine) -MAX_TILE_X = 96 ; 116 - 20 -MAX_TILE_Y = 26 ; 26 (maybe?) +MAX_TILE_X = 20 ; 20 wide +MAX_TILE_Y = 26 ; 26 high START_KEEN_TILEX = 1 START_KEEN_TILEY = 13 @@ -10,3 +10,7 @@ START_TILEMAP_X = 0 START_TILEMAP_Y = 5 NUM_ENEMIES = 8 + +HARDTOP_TILES = 32 ; start at 32 +ALLHARD_TILES = 40 ; start at 40 + diff --git a/games/keen/move_keen.s b/games/keen/move_keen.s index b4140b57..cf32b4f4 100644 --- a/games/keen/move_keen.s +++ b/games/keen/move_keen.s @@ -2,9 +2,6 @@ KEEN_SPEED = $80 YDEFAULT = 20 -HARDTOP_TILES = 32 ; start at 32 -ALLHARD_TILES = 40 ; start at 40 - TILE_COLS = 20 @@ -40,11 +37,11 @@ move_keen_early_out: ;============================== ; Move Keen Right ;============================== - ; if (keen_tilex-tilemap_x<11) || (tilemap_x>96) walk + ; if (keen_tilex-tilemap_x<11) || (tilemap_x> (maxtile-20) ) walk ; otherwise, scroll move_right: lda TILEMAP_X - cmp #96 ; 540-80 = 460/4 = 115-20 = 95 + cmp #(MAX_TILE_X-20) bcs keen_walk_right sec @@ -180,6 +177,7 @@ keen_check_head: sec lda KEEN_TILEY sbc #1 + ; bmi offscreen? tay lda tilemap_lookup_high,Y @@ -204,6 +202,8 @@ collide_head_l: cmp #ALLHARD_TILES bcc collide_left_right ; blt + ; fallthrough to get other + collide_head_r: iny lda (INL),Y @@ -230,6 +230,7 @@ collide_left_right: ; collide left/right ;=================== + clc lda KEEN_TILEY adc #1 ; look at feet @@ -253,6 +254,12 @@ collide_left_right: check_right_collide: + lda KEEN_TILEY + cmp #(MAX_TILE_X-1) ; stop at right edge of screen + beq keen_stop + + + ; if KEEN_X=0, collide +1 ; if KEEN_X=1, collide +2 @@ -268,12 +275,17 @@ right_collide_noextra: cmp #ALLHARD_TILES bcc done_keen_collide ; blt - lda #1 ; - sta SUPPRESS_WALK - jmp done_keen_collide + bcs keen_stop +; lda #1 ; +; sta SUPPRESS_WALK +; jmp done_keen_collide check_left_collide: + lda KEEN_TILEX ; stop at left edge of screen + beq keen_stop + + ldy #0 lda (INL),Y @@ -282,6 +294,7 @@ check_left_collide: cmp #ALLHARD_TILES bcc done_keen_collide ; blt +keen_stop: lda #1 sta SUPPRESS_WALK jmp done_keen_collide @@ -310,16 +323,17 @@ actually_jumping: ; check if hit top of screen (shouldn't happen if collision working) lda KEEN_TILEY ; - cmp #1 ; if hit top of screen, start falling - bcc start_falling + cmp #0 ; if hit top of screen, start falling + beq start_falling - lda TILEMAP_Y ; if tilemap==0, scroll keen + lda TILEMAP_Y ; if tilemap==0, move keen cmp #0 ; instead of scrolling screen beq keen_rising sec - lda TILEMAP_Y - sbc KEEN_TILEY + lda KEEN_TILEY + sbc TILEMAP_Y + cmp #4 ; compare to middle of screen bcc scroll_rising ; blt @@ -445,7 +459,7 @@ do_full_falling_check: ; if tilemap_y >= max_tile, keen_fall lda TILEMAP_Y - cmp #MAX_TILE_Y + cmp #(MAX_TILE_Y-6) bcs keen_fall ; bge