keen: update start position

keen comes through the door, he doesn't drop in from the sky
like that maniac duke nukem
This commit is contained in:
Vince Weaver 2024-03-16 16:09:01 -04:00
parent fb1cf56ec9
commit 018f407828
4 changed files with 109 additions and 63 deletions

View File

@ -42,11 +42,13 @@ Status:
* 11223344 * 20000 * 5 * N * * 11223344 * 20000 * 5 * N *
Level1:
in png: X=80 to 543, Y=12 to 80 (tiles 4x4)
x=0 to 116 Y=0..17
start position: in png 88,65
tile position = 0,5
keen position = 2,24 (remember, tiles 2 bytes high)
tilemap copies

View File

@ -60,25 +60,24 @@ keen_start:
lda #1 lda #1
sta FIREPOWER sta FIREPOWER
; lda #2 ; draw twice (both pages)
; sta UPDATE_STATUS
; lda #7 ; lda #7
; sta HEALTH ; sta HEALTH
lda #4 lda #4
sta DRAW_PAGE sta DRAW_PAGE
lda #18 ; Level 1
; start at 2,24 (remember tiles 2 bytes high even though 4 pixels)
; but with reference to starting tilemap (0,5) should be
; 2,8?
lda #2
sta KEEN_X sta KEEN_X
lda #0 lda #24
sta KEEN_Y sta KEEN_Y
lda #1 lda #1
sta KEEN_DIRECTION sta KEEN_DIRECTION
; jsr update_status_bar
;==================================== ;====================================
; load level1 background ; load level1 background
;==================================== ;====================================
@ -107,15 +106,14 @@ keen_start:
;==================================== ;====================================
; copy in tilemap subset ; copy in tilemap subset
;==================================== ;====================================
; copies local 16x10 tilemap to $bc00 ; we copy in full screen, 40x48 = 20x12 tiles
; we start out assuming position is 28,0 ; we start out assuming position is 0,5
; note 16x10 is 32*40
; if we want full screen it should be 40x48 = 20x12
lda #28
sta TILEMAP_X
lda #0 lda #0
sta TILEMAP_X
lda #5
sta TILEMAP_Y sta TILEMAP_Y
jsr copy_tilemap_subset jsr copy_tilemap_subset
@ -128,10 +126,6 @@ keen_start:
keen_loop: keen_loop:
; copy over background
; jsr gr_copy_to_current
; draw tilemap ; draw tilemap
jsr draw_tilemap jsr draw_tilemap
@ -152,10 +146,6 @@ keen_loop:
; jsr check_open_door ; jsr check_open_door
; draw a status bar
; jsr draw_status_bar
jsr page_flip jsr page_flip
jsr handle_keypress jsr handle_keypress
@ -185,9 +175,6 @@ no_frame_oflo:
jmp done_with_keen jmp done_with_keen
do_keen_loop: do_keen_loop:
; delay ; delay
@ -201,7 +188,7 @@ done_with_keen:
bit KEYRESET ; clear keypress bit KEYRESET ; clear keypress
lda #LOAD_TITLE lda #LOAD_MARS
sta WHICH_LOAD sta WHICH_LOAD
rts ; exit back rts ; exit back

View File

