Fixes to Aga Tower staircases

Lots of initial work on key doors and other door pairs
This commit is contained in:
aerinon
2019-09-27 22:00:45 -06:00
parent 3df4fe08b3
commit f12659af9d
14 changed files with 752 additions and 266 deletions

View File

@@ -184,242 +184,4 @@ $a2 - MM 162 idx 0
$a8 - EP 168 idx 2
$bc - TT 188 idx 1
Door Data:
Room 001 : 32 46, 93 46
Room 002 : A1 44, A0 40, A1 16
Room 003 : 61 0E
Room 004 : 00 22, 60 28, 82 28, 80 36, 61 00
Room 006 : 61 18
Room 008 : B2 48, 81 0E, 91 40, 91 16
Room 010 : 10 20
Room 011 : 60 36, 82 38, 62 1C
Room 012 : 71 0A
Room 013 : 61 18
Room 014 : 60 22, 82 18, 81 0A
Room 016 : 61 0A, 82 00
Room 017 : 62 28, 82 28, 81 1C
Room 018 : 40 02, 40 16, A1 02, A1 12
Room 019 : 83 1C, 63 00
Room 020 : 81 1C, 22 1C, 00 00, 02 00, 61 00, 63 00, 83 00
Room 021 : 22 18, 02 00
Room 022 : 70 2E, 60 1C, 80 00, 00 00
Room 024 : 30 02, 30 16
Room 025 : 73 2E, 63 1C
Room 026 : 80 1C, 02 1C, 12 2E, 61 1C, 62 00, 81 00
Room 027 : 60 36, 61 00
Room 028 : 80 36, 82 18, 60 28
Room 029 : 00 1E
Room 030 : 83 18, 82 18, 80 36, 81 00
Room 031 : 22 18, 82 38
Room 032 : 61 18
Room 033 : 20 1C, 70 00, 83 00
Room 034 : 71 1C, 22 00
Room 035 : 81 2A, 83 00
Room 036 : 20 1E, 62 38, 60 38, 80 38, 81 0A, 00 00, 22 00, 82 00
Room 038 : 71 1C, 60 36, 80 36, 62 00
Room 040 : 00 22, 71 0A
Room 042 : 20 18, 00 1C, 83 2E, A3 02, 61 00, 81 00
Room 043 : 82 2E, 22 2E, 00 18, 42 02
Room 044 : 60 2E, 80 2E, 82 2E, 81 2E, 61 0E
Room 046 : 20 00
Room 047 : 60 2E, 81 0E
Room 048 : 00 32, 60 38
Room 049 : 60 1E, 82 36
Room 050 : 10 1C
Room 051 : 61 18
Room 052 : 63 00, 83 00
Room 053 : 63 1C, 02 00, 22 00, 80 00, 83 00, A0 02
Room 054 : 63 2E, 10 1C, 02 1C, 22 00, 83 00, A1 02
Room 055 : 02 2E, 63 2E, 60 1C, 83 1C, 22 00, A0 02
Room 056 : 02 2E, 22 1C
Room 057 : 61 18, 82 1C
Room 058 : 71 1C, 00 00, 20 00
Room 059 : 61 00
Room 060 : 20 2E, 81 0E
Room 061 : 80 36, 62 1C, 61 1C, 60 2E
Room 062 : 80 18, 61 1C
Room 063 : 82 18
Room 064 : B2 40
Room 065 : 71 18
Room 067 : 00 1E, 80 1C, 81 1C
Room 068 : 62 38, 82 1C, 63 00, 83 00
Room 069 : 02 18, 60 00, 22 00, 82 00
Room 070 : 40 02, 90 02, B0 02
Room 073 : 00 32, 62 36, 61 1C, 82 00
Room 074 : 60 18, 80 18, 10 1C, 70 00, 71 0A
Room 075 : 00 18, 60 28, 80 28
Room 076 : 83 18
Room 077 : 00 1C, 22 00
Room 078 : 62 18, 00 1C
Room 079 : 22 1C
Room 080 : 93 46, B1 40
Room 081 : 10 00, 10 14
Room 082 : 32 46, 91 40, 71 00
Room 083 : 60 36, 82 38, 20 1C
Room 085 : 90 02, 61 00, 61 12
Room 086 : 60 1C, 61 0A, 82 00, 83 00
Room 087 : 62 2E, 60 36, 83 1C, 61 0A, 22 00, 81 00
Room 088 : 00 30, 22 1C, 81 1C, 62 2E, 61 0A, 82 00
Room 089 : 00 1C, 61 0A, 92 40, B2 40
Room 090 : 81 18
Room 091 : 81 1C, 63 18
Room 092 : 80 2E, 02 00
Room 093 : 60 18, 61 18, 62 18
Room 094 : 83 1C, 80 38, 81 00, 82 00
Room 095 : 22 1C
Room 096 : 50 40, A3 40, A3 16, 63 00, 81 00, 81 12
Room 097 : 42 02, 42 16, A3 02, A3 16, A1 02, A1 12, 02 00
Room 098 : 42 40, 42 16, 30 40, 10 00, 61 00, 61 12
Room 099 : 20 60, 36 61, 0A
Room 100 : 82 38
Room 101 : 82 00
Room 102 : B0 08, 91 40, 91 16, 90 40
Room 103 : 20 00, 82 00, 83 00
Room 104 : 22 18, 20 1C
Room 106 : 20 1E
Room 107 : 20 1E, 80 36, 82 18, 60 18
Room 108 : 82 38, 60 18, 83 00
Room 109 : 00 18, 60 18, 22 18
Room 110 : 20 18
Room 113 : 60 1C, 91 44, B2 44
Room 114 : 70 1C
Room 115 : 60 36, 82 38, 80 00
Room 116 : 80 00, 60 00
Room 117 : 60 38, 81 00
Room 118 : 92 02, B2 02, 30 02, 30 16
Room 119 : 30 26, A1 0C
Room 123 : 61 18, 63 1C, 83 00
Room 124 : 20 30, 83 2E, 02 1C, 22 00
Room 125 : 81 18, 22 2E, 60 1C
Room 126 : 81 1C, 82 36, 63 00
Room 127 : 02 18, 60 00
Room 129 : 30 40
Room 131 : 60 36, 61 0A, 82 00
Room 132 : 71 0A
Room 134 : 20 18, 62 1C, 81 0A, 82 00
Room 135 : 62 38, 80 00
Room 139 : 62 36, 82 1C, 63 00, 61 00, 00 00
Room 140 : 63 18, 60 38, 62 1C, 02 00, 61 00, 81 00
Room 141 : 81 18, 62 1C, 02 00, 20 00, 82 00
Room 142 : 20 1C
Room 144 : 61 18
Room 145 : 83 00
Room 146 : 62 2E, 60 2E, 22 00, 82 00, 83 00
Room 147 : 60 38, 80 1C, 22 00
Room 149 : 81 00, 63 00
Room 150 : 82 38, 02 00
Room 151 : 82 00, 60 00
Room 152 : 61 0A
Room 153 : 60 20, 71 1C, 80 00
Room 155 : 62 1C, 00 00, 83 00
Room 156 : 83 18, 00 00, 20 00, 22 00
Room 157 : 20 00, 22 00, 62 00
Room 158 : 20 22, 80 1E, 82 00, 83 00
Room 159 : 22 18, 61 18
Room 160 : 00 1E
Room 161 : 81 1C, 73 00
Room 162 : 71 1C, 12 00, 73 00, 81 00
Room 163 : 12 00, 61 00
Room 164 : 61 18
Room 165 : 20 18, 80 38, 60 38
Room 168 : 82 38, 60 36, 81 1C, 92 40, 93 40, 73 00
Room 169 : 12 18, 73 18, 10 1E, 32 40, 93 40, 71 00
Room 170 : 80 38, 32 40, 62 00, 82 00, 12 00, 61 00
Room 171 : 60 20, 61 00
Room 172 : 81 18
Room 174 : 63 00
Room 175 : 00 00, 02 00
Room 176 : 60 18, 62 18, 82 1C
Room 177 : 60 1E, 20 1C, 81 00, 82 00
Room 178 : 10 1E, 82 38, 80 36, 93 40, 20 00, 61 00, 81 00, 83 00
Room 179 : 60 1C, 32 40, 00 00, 22 00, 61 00
Room 180 : 00 1E
Room 181 : 61 18
Room 182 : 00 22, 80 36, 61 1C, 60 1C, 81 00
Room 183 : 61 00
Room 184 : 20 1E, 63 00
Room 185 : 63 1C, 10 00, 71 00, 02 00
Room 186 : 02 1C, 00 18, 62 38
Room 187 : 00 00, 62 00, 82 00, 80 00, 63 00, 83 00
Room 188 : 82 1C, 81 1C, 62 18, 61 2E, 02 00, 22 00, 60 00, 20 00
Room 190 : 81 18, 83 1C, 80 00
Room 191 : 22 1C
Room 192 : 62 36, 82 38, 20 20
Room 193 : 82 1C, 83 1C, 62 36, 60 36, 61 00, 63 00, 20 00, 81 00
Room 194 : 63 1C, 22 1C, 00 00, 02 00, 73 00, 81 00, 83 00, 20 00
Room 195 : 02 1C, 62 38, 72 38, 82 36, 00 00, 12 00, 22 00
Room 196 : 83 1C
Room 197 : 22 1C, 00 00, 61 00
Room 198 : 00 1C, 20 00, 63 00, 83 00, 61 00, 81 00
Room 199 : 00 18, 02 00, 22 00
Room 200 : 81 18
Room 201 : 70 18, 10 18, 60 00, 80 00, 71 0A
Room 203 : 73 28
Room 204 : 20 1E, 00 2E, 12 28
Room 206 : 20 18
Room 208 : 82 1C, 62 38
Room 209 : 82 38, 00 00, 20 00, 80 00
Room 210 : 20 18
Room 213 : 61 2A, 00 00
Room 215 : 00 1A, 81 0A, 20 00
Room 216 : 20 18, 80 36, 83 00
Room 217 : 22 18, 82 18, 83 18
Room 218 : 22 18
Room 219 : 73 18, 71 0A
Room 220 : 12 00
Room 223 : 71 0E
Room 224 : 62 38, 60 38, 20 20, 61 0A
Room 225 : A2 40, 61 0E
Room 226 : 72 00, 81 0E
Room 227 : B2 4A, B0 40, 61 0E
Room 228 : 91 10, 62 00, 73 00
Room 229 : 12 00, 71 0E
Room 230 : 91 10, 93 02
Room 231 : B1 10, 32 02
Room 232 : 81 0E
Room 233 :
Room 234 : 61 0E
Room 235 : 81 0E
Room 236 :
Room 237 : 81 0E
Room 238 : 81 0E
Room 239 : 80 38, 71 0E
Room 240 : 61 0E, A3 02
Room 241 : B1 10, 42 02
Room 242 : 83 00, 81 00, 81 12
Room 243 : 22 00, 61 00, 61 12
Room 244 : 83 28, 81 00, 81 12
Room 245 : 22 28, 61 00, 61 12
Room 248 : 71 0E
Room 249 : 61 0E
Room 250 : 91 04
Room 251 : 71 0E
Room 253 : A1 10
Room 254 : B1 10
Room 255 : 60 2E, 80 2E, 81 0E

