ootw: c2: finally fix walls issue

This commit is contained in:
Vince Weaver 2019-08-22 15:34:15 -04:00
parent 93c16e171f
commit 441d1edd2b

View File

@ -16,6 +16,8 @@ TARGET_PHYSICIST= $80
; FIXME: only door collision if on same level ; FIXME: only door collision if on same level
recalc_walk_collision: recalc_walk_collision:
; note the limits have $80 added to them :(
lda RIGHT_LIMIT lda RIGHT_LIMIT
sta RIGHT_WALK_LIMIT sta RIGHT_WALK_LIMIT
@ -27,19 +29,27 @@ recalc_walk_collision:
recalc_walk_left: recalc_walk_left:
lda PHYSICIST_X
ldy NUM_DOORS ldy NUM_DOORS
dey dey
recalc_walk_left_loop: recalc_walk_left_loop:
lda PHYSICIST_X
cmp (DOOR_X),Y cmp (DOOR_X),Y
bcc recalc_walk_left_continue ; blt bcc recalc_walk_left_continue ; blt
; only if on same level
lda (DOOR_Y),Y
clc
adc #4
cmp PHYSICIST_Y
bne recalc_walk_left_continue
; only if closer than previous found ; only if closer than previous found
lda LEFT_WALK_LIMIT lda (DOOR_X),Y
cmp (DOOR_X),Y ora #$80
bcs recalc_walk_left_continue ; bge cmp LEFT_WALK_LIMIT
bcc recalc_walk_left_continue ; blt
lda (DOOR_STATUS),Y lda (DOOR_STATUS),Y
cmp #DOOR_STATUS_LOCKED cmp #DOOR_STATUS_LOCKED
@ -49,7 +59,7 @@ recalc_walk_left_loop:
lda (DOOR_X),Y lda (DOOR_X),Y
ora #$80 ora #$80
sta LEFT_WALK_LIMIT sta LEFT_WALK_LIMIT
jmp done_recalc_walk_left_collision ; jmp done_recalc_walk_left_collision
recalc_walk_left_continue: recalc_walk_left_continue:
dey dey
@ -57,18 +67,27 @@ recalc_walk_left_continue:
done_recalc_walk_left_collision: done_recalc_walk_left_collision:
lda PHYSICIST_X
ldy #0 ldy #0
recalc_walk_right_loop: recalc_walk_right_loop:
; only if on same level
lda (DOOR_Y),Y
clc
adc #4
cmp PHYSICIST_Y
bne recalc_walk_right_continue
lda PHYSICIST_X
cmp (DOOR_X),Y cmp (DOOR_X),Y
bcs recalc_walk_right_continue ; bge bcs recalc_walk_right_continue ; bge
; only if closer than previous found ; only if closer than previous found
lda RIGHT_WALK_LIMIT lda (DOOR_X),Y
cmp (DOOR_X),Y ora #$80
bcc recalc_walk_right_continue ; blt cmp RIGHT_WALK_LIMIT
bcs recalc_walk_right_continue ; bge
lda (DOOR_STATUS),Y lda (DOOR_STATUS),Y
cmp #DOOR_STATUS_LOCKED cmp #DOOR_STATUS_LOCKED