diff --git a/duke/draw_duke.s b/duke/draw_duke.s index 94ec8a78..123fc5fc 100644 --- a/duke/draw_duke.s +++ b/duke/draw_duke.s @@ -8,11 +8,11 @@ move_duke: jsr duke_get_feet_location ; get location of feet - jsr check_falling + jsr check_falling ; check for/handle falling - jsr duke_collide + jsr duke_collide ; check for right/left collision - jsr handle_jumping + jsr handle_jumping ; handle jumping lda DUKE_WALKING beq done_move_duke @@ -150,6 +150,10 @@ handle_jumping: dec DUKE_Y dec DUKE_Y dec DUKE_JUMPING + bne done_handle_jumping + lda #1 ; avoid gap before falling triggered + sta DUKE_FALLING + done_handle_jumping: rts @@ -247,6 +251,9 @@ check_falling: ;======================= ; falling + lda #1 + sta DUKE_FALLING + ; scroll but only if Y>=18 lda DUKE_Y @@ -266,6 +273,10 @@ scroll_fall: feet_on_ground: + ; clear falling + lda #0 + sta DUKE_FALLING + ; check to see if Y still hi, if so scroll back down lda DUKE_Y diff --git a/duke/duke.s b/duke/duke.s index 39062704..840b7402 100644 --- a/duke/duke.s +++ b/duke/duke.s @@ -41,6 +41,7 @@ duke_start: sta SCORE1 sta SCORE2 sta INVENTORY + sta DUKE_FALLING lda #$10 sta SCORE0 diff --git a/duke/keyboard.s b/duke/keyboard.s index f90d04b4..adf9aa11 100644 --- a/duke/keyboard.s +++ b/duke/keyboard.s @@ -192,6 +192,9 @@ space_pressed: lda DUKE_JUMPING bne done_keypress ; don't jump if already jumping + lda DUKE_FALLING + bne done_keypress ; don't jump if falling + lda #7 sta DUKE_JUMPING diff --git a/duke/zp.inc b/duke/zp.inc index 7e3c96bb..8f3d1dc9 100644 --- a/duke/zp.inc +++ b/duke/zp.inc @@ -107,6 +107,8 @@ SCORE1 = $92 SCORE2 = $93 UPDATE_STATUS = $94 +DUKE_FALLING = $95 + ; done game puzzle state