From 4246082e48dcbc31a5612d9c08cf7f6dda95439b Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 1 Apr 2024 01:25:52 -0400 Subject: [PATCH] keen: item pickup much better also slower sadly --- games/keen/item_level1.s | 68 ++++++++++++++++++++++++++++++++++------ games/keen/move_keen.s | 23 +++++++++----- games/keen/zp.inc | 10 +++--- 3 files changed, 79 insertions(+), 22 deletions(-) diff --git a/games/keen/item_level1.s b/games/keen/item_level1.s index a4a5c441..16384c1c 100644 --- a/games/keen/item_level1.s +++ b/games/keen/item_level1.s @@ -15,12 +15,17 @@ check_items: ; check head items - ldx KEEN_HEAD_POINTER + ldx KEEN_HEAD_POINTER_L + jsr check_item + ldx KEEN_HEAD_POINTER_R jsr check_item ; check feet items - ldx KEEN_FOOT_POINTER + ldx KEEN_FOOT_POINTER_L + jsr check_item + + ldx KEEN_FOOT_POINTER_R ; fallthrough ;================== @@ -78,10 +83,15 @@ done_item_pickup: ; big tilemap: ; to find... urgh ; X is currently (KEEN_Y/4)*20)+(KEEN_X/2) + ; (X mod 20) = KEEN_X/2 + ; X/20 = KEEN_Y/4 + ; - lda KEEN_Y ; divide by 4 as tile 4 blocks tall - lsr - lsr + lda div20_table,X + +; lda KEEN_Y ; divide by 4 as tile 4 blocks tall +; lsr +; lsr clc adc TILEMAP_Y ; add in tilemap Y (each row 256 bytes) @@ -91,12 +101,13 @@ done_item_pickup: lda TILEMAP_X ; add in X offset of tilemap sta btc_smc+1 - lda KEEN_X - lsr - tay -; iny ; why add 1???? + lda mod20_table,X - lda #0 ; background tile +; lda KEEN_X +; lsr + tay + + lda #1 ; background tile btc_smc: sta $b000,Y @@ -162,3 +173,40 @@ score_lookup: ; 3 = pizza 500 pts ; 4 = carbonated beverage 200 pts ; ? = bear 5000 pts + + +; bit of a hack +; TODO: auto-generate at startup + +div20_table: +.byte 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 +.byte 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 +.byte 2,2,2,2,2, 2,2,2,2,2, 2,2,2,2,2, 2,2,2,2,2 +.byte 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3, 3,3,3,3,3 +.byte 4,4,4,4,4, 4,4,4,4,4, 4,4,4,4,4, 4,4,4,4,4 +.byte 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5 +.byte 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6 +.byte 7,7,7,7,7, 7,7,7,7,7, 7,7,7,7,7, 7,7,7,7,7 +.byte 8,8,8,8,8, 8,8,8,8,8, 8,8,8,8,8, 8,8,8,8,8 +.byte 9,9,9,9,9, 9,9,9,9,9, 9,9,9,9,9, 9,9,9,9,9 +.byte 10,10,10,10,10, 10,10,10,10,10, 10,10,10,10,10, 10,10,10,10,10 +.byte 11,11,11,11,11, 11,11,11,11,11, 11,11,11,11,11, 11,11,11,11,11 +.byte 12,12,12,12,12, 12,12,12,12,12, 12,12,12,12,12 ;, 12,12,12,12,12 + + +mod20_table: +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + diff --git a/games/keen/move_keen.s b/games/keen/move_keen.s index 51ac4874..af8d8d76 100644 --- a/games/keen/move_keen.s +++ b/games/keen/move_keen.s @@ -403,11 +403,13 @@ keen_get_feet_even: lda tilemap,X ; put tilemap value in place sta KEEN_HEAD_TILE1 + stx KEEN_HEAD_POINTER_L lda tilemap+1,X sta KEEN_HEAD_TILE2 - stx KEEN_HEAD_POINTER - - txa ; restore pointer to tile of head + txa + inx + stx KEEN_HEAD_POINTER_R + ; restore pointer to tile of head clc adc #TILE_COLS ; one row down, now at foot tax @@ -415,12 +417,15 @@ keen_get_feet_even: lda tilemap,X ; put tilemap value in place sta KEEN_FOOT_TILE1 sta KEEN_WALK_TILE_L + stx KEEN_FOOT_POINTER_L + lda tilemap+1,X sta KEEN_FOOT_TILE2 sta KEEN_WALK_TILE_R - stx KEEN_FOOT_POINTER - - txa ; restore pointer to tile of foot + txa + inx + stx KEEN_FOOT_POINTER_R + ; restore pointer to tile of foot clc adc #TILE_COLS ; one row down tax @@ -443,7 +448,8 @@ 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 + stx KEEN_HEAD_POINTER_L + stx KEEN_HEAD_POINTER_R txa clc @@ -457,7 +463,8 @@ keen_get_feet_odd: sta KEEN_FOOT_TILE2 lda tilemap+2,X sta KEEN_WALK_TILE_R - stx KEEN_FOOT_POINTER + stx KEEN_FOOT_POINTER_L + stx KEEN_FOOT_POINTER_R txa clc diff --git a/games/keen/zp.inc b/games/keen/zp.inc index 74cb2d5c..bb9b8841 100644 --- a/games/keen/zp.inc +++ b/games/keen/zp.inc @@ -144,10 +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 +KEEN_FOOT_POINTER_L = $A9 +KEEN_FOOT_POINTER_R = $AA +KEEN_HEAD_POINTER_L = $AB +KEEN_HEAD_POINTER_R = $AC +MARS_X = $AD +MARS_Y = $AE