From 05eb07de148e73379fc49835f056cf75388b8939 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 15 Dec 2020 01:03:24 -0500 Subject: [PATCH] duke: adjust controls a bit more --- duke/TODO | 10 ++++--- duke/maps/level1_map.png | Bin 9144 -> 9132 bytes duke/move_duke.s | 62 +++++++++++++++++++++++++++++++-------- duke/zp.inc | 1 + 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/duke/TODO b/duke/TODO index 3fe5a33f..2e2061ee 100644 --- a/duke/TODO +++ b/duke/TODO @@ -6,11 +6,13 @@ fancier PC-style sounds movement: ~~~~~~~~~ -collision detection up (hit head on jump) +* collision detection up (hit head on jump) * when land from jump, stop walking -walking right into objects, stand back one more -can keep walking in collision, just don't move -enemies +walking right into objects, stand back one more (maybe and to mask?) +* can keep walking in collision, just don't move + +level1: +~~~~~~~ exit door, blue pillar, red key (all in basement?) diff --git a/duke/maps/level1_map.png b/duke/maps/level1_map.png index b1e3aab5b95a1bb242772671f883c724b7b964e1..e5e10a8dfe9ba5007356d72afadf5deafe104013 100644 GIT binary patch delta 4083 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 delta 4109 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 a%TpNf439WAj=LD34m~X+%@TEo$bSJl&`r(& diff --git a/duke/move_duke.s b/duke/move_duke.s index aa1dfdde..4da6a378 100644 --- a/duke/move_duke.s +++ b/duke/move_duke.s @@ -3,11 +3,16 @@ DUKE_SPEED = $80 YDEFAULT = 20 +HARD_TILES = 32 ; start at 32 + ;========================= ; move duke ;========================= move_duke: + lda #0 + sta SUPPRESS_WALK + jsr duke_get_feet_location ; get location of feet jsr check_falling ; check for/handle falling @@ -19,6 +24,9 @@ move_duke: lda DUKE_WALKING beq done_move_duke + lda SUPPRESS_WALK + bne done_move_duke + lda DUKE_DIRECTION bmi move_left @@ -94,10 +102,38 @@ done_move_duke: ;========================= ; duke collide ;========================= - ; only check above head if jumping duke_collide: + ;=================== + ; collide with head + ;=================== + + ; only check above head if jumping + lda DUKE_JUMPING + beq collide_left_right + + lda DUKE_FOOT_OFFSET + sec + sbc #16 ; above head is -2 rows + tax + + lda TILEMAP,X + + ; if tile# < HARD_TILES then we are fine + cmp #HARD_TILES + bcc collide_left_right ; blt + + lda #0 + sta DUKE_JUMPING + lda #1 + sta DUKE_FALLING + +collide_left_right: + ;=================== + ; collide left/right + ;=================== + lda DUKE_DIRECTION beq done_duke_collide @@ -106,34 +142,34 @@ duke_collide: check_right_collide: lda DUKE_FOOT_OFFSET clc - adc #1 ; underfoot is on next row (+16) + adc #1 ; right is one to right tax lda TILEMAP,X - ; if tile# < 32 then we are fine - cmp #32 + ; if tile# < HARD_TILES then we are fine + cmp #HARD_TILES bcc done_duke_collide ; blt - lda #0 ; - sta DUKE_WALKING + lda #1 ; + sta SUPPRESS_WALK jmp done_duke_collide check_left_collide: lda DUKE_FOOT_OFFSET sec - sbc #1 ; underfoot is on next row (+16) + sbc #1 ; left is one to left tax lda TILEMAP,X - ; if tile# < 32 then we are fine - cmp #32 + ; if tile# < HARD_TILES then we are fine + cmp #HARD_TILES bcc done_duke_collide ; blt - lda #0 ; - sta DUKE_WALKING + lda #1 + sta SUPPRESS_WALK jmp done_duke_collide done_duke_collide: @@ -244,8 +280,8 @@ check_falling: tax lda TILEMAP,X - ; if tile# < 32 then we fall - cmp #32 + ; if tile# < HARD_TILES then we fall + cmp #HARD_TILES bcs feet_on_ground ; bge ;======================= diff --git a/duke/zp.inc b/duke/zp.inc index 8534f165..5335be76 100644 --- a/duke/zp.inc +++ b/duke/zp.inc @@ -110,6 +110,7 @@ UPDATE_STATUS = $94 DUKE_FALLING = $95 DUKE_SHOOTING = $96 KICK_UP_DUST = $97 +SUPPRESS_WALK = $98 ; done game puzzle state