View File

@@ -8,6 +8,7 @@
; Gfx uses $b1 to for sub-sub-sub-module thing
; Hooks into various routines
incsrc drhooks.asm
org $02b5c4 ; -- moving right routine 135c4
jsl WarpRight
@@ -20,8 +21,6 @@ jsl WarpUp
org $02bd80
jsl AdjustTransition
nop
org $01b714
jsl TrapDoorFixer
;turn off linking doors -- see .notRoomLinkDoor label in Bank02.asm
org $02b5a6

View File

@@ -1,3 +1,23 @@
org $279700
KeyDoorOffset:
; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler
dw $0000,$0001,$0003,$0000,$0006,$0000,$000b,$0000,$0000,$0000,$000c,$000d,$0010,$0011,$0012,$0000
dw $0000,$0015,$0018,$001c,$001e,$0025,$0027,$0000,$0000,$002b,$002d,$0033,$0035,$0038,$0039,$003d
dw $003f,$0040,$0043,$0045,$0047,$0000,$004f,$0000,$0053,$0000,$0055,$005b,$0000,$0000,$005f,$0000
dw $0060,$0062,$0064,$0065,$0066,$0068,$006e,$0074,$007a,$007c,$007e,$0081,$0000,$0082,$0086,$0088
dw $0089,$008a,$0000,$008b,$008e,$0092,$0096,$0000,$0000,$0099,$009d,$00a2,$00a5,$00a6,$00a8,$00aa
dw $00ab,$00ad,$00af,$00b2,$0000,$0000,$00b5,$00b9,$00bf,$00c5,$00c9,$00ca,$00cc,$00ce,$00d1,$00d5
dw $00d6,$00dc,$00e3,$00e9,$00ec,$00ed,$00ee,$00f2,$00f5,$0000,$00f7,$00f8,$00fc,$00ff,$0102,$0000
dw $0000,$0103,$0106,$0107,$010a,$010c,$010e,$0112,$0000,$0000,$0000,$0114,$0117,$011b,$011e,$0121
dw $0000,$0123,$0000,$0124,$0127,$0128,$0000,$012c,$0000,$0000,$0000,$012e,$0133,$0139,$013e,$0000
dw $013f,$0140,$0141,$0146,$0000,$0149,$014b,$014d,$014f,$0150,$0000,$0153,$0156,$015a,$015d,$0161
dw $0163,$0164,$0166,$016a,$016c,$016d,$0000,$0000,$0170,$0176,$017c,$0182,$0184,$0000,$0185,$0186
dw $0188,$018b,$018f,$0197,$019c,$019d,$019e,$01a3,$01a4,$01a6,$01aa,$01ad,$01b3,$0000,$01bb,$01be
dw $01bf,$01c2,$01ca,$01d2,$01d9,$01da,$01dd,$01e3,$01e6,$01e7,$0000,$01ec,$01ed,$0000,$01f0,$0000
dw $01f1,$01f3,$01f7,$0000,$0000,$01f8,$01fa,$0000,$01fd,$0200,$0203,$0204,$0206,$0000,$0000,$0000
dw $0207
org $279E00
SpiralOffset:
; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler
@@ -273,4 +293,198 @@ dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Dark1 (2nd value unused)
dw $0203, $8080 ;Mire BK Thang
dw $0203, $8080 ;Mire2
dw $0203, $8080 ;East Attic Start
dw $0203, $8080 ;Tower Entrance
dw $0203, $8080 ;Tower Entrance
org $27C000 ;ends around 27C418
PairedDoorTable:
dw $0000 ; the bad template
dw $0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000
dw $0000
dw $0000
dw $0000,$0000,$0000
dw $0000
dw $0000
dw $0000,$0000,$0000
dw $0000,$0000,$8021
dw $0000,$0000,$0000,$0000
dw $4014,$0000
dw $8024,$8013,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000
dw $0000,$0000,$0000,$0000
dw $201a,$401a
dw $0000,$4019,$8019,$402a,$0000,$0000
dw $0000,$0000
dw $0000,$0000,$0000
dw $0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000
dw $0000
dw $2011,$0000,$0000
dw $8032,$0000
dw $0000,$0000
dw $8014,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dw $4036,$0000,$0000,$0000
dw $0000,$0000
dw $0000,$101a,$402b,$0000,$0000,$0000
dw $0000,$202a,$0000,$0000
dw $0000
dw $0000,$0000
dw $0000,$0000
dw $8022
dw $0000
dw $0000,$0000
dw $2036,$0000,$0000,$0000,$0000,$0000
dw $8037,$8026,$8035,$0000,$0000,$0000
dw $8036,$8038,$0000,$4038,$0000,$0000
dw $4037,$1037
dw $0000,$0000
dw $204a,$0000,$0000
dw $0000
dw $0000,$0000,$804d,$0000
dw $0000,$404e
dw $0000
dw $0000
dw $0000
dw $0000,$0000,$2053
dw $0000,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$8059,$0000
dw $0000,$0000,$803a,$0000,$0000
dw $0000,$0000,$0000
dw $0000
dw $203d,$0000
dw $0000,$403e
dw $0000 ; this is the odd extra room - shouldn't be used
dw $0000,$0000
dw $0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$2053
dw $0000,$0000,$0000,$0000
dw $0000,$0000,$4058,$0000,$0000,$0000
dw $0000,$2057,$4068,$0000,$0000,$0000
dw $2049,$0000,$0000,$0000
dw $0000
dw $806b,$0000
dw $0000,$0000
dw $0000,$0000,$0000
dw $805f,$0000,$0000,$0000
dw $805e
dw $0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000
dw $0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000,$2058
dw $0000
dw $805b,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000
dw $0000,$0000,$0000
dw $0000
dw $0000,$0000,$0000
dw $0000,$0000
dw $0000,$0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000
dw $0000,$207c,$0000
dw $0000,$407d,$407b,$0000
dw $0000,$407c,$0000
dw $808e,$0000,$0000
dw $0000,$0000
dw $0000
dw $0000,$0000,$0000
dw $0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000
dw $0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000
dw $807e
dw $0000
dw $0000
dw $0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000
dw $0000,$0000
dw $0000,$0000
dw $0000
dw $0000,$20a9,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$0000,$0000
dw $0000,$0000
dw $0000
dw $40b1,$0000
dw $80b2,$0000,$0000,$0000
dw $0000,$0000
dw $0000
dw $0000,$0000,$0000
dw $0000,$0000,$80b8,$0000,$0000,$0000
dw $0000,$0000,$4099,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000
dw $0000
dw $0000
dw $0000,$0000
dw $0000,$0000,$0000
dw $0000,$80a1,$0000,$0000
dw $80a2,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000
dw $0000
dw $0000
dw $0000,$0000,$80c6,$0000,$0000
dw $0000
dw $20a8,$0000
dw $80ba,$0000,$0000,$0000
dw $80b9,$0000,$0000
dw $0000,$0000,$0000,$0000,$0000,$0000
dw $0000,$80cc,$0000,$40cc,$0000,$0000,$0000,$0000
dw $0000,$80bf,$0000
dw $40be
dw $0000,$0000,$0000
dw $0000,$40c2,$0000,$0000,$0000,$0000,$0000,$0000
dw $80c3,$40c1,$0000,$0000,$0000,$0000,$0000,$0000
dw $80c2,$0000,$0000,$0000,$0000,$0000,$0000
dw $80c5
dw $80c4,$0000,$0000
dw $20b6,$0000,$0000,$0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000
dw $0000,$0000,$0000,$0000,$0000
dw $20cc
dw $40bc,$10bc,$80cb
dw $0000
dw $0000,$0000
dw $0000,$0000,$0000,$0000
dw $0000
dw $0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000,$0000,$0000
dw $0000
dw $0000,$0000
dw $0000
dw $0000,$0000,$0000,$0000
dw $ffff ; indicates the end - we can drop this

