diff --git a/games/keen/NOTES b/games/keen/NOTES index f299bf2e..061ec10d 100644 --- a/games/keen/NOTES +++ b/games/keen/NOTES @@ -15,9 +15,15 @@ Memory map: tiles are 2x4, or 4 bytes each so in theory can have up to 256 of them - in 16x16 grid + but if we want data to fit in one page then 64 it the maximum + +tilemap: tilemap is 256 wide by 40 tall = 10k -Tiles: - hard tiles start at 32 +Tile types: + 0..26 transparent tiles + 27..31 items + 32..39 walkthrough tiles + 40..63 hard tiles + diff --git a/games/keen/draw_tilemap.s b/games/keen/draw_tilemap.s index 2bc0349b..67d68b5d 100644 --- a/games/keen/draw_tilemap.s +++ b/games/keen/draw_tilemap.s @@ -25,7 +25,9 @@ tilemap_outer_loop: sta GBASH - ldy #0 ; draw row from 0..40 + ldy #0 ; draw row from 0..39 + ; might be faster to count backwards + ; but would have to adjust a lot tilemap_loop: ldx TILEMAP_OFFSET ; get actual tile number @@ -58,7 +60,7 @@ not_odd_line: cpy #40 ; until done bne tilemap_loop - ; FIXME: countdown instead? + ; row is done, move to next line @@ -103,18 +105,14 @@ done_move_to_line: ;=================================== ; copy tilemap ;=================================== - ; want to copy a 16x10 area from global tileset to local - - ; originally 16x10 16x10 = 160 bytes - ; extend to 20x12 for full screen? 20x12 = 240 bytes - + ; local tilemap subset is 20x12 tiles = 240 bytes + ; nicely fits in one page + ; ; big tilemap is 256*40 ; so each row is a page ; TILEMAP_X, TILEMAP_Y specify where in big - ; copy to tilemap - TILEMAP_X_COPY_SIZE = 20 TILEMAP_Y_COPY_SIZE = 12 diff --git a/games/keen/handle_laser.s b/games/keen/handle_laser.s index ab381b95..42d9c24a 100644 --- a/games/keen/handle_laser.s +++ b/games/keen/handle_laser.s @@ -38,7 +38,7 @@ laser_check_tiles: ldx LASER_TILE lda tilemap,X - cmp #HARD_TILES + cmp #ALLHARD_TILES bcs destroy_laser diff --git a/games/keen/maps/level1_map.png b/games/keen/maps/level1_map.png index 8fe435b4..724674e6 100644 Binary files a/games/keen/maps/level1_map.png and b/games/keen/maps/level1_map.png differ diff --git a/games/keen/move_keen.s b/games/keen/move_keen.s index d4a2c291..0638f49f 100644 --- a/games/keen/move_keen.s +++ b/games/keen/move_keen.s @@ -2,7 +2,8 @@ KEEN_SPEED = $80 YDEFAULT = 20 -HARD_TILES = 32 ; start at 32 +HARDTOP_TILES = 32 ; start at 32 +ALLHARD_TILES = 40 ; start at 40 TILE_COLS = 20 @@ -133,8 +134,8 @@ keen_check_head: lda tilemap,X - ; if tile# < HARD_TILES then we are fine - cmp #HARD_TILES + ; if tile# < ALLHARD_TILES then we are fine + cmp #ALLHARD_TILES bcc collide_left_right ; blt lda #0 @@ -162,8 +163,8 @@ check_right_collide: tax lda tilemap,X - ; if tile# < HARD_TILES then we are fine - cmp #HARD_TILES + ; if tile# < ALLHARD_TILES then we are fine + cmp #ALLHARD_TILES bcc done_keen_collide ; blt lda #1 ; @@ -179,8 +180,8 @@ check_left_collide: tax lda tilemap,X - ; if tile# < HARD_TILES then we are fine - cmp #HARD_TILES + ; if tile# < ALLHARD_TILES then we are fine + cmp #ALLHARD_TILES bcc done_keen_collide ; blt lda #1 @@ -328,8 +329,8 @@ check_falling: tax lda tilemap,X - ; if tile# < HARD_TILES then we fall - cmp #HARD_TILES + ; if tile# < HARDTOP_TILES then we fall + cmp #HARDTOP_TILES bcs feet_on_ground ; bge ;=======================