keen: item pickup much better

also slower sadly
This commit is contained in:
Vince Weaver 2024-04-01 01:25:52 -04:00
parent b1a04a0ee6
commit 4246082e48
3 changed files with 79 additions and 22 deletions

View File

@ -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

View File

@ -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

View File

@ -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