57 lines
1.9 KiB
NASM
57 lines
1.9 KiB
NASM
; This is the reverse side of various key doors
|
|
|
|
org $1ff8cc ;(PC: 0ff8cc) GT 0x5b (Spikes & Switch)
|
|
dw $0081
|
|
|
|
org $0a972a ;(PC: 05172a) Eastern Darkness 0x99
|
|
dw $2060, $1e71
|
|
|
|
org $1fb759 ;(PC: 0fb759) Mire Bridges 0xa2
|
|
dw $0071
|
|
|
|
org $0a9887 ;(PC: 051887) Eastern Compass Area 0xa8
|
|
dw $3882, $3660, $1e81
|
|
|
|
org $1fd974 ;(PC: 0fd974) TT Bossway 0xbc
|
|
dw $1c82, $0081
|
|
|
|
; code to un-pair or re-pair doors
|
|
|
|
; doorlist is loaded into 19A0 but no terminator
|
|
; new room is in A0
|
|
; for "each" door do the following: (each could mean the first four doors?)
|
|
; in lookup table, grab room and corresponding position
|
|
; find the info at 7ef000, x where x is twice the paired room
|
|
; check the corresponding bit (there are only 4)
|
|
; set the bit in 068C
|
|
|
|
; Note the carry bit is used to indicate if we should aborted (set) or not
|
|
CheckIfDoorsOpen: {
|
|
jsr TrapDoorFixer ; see normal.asm
|
|
; note we are 16bit mode right now
|
|
lda $040c : cmp #$00ff ;: bne .gtg
|
|
lda $a0 : dec : tax : and #$000f ; hijacked code
|
|
sec : rtl ; set carry to indicate normal behavior
|
|
|
|
.gtg
|
|
phb : phk : plb
|
|
stx $00 : ldy #$00 : stz $03
|
|
.nextDoor
|
|
lda $a0 : asl : tax
|
|
lda KeyDoorOffset, x : beq .skipDoor
|
|
asl : sty $05 : !add $05 : tax
|
|
lda PairedDoorTable, x : beq .skipDoor
|
|
sta $02 : and #$00ff : asl a : tax
|
|
lda $7ef000, x : and #$f000 : and $03 : beq .skipDoor
|
|
tyx : lda $068c : ora $0098c0,x : sta $068c
|
|
.skipDoor
|
|
iny #2 : cpy $00 : bne .nextDoor
|
|
plb : clc : rtl
|
|
}
|
|
|
|
; outstanding issues
|
|
; how to indicate opening for other (non-first four doors?)
|
|
; Bank01 Door Register stores the 4 bits in 068c to 400 (depending on type)
|
|
; Key collision and others depend on F0-F3 attribute not sure if extendable to other numbers
|
|
; Dungeon_ProcessTorchAndDoorInteractives.isOpenableDoor is the likely culprit fo collision problems
|
|
; Saving open status to other unused rooms is tricky -- Bank 2 13947 (line 8888) |