keen: can exit level
This commit is contained in:
parent
4c1f36cd64
commit
10f9706d05
|
@ -5,10 +5,11 @@ lo-res version
|
|||
+ animate enemies?
|
||||
+ check raygun count before shooting
|
||||
+ fix background tile when get item
|
||||
+ fix keybindings
|
||||
+ fix keybindings/help menu
|
||||
+ play jingle entering/leaving level
|
||||
+ implement leaving level
|
||||
+ animate death
|
||||
+ game over screen if out of lives
|
||||
|
||||
hi-res version
|
||||
~~~~~~~~~~~~~~
|
||||
|
|
|
@ -1,11 +1,28 @@
|
|||
;======================
|
||||
; check touching things
|
||||
;======================
|
||||
; do head, than foot
|
||||
; FIXME: should we check both head/feet?
|
||||
check_items:
|
||||
jsr check_door
|
||||
|
||||
ldx KEEN_HEAD_POINTER
|
||||
jsr check_item
|
||||
|
||||
ldx KEEN_FOOT_POINTER
|
||||
; fallthrough
|
||||
|
||||
;==================
|
||||
; check for items
|
||||
;==================
|
||||
; A holds tile value to check
|
||||
|
||||
check_item:
|
||||
lda tilemap,X
|
||||
|
||||
do_check_enemy:
|
||||
|
||||
|
||||
do_check_item:
|
||||
cmp #27
|
||||
bcc done_check_item ; not an item
|
||||
cmp #32
|
||||
|
@ -45,16 +62,14 @@ get_keycard:
|
|||
|
||||
done_item_pickup:
|
||||
|
||||
; erase
|
||||
|
||||
; FIXME: only erases small tilemap
|
||||
; also need to update big
|
||||
; erase small tilemap
|
||||
|
||||
lda #1 ; plain tile
|
||||
sta tilemap,X
|
||||
|
||||
; big tilemap:
|
||||
; tilemap
|
||||
; to find... urgh
|
||||
; X is currently (KEEN_Y/4)*20)+(KEEN_X/2)
|
||||
|
||||
lda KEEN_Y ; divide by 4 as tile 4 blocks tall
|
||||
lsr
|
||||
|
@ -71,7 +86,7 @@ done_item_pickup:
|
|||
lda KEEN_X
|
||||
lsr
|
||||
tay
|
||||
iny ; why add 1????
|
||||
; iny ; why add 1????
|
||||
|
||||
lda #0 ; background tile
|
||||
btc_smc:
|
||||
|
@ -80,49 +95,27 @@ btc_smc:
|
|||
; play sound
|
||||
jsr pickup_noise
|
||||
|
||||
.if 0
|
||||
check_red_key:
|
||||
lda tilemap,X
|
||||
cmp #31 ; red key
|
||||
bne check_blue_key
|
||||
|
||||
jsr pickup_noise
|
||||
lda INVENTORY
|
||||
ora #INV_RED_KEY
|
||||
sta INVENTORY
|
||||
|
||||
; erase red key (304,96)
|
||||
lda #0
|
||||
sta $A938 ; hack
|
||||
|
||||
jsr copy_tilemap_subset
|
||||
|
||||
jsr update_status_bar
|
||||
|
||||
jmp done_check_item
|
||||
|
||||
check_blue_key:
|
||||
cmp #30 ; blue key
|
||||
bne done_check_item
|
||||
|
||||
jsr pickup_noise
|
||||
lda INVENTORY
|
||||
ora #INV_BLUE_KEY
|
||||
sta INVENTORY
|
||||
|
||||
; erase blue key
|
||||
lda #0
|
||||
sta $970c ; hack
|
||||
|
||||
jsr copy_tilemap_subset
|
||||
|
||||
jsr update_status_bar
|
||||
|
||||
jmp keen_check_head
|
||||
.endif
|
||||
done_check_item:
|
||||
rts
|
||||
|
||||
;==========================
|
||||
; check if feet at door
|
||||
;==========================
|
||||
check_door:
|
||||
lda KEEN_FOOT_TILE1
|
||||
cmp #11 ; door tile
|
||||
beq at_door
|
||||
lda KEEN_FOOT_TILE2
|
||||
cmp #11
|
||||
bne done_check_door
|
||||
|
||||
at_door:
|
||||
inc LEVEL_OVER
|
||||
; TODO: mark level complete somehow
|
||||
jsr exit_music
|
||||
done_check_door:
|
||||
rts
|
||||
|
||||
score_lookup:
|
||||
.byte $00,$01,$10,$05,$02,$50 ; BCD
|
||||
|
|
|
@ -44,10 +44,10 @@ keen_start:
|
|||
lda #4
|
||||
sta DRAW_PAGE
|
||||
|
||||
lda #18
|
||||
sta KEEN_X
|
||||
lda #11
|
||||
sta KEEN_Y
|
||||
; lda #18
|
||||
; sta KEEN_X
|
||||
; lda #11
|
||||
; sta KEEN_Y
|
||||
|
||||
;====================================
|
||||
; load mars background
|
||||
|
@ -178,15 +178,15 @@ parts_zx02:
|
|||
; D32
|
||||
draw_keen:
|
||||
|
||||
lda KEEN_Y
|
||||
lda MARS_Y
|
||||
and #1
|
||||
beq draw_keen_even
|
||||
|
||||
draw_keen_odd:
|
||||
|
||||
; calculate address of KEEN_Y/2
|
||||
; calculate address of MARS_Y/2
|
||||
|
||||
lda KEEN_Y
|
||||
lda MARS_Y
|
||||
and #$FE
|
||||
tay
|
||||
lda gr_offsets,Y
|
||||
|
@ -196,14 +196,14 @@ draw_keen_odd:
|
|||
adc DRAW_PAGE
|
||||
sta OUTH
|
||||
|
||||
ldy KEEN_X
|
||||
ldy MARS_X
|
||||
|
||||
lda (OUTL),Y
|
||||
and #$0f
|
||||
ora #$D0
|
||||
sta (OUTL),Y
|
||||
|
||||
lda KEEN_Y
|
||||
lda MARS_Y
|
||||
clc
|
||||
adc #2
|
||||
|
||||
|
@ -216,7 +216,7 @@ draw_keen_odd:
|
|||
adc DRAW_PAGE
|
||||
sta OUTH
|
||||
|
||||
ldy KEEN_X
|
||||
ldy MARS_X
|
||||
|
||||
lda #$23
|
||||
sta (OUTL),Y
|
||||
|
@ -227,7 +227,7 @@ draw_keen_odd:
|
|||
|
||||
draw_keen_even:
|
||||
|
||||
lda KEEN_Y
|
||||
lda MARS_Y
|
||||
; and #$FE ; no need to mask, know bottom bit is 0
|
||||
tay
|
||||
lda gr_offsets,Y
|
||||
|
@ -236,12 +236,12 @@ draw_keen_even:
|
|||
clc
|
||||
adc DRAW_PAGE
|
||||
sta OUTH
|
||||
ldy KEEN_X ; adjust with Xpos
|
||||
ldy MARS_X ; adjust with Xpos
|
||||
|
||||
lda #$3D
|
||||
sta (OUTL),Y
|
||||
|
||||
lda KEEN_Y
|
||||
lda MARS_Y
|
||||
clc
|
||||
adc #2
|
||||
; and #$FE ; no need to mask
|
||||
|
@ -252,7 +252,7 @@ draw_keen_even:
|
|||
clc
|
||||
adc DRAW_PAGE
|
||||
sta OUTH
|
||||
ldy KEEN_X ; adjust with Xpos
|
||||
ldy MARS_X ; adjust with Xpos
|
||||
|
||||
lda (OUTL),Y
|
||||
and #$F0
|
||||
|
@ -374,12 +374,12 @@ check_left:
|
|||
bne check_right
|
||||
|
||||
left_pressed:
|
||||
ldy KEEN_X
|
||||
ldy MARS_X
|
||||
dey
|
||||
ldx KEEN_Y
|
||||
ldx MARS_Y
|
||||
jsr check_valid_feet
|
||||
bcc done_left_pressed
|
||||
dec KEEN_X
|
||||
dec MARS_X
|
||||
done_left_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
|
@ -390,12 +390,12 @@ check_right:
|
|||
bne check_up
|
||||
|
||||
right_pressed:
|
||||
ldy KEEN_X
|
||||
ldy MARS_X
|
||||
iny
|
||||
ldx KEEN_Y
|
||||
ldx MARS_Y
|
||||
jsr check_valid_feet
|
||||
bcc done_right_pressed
|
||||
inc KEEN_X
|
||||
inc MARS_X
|
||||
done_right_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
|
@ -406,12 +406,12 @@ check_up:
|
|||
bne check_down
|
||||
|
||||
up_pressed:
|
||||
ldy KEEN_X
|
||||
ldx KEEN_Y
|
||||
ldy MARS_X
|
||||
ldx MARS_Y
|
||||
dex
|
||||
jsr check_valid_feet
|
||||
bcc done_up_pressed
|
||||
dec KEEN_Y
|
||||
dec MARS_Y
|
||||
done_up_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
|
@ -421,12 +421,12 @@ check_down:
|
|||
cmp #$0A
|
||||
bne check_space
|
||||
down_pressed:
|
||||
ldy KEEN_X
|
||||
ldx KEEN_Y
|
||||
ldy MARS_X
|
||||
ldx MARS_Y
|
||||
inx
|
||||
jsr check_valid_feet
|
||||
bcc done_up_pressed
|
||||
inc KEEN_Y
|
||||
inc MARS_Y
|
||||
done_down_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
|
@ -554,7 +554,7 @@ done_parts:
|
|||
|
||||
do_action:
|
||||
|
||||
lda KEEN_X
|
||||
lda MARS_X
|
||||
cmp #15
|
||||
bcc do_nothing ; blt
|
||||
|
||||
|
@ -571,7 +571,7 @@ do_nothing:
|
|||
maybe_ship:
|
||||
|
||||
|
||||
lda KEEN_Y
|
||||
lda MARS_Y
|
||||
cmp #16
|
||||
bcc do_nothing
|
||||
cmp #24
|
||||
|
|
|
@ -203,6 +203,11 @@ init_vars:
|
|||
;============================
|
||||
; set up initial location
|
||||
|
||||
lda #18
|
||||
sta MARS_X
|
||||
lda #11
|
||||
sta MARS_Y
|
||||
|
||||
lda #LOAD_MARS
|
||||
sta WHICH_LOAD ; start at first level
|
||||
|
||||
|
|
|
@ -133,12 +133,9 @@ keen_collide:
|
|||
;==================
|
||||
; check for item
|
||||
;==================
|
||||
keen_check_item:
|
||||
lda KEEN_HEAD_TILE1
|
||||
keen_check_items:
|
||||
|
||||
jsr check_item
|
||||
|
||||
; TODO: do this again for KEEN_HEAD_TILE2?
|
||||
jsr check_items
|
||||
|
||||
;===================
|
||||
; collide with head
|
||||
|
@ -408,6 +405,7 @@ keen_get_feet_even:
|
|||
sta KEEN_HEAD_TILE1
|
||||
lda tilemap+1,X
|
||||
sta KEEN_HEAD_TILE2
|
||||
stx KEEN_HEAD_POINTER
|
||||
|
||||
txa ; restore pointer to tile of head
|
||||
clc
|
||||
|
@ -420,6 +418,7 @@ keen_get_feet_even:
|
|||
lda tilemap+1,X
|
||||
sta KEEN_FOOT_TILE2
|
||||
sta KEEN_WALK_TILE_R
|
||||
stx KEEN_FOOT_POINTER
|
||||
|
||||
txa ; restore pointer to tile of foot
|
||||
clc
|
||||
|
@ -444,6 +443,7 @@ 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
|
||||
|
||||
txa
|
||||
clc
|
||||
|
@ -457,6 +457,7 @@ keen_get_feet_odd:
|
|||
sta KEEN_FOOT_TILE2
|
||||
lda tilemap+2,X
|
||||
sta KEEN_WALK_TILE_R
|
||||
stx KEEN_FOOT_POINTER
|
||||
|
||||
txa
|
||||
clc
|
||||
|
|
|
@ -144,8 +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
|
||||
|
||||
|
||||
; done game puzzle state
|
||||
|
||||
|
||||
WHICH_SLOT = $DA
|
||||
|
|
Loading…
Reference in New Issue