mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-28 02:55:03 +00:00
ootw: c4: start making doors generic
This commit is contained in:
parent
e1d57cbef8
commit
f28c6c34ec
@ -281,10 +281,10 @@ blast_door_left:
|
|||||||
|
|
||||||
txa
|
txa
|
||||||
and #$f
|
and #$f
|
||||||
tax
|
tay
|
||||||
|
|
||||||
lda #DOOR_STATUS_EXPLODING1
|
lda #DOOR_STATUS_EXPLODING1
|
||||||
sta door_status,X
|
sta (DOOR_STATUS),Y
|
||||||
|
|
||||||
jsr recalc_walk_collision
|
jsr recalc_walk_collision
|
||||||
|
|
||||||
@ -331,10 +331,10 @@ blast_alien_right:
|
|||||||
blast_door_right:
|
blast_door_right:
|
||||||
txa
|
txa
|
||||||
and #$f
|
and #$f
|
||||||
tax
|
tay
|
||||||
|
|
||||||
lda #DOOR_STATUS_EXPLODING1
|
lda #DOOR_STATUS_EXPLODING1
|
||||||
sta door_status,X
|
sta (DOOR_STATUS),Y
|
||||||
|
|
||||||
jsr recalc_walk_collision
|
jsr recalc_walk_collision
|
||||||
|
|
||||||
|
@ -33,43 +33,43 @@ recalc_walk_left:
|
|||||||
|
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
|
|
||||||
ldx NUM_DOORS
|
ldy NUM_DOORS
|
||||||
dex
|
dey
|
||||||
recalc_walk_left_loop:
|
recalc_walk_left_loop:
|
||||||
|
|
||||||
cmp door_x,X
|
cmp door_x,Y
|
||||||
bcc recalc_walk_left_continue ; bcs
|
bcc recalc_walk_left_continue ; bcs
|
||||||
|
|
||||||
lda door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
cmp #DOOR_STATUS_LOCKED
|
cmp #DOOR_STATUS_LOCKED
|
||||||
bne recalc_walk_left_continue
|
bne recalc_walk_left_continue
|
||||||
|
|
||||||
; early exit
|
; early exit
|
||||||
lda door_x,X
|
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:
|
||||||
dex
|
dey
|
||||||
bpl recalc_walk_left_loop
|
bpl recalc_walk_left_loop
|
||||||
|
|
||||||
done_recalc_walk_left_collision:
|
done_recalc_walk_left_collision:
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
|
|
||||||
ldx #0
|
ldy #0
|
||||||
recalc_walk_right_loop:
|
recalc_walk_right_loop:
|
||||||
|
|
||||||
cmp door_x,X
|
cmp door_x,Y
|
||||||
bcs recalc_walk_right_continue ; bge
|
bcs recalc_walk_right_continue ; bge
|
||||||
|
|
||||||
lda door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
cmp #DOOR_STATUS_LOCKED
|
cmp #DOOR_STATUS_LOCKED
|
||||||
bne recalc_walk_right_continue
|
bne recalc_walk_right_continue
|
||||||
|
|
||||||
; early exit
|
; early exit
|
||||||
lda door_x,X
|
lda door_x,Y
|
||||||
sec
|
sec
|
||||||
sbc #4
|
sbc #4
|
||||||
ora #$80
|
ora #$80
|
||||||
@ -77,8 +77,8 @@ recalc_walk_right_loop:
|
|||||||
jmp done_recalc_walk_right_collision
|
jmp done_recalc_walk_right_collision
|
||||||
|
|
||||||
recalc_walk_right_continue:
|
recalc_walk_right_continue:
|
||||||
inx
|
iny
|
||||||
cpx NUM_DOORS
|
cpy NUM_DOORS
|
||||||
bne recalc_walk_right_loop
|
bne recalc_walk_right_loop
|
||||||
|
|
||||||
done_recalc_walk_right_collision:
|
done_recalc_walk_right_collision:
|
||||||
@ -120,15 +120,15 @@ calc_gun_right_door:
|
|||||||
calc_gun_right_doors:
|
calc_gun_right_doors:
|
||||||
|
|
||||||
|
|
||||||
ldx #0
|
ldy #0
|
||||||
calc_gun_right_door_loop:
|
calc_gun_right_door_loop:
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
|
|
||||||
cmp door_x,X
|
cmp door_x,Y
|
||||||
bcs calc_gun_right_door_continue ; bge
|
bcs calc_gun_right_door_continue ; bge
|
||||||
|
|
||||||
lda door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
cmp #DOOR_STATUS_LOCKED
|
cmp #DOOR_STATUS_LOCKED
|
||||||
beq calc_gun_right_door_there
|
beq calc_gun_right_door_there
|
||||||
cmp #DOOR_STATUS_CLOSED
|
cmp #DOOR_STATUS_CLOSED
|
||||||
@ -136,18 +136,18 @@ calc_gun_right_door_loop:
|
|||||||
|
|
||||||
calc_gun_right_door_there:
|
calc_gun_right_door_there:
|
||||||
; early exit
|
; early exit
|
||||||
lda door_x,X
|
lda door_x,Y
|
||||||
sta RIGHT_SHOOT_LIMIT
|
sta RIGHT_SHOOT_LIMIT
|
||||||
|
|
||||||
txa ; set target if hit
|
tya ; set target if hit
|
||||||
ora #TARGET_DOOR
|
ora #TARGET_DOOR
|
||||||
sta RIGHT_SHOOT_TARGET
|
sta RIGHT_SHOOT_TARGET
|
||||||
|
|
||||||
jmp done_calc_gun_right_door_collision
|
jmp done_calc_gun_right_door_collision
|
||||||
|
|
||||||
calc_gun_right_door_continue:
|
calc_gun_right_door_continue:
|
||||||
inx
|
iny
|
||||||
cpx NUM_DOORS
|
cpy NUM_DOORS
|
||||||
bne calc_gun_right_door_loop
|
bne calc_gun_right_door_loop
|
||||||
|
|
||||||
done_calc_gun_right_door_collision:
|
done_calc_gun_right_door_collision:
|
||||||
@ -228,15 +228,15 @@ left_limit_ok:
|
|||||||
calc_gun_left_doors:
|
calc_gun_left_doors:
|
||||||
|
|
||||||
|
|
||||||
ldx NUM_DOORS
|
ldy NUM_DOORS
|
||||||
dex
|
dey
|
||||||
calc_gun_left_door_loop:
|
calc_gun_left_door_loop:
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
|
|
||||||
cmp door_x,X
|
cmp door_x,Y
|
||||||
bcc calc_gun_left_door_continue ; blt
|
bcc calc_gun_left_door_continue ; blt
|
||||||
|
|
||||||
lda door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
cmp #DOOR_STATUS_LOCKED
|
cmp #DOOR_STATUS_LOCKED
|
||||||
beq calc_gun_left_door_there
|
beq calc_gun_left_door_there
|
||||||
cmp #DOOR_STATUS_CLOSED
|
cmp #DOOR_STATUS_CLOSED
|
||||||
@ -244,17 +244,17 @@ calc_gun_left_door_loop:
|
|||||||
|
|
||||||
calc_gun_left_door_there:
|
calc_gun_left_door_there:
|
||||||
; early exit
|
; early exit
|
||||||
lda door_x,X
|
lda door_x,Y
|
||||||
sta LEFT_SHOOT_LIMIT
|
sta LEFT_SHOOT_LIMIT
|
||||||
|
|
||||||
txa ; set target if hit
|
tya ; set target if hit
|
||||||
ora #TARGET_DOOR
|
ora #TARGET_DOOR
|
||||||
sta LEFT_SHOOT_TARGET
|
sta LEFT_SHOOT_TARGET
|
||||||
|
|
||||||
jmp done_calc_gun_left_door_collision
|
jmp done_calc_gun_left_door_collision
|
||||||
|
|
||||||
calc_gun_left_door_continue:
|
calc_gun_left_door_continue:
|
||||||
dex
|
dey
|
||||||
bpl calc_gun_left_door_loop
|
bpl calc_gun_left_door_loop
|
||||||
|
|
||||||
done_calc_gun_left_door_collision:
|
done_calc_gun_left_door_collision:
|
||||||
|
77
ootw/door.s
77
ootw/door.s
@ -23,27 +23,28 @@ draw_doors:
|
|||||||
lda NUM_DOORS
|
lda NUM_DOORS
|
||||||
beq done_draw_doors
|
beq done_draw_doors
|
||||||
|
|
||||||
ldx #0
|
ldy #0
|
||||||
draw_doors_loop:
|
draw_doors_loop:
|
||||||
|
|
||||||
ldy door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
|
tax
|
||||||
|
|
||||||
lda door_sprite_lookup_lo,Y
|
lda door_sprite_lookup_lo,X
|
||||||
sta INL
|
sta INL
|
||||||
lda door_sprite_lookup_hi,Y
|
lda door_sprite_lookup_hi,X
|
||||||
sta INH
|
sta INH
|
||||||
|
|
||||||
actually_draw_door:
|
actually_draw_door:
|
||||||
lda door_x,X
|
lda door_x,Y
|
||||||
sta XPOS
|
sta XPOS
|
||||||
|
|
||||||
lda door_y,X
|
lda door_y,Y
|
||||||
sta YPOS
|
sta YPOS
|
||||||
|
|
||||||
txa
|
tya
|
||||||
pha
|
pha
|
||||||
|
|
||||||
lda door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
cmp #DOOR_STATUS_EXPLODING1
|
cmp #DOOR_STATUS_EXPLODING1
|
||||||
bcs draw_exploding_door
|
bcs draw_exploding_door
|
||||||
|
|
||||||
@ -52,11 +53,11 @@ actually_draw_door:
|
|||||||
after_door_put_sprite:
|
after_door_put_sprite:
|
||||||
|
|
||||||
pla
|
pla
|
||||||
tax
|
tay
|
||||||
|
|
||||||
draw_doors_continue:
|
draw_doors_continue:
|
||||||
inx
|
iny
|
||||||
cpx NUM_DOORS
|
cpy NUM_DOORS
|
||||||
bne draw_doors_loop
|
bne draw_doors_loop
|
||||||
|
|
||||||
done_draw_doors:
|
done_draw_doors:
|
||||||
@ -69,13 +70,16 @@ draw_exploding_door:
|
|||||||
and #$7
|
and #$7
|
||||||
bne not_done_exploding_door
|
bne not_done_exploding_door
|
||||||
|
|
||||||
inc door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
lda door_status,X
|
clc
|
||||||
|
adc #1
|
||||||
|
sta (DOOR_STATUS),Y
|
||||||
|
|
||||||
cmp #DOOR_STATUS_EXPLODING6
|
cmp #DOOR_STATUS_EXPLODING6
|
||||||
bcc not_done_exploding_door
|
bcc not_done_exploding_door
|
||||||
|
|
||||||
lda #DOOR_STATUS_EXPLODED
|
lda #DOOR_STATUS_EXPLODED
|
||||||
sta door_status,X
|
sta (DOOR_STATUS),Y
|
||||||
|
|
||||||
not_done_exploding_door:
|
not_done_exploding_door:
|
||||||
dec XPOS
|
dec XPOS
|
||||||
@ -96,11 +100,11 @@ handle_doors:
|
|||||||
lda NUM_DOORS
|
lda NUM_DOORS
|
||||||
beq done_handle_doors
|
beq done_handle_doors
|
||||||
|
|
||||||
ldx #0
|
ldy #0
|
||||||
handle_doors_loop:
|
handle_doors_loop:
|
||||||
|
|
||||||
; state machine
|
; state machine
|
||||||
lda door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
|
|
||||||
; if locked->do nothing
|
; if locked->do nothing
|
||||||
cmp #DOOR_STATUS_LOCKED
|
cmp #DOOR_STATUS_LOCKED
|
||||||
@ -126,11 +130,14 @@ handle_doors_loop:
|
|||||||
; if opening, continue to open
|
; if opening, continue to open
|
||||||
; if closing, continue to close
|
; if closing, continue to close
|
||||||
handle_door_inc_state:
|
handle_door_inc_state:
|
||||||
inc door_status,X
|
lda (DOOR_STATUS),Y
|
||||||
|
clc
|
||||||
|
adc #1
|
||||||
|
sta (DOOR_STATUS),Y
|
||||||
|
|
||||||
handle_doors_continue:
|
handle_doors_continue:
|
||||||
inx
|
iny
|
||||||
cpx NUM_DOORS
|
cpy NUM_DOORS
|
||||||
bne handle_doors_loop
|
bne handle_doors_loop
|
||||||
|
|
||||||
done_handle_doors:
|
done_handle_doors:
|
||||||
@ -139,19 +146,17 @@ done_handle_doors:
|
|||||||
handle_doors_open:
|
handle_doors_open:
|
||||||
|
|
||||||
; only open/close if on same level
|
; only open/close if on same level
|
||||||
ldy door_y,X
|
lda door_y,Y
|
||||||
iny
|
clc
|
||||||
iny
|
adc #4
|
||||||
iny
|
cmp PHYSICIST_Y
|
||||||
iny
|
|
||||||
cpy PHYSICIST_Y
|
|
||||||
bne close_door
|
bne close_door
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
cmp door_xmax,X
|
cmp door_xmax,Y
|
||||||
bcs close_door ; bge
|
bcs close_door ; bge
|
||||||
|
|
||||||
cmp door_xmin,X
|
cmp door_xmin,Y
|
||||||
bcc close_door ; blt
|
bcc close_door ; blt
|
||||||
|
|
||||||
; made it here, we are in bounds, stay open
|
; made it here, we are in bounds, stay open
|
||||||
@ -160,31 +165,29 @@ handle_doors_open:
|
|||||||
|
|
||||||
close_door:
|
close_door:
|
||||||
lda #DOOR_STATUS_CLOSING1
|
lda #DOOR_STATUS_CLOSING1
|
||||||
sta door_status,X
|
sta (DOOR_STATUS),Y
|
||||||
jmp handle_doors_continue
|
jmp handle_doors_continue
|
||||||
|
|
||||||
handle_doors_closed:
|
handle_doors_closed:
|
||||||
|
|
||||||
; only open if on same level
|
; only open if on same level
|
||||||
|
|
||||||
ldy door_y,X
|
lda door_y,Y
|
||||||
iny
|
clc
|
||||||
iny
|
adc #4
|
||||||
iny
|
cmp PHYSICIST_Y
|
||||||
iny
|
|
||||||
cpy PHYSICIST_Y
|
|
||||||
bne handle_doors_continue
|
bne handle_doors_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
cmp door_xmax,X
|
cmp door_xmax,Y
|
||||||
bcs handle_doors_continue
|
bcs handle_doors_continue
|
||||||
|
|
||||||
cmp door_xmin,X
|
cmp door_xmin,Y
|
||||||
bcc handle_doors_continue
|
bcc handle_doors_continue
|
||||||
|
|
||||||
open_door:
|
open_door:
|
||||||
lda #DOOR_STATUS_OPENING1
|
lda #DOOR_STATUS_OPENING1
|
||||||
sta door_status,X
|
sta (DOOR_STATUS),Y
|
||||||
jmp handle_doors_continue
|
jmp handle_doors_continue
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,6 +118,11 @@ room0:
|
|||||||
lda #5
|
lda #5
|
||||||
sta NUM_DOORS
|
sta NUM_DOORS
|
||||||
|
|
||||||
|
lda #<door_status
|
||||||
|
sta DOOR_STATUS
|
||||||
|
lda #>door_status
|
||||||
|
sta DOOR_STATUS_H
|
||||||
|
|
||||||
lda #(6+128)
|
lda #(6+128)
|
||||||
sta LEFT_LIMIT
|
sta LEFT_LIMIT
|
||||||
lda #(39+128)
|
lda #(39+128)
|
||||||
@ -974,12 +979,6 @@ pit_door_cover:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
door_y:
|
|
||||||
c4_r0_door0_y: .byte 24
|
|
||||||
c4_r0_door1_y: .byte 24
|
|
||||||
c4_r0_door2_y: .byte 24
|
|
||||||
c4_r0_door3_y: .byte 24
|
|
||||||
c4_r0_door4_y: .byte 24
|
|
||||||
|
|
||||||
door_status:
|
door_status:
|
||||||
c4_r0_door0_status: .byte DOOR_STATUS_CLOSED
|
c4_r0_door0_status: .byte DOOR_STATUS_CLOSED
|
||||||
@ -995,6 +994,13 @@ door_x:
|
|||||||
c4_r0_door3_x: .byte 31
|
c4_r0_door3_x: .byte 31
|
||||||
c4_r0_door4_x: .byte 33
|
c4_r0_door4_x: .byte 33
|
||||||
|
|
||||||
|
door_y:
|
||||||
|
c4_r0_door0_y: .byte 24
|
||||||
|
c4_r0_door1_y: .byte 24
|
||||||
|
c4_r0_door2_y: .byte 24
|
||||||
|
c4_r0_door3_y: .byte 24
|
||||||
|
c4_r0_door4_y: .byte 24
|
||||||
|
|
||||||
door_xmin:
|
door_xmin:
|
||||||
c4_r0_door0_xmin: .byte 0 ; 7-4-5
|
c4_r0_door0_xmin: .byte 0 ; 7-4-5
|
||||||
c4_r0_door1_xmin: .byte 11 ; 18-4-5
|
c4_r0_door1_xmin: .byte 11 ; 18-4-5
|
||||||
|
12
ootw/zp.inc
12
ootw/zp.inc
@ -118,6 +118,18 @@ LZ4_DONE = $96
|
|||||||
; More zero-page addresses
|
; More zero-page addresses
|
||||||
; we try not to conflict with anything DOS, MONITOR or BASIC related
|
; we try not to conflict with anything DOS, MONITOR or BASIC related
|
||||||
|
|
||||||
|
|
||||||
|
DOOR_STATUS = $C0
|
||||||
|
DOOR_STATUS_H = $C1
|
||||||
|
DOOR_X = $C2
|
||||||
|
DOOR_X_H = $C3
|
||||||
|
DOOR_Y = $C4
|
||||||
|
DOOR_Y_H = $C5
|
||||||
|
DOOR_XMIN = $C6
|
||||||
|
DOOR_XMIN_H = $C7
|
||||||
|
DOOR_XMAX = $C8
|
||||||
|
DOOR_XMAX_H = $C9
|
||||||
|
|
||||||
LEFT_SHOOT_TARGET = $CF ; ALL
|
LEFT_SHOOT_TARGET = $CF ; ALL
|
||||||
RIGHT_SHOOT_TARGET = $D0 ; ALL
|
RIGHT_SHOOT_TARGET = $D0 ; ALL
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user