@ -110,19 +110,32 @@ check_left:
bne check_right bne check_right
left_pressed: left_pressed:
;===============================
; left pressed
; if facing left, walk left
; if facing right and walking, stop
; if facing right and not walking, face left
lda KEEN_DIRECTION lda KEEN_DIRECTION
cmp #$ff ; check if facing left cmp #$ff ; check if facing left
bne face_left bne left_facing_right
lda #1 lda #4
sta KEEN_WALKING sta KEEN_WALKING
jmp done_left_pressed jmp done_left_pressed
face_left: left_facing_right:
lda #$ff lda KEEN_WALKING
sta KEEN_DIRECTION beq left_not_walking
lda #0 lda #0
sta KEEN_WALKING sta KEEN_WALKING
beq done_left_pressed ; bra
left_not_walking:
lda #$ff
sta KEEN_DIRECTION
done_left_pressed: done_left_pressed:
jmp done_keypress jmp done_keypress
@ -131,25 +144,65 @@ check_right:
cmp #'D' cmp #'D'
beq right_pressed beq right_pressed
cmp #$15 ; right key cmp #$15 ; right key
bne check_up bne check_jump_right
;===============================
; right pressed
; if facing right, walk right
; if facing left and walking, stop
; if facing left and not walking, face right
right_pressed: right_pressed:
lda KEEN_DIRECTION lda KEEN_DIRECTION
cmp #$1 ; check if facing right cmp #$1 ; check if facing right
bne face_right bne right_facing_left
lda #1 lda #4
sta KEEN_WALKING sta KEEN_WALKING
jmp done_left_pressed jmp done_left_pressed
face_right: right_facing_left:
lda #$1 lda KEEN_WALKING
sta KEEN_DIRECTION beq right_not_walking
lda #0 lda #0
sta KEEN_WALKING sta KEEN_WALKING
beq done_right_pressed ; bra
right_not_walking:
lda #$1
sta KEEN_DIRECTION
done_right_pressed: done_right_pressed:
jmp done_keypress jmp done_keypress
check_jump_right:
cmp #'E'
bne check_up
jump_right:
; jump
lda KEEN_JUMPING
bne done_right_pressed ; don't jump if already jumping
lda KEEN_FALLING
bne done_right_pressed ; don't jump if falling
lda #JUMP_HEIGHT
sta KEEN_JUMPING
jsr jump_noise
lda #1
sta KEEN_DIRECTION
lda #10
sta KEEN_WALKING
jmp done_keypress
check_up: check_up:
cmp #'W' cmp #'W'
beq up_pressed beq up_pressed

View File

@ -14,7 +14,7 @@ TILE_COLS = 20
move_keen: move_keen:
lda #0 lda #0
sta SUPPRESS_WALK sta SUPPRESS_WALK ; ????
jsr keen_get_feet_location ; get location of feet jsr keen_get_feet_location ; get location of feet
@ -24,60 +24,64 @@ move_keen:
jsr handle_jumping ; handle jumping jsr handle_jumping ; handle jumping
lda KEEN_WALKING
lda KEEN_WALKING ; if not walking, we're done
beq done_move_keen beq done_move_keen
lda SUPPRESS_WALK dec KEEN_WALKING ; decrement walk count
lda SUPPRESS_WALK ; why????
bne done_move_keen bne done_move_keen
lda KEEN_DIRECTION lda KEEN_DIRECTION ; check direction
bmi move_left bmi move_left
lda KEEN_X lda KEEN_X ; if X more than 22
cmp #22 cmp #22 ; scroll screen rather than keen
bcc keen_walk_right bcc keen_walk_right
keen_scroll_right: keen_scroll_right:
clc clc ; location is 8:8 fixed point
lda KEEN_XL lda KEEN_XL
adc #KEEN_SPEED adc #KEEN_SPEED ; add in speed
sta KEEN_XL sta KEEN_XL
bcc skip_keen_scroll_right bcc skip_keen_scroll_right ; if carry out we scroll
inc TILEMAP_X inc TILEMAP_X ; scroll screen to right
jsr copy_tilemap_subset jsr copy_tilemap_subset ; update tilemap
skip_keen_scroll_right: skip_keen_scroll_right:
jmp done_move_keen jmp done_move_keen
keen_walk_right: keen_walk_right:
lda KEEN_XL lda KEEN_XL ; get 8:8 fixed
clc clc
adc #KEEN_SPEED adc #KEEN_SPEED ; add in speed
sta KEEN_XL sta KEEN_XL
bcc dwr_noflo
inc KEEN_X bcc dwr_noflo ; if no overflow
inc KEEN_X ; otherwise update X
dwr_noflo: dwr_noflo:
jmp done_move_keen jmp done_move_keen
move_left: move_left:
lda KEEN_X lda KEEN_X ; get current X
cmp #14 cmp #14
bcs keen_walk_left bcs keen_walk_left ; bge ; if >=14 walk
keen_scroll_left: keen_scroll_left: ; otherwise scroll
sec sec ; 8.8 fixed point
lda KEEN_XL lda KEEN_XL
sbc #KEEN_SPEED sbc #KEEN_SPEED
sta KEEN_XL sta KEEN_XL
bcs skip_keen_scroll_left bcs skip_keen_scroll_left
dec TILEMAP_X dec TILEMAP_X ; scroll left
jsr copy_tilemap_subset jsr copy_tilemap_subset
@ -151,7 +155,7 @@ collide_left_right:
;=================== ;===================
lda KEEN_DIRECTION lda KEEN_DIRECTION
beq done_keen_collide beq done_keen_collide ; ?
bmi check_left_collide bmi check_left_collide