mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-01 12:41:35 +00:00
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:
parent
fb1cf56ec9
commit
018f407828
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user