keen: back to feature parity
This commit is contained in:
parent
d20c367e94
commit
ceb32b2528
|
@ -1,20 +1,23 @@
|
||||||
|
sound effects
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
+ shorten item pickup noise
|
||||||
|
+ game over noise if you quit too?
|
||||||
|
|
||||||
movement:
|
movement:
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
+ jump one block too high
|
+ scroll with sub-block movement? might not work at hi-res?
|
||||||
+ fall through upper platform
|
|
||||||
|
|
||||||
enemies
|
enemies
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
+ remove yorps from background tiles
|
+ allow stepping on head
|
||||||
+ enemy movement
|
+ disable when not on screen?
|
||||||
+ animate enemies?
|
|
||||||
|
|
||||||
lo-res version
|
lo-res version
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
+ walk behind some sprites (columns on level1)
|
+ walk behind some sprites (columns on level1)
|
||||||
+ fix keybindings/help menu
|
+ fix keybindings/help menu
|
||||||
+ better start/stop level music
|
+ better start/stop level music
|
||||||
+ implement leaving level
|
|
||||||
+ animate death
|
+ animate death
|
||||||
+ game over screen if out of lives
|
+ game over screen if out of lives
|
||||||
|
|
||||||
|
|
|
@ -2,38 +2,91 @@
|
||||||
; check touching things
|
; check touching things
|
||||||
;======================
|
;======================
|
||||||
; do head, than foot
|
; do head, than foot
|
||||||
; FIXME: should we check both left/right head/feet
|
|
||||||
check_items:
|
check_items:
|
||||||
|
|
||||||
; check if going out door
|
;===================
|
||||||
|
; check head first
|
||||||
|
;===================
|
||||||
|
; if X==0, check TILEX and TILEX+1
|
||||||
|
; if X==1, check TILEX+1
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda KEEN_TILEY
|
||||||
|
adc #>big_tilemap
|
||||||
|
sta INH
|
||||||
|
lda KEEN_TILEX
|
||||||
|
sta INL
|
||||||
|
|
||||||
|
lda KEEN_X
|
||||||
|
bne check_head_tilex1
|
||||||
|
|
||||||
|
;===================
|
||||||
|
; check head tilex
|
||||||
|
|
||||||
|
check_head_tilex:
|
||||||
|
; don't check door, only leave if feet at door
|
||||||
|
|
||||||
|
; check if touching enemy
|
||||||
|
jsr check_enemy
|
||||||
|
|
||||||
|
; check item
|
||||||
|
jsr check_item
|
||||||
|
|
||||||
|
check_head_tilex1:
|
||||||
|
inc INL
|
||||||
|
|
||||||
|
; don't check door, only leave if feet at door
|
||||||
|
|
||||||
|
; check if touching enemy
|
||||||
|
jsr check_enemy
|
||||||
|
|
||||||
|
; check items
|
||||||
|
jsr check_item
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; check feet
|
||||||
|
check_feet:
|
||||||
|
inc INH ; point to next row
|
||||||
|
dec INL ; restore tile pointer
|
||||||
|
|
||||||
|
lda KEEN_X
|
||||||
|
bne check_feet_tilex1
|
||||||
|
|
||||||
|
check_feet_tilex:
|
||||||
|
; check if going out door
|
||||||
jsr check_door
|
jsr check_door
|
||||||
|
|
||||||
; check if touching enemy
|
; check if touching enemy
|
||||||
|
|
||||||
jsr check_enemy
|
jsr check_enemy
|
||||||
|
|
||||||
; check head items
|
; check item
|
||||||
|
|
||||||
ldx KEEN_HEAD_POINTER_L
|
|
||||||
jsr check_item
|
|
||||||
ldx KEEN_HEAD_POINTER_R
|
|
||||||
jsr check_item
|
jsr check_item
|
||||||
|
|
||||||
; check feet items
|
check_feet_tilex1:
|
||||||
|
inc INL
|
||||||
|
|
||||||
ldx KEEN_FOOT_POINTER_L
|
; check if going out door
|
||||||
|
jsr check_door
|
||||||
|
|
||||||
|
; check if touching enemy
|
||||||
|
jsr check_enemy
|
||||||
|
|
||||||
|
; check items
|
||||||
jsr check_item
|
jsr check_item
|
||||||
|
|
||||||
ldx KEEN_FOOT_POINTER_R
|
rts ; FIXME: fallthrough
|
||||||
; fallthrough
|
|
||||||
|
|
||||||
|
|
||||||
;==================
|
;==================
|
||||||
; check for items
|
; check for items
|
||||||
;==================
|
;==================
|
||||||
|
|
||||||
check_item:
|
check_item:
|
||||||
lda tilemap,X
|
ldy #0
|
||||||
|
lda (INL),Y
|
||||||
|
|
||||||
do_check_item:
|
do_check_item:
|
||||||
cmp #27
|
cmp #27
|
||||||
|
@ -55,8 +108,8 @@ do_check_item:
|
||||||
|
|
||||||
; otherwise look up points and add it
|
; otherwise look up points and add it
|
||||||
|
|
||||||
tay
|
tax
|
||||||
lda score_lookup,Y
|
lda score_lookup,X
|
||||||
jsr inc_score
|
jsr inc_score
|
||||||
jmp done_item_pickup
|
jmp done_item_pickup
|
||||||
|
|
||||||
|
@ -75,41 +128,12 @@ get_keycard:
|
||||||
|
|
||||||
done_item_pickup:
|
done_item_pickup:
|
||||||
|
|
||||||
; erase small tilemap
|
; erase big tilemap
|
||||||
|
|
||||||
lda #1 ; plain tile
|
lda #1 ; plain tile
|
||||||
sta tilemap,X
|
sta (INL),Y
|
||||||
|
|
||||||
; big tilemap:
|
jsr copy_tilemap_subset
|
||||||
; 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 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)
|
|
||||||
adc #>big_tilemap ; add in offset of start
|
|
||||||
sta btc_smc+2
|
|
||||||
|
|
||||||
lda TILEMAP_X ; add in X offset of tilemap
|
|
||||||
sta btc_smc+1
|
|
||||||
|
|
||||||
lda mod20_table,X
|
|
||||||
|
|
||||||
; lda KEEN_X
|
|
||||||
; lsr
|
|
||||||
tay
|
|
||||||
|
|
||||||
lda #1 ; background tile
|
|
||||||
btc_smc:
|
|
||||||
sta $b000,Y
|
|
||||||
|
|
||||||
; play sound
|
; play sound
|
||||||
ldy #SFX_GOTITEMSND
|
ldy #SFX_GOTITEMSND
|
||||||
|
@ -123,11 +147,9 @@ done_check_item:
|
||||||
; check if feet at door
|
; check if feet at door
|
||||||
;==========================
|
;==========================
|
||||||
check_door:
|
check_door:
|
||||||
lda KEEN_FOOT_TILE1
|
ldy #0
|
||||||
|
lda (INL),Y
|
||||||
cmp #11 ; door tile
|
cmp #11 ; door tile
|
||||||
beq at_door
|
|
||||||
lda KEEN_FOOT_TILE2
|
|
||||||
cmp #11
|
|
||||||
bne done_check_door
|
bne done_check_door
|
||||||
|
|
||||||
at_door:
|
at_door:
|
||||||
|
@ -148,13 +170,8 @@ done_check_door:
|
||||||
;=============================
|
;=============================
|
||||||
; level1 at least you can't touch with head?
|
; level1 at least you can't touch with head?
|
||||||
check_enemy:
|
check_enemy:
|
||||||
lda KEEN_FOOT_TILE1
|
ldy #0
|
||||||
cmp #21 ; green tentacles
|
lda (INL),Y
|
||||||
beq touched_enemy
|
|
||||||
cmp #22 ; clam thing
|
|
||||||
beq touched_enemy
|
|
||||||
|
|
||||||
lda KEEN_FOOT_TILE2
|
|
||||||
cmp #21 ; green tentacles
|
cmp #21 ; green tentacles
|
||||||
beq touched_enemy
|
beq touched_enemy
|
||||||
cmp #22 ; clam thing
|
cmp #22 ; clam thing
|
||||||
|
@ -193,7 +210,7 @@ score_lookup:
|
||||||
; 4 = carbonated beverage 200 pts
|
; 4 = carbonated beverage 200 pts
|
||||||
; ? = bear 5000 pts
|
; ? = bear 5000 pts
|
||||||
|
|
||||||
|
.if 0
|
||||||
; bit of a hack
|
; bit of a hack
|
||||||
; TODO: auto-generate at startup
|
; TODO: auto-generate at startup
|
||||||
|
|
||||||
|
@ -229,3 +246,4 @@ 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
|
.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
|
|
||||||
|
.endif
|
||||||
|
|
|
@ -13,8 +13,8 @@ TILE_COLS = 20
|
||||||
;=========================
|
;=========================
|
||||||
move_keen:
|
move_keen:
|
||||||
|
|
||||||
; lda #0
|
lda #0
|
||||||
; sta SUPPRESS_WALK ; ????
|
sta SUPPRESS_WALK ; if we collide we set this to stop walk
|
||||||
|
|
||||||
; jsr keen_get_feet_location ; get location of feet
|
; jsr keen_get_feet_location ; get location of feet
|
||||||
|
|
||||||
|
@ -26,27 +26,30 @@ move_keen:
|
||||||
|
|
||||||
|
|
||||||
lda KEEN_WALKING ; if not walking, we're done
|
lda KEEN_WALKING ; if not walking, we're done
|
||||||
beq done_move_keen
|
beq move_keen_early_out
|
||||||
|
|
||||||
dec KEEN_WALKING ; decrement walk count
|
dec KEEN_WALKING ; decrement walk count
|
||||||
|
|
||||||
; lda SUPPRESS_WALK ; why????
|
lda SUPPRESS_WALK ; we hit somthing, don't walk
|
||||||
; bne done_move_keen
|
bne move_keen_early_out
|
||||||
|
|
||||||
lda KEEN_DIRECTION ; check direction
|
lda KEEN_DIRECTION ; check direction
|
||||||
bmi move_left
|
bmi move_left
|
||||||
|
bpl move_right
|
||||||
|
|
||||||
|
move_keen_early_out:
|
||||||
|
jmp done_move_keen
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
; Move Keen Right
|
; Move Keen Right
|
||||||
;==============================
|
;==============================
|
||||||
; if (keen_tilex-tilemap_x<11) || (tilemap_x>96) walk
|
; if (keen_tilex-tilemap_x<11) || (tilemap_x>96) walk
|
||||||
; otherwise, scroll
|
; otherwise, scroll
|
||||||
|
move_right:
|
||||||
lda TILEMAP_X
|
lda TILEMAP_X
|
||||||
cmp #96 ; 540-80 = 460/4 = 115-20 = 95
|
cmp #96 ; 540-80 = 460/4 = 115-20 = 95
|
||||||
bcs keen_walk_right
|
bcs keen_walk_right
|
||||||
|
|
||||||
|
|
||||||
sec
|
sec
|
||||||
lda KEEN_TILEX
|
lda KEEN_TILEX
|
||||||
sbc TILEMAP_X
|
sbc TILEMAP_X
|
||||||
|
@ -54,20 +57,15 @@ move_keen:
|
||||||
bcc keen_walk_right
|
bcc keen_walk_right
|
||||||
|
|
||||||
keen_scroll_right:
|
keen_scroll_right:
|
||||||
|
clc ; location is 8:8 fixed point
|
||||||
|
lda KEEN_XL
|
||||||
|
adc #KEEN_SPEED ; add in speed
|
||||||
|
sta KEEN_XL
|
||||||
|
bcc skip_keen_scroll_right ; if carry out we scroll
|
||||||
|
|
||||||
clc ; location is 8:8 fixed point
|
inc TILEMAP_X ; scroll screen to right
|
||||||
lda KEEN_XL
|
|
||||||
adc #KEEN_SPEED ; add in speed
|
|
||||||
sta KEEN_XL
|
|
||||||
bcc skip_keen_scroll_right ; if carry out we scroll
|
|
||||||
|
|
||||||
inc TILEMAP_X ; scroll screen to right
|
|
||||||
|
|
||||||
inc KEEN_TILEX
|
inc KEEN_TILEX
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
jsr copy_tilemap_subset ; update tilemap
|
jsr copy_tilemap_subset ; update tilemap
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,7 +166,7 @@ keen_collide:
|
||||||
;==================
|
;==================
|
||||||
keen_check_items:
|
keen_check_items:
|
||||||
|
|
||||||
; jsr check_items
|
jsr check_items
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
; collide with head
|
; collide with head
|
||||||
|
@ -218,19 +216,37 @@ collide_head_r:
|
||||||
; jsr head_noise
|
; jsr head_noise
|
||||||
|
|
||||||
collide_left_right:
|
collide_left_right:
|
||||||
rts
|
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
; collide left/right
|
; collide left/right
|
||||||
;===================
|
;===================
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda KEEN_TILEY
|
||||||
|
adc #1
|
||||||
|
adc #>big_tilemap
|
||||||
|
sta INH
|
||||||
|
lda KEEN_TILEX
|
||||||
|
sta INL
|
||||||
|
|
||||||
lda KEEN_DIRECTION
|
lda KEEN_DIRECTION
|
||||||
beq done_keen_collide ; can this happen?
|
beq done_keen_collide ; can this happen?
|
||||||
|
|
||||||
bmi check_left_collide
|
bmi check_left_collide
|
||||||
|
|
||||||
check_right_collide:
|
check_right_collide:
|
||||||
lda KEEN_WALK_TILE_R
|
|
||||||
|
; if KEEN_X=0, collide +1
|
||||||
|
; if KEEN_X=1, collide +2
|
||||||
|
|
||||||
|
ldy #2
|
||||||
|
lda KEEN_X
|
||||||
|
beq right_collide_noextra
|
||||||
|
|
||||||
|
; iny
|
||||||
|
right_collide_noextra:
|
||||||
|
lda (INL),Y
|
||||||
|
|
||||||
; if tile# < ALLHARD_TILES then we are fine
|
; if tile# < ALLHARD_TILES then we are fine
|
||||||
cmp #ALLHARD_TILES
|
cmp #ALLHARD_TILES
|
||||||
bcc done_keen_collide ; blt
|
bcc done_keen_collide ; blt
|
||||||
|
@ -241,7 +257,10 @@ check_right_collide:
|
||||||
|
|
||||||
check_left_collide:
|
check_left_collide:
|
||||||
|
|
||||||
lda KEEN_WALK_TILE_L
|
ldy #0
|
||||||
|
lda (INL),Y
|
||||||
|
|
||||||
|
; lda KEEN_WALK_TILE_L
|
||||||
; if tile# < ALLHARD_TILES then we are fine
|
; if tile# < ALLHARD_TILES then we are fine
|
||||||
cmp #ALLHARD_TILES
|
cmp #ALLHARD_TILES
|
||||||
bcc done_keen_collide ; blt
|
bcc done_keen_collide ; blt
|
||||||
|
|
|
@ -138,7 +138,7 @@ TILEMAP_OFFSET = $9F
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
.if 0
|
||||||
KEEN_FOOT_TILE1 = $A1
|
KEEN_FOOT_TILE1 = $A1
|
||||||
KEEN_FOOT_TILE2 = $A2
|
KEEN_FOOT_TILE2 = $A2
|
||||||
KEEN_FOOT_BELOW1 = $A3
|
KEEN_FOOT_BELOW1 = $A3
|
||||||
|
@ -151,6 +151,7 @@ KEEN_FOOT_POINTER_L = $A9
|
||||||
KEEN_FOOT_POINTER_R = $AA
|
KEEN_FOOT_POINTER_R = $AA
|
||||||
KEEN_HEAD_POINTER_L = $AB
|
KEEN_HEAD_POINTER_L = $AB
|
||||||
KEEN_HEAD_POINTER_R = $AC
|
KEEN_HEAD_POINTER_R = $AC
|
||||||
|
.endif
|
||||||
MARS_X = $AD
|
MARS_X = $AD
|
||||||
MARS_Y = $AE
|
MARS_Y = $AE
|
||||||
INITIAL_SOUND = $AF
|
INITIAL_SOUND = $AF
|
||||||
|
|
Loading…
Reference in New Issue