7
asm/drhooks.asm Normal file
View File

@@ -0,0 +1,7 @@
org $01b714 ; PC: b714
OpenableDoors:
jsl CheckIfDoorsOpen
bcs .normal
rts
.normal

View File

@@ -15,3 +15,43 @@ 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)

View File

@@ -44,8 +44,7 @@ TrapDoorFixer:
stz $0468 : lda $068c : ora $00 : sta $068c
.end
stz $ab ; clear our ab here because we don't need it anymore
lda $a0 : dec : tax
rtl
rts
Cleanup:
inc $11

View File

@@ -13,7 +13,7 @@ SpiralWarp: {
lda $045e : cmp #$5e : beq .gtg ; abort if not spiral - intended room is in A!
cmp #$5f : beq .gtg
.abort
stz $045e :lda $a2 : and #$0f : rtl ; clear,run highjack code and get out
stz $045e : lda $a2 : and #$0f : rtl ; clear,run highjack code and get out
.gtg
phb : phk : plb : phx : phy ; push stuff
@@ -61,7 +61,7 @@ SpiralWarp: {
lda $01 : and #$20 : sta $07 ; zeroVtCam check
ldy #$01 : jsr SetCamera
stz $045e
stz $045e ; clear the staircase flag
ply : plx : plb ; pull the stuff we pushed
lda $a2 : and #$0f ; this is the code we are hijacking
rtl
@@ -103,7 +103,7 @@ LookupSpiralOffset: {
.done
lda $a2 : tax : lda SpiralOffset,x
!add $01 ;add a thing (0 in .easy)
!add $01 ;add a thing (0 in easy case)
rts
}