Merge branch 'FancyDoorsMap' into MappableDoors

This commit is contained in:
2026-01-18 07:02:23 -06:00
42 changed files with 4186 additions and 362 deletions

View File

@@ -210,6 +210,7 @@ incsrc special_weapons.asm
incsrc variable_ganon_vulnerability.asm incsrc variable_ganon_vulnerability.asm
incsrc pseudoflute.asm incsrc pseudoflute.asm
incsrc dungeon_map/main.asm incsrc dungeon_map/main.asm
print "End of B9: ", pc
warnpc $B9E000 ; $E000 - EFFF reserved for custom door rando map data warnpc $B9E000 ; $E000 - EFFF reserved for custom door rando map data

Binary file not shown.

Binary file not shown.

View File

@@ -243,7 +243,7 @@ int main(int argc, char *argv[]) {
} }
fclose(outptr); fclose(outptr);
printf("Input file: %X bytes. Compressed: %X bytes.\n", size, oloc); printf("Input file: %lX bytes. Compressed: %X bytes.\n", size, oloc);
return 0; return 0;
} }

View File

@@ -149,7 +149,7 @@ int main(int argc, char *argv[]) {
} }
fclose(outptr); fclose(outptr);
printf("Input file: %X bytes. Decompressed: %X bytes.\n", size, oloc); printf("Input file: %lX bytes. Decompressed: %X bytes.\n", size, oloc);
return 0; return 0;
} }

Binary file not shown.

Binary file not shown.

View File

@@ -20,6 +20,17 @@ BlinkLoot:
StartDoubleWrite: StartDoubleWrite:
; what we wrote over ; what we wrote over
LDA.l DRMode
BEQ .draw
LDA.l DungeonMapMode
BNE .draw
INC.w $020D ; next subsubmode
PLA : PLA : PLA ; pull our jump to here off the stack
PLB
RTL
.draw
REP #$30 REP #$30
STZ.w GFXStripes STZ.w GFXStripes

View File

@@ -5,7 +5,7 @@ CheckLoot:
REP #$30 REP #$30
PHB : PHX : PHY PHB : PHX : PHY
STA.b $00 STA.b $CA
LDA.b $06 : PHA LDA.b $06 : PHA
LDA.b $0E : PHA LDA.b $0E : PHA
@@ -16,7 +16,8 @@ CheckLoot:
AND.w #$00FF AND.w #$00FF
STA.b $0E STA.b $0E
LDA.b $00 LDA.b $CA
AND.w #$00FF
ASL A ASL A
TAX TAX
@@ -80,7 +81,9 @@ CheckLoot:
RTL RTL
CheckChests: CheckChests:
LDA.b $00 LDA.b $CA
AND.w #$00FF
STA.b $00
ASL A ASL A
TAX TAX
@@ -90,6 +93,7 @@ CheckChests:
LDA.w #$0008 LDA.w #$0008
STA.b $04 STA.b $04
STZ.b $06
LDY.w #$FFFD LDY.w #$FFFD
.increment_mask .increment_mask
@@ -106,6 +110,11 @@ CheckChests:
CMP.b $00 CMP.b $00
BNE .next_chest BNE .next_chest
LDA.b $06
JSR CheckChestSection
INC.b $06
BCC .increment_mask
LDA.l SaveDataWRAM, X LDA.l SaveDataWRAM, X
AND.b $04 AND.b $04
BNE .increment_mask ; already got item BNE .increment_mask ; already got item
@@ -119,6 +128,22 @@ CheckChests:
RTS RTS
CheckBoss: CheckBoss:
; we assume all bosses are in section 1 of split sections
; mainly to simplify hera cage key and GT torch
; which use the same flow
; and bosses are always in their own section anyway
LDA.b $CA
AND.w #$F000
XBA
CMP.w #$0020
BCC +
RTS
+
LDA.b $CA
AND.w #$00FF
STA.b $04
LDX.w #$FFFA LDX.w #$FFFA
.next_boss .next_boss
INX #6 INX #6
@@ -127,7 +152,7 @@ CheckBoss:
RTS RTS
.check .check
CMP.b $00 CMP.b $04
BNE .next_boss BNE .next_boss
TXY TXY
@@ -170,6 +195,10 @@ CheckBoss:
BRA .next_boss BRA .next_boss
CheckPrize: CheckPrize:
LDA.b $CA
AND.w #$00FF
STA.b $04
LDX.w #$FFFD LDX.w #$FFFD
.next_prize .next_prize
INX #3 INX #3
@@ -178,7 +207,7 @@ CheckPrize:
RTS RTS
.check .check
CMP.b $00 CMP.b $04
BNE .next_prize BNE .next_prize
TXY TXY
@@ -202,7 +231,8 @@ CheckPrize:
BRA .next_prize BRA .next_prize
CheckPots: CheckPots:
LDA.b $00 LDA.b $CA
AND.w #$00FF
ASL A ASL A
TAX TAX
@@ -221,6 +251,10 @@ CheckPots:
LDA.b [$04], Y LDA.b [$04], Y
AND.w #$00FF AND.w #$00FF
CMP.w #$0008 : BEQ .small_key CMP.w #$0008 : BEQ .small_key
LDA.l PotCountMode
BEQ +
JSR CheckJunkPot
+
INY INY
BRA .next_pot BRA .next_pot
@@ -231,18 +265,30 @@ CheckPots:
PHX PHX
INY INY
BRA .mask_set BRA .mask_set
.major_item .major_item
LDA.b [$04], Y LDA.b [$04], Y
.continue
PHA PHA
PHX PHX
INY INY
TXA : ASL A TXA : ASL A
TAX TAX
LDA.l DungeonMask, X : STA.b $08 LDA.l DungeonMask, X : STA.b $08
TXA : LSR A : TAX
.mask_set .mask_set
LDA.b $00 : ASL A : TAX TXA
JSR CheckPotSection
BCS +
PLX
PLA
BRA .next_pot
+
LDA.b $CA
AND.w #$00FF
ASL A
TAX
if !FEATURE_FIX_BASEROM if !FEATURE_FIX_BASEROM
LDA.l SpriteDropData, X LDA.l SpriteDropData, X
else else
@@ -263,8 +309,50 @@ endif
.done .done
RTS RTS
CheckJunkPot:
LDA.b [$04], Y
PHA
PHX
TXA : ASL A : TAX
LDA.l DungeonMask, X : STA.b $08
TXA : LSR A
JSR CheckPotSection
BCS +
PLX
PLA
RTS
+
LDA.b $CA
AND.w #$00FF
ASL A
TAX
LDA.l PotCollectionRateTable, X
AND.b $08
BEQ .not_important
if !FEATURE_FIX_BASEROM
LDA.l SpriteDropData, X
else
LDA.l RoomPotData, X
endif
AND.b $08
BNE .not_important
PLX
PLA
AND.w #$00FF
JSR GetPotJunkClass
RTS
.not_important
PLX
PLA
RTS
CheckEnemies: CheckEnemies:
LDA.b $00 LDA.b $CA
AND.w #$00FF
ASL A ASL A
TAX TAX
@@ -279,9 +367,14 @@ CheckEnemies:
.next_enemy .next_enemy
LDA.b [$04], Y LDA.b [$04], Y
AND.w #$00FF AND.w #$00FF
CMP.w #$00FF : BEQ .done CMP.w #$00FF
BNE +
JMP .done
+
LDA.b [$04], Y LDA.b [$04], Y
BIT.w #$8000 : BNE .overlord AND.w #$E000
CMP.w #$E000
BEQ .overlord
INY : INY INY : INY
LDA.b [$04], Y LDA.b [$04], Y
AND.w #$00FF AND.w #$00FF
@@ -331,15 +424,28 @@ CheckEnemies:
TXA : ASL A TXA : ASL A
TAX TAX
LDA.l DungeonMask, X : STA.b $08 LDA.l DungeonMask, X : STA.b $08
TXA : LSR A : TAX
.mask_set .mask_set
LDA.b $00 : ASL A : TAX TXA
JSR CheckEnemySection
BCS +
PLX
PLA
JMP .next_enemy
+
LDA.b $CA
AND.w #$00FF
ASL A
TAX
LDA.l SpriteDropData, X LDA.l SpriteDropData, X
PLX PLX
AND.b $08 AND.b $08
BEQ .not_obtained BEQ .not_obtained
PLA PLA
BRA .next_enemy JMP .next_enemy
.not_obtained .not_obtained
PLA PLA
@@ -380,3 +486,148 @@ GetLootClass:
.done .done
PLX PLX
RTS RTS
; A = item id
; updates "best loot" value if better
GetPotJunkClass:
PHX
TAX
LDA.b $0E
BEQ .done
CMP.w #$0001
BEQ .value_set
; hardcode as junk for now
LDA.w #$0002
.value_set
CMP.b $02
BCC .done
STA.b $02
.done
PLX
RTS
macro DefineGetFooSection(type, offset)
Get<type>Section:
PHX
LDA.b $CA
AND.w #$00FF
ASL A
TAX
LDA.l SplitRooms, X
TAX
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $CE
BEQ .found
INX
.check_next_section
PHX
LDA.l SplitRooms+<offset>, X
TAX
-
LDA.l SplitRooms, X
AND.w #$00FF
CMP.w #$00FF
BEQ .not_this_section
CMP.b $CC
BEQ .plx_found
INX
BRA -
.not_this_section
PLX
TXA : CLC : ADC.w #$000D : TAX
DEC.b $CE
BNE .check_next_section
BRA .found
.plx_found
PLX
.found
PLX
LDA.b $CE
RTS
endmacro
macro DefineCheckFooSection(type)
Check<type>Section:
STA.b $CC
LDA.b $CB
AND.w #$00FF
BEQ .yes
JSR Get<type>Section
LDA.b $CB
AND.w #$00FF
LSR A : LSR A : LSR A : LSR A
DEC A
CMP.b $CE
BEQ .yes
.no
CLC
RTS
.yes
SEC
RTS
endmacro
%DefineGetFooSection(Door, 3)
%DefineGetFooSection(Stair, 5)
%DefineGetFooSection(Chest, 7)
%DefineGetFooSection(Pot, 9)
%DefineGetFooSection(Enemy, 11)
%DefineCheckFooSection(Door)
%DefineCheckFooSection(Stair)
%DefineCheckFooSection(Chest)
%DefineCheckFooSection(Pot)
%DefineCheckFooSection(Enemy)
GetIncomingStairSection:
PHX
AND.w #$0300
XBA
ASL A
TAX
LDA.l $8098D8, X
STA.b $CC
LDA.b $CA
AND.w #$00FF
ASL A
TAX
LDA.l SplitRooms, X
TAX
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $CE
BEQ .found
INX
.check_next_section
LDA.l SplitRooms+0, X
AND.w #$00FF
AND.b $CC
BNE .found
TXA : CLC : ADC.w #$000D : TAX
DEC.b $CE
BNE .check_next_section
BRA .found
.found
PLX
LDA.b $CE
RTS

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,5 @@
DoorConnectionTiles: DoorConnectionTiles:
.vertical
dw $0000, $0000 ; $00 dw $0000, $0000 ; $00
dw $01C0, $0000 ; $01 left -> left dw $01C0, $0000 ; $01 left -> left
dw $01D0, $01D1 ; $02 left -> middle dw $01D0, $01D1 ; $02 left -> middle
@@ -10,12 +11,33 @@ DoorConnectionTiles:
dw $41D1, $41D0 ; $08 right -> middle dw $41D1, $41D0 ; $08 right -> middle
dw $0000, $01C0 ; $09 right -> right dw $0000, $01C0 ; $09 right -> right
dw $41C2, $41C1 ; $0A left-middle -> left-middle dw $41C2, $41C1 ; $0A left-middle -> left-middle
dw $81D2, $81D0 ; $0B left-middle -> left-right dw $81D2, $C1D0 ; $0B left-middle -> left-right
dw $41D3, $81D3 ; $0C left-middle -> middle-right dw $41D3, $81D3 ; $0C left-middle -> middle-right
dw $01D2, $01D0 ; $0D left-right -> left-middle dw $01D2, $41D0 ; $0D left-right -> left-middle
dw $01C0, $01C0 ; $0E left-right -> left-right dw $01C0, $01C0 ; $0E left-right -> left-right
dw $01D0, $41D2 ; $0F left-right -> middle-right dw $01D0, $41D2 ; $0F left-right -> middle-right
dw $C1D3, $01D3 ; $10 middle-right -> left-middle dw $C1D3, $01D3 ; $10 middle-right -> left-middle
dw $81D0, $C1D2 ; $11 middle-right -> left-right dw $81D0, $C1D2 ; $11 middle-right -> left-right
dw $01C1, $01C2 ; $12 middle-right -> middle-right dw $01C1, $01C2 ; $12 middle-right -> middle-right
dw $41C2, $01C2 ; $13 triple -> triple dw $41C2, $01C2 ; $13 triple -> triple
.horizontal
dw $0300, $0300 ; $00
dw $01C4, $0300 ; $01 top -> top
dw $C1D4, $C1D5 ; $02 top -> middle
dw $81C7, $41C7 ; $03 top -> bottom
dw $81D4, $81D5 ; $04 middle -> top
dw $01C5, $81C5 ; $05 middle -> middle
dw $01D5, $01D4 ; $06 middle -> bottom
dw $C1C7, $01C7 ; $07 bottom -> top
dw $41D5, $41D4 ; $08 bottom -> middle
dw $0300, $01C4 ; $09 bottom -> bottom
dw $41C6, $41C5 ; $0A top-middle -> top-middle
dw $41D6, $01D4 ; $0B top-middle -> top-bottom
dw $41D7, $81D7 ; $0C top-middle -> middle-bottom
dw $01D6, $41D4 ; $0D top-bottom -> top-middle
dw $01C4, $01C4 ; $0E top-bottom -> top-bottom
dw $C1D4, $81D6 ; $0F top-bottom -> middle-bottom
dw $C1D7, $01D7 ; $10 middle-bottom -> top-middle
dw $81D4, $C1D6 ; $11 middle-bottom -> top-bottom
dw $01C5, $01C6 ; $12 middle-bottom -> middle-bottom
dw $81C6, $01C6 ; $13 triple -> triple

View File

@@ -0,0 +1,309 @@
DoorSlotsSprites:
; center
dw $48A8
; north
dw $2090, $20A8, $20C0
dw $2098, $20B8
; west
dw $3080, $4880, $6080
dw $3880, $5880
; south
dw $7090, $70A8, $70C0
dw $7098, $70B8
; east
dw $30D0, $48D0, $60D0
dw $38D0, $58D0
; stairs
dw $B080, $B098, $B0B0
; drop/warp
dw $B0D0
DoorSlotsBG1:
; center
dw $1135
; north
dw $1092, $1095, $1098
dw $1093, $1097
; west
dw $10D0, $1130, $1190
dw $10F0, $1170
; south
dw $11D2, $11D5, $11D8
dw $11D3, $11D7
; east
dw $10DA, $113A, $119A
dw $10FA, $117A
; stairs
dw $12D0, $12D3, $12D6
; drop/warp
dw $12DA
DoorSlotsBG2:
; center
dw $0000
; north
dw $FEBA, $FEC0, $FEC6
dw $FEBC, $FEC4
; west
dw $FF36, $FFF6, $00B6
dw $FF76, $0076
; south
dw $013A, $0140, $0146
dw $013C, $0144
; east
dw $FF4A, $000A, $00CA
dw $FF8A, $008A
; stairs
dw $0336, $033C, $0342
; drop/warp
dw $034A
DoorSlotSides:
db $02, $0C, $16, $20
DoorSlotOffsets:
db $02, $02, $06, $00
; up, left, down, right
NextCursorSlot:
db $80, $81, $82, $83
; top
db $FF, $C1, $00, $04
db $FF, $04, $00, $05
db $FF, $05, $00, $C3
db $FF, $01, $00, $02
db $FF, $02, $00, $03
; left
db $C0, $FF, $09, $00
db $09, $FF, $0A, $00
db $0A, $FF, $C2, $00
db $06, $FF, $07, $00
db $07, $FF, $08, $00
; bottom
db $00, $E1, $85, $0E
db $00, $0E, $85, $0F
db $00, $0F, $85, $E3
db $00, $0B, $85, $0C
db $00, $0C, $85, $0D
; right
db $E0, $00, $13, $FF
db $13, $00, $14, $FF
db $14, $00, $E2, $FF
db $10, $00, $11, $FF
db $11, $00, $12, $FF
; stairs
db $84, $18, $FF, $16
db $84, $15, $FF, $17
db $84, $16, $FF, $18
; drop/warp
db $84, $17, $FF, $15
NextCursorSpecial:
.center
db $02, $04, $05, $01, $03, $FF
db $07, $09, $0A, $06, $08, $FF
db $0C, $0E, $0F, $0B, $0D, $15, $16, $17, $18, $FF
db $11, $13, $14, $10, $12, $FF
db $0C, $0E, $0F, $0B, $0D, $00, $FF
db $17, $16, $15, $18, $FF
.center_offset
db $00, $06, $0C, $16, $1C, $23
.start_index
db $01, $06, $0B, $10, $15
.start_direction
db $03, $02, $03, $02, $03
.end_index
db $03, $08, $0D, $12, $18
.end_direction
db $01, $00, $01, $00, $01
SingleEdgeCurrentRoomConnectors:
.north
dw $01C0, $0300, $01C0, $0300, $01C0, $0300 ; left -> left
dw $01C1, $41C1, $81D0, $81D1, $01C0, $0300 ; left -> middle
dw $41D1, $41D0, $01C1, $41C1, $81D0, $81D1 ; left -> right
dw $01C0, $0300, $01D0, $01D1, $01C1, $41C1 ; middle -> left
dw $01C1, $41C1, $01C1, $41C1, $01C1, $41C1 ; middle -> middle
dw $0300, $01C0, $41D1, $41D0, $01C1, $41C1 ; middle -> right
dw $01D0, $01D1, $01C1, $41C1, $C1D1, $C1D0 ; right -> left
dw $01C1, $41C1, $C1D1, $C1D0, $0300, $01C0 ; right -> middle
dw $0300, $01C0, $0300, $01C0, $0300, $01C0 ; right -> right
.west
dw $01C4, $01C4, $01C4, $0300, $0300, $0300 ; top -> top
dw $01C5, $81D4, $01C4, $C1C5, $81D5, $0300 ; top -> middle
dw $41D5, $01C5, $81D4, $41D4, $C1C5, $81D5 ; top -> bottom
dw $01C4, $C1D4, $01C5, $0300, $C1D5, $C1C5 ; middle -> top
dw $01C5, $01C5, $01C5, $C1C5, $C1C5, $C1C5 ; middle -> middle
dw $0300, $41D5, $01C5, $01C4, $41D4, $C1C5 ; middle -> bottom
dw $C1D4, $01C5, $01D5, $C1D5, $C1C5, $01D4 ; bottom -> top
dw $01C5, $01D5, $0300, $C1C5, $01D4, $01C4 ; bottom -> middle
dw $0300, $0300, $0300, $01C4, $01C4, $01C4 ; bottom -> bottom
.south
dw $01C0, $0300, $01C0, $0300, $01C0, $0300 ; left -> left
dw $01C0, $0300, $01D0, $01D1, $01C1, $41C1 ; left -> middle
dw $01D0, $01D1, $01C1, $41C1, $C1D1, $C1D0 ; left -> right
dw $01C1, $41C1, $81D0, $81D1, $01C0, $0300 ; middle -> left
dw $01C1, $41C1, $01C1, $41C1, $01C1, $41C1 ; middle -> middle
dw $01C1, $41C1, $C1D1, $C1D0, $0300, $01C0 ; middle -> right
dw $41D1, $41D0, $01C1, $41C1, $81D0, $81D1 ; right -> left
dw $0300, $01C0, $41D1, $41D0, $01C1, $41C1 ; right -> middle
dw $0300, $01C0, $0300, $01C0, $0300, $01C0 ; right -> right
.east
dw $01C4, $01C4, $01C4, $0300, $0300, $0300 ; top -> top
dw $01C4, $C1D4, $01C5, $0300, $C1D5, $81C5 ; top -> middle
dw $C1D4, $01C5, $01D5, $C1D5, $81C5, $01D4 ; top -> bottom
dw $01C5, $81D4, $01C4, $81C5, $81D5, $0300 ; middle -> top
dw $01C5, $01C5, $01C5, $81C5, $81C5, $81C5 ; middle -> middle
dw $01C5, $01D5, $0300, $81C5, $01D4, $01C4 ; middle -> bottom
dw $41D5, $01C5, $81D4, $41D4, $81C5, $81D5 ; bottom -> top
dw $0300, $41D5, $01C5, $01C4, $41D4, $81C5 ; bottom -> middle
dw $0300, $0300, $0300, $01C4, $01C4, $01C4 ; bottom -> bottom
QuadrantMasks:
; north
dw $0008, $000C, $0004
; west
dw $0008, $000A, $0002
; south
dw $0002, $0003, $0001
; east
dw $0004, $0005, $0001
EntranceQuadrantMasks:
dw $0002
dw $0003
dw $0001
DropdownQuadrantMasks:
dw $0008
dw $000C
dw $0004
MultiConnectorMapping:
.two
db $02, $00
.three
db $02, $01, $00
MultiConnectorTiles:
.north
..two
dw $41C7, $81C7, $C1C7, $01C7
..three
dw $41C7, $01C4, $81F7, $C1F7, $01C4, $01C7
.west
..two
dw $81C7, $41C7, $C1C7, $01C7
..three
dw $81C7, $01C0, $41E7, $C1E7, $01C0, $01C7
.south
..two
dw $C1C7, $01C7, $41C7, $81C7
..three
dw $C1C7, $01C4, $01F7, $41F7, $01C4, $81C7
.east
..two
dw $C1C7, $01C7, $81C7, $41C7
..three
dw $C1C7, $01C0, $01E7, $81E7, $01C0, $41C7
.direction_index
db $00, $14, $28, $3C
.start_offset
..two
dw $FF7E, $FFBC, $00BE, $FFC6
..three
dw $FF7C, $FF7C, $00BC, $FF86
.increment
db $02, $40
EdgePositions:
.north
db $01, $00 ; HC Basement
db $02 ; Desert West Wing
db $00, $01, $02 ; Desert Lobby
db $00 ; Desert East Wing
db $01, $02 ; TT
db $00, $01 ; different TT
.west
db $02 ; TT Attic
db $02, $02 ; Desert North Hall
db $00, $02 ; HC Basement
db $00 ; Desert East Wing
db $02, $00 ; TT Triple
db $02 ; TT Big Key Chest
.south
db $01, $00 ; HC Basement
db $02 ; Desert West Wing
db $00, $01, $02 ; Desert Lobby
db $00 ; Desert East Wing
db $01, $02 ; TT
db $00, $01 ; different TT
.east
db $02 ; TT Attic
db $02, $02 ; Desert North Hall
db $02, $00 ; HC Basement
db $00 ; Desert East Wing
db $02, $00 ; TT Triple
db $02 ; TT Big Key Chest
EdgeConnectionIndices:
; North
dw $0182, $0000
dw $0082, $0003
dw $0283, $0006
dw $0084, $0009
dw $0184, $000C
dw $0284, $000F
dw $0085, $0012
dw $01DB, $0015
dw $02DB, $0018
dw $00DC, $001B
dw $01DC, $001E
; South
dw $0772, $0021
dw $0672, $0024
dw $0873, $0027
dw $0674, $002A
dw $0774, $002D
dw $0874, $0030
dw $0675, $0033
dw $07CB, $0036
dw $08CB, $0039
dw $06CC, $003C
dw $07CC, $003F
; West
dw $0565, $0042
dw $0574, $0045
dw $0575, $0048
dw $0582, $004B
dw $0382, $004E
dw $0385, $0051
dw $05CC, $0054
dw $03CC, $0057
dw $05DC, $005A
; East
dw $0B64, $005D
dw $0B73, $0060
dw $0B74, $0063
dw $0981, $0066
dw $0B81, $0069
dw $0984, $006C
dw $0BCB, $006F
dw $09CB, $0072
dw $0BDB, $0075
dw $FFFF
InRoomConnectionIndices:
dw $020B, $0000
dw $081B, $0002
dw $023F, $0004
dw $081F, $0006
dw $007E, $0008
dw $065E, $000A
dw $0296, $000C
dw $083D, $000E
dw $FFFF

View File

@@ -0,0 +1,38 @@
FallTable:
dw $1007, $1017 ; Moldorm Arena
dw $1017, $1027 ; Below Moldorm drop to Big Chest
dw $101E, $103E ; IP first drop
dw $1027, $1031 ; ToH Big Chest drop
dw $1031, $1077 ; Second Floor ToH
dw $1039, $1029 ; Mothula drop
dw $103A, $100A ; Pod front drop
dw $103D, $1096 ; GT Torches drop
dw $104D, $10A6 ; Moldorm 2 drop
dw $1054, $1034 ; Left side Swamp
dw $105E, $107E ; IP drop to tall icy room
dw $107E, $109E ; Freezors drop (to big chest)
dw $208C, $101C ; Ice Armos drop
dw $1097, $10D1 ; Mire Cutscene
dw $109E, $10BE ; IP Big Chest tile (push blocks)
dw $10CE, $10DE ; Kholdstare drop
; db $65, $AC ; TT Attic
; db $77, $A7 ; ToH drop to fairy room (Herapot)
; db $A9, $89 ; EP drop to fairy room
; db $BE, $4F ; IP drop to fairy room
dw $FFFF
WarpTable:
dw $2009, $104B ; PoD Basement (start)
dw $100A, $1009 ; PoD Stalfos Basement
dw $100B, $206A ; PoD Turtle Room to Boss
dw $104B, $2009 ; PoD Basement (mimics)
dw $207B, $209D ; GT post-compass island hardhat
dw $207D, $109B ; GT warp maze
dw $109D, $307B ; GT compass room
dw $109B, $207D ; GT warp maze
dw $10B1, $20B2 ; South of Fishbone warp
dw $10D1, $10B1 ; Mire Big Key Chest warp
; db $89, $A9 ; EP Fairy Room
; db $A7, $17 ; ToH Fairy Room
; db $4F, $BE ; IP Fairy Room
dw $FFFF

View File

@@ -1,261 +1,276 @@
db $0B ; 00 - Fighter Sword and Shield !TIER_UNKNOWN = $01
db $0B ; 01 - Master Sword !TIER_JUNK = $02
db $0B ; 02 - Tempered Sword !TIER_LOW_KEY = $03
db $0B ; 03 - Butter Sword !TIER_HEALTH = $05
db $06 ; 04 - Fighter Shield !TIER_MINOR = $06
db $06 ; 05 - Fire Shield !TIER_MAP = $07
db $06 ; 06 - Mirror Shield !TIER_COMPASS = $08
db $0B ; 07 - Fire Rod !TIER_SM_KEY = $09
db $0B ; 08 - Ice Rod !TIER_BIG_KEY = $0A
db $0B ; 09 - Hammer !TIER_MAJOR = $0B
db $0B ; 0A - Hookshot !TIER_PENDANT = $0C
db $0B ; 0B - Bow !TIER_CRYSTAL = $0D
db $06 ; 0C - Boomerang !TIER_TFP = $0E
db $0B ; 0D - Powder !TIER_TFORCE = $0F
db $02 ; 0E - Bottle Refill (bee)
db $0B ; 0F - Bombos
db $0B ; 10 - Ether
db $0B ; 11 - Quake
db $0B ; 12 - Lamp
db $06 ; 13 - Shovel
db $0B ; 14 - Flute
db $0B ; 15 - Somaria
db $06 ; 16 - Bottle
db $05 ; 17 - Heartpiece
db $06 ; 18 - Byrna
db $0B ; 19 - Cape
db $0B ; 1A - Mirror
db $0B ; 1B - Glove
db $0B ; 1C - Mitts
db $0B ; 1D - Book
db $0B ; 1E - Flippers
db $0B ; 1F - Pearl
db $0D ; 20 - Crystal
db $06 ; 21 - Net
db $06 ; 22 - Blue Mail
db $06 ; 23 - Red Mail
db $03 ; 24 - Small Key
db $07 ; 25 - Compass
db $05 ; 26 - Heart Container from 4/4
db $02 ; 27 - Bomb
db $02 ; 28 - 3 bombs
db $06 ; 29 - Mushroom
db $06 ; 2A - Red boomerang
db $06 ; 2B - Full bottle (red)
db $06 ; 2C - Full bottle (green)
db $06 ; 2D - Full bottle (blue)
db $05 ; 2E - Potion refill (red)
db $05 ; 2F - Potion refill (green)
db $05 ; 30 - Potion refill (blue)
db $02 ; 31 - 10 bombs
db $09 ; 32 - Big key
db $02 ; 33 - Map
db $02 ; 34 - 1 rupee
db $02 ; 35 - 5 rupees
db $02 ; 36 - 20 rupees
db $0A ; 37 - Green pendant
db $0A ; 38 - Blue pendant
db $0A ; 39 - Red pendant
db $0B ; 3A - Tossed bow
db $0B ; 3B - Silvers
db $06 ; 3C - Full bottle (bee)
db $06 ; 3D - Full bottle (fairy)
db $05 ; 3E - Boss heart
db $05 ; 3F - Sanc heart
db $02 ; 40 - 100 rupees
db $02 ; 41 - 50 rupees
db $02 ; 42 - Heart
db $02 ; 43 - Arrow
db $02 ; 44 - 10 arrows
db $02 ; 45 - Small magic
db $02 ; 46 - 300 rupees
db $02 ; 47 - 20 rupees green
db $06 ; 48 - Full bottle (good bee)
db $0B ; 49 - Tossed fighter sword
db $0B ; 4A - Active Flute
db $0B ; 4B - Boots
db $06 ; 4C - Bomb capacity (50) db !TIER_MAJOR ; 00 - Fighter Sword and Shield
db $06 ; 4D - Arrow capacity (70) db !TIER_MAJOR ; 01 - Master Sword
db $06 ; 4E - 1/2 magic db !TIER_MAJOR ; 02 - Tempered Sword
db $06 ; 4F - 1/4 magic db !TIER_MAJOR ; 03 - Butter Sword
db $0B ; 50 - Safe master sword db !TIER_JUNK ; 04 - Fighter Shield
db $06 ; 51 - Bomb capacity (+5) db !TIER_MINOR ; 05 - Fire Shield
db $06 ; 52 - Bomb capacity (+10) db !TIER_MINOR ; 06 - Mirror Shield
db $06 ; 53 - Arrow capacity (+5) db !TIER_MAJOR ; 07 - Fire Rod
db $06 ; 54 - Arrow capacity (+10) db !TIER_MAJOR ; 08 - Ice Rod
db $02 ; 55 - Programmable item 1 db !TIER_MAJOR ; 09 - Hammer
db $02 ; 56 - Programmable item 2 db !TIER_MAJOR ; 0A - Hookshot
db $02 ; 57 - Programmable item 3 db !TIER_MAJOR ; 0B - Bow
db $0B ; 58 - Upgrade-only silver arrows db !TIER_MINOR ; 0C - Boomerang
db $02 ; 59 - Rupoor db !TIER_MINOR ; 0D - Powder
db $02 ; 5A - Nothing db !TIER_JUNK ; 0E - Bottle Refill (bee)
db $02 ; 5B - Red clock db !TIER_MAJOR ; 0F - Bombos
db $02 ; 5C - Blue clock db !TIER_MAJOR ; 10 - Ether
db $02 ; 5D - Green clock db !TIER_MAJOR ; 11 - Quake
db $0B ; 5E - Progressive sword db !TIER_MAJOR ; 12 - Lamp
db $06 ; 5F - Progressive shield db !TIER_MINOR ; 13 - Shovel
db $06 ; 60 - Progressive armor db !TIER_MAJOR ; 14 - Flute
db $0B ; 61 - Progressive glove db !TIER_MAJOR ; 15 - Somaria
db $02 ; 62 - RNG pool item (single) db !TIER_MINOR ; 16 - Bottle
db $02 ; 63 - RNG pool item (multi) db !TIER_HEALTH ; 17 - Heartpiece
db $0B ; 64 - Progressive bow db !TIER_MINOR ; 18 - Byrna
db $0B ; 65 - Progressive bow db !TIER_MINOR ; 19 - Cape
db $02 ; 66 - db !TIER_MAJOR ; 1A - Mirror
db $02 ; 67 - db !TIER_MAJOR ; 1B - Glove
db $02 ; 68 - db !TIER_MAJOR ; 1C - Mitts
db $02 ; 69 - db !TIER_MAJOR ; 1D - Book
db $0F ; 6A - Triforce db !TIER_MAJOR ; 1E - Flippers
db $0E ; 6B - Power star db !TIER_MAJOR ; 1F - Pearl
db $0E ; 6C - Triforce Piece db !TIER_CRYSTAL ; 20 - Crystal
db $02 ; 6D - Server request item db !TIER_MINOR ; 21 - Net
db $02 ; 6E - Server request item (dungeon drop) db !TIER_MINOR ; 22 - Blue Mail
db $02 ; 6F - db !TIER_MINOR ; 23 - Red Mail
db !TIER_LOW_KEY ; 24 - Small Key
db !TIER_COMPASS ; 25 - Compass
db !TIER_HEALTH ; 26 - Heart Container from 4/4
db !TIER_JUNK ; 27 - Bomb
db !TIER_JUNK ; 28 - 3 bombs
db !TIER_MINOR ; 29 - Mushroom
db !TIER_MINOR ; 2A - Red boomerang
db !TIER_MINOR ; 2B - Full bottle (red)
db !TIER_MINOR ; 2C - Full bottle (green)
db !TIER_MINOR ; 2D - Full bottle (blue)
db !TIER_HEALTH ; 2E - Potion refill (red)
db !TIER_HEALTH ; 2F - Potion refill (green)
db !TIER_HEALTH ; 30 - Potion refill (blue)
db !TIER_JUNK ; 31 - 10 bombs
db !TIER_BIG_KEY ; 32 - Big key
db !TIER_MAP ; 33 - Map
db !TIER_JUNK ; 34 - 1 rupee
db !TIER_JUNK ; 35 - 5 rupees
db !TIER_JUNK ; 36 - 20 rupees
db !TIER_PENDANT ; 37 - Green pendant
db !TIER_PENDANT ; 38 - Blue pendant
db !TIER_PENDANT ; 39 - Red pendant
db !TIER_MAJOR ; 3A - Tossed bow
db !TIER_MAJOR ; 3B - Silvers
db !TIER_MINOR ; 3C - Full bottle (bee)
db !TIER_MINOR ; 3D - Full bottle (fairy)
db !TIER_HEALTH ; 3E - Boss heart
db !TIER_HEALTH ; 3F - Sanc heart
db !TIER_JUNK ; 40 - 100 rupees
db !TIER_JUNK ; 41 - 50 rupees
db !TIER_JUNK ; 42 - Heart
db !TIER_JUNK ; 43 - Arrow
db !TIER_JUNK ; 44 - 10 arrows
db !TIER_JUNK ; 45 - Small magic
db !TIER_JUNK ; 46 - 300 rupees
db !TIER_JUNK ; 47 - 20 rupees green
db !TIER_MINOR ; 48 - Full bottle (good bee)
db !TIER_MAJOR ; 49 - Tossed fighter sword
db !TIER_MAJOR ; 4A - Active Flute
db !TIER_MAJOR ; 4B - Boots
db $02 ; 70 - Map of Light World db !TIER_MINOR ; 4C - Bomb capacity (50)
db $02 ; 71 - Map of Dark World db !TIER_MINOR ; 4D - Arrow capacity (70)
db $02 ; 72 - Map of Ganon's Tower db !TIER_MINOR ; 4E - 1/2 magic
db $02 ; 73 - Map of Turtle Rock db !TIER_MINOR ; 4F - 1/4 magic
db $02 ; 74 - Map of Thieves' Town db !TIER_MAJOR ; 50 - Safe master sword
db $02 ; 75 - Map of Tower of Hera db !TIER_MINOR ; 51 - Bomb capacity (+5)
db $02 ; 76 - Map of Ice Palace db !TIER_MINOR ; 52 - Bomb capacity (+10)
db $02 ; 77 - Map of Skull Woods db !TIER_MINOR ; 53 - Arrow capacity (+5)
db $02 ; 78 - Map of Misery Mire db !TIER_MINOR ; 54 - Arrow capacity (+10)
db $02 ; 79 - Map of Dark Palace db !TIER_JUNK ; 55 - Programmable item 1
db $02 ; 7A - Map of Swamp Palace db !TIER_JUNK ; 56 - Programmable item 2
db $02 ; 7B - Map of Agahnim's Tower db !TIER_JUNK ; 57 - Programmable item 3
db $02 ; 7C - Map of Desert Palace db !TIER_MAJOR ; 58 - Upgrade-only silver arrows
db $02 ; 7D - Map of Eastern Palace db !TIER_JUNK ; 59 - Rupoor
db $02 ; 7E - Map of Hyrule Castle db !TIER_JUNK ; 5A - Nothing
db $02 ; 7F - Map of Sewers db !TIER_JUNK ; 5B - Red clock
db !TIER_JUNK ; 5C - Blue clock
db !TIER_JUNK ; 5D - Green clock
db !TIER_MAJOR ; 5E - Progressive sword
db !TIER_MINOR ; 5F - Progressive shield
db !TIER_MINOR ; 60 - Progressive armor
db !TIER_MAJOR ; 61 - Progressive glove
db !TIER_JUNK ; 62 - RNG pool item (single)
db !TIER_JUNK ; 63 - RNG pool item (multi)
db !TIER_MAJOR ; 64 - Progressive bow
db !TIER_MAJOR ; 65 - Progressive bow
db !TIER_JUNK ; 66 -
db !TIER_JUNK ; 67 -
db !TIER_JUNK ; 68 -
db !TIER_JUNK ; 69 -
db !TIER_TFORCE ; 6A - Triforce
db !TIER_TFP ; 6B - Power star
db !TIER_TFP ; 6C - Triforce Piece
db !TIER_JUNK ; 6D - Server request item
db !TIER_JUNK ; 6E - Server request item (dungeon drop)
db !TIER_JUNK ; 6F -
db $07 ; 80 - Compass of Light World db !TIER_MAP ; 70 - Map of Light World
db $07 ; 81 - Compass of Dark World db !TIER_MAP ; 71 - Map of Dark World
db $07 ; 82 - Compass of Ganon's Tower db !TIER_MAP ; 72 - Map of Ganon's Tower
db $07 ; 83 - Compass of Turtle Rock db !TIER_MAP ; 73 - Map of Turtle Rock
db $07 ; 84 - Compass of Thieves' Town db !TIER_MAP ; 74 - Map of Thieves' Town
db $07 ; 85 - Compass of Tower of Hera db !TIER_MAP ; 75 - Map of Tower of Hera
db $07 ; 86 - Compass of Ice Palace db !TIER_MAP ; 76 - Map of Ice Palace
db $07 ; 87 - Compass of Skull Woods db !TIER_MAP ; 77 - Map of Skull Woods
db $07 ; 88 - Compass of Misery Mire db !TIER_MAP ; 78 - Map of Misery Mire
db $07 ; 89 - Compass of Dark Palace db !TIER_MAP ; 79 - Map of Dark Palace
db $07 ; 8A - Compass of Swamp Palace db !TIER_MAP ; 7A - Map of Swamp Palace
db $07 ; 8B - Compass of Agahnim's Tower db !TIER_MAP ; 7B - Map of Agahnim's Tower
db $07 ; 8C - Compass of Desert Palace db !TIER_MAP ; 7C - Map of Desert Palace
db $07 ; 8D - Compass of Eastern Palace db !TIER_MAP ; 7D - Map of Eastern Palace
db $07 ; 8E - Compass of Hyrule Castle db !TIER_MAP ; 7E - Map of Hyrule Castle
db $07 ; 8F - Compass of Sewers db !TIER_MAP ; 7F - Map of Sewers
db $09 ; 90 - Skull key db !TIER_COMPASS ; 80 - Compass of Light World
db $09 ; 91 - Reserved db !TIER_COMPASS ; 81 - Compass of Dark World
db $09 ; 92 - Big key of Ganon's Tower db !TIER_COMPASS ; 82 - Compass of Ganon's Tower
db $09 ; 93 - Big key of Turtle Rock db !TIER_COMPASS ; 83 - Compass of Turtle Rock
db $09 ; 94 - Big key of Thieves' Town db !TIER_COMPASS ; 84 - Compass of Thieves' Town
db $09 ; 95 - Big key of Tower of Hera db !TIER_COMPASS ; 85 - Compass of Tower of Hera
db $09 ; 96 - Big key of Ice Palace db !TIER_COMPASS ; 86 - Compass of Ice Palace
db $09 ; 97 - Big key of Skull Woods db !TIER_COMPASS ; 87 - Compass of Skull Woods
db $09 ; 98 - Big key of Misery Mire db !TIER_COMPASS ; 88 - Compass of Misery Mire
db $09 ; 99 - Big key of Dark Palace db !TIER_COMPASS ; 89 - Compass of Dark Palace
db $09 ; 9A - Big key of Swamp Palace db !TIER_COMPASS ; 8A - Compass of Swamp Palace
db $09 ; 9B - Big key of Agahnim's Tower db !TIER_COMPASS ; 8B - Compass of Agahnim's Tower
db $09 ; 9C - Big key of Desert Palace db !TIER_COMPASS ; 8C - Compass of Desert Palace
db $09 ; 9D - Big key of Eastern Palace db !TIER_COMPASS ; 8D - Compass of Eastern Palace
db $09 ; 9E - Big key of Hyrule Castle db !TIER_COMPASS ; 8E - Compass of Hyrule Castle
db $09 ; 9F - Big key of Sewers db !TIER_COMPASS ; 8F - Compass of Sewers
db $08 ; A0 - Small key of Sewers db !TIER_BIG_KEY ; 90 - Skull key
db $08 ; A1 - Small key of Hyrule Castle db !TIER_BIG_KEY ; 91 - Reserved
db $08 ; A2 - Small key of Eastern Palace db !TIER_BIG_KEY ; 92 - Big key of Ganon's Tower
db $08 ; A3 - Small key of Desert Palace db !TIER_BIG_KEY ; 93 - Big key of Turtle Rock
db $08 ; A4 - Small key of Agahnim's Tower db !TIER_BIG_KEY ; 94 - Big key of Thieves' Town
db $08 ; A5 - Small key of Swamp Palace db !TIER_BIG_KEY ; 95 - Big key of Tower of Hera
db $08 ; A6 - Small key of Dark Palace db !TIER_BIG_KEY ; 96 - Big key of Ice Palace
db $08 ; A7 - Small key of Misery Mire db !TIER_BIG_KEY ; 97 - Big key of Skull Woods
db $08 ; A8 - Small key of Skull Woods db !TIER_BIG_KEY ; 98 - Big key of Misery Mire
db $08 ; A9 - Small key of Ice Palace db !TIER_BIG_KEY ; 99 - Big key of Dark Palace
db $08 ; AA - Small key of Tower of Hera db !TIER_BIG_KEY ; 9A - Big key of Swamp Palace
db $08 ; AB - Small key of Thieves' Town db !TIER_BIG_KEY ; 9B - Big key of Agahnim's Tower
db $08 ; AC - Small key of Turtle Rock db !TIER_BIG_KEY ; 9C - Big key of Desert Palace
db $08 ; AD - Small key of Ganon's Tower db !TIER_BIG_KEY ; 9D - Big key of Eastern Palace
db $02 ; AE - Reserved db !TIER_BIG_KEY ; 9E - Big key of Hyrule Castle
db $03 ; AF - Generic small key db !TIER_BIG_KEY ; 9F - Big key of Sewers
db $0D ; B0 - Crystal 6
db $0D ; B1 - Crystal 1 db !TIER_SM_KEY ; A0 - Small key of Sewers
db $0D ; B2 - Crystal 5 db !TIER_SM_KEY ; A1 - Small key of Hyrule Castle
db $0D ; B3 - Crystal 7 db !TIER_SM_KEY ; A2 - Small key of Eastern Palace
db $0D ; B4 - Crystal 2 db !TIER_SM_KEY ; A3 - Small key of Desert Palace
db $0D ; B5 - Crystal 4 db !TIER_SM_KEY ; A4 - Small key of Agahnim's Tower
db $0D ; B6 - Crystal 3 db !TIER_SM_KEY ; A5 - Small key of Swamp Palace
db $02 ; B7 - Reserved db !TIER_SM_KEY ; A6 - Small key of Dark Palace
db $02 ; B8 - db !TIER_SM_KEY ; A7 - Small key of Misery Mire
db $02 ; B9 - db !TIER_SM_KEY ; A8 - Small key of Skull Woods
db $02 ; BA - db !TIER_SM_KEY ; A9 - Small key of Ice Palace
db $02 ; BB - db !TIER_SM_KEY ; AA - Small key of Tower of Hera
db $02 ; BC - db !TIER_SM_KEY ; AB - Small key of Thieves' Town
db $02 ; BD - db !TIER_SM_KEY ; AC - Small key of Turtle Rock
db $02 ; BE - db !TIER_SM_KEY ; AD - Small key of Ganon's Tower
db $02 ; BF - db !TIER_JUNK ; AE - Reserved
db $02 ; C0 - db !TIER_LOW_KEY ; AF - Generic small key
db $02 ; C1 - db !TIER_CRYSTAL ; B0 - Crystal 6
db $02 ; C2 - db !TIER_CRYSTAL ; B1 - Crystal 1
db $02 ; C3 - db !TIER_CRYSTAL ; B2 - Crystal 5
db $02 ; C4 - db !TIER_CRYSTAL ; B3 - Crystal 7
db $02 ; C5 - db !TIER_CRYSTAL ; B4 - Crystal 2
db $02 ; C6 - db !TIER_CRYSTAL ; B5 - Crystal 4
db $02 ; C7 - db !TIER_CRYSTAL ; B6 - Crystal 3
db $02 ; C8 - db !TIER_JUNK ; B7 - Reserved
db $02 ; C9 - db !TIER_JUNK ; B8 -
db $02 ; CA - db !TIER_JUNK ; B9 -
db $02 ; CB - db !TIER_JUNK ; BA -
db $02 ; CC - db !TIER_JUNK ; BB -
db $02 ; CD - db !TIER_JUNK ; BC -
db $02 ; CE - db !TIER_JUNK ; BD -
db $02 ; CF - db !TIER_JUNK ; BE -
db $02 ; D0 - Bee trap db !TIER_JUNK ; BF -
db $02 ; D1 - Apples db !TIER_JUNK ; C0 -
db $02 ; D2 - Fairy db !TIER_JUNK ; C1 -
db $02 ; D3 - Chicken db !TIER_JUNK ; C2 -
db $02 ; D4 - Big Magic db !TIER_JUNK ; C3 -
db $02 ; D5 - 5 Arrows db !TIER_JUNK ; C4 -
db $02 ; D6 - Good Bee db !TIER_JUNK ; C5 -
db $02 ; D7 - db !TIER_JUNK ; C6 -
db $02 ; D8 - db !TIER_JUNK ; C7 -
db $02 ; D9 - db !TIER_JUNK ; C8 -
db $02 ; DA - db !TIER_JUNK ; C9 -
db $02 ; DB - db !TIER_JUNK ; CA -
db $02 ; DC - db !TIER_JUNK ; CB -
db $02 ; DD - db !TIER_JUNK ; CC -
db $02 ; DE - db !TIER_JUNK ; CD -
db $02 ; DF - db !TIER_JUNK ; CE -
db $02 ; E0 - db !TIER_JUNK ; CF -
db $02 ; E1 - db !TIER_JUNK ; D0 - Bee trap
db $02 ; E2 - db !TIER_JUNK ; D1 - Apples
db $02 ; E3 - db !TIER_JUNK ; D2 - Fairy
db $02 ; E4 - db !TIER_JUNK ; D3 - Chicken
db $02 ; E5 - db !TIER_JUNK ; D4 - Big Magic
db $02 ; E6 - db !TIER_JUNK ; D5 - 5 Arrows
db $02 ; E7 - db !TIER_JUNK ; D6 - Good Bee
db $02 ; E8 - db !TIER_JUNK ; D7 -
db $02 ; E9 - db !TIER_JUNK ; D8 -
db $02 ; EA - db !TIER_JUNK ; D9 -
db $02 ; EB - db !TIER_JUNK ; DA -
db $02 ; EC - db !TIER_JUNK ; DB -
db $02 ; ED - db !TIER_JUNK ; DC -
db $02 ; EE - db !TIER_JUNK ; DD -
db $02 ; EF - db !TIER_JUNK ; DE -
db $02 ; F0 - db !TIER_JUNK ; DF -
db $02 ; F1 - db !TIER_JUNK ; E0 -
db $02 ; F2 - db !TIER_JUNK ; E1 -
db $02 ; F3 - db !TIER_JUNK ; E2 -
db $02 ; F4 - db !TIER_JUNK ; E3 -
db $02 ; F5 - db !TIER_JUNK ; E4 -
db $02 ; F6 - db !TIER_JUNK ; E5 -
db $02 ; F7 - db !TIER_JUNK ; E6 -
db $02 ; F8 - db !TIER_JUNK ; E7 -
db $02 ; F9 - db !TIER_JUNK ; E8 -
db $02 ; FA - db !TIER_JUNK ; E9 -
db $02 ; FB - db !TIER_JUNK ; EA -
db $02 ; FC - db !TIER_JUNK ; EB -
db $02 ; FD - db !TIER_JUNK ; EC -
db $02 ; FE - Server request (async) db !TIER_JUNK ; ED -
db $02 ; FF - db !TIER_JUNK ; EE -
db !TIER_JUNK ; EF -
db !TIER_JUNK ; F0 -
db !TIER_JUNK ; F1 -
db !TIER_JUNK ; F2 -
db !TIER_JUNK ; F3 -
db !TIER_JUNK ; F4 -
db !TIER_JUNK ; F5 -
db !TIER_JUNK ; F6 -
db !TIER_JUNK ; F7 -
db !TIER_JUNK ; F8 -
db !TIER_JUNK ; F9 -
db !TIER_JUNK ; FA -
db !TIER_JUNK ; FB -
db !TIER_JUNK ; FC -
db !TIER_JUNK ; FD -
db !TIER_JUNK ; FE - Server request (async)
db !TIER_JUNK ; FF -

View File

@@ -0,0 +1,87 @@
SpiralPropsIndex:
db $00, $04, $07, $00, $01, $00, $00, $0D, $00, $10, $04, $00, $15, $00, $0A, $00
db $00, $07, $00, $00, $00, $01, $07, $1C, $00, $00, $21, $00, $26, $07, $0A, $00
db $00, $00, $00, $00, $00, $00, $29, $30, $01, $00, $00, $00, $00, $00, $00, $00
db $00, $35, $00, $00, $3A, $00, $00, $00, $01, $00, $04, $00, $00, $00, $00, $3D
db $40, $07, $07, $00, $00, $01, $00, $00, $00, $00, $43, $00, $07, $07, $07, $00
db $00, $00, $00, $01, $48, $00, $00, $00, $00, $00, $00, $00, $07, $07, $00, $4B
db $00, $00, $00, $01, $50, $00, $07, $00, $00, $00, $53, $01, $01, $00, $58, $00
; 0 1 2 3 4 5 6 7 8 9 a b c d e f
db $5B, $01, $04, $00, $00, $00, $60, $67, $00, $00, $00, $00, $00, $00, $00, $6E
db $01, $00, $00, $00, $00, $00, $00, $71, $00, $00, $00, $00, $76, $00, $04, $00
db $00, $07, $00, $04, $00, $00, $00, $01, $7D, $0A, $00, $00, $00, $00, $04, $00
db $01, $00, $04, $00, $00, $01, $07, $00, $00, $00, $00, $0A, $00, $00, $07, $00
db $80, $00, $00, $00, $00, $01, $01, $00, $00, $00, $00, $00, $01, $00, $07, $00
db $85, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $8A, $92, $8F, $00, $00, $00, $00, $00, $00, $00, $0A, $00, $00, $00, $00, $00
db $04
SpiralProps:
db $00 ;null row
db $01, $00, $00 ; ($01) Single Top-Left Staircase
db $01, $00, $01 ; ($04) Single Top-Middle Staircase
db $01, $00, $02 ; ($07) Single Top-Right Staircase
db $01, $00, $05 ; ($0A) Single Staircase at Top of Bottom Left Quadrant
db $01, $00, $04 ; ($0D) Moldorm
db $02, $01, $00, $00, $02 ; ($10) Pod Basement
db $03, $01, $0A, $02, $01, $00, $0B ; ($15) GT Entrance
db $02, $00, $03, $01, $04 ; ($1C) Hera Below Moldorm
db $02, $00, $01, $01, $0B ; ($21) PoD Bridge
db $01, $00, $08 ; ($26) GT Ice Armos
db $03, $00, $01, $01, $0B, $02, $09 ; ($29) Swamp Statue
db $02, $01, $03, $00, $04 ; ($30) Hera Big Chest
db $02, $00, $04, $02, $09 ; ($35) Hera Startiles (middle value unused)
db $01, $00, $08 ; ($3A) West Swamp
db $01, $00, $05 ; ($3D) Ice Hamlift
db $01, $00, $07 ; ($40) Aga Guards
db $02, $01, $00, $00, $02 ; ($43) Pod Entrance
db $01, $00, $08 ; ($48) Swamp Attic
db $02, $03, $0C, $04, $06 ; ($4B) Ice U (1st three values unused)
db $01, $00, $05 ; ($50) TT Attic Left
db $02, $00, $01, $01, $0B ; ($53) Pod Rupees
db $01, $00, $04 ; ($58) Ice Gators
db $02, $01, $0A, $02, $01 ; ($5B) HC Tiny (first value placeholder)
db $03, $00, $01, $01, $0B, $02, $09 ; ($60) Swamp Sunken
db $03, $01, $00, $03, $08, $02, $09 ; ($67) Hera Entrance (first value unused)
db $01, $00, $08 ; ($6E) Ice Hookshot
db $02, $01, $00, $03, $08 ; ($71) Hera Basement (first and third values unused)
db $03, $01, $00, $00, $02, $03, $08 ; ($76) GT Circle (third value unused)
db $01, $00, $07 ; ($7D) Mire Entrance
db $02, $00, $02, $02, $09 ; ($80) Tower Usains (2nd value unused)
db $02, $00, $02, $02, $09 ; ($85) Tower Dark2 (2nd value unused)
db $02, $00, $02, $02, $09 ; ($8A) Tower Dark1 (2nd value unused)
db $01, $00, $09 ; ($8F) Mire2
db $01, $00, $0A ; ($92) Mire south of Torch Room
SpiralLabelOffsets:
db 1, -9
db 5, -9
db 9, -9
db -6, -1
db 15, -1
db 1, -1
db 5, -1
db 9, -1
db -6, 7
db 15, 7
db -3, -9
db 13, -9
db -3, -1
db 13, -1
SpiralLabelQuadrantMasks:
dw $0008
dw $000C
dw $0004
dw $0008
dw $0004
dw $0002
dw $0003
dw $0001
dw $0002
dw $0001
dw $0008
dw $0004
dw $0002
dw $0001

View File

@@ -0,0 +1,571 @@
IncomingDoorMap:
; north
db $06, $07, $08
; west
db $09, $0A, $0B
; south
db $00, $01, $02
; east
db $03, $04, $05
macro d(label)
dw <label>-SplitRooms
endmacro
macro sq(byte)
db <byte>
endmacro
SplitRooms:
; 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.09) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.14) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.1a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.2a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.35) : %d(.36) : %d(.37)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.57)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.6a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.75) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.7b) : %d(.7c) : %d(.7d) : %d(.no) : %d(.no)
; 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F
%d(.no) : %d(.no) : %d(.82) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.87)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.8c) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.9d) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.a2) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.a9) : %d(.aa) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.b2) : %d(.no) : %d(.no) : %d(.no) : %d(.b6) : %d(.no)
%d(.no) : %d(.b9) : %d(.no) : %d(.no) : %d(.bc) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.c7)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.d1) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.d6) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.db) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no)
.no
db $00
.no_items
db $FF
.09
db $01
%sq($04)
%d(..areas) : %d(.no_items) : %d(..stairs)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $80
db $FF
..stairs
db $01
db $FF
..enemies
db $02
db $FF
.14
db $02
%sq($00)
%d(..areas3) : %d(..doors3) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
%sq($00)
%d(..areas2) : %d(..doors2) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas3
db $03, $C0, $FF, $00, $50
db $03, $00, $28, $30, $50
db $03, $30, $50, $D0, $FF
db $FF
..doors3
db $03, $06, $09
db $FF
..areas2
db $03, $B0, $D0, $D0, $FF
db $03, $30, $50, $00, $28
db $FF
..doors2
db $00, $08
db $FF
.1a ; PoD Big Chest (2) // Falling bridge and such (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $03, $00, $2C, $70, $98
db $FF
..doors
db $04
db $FF
..chests
db $00
db $FF
.2a ; PoD Arena Right-Side Chest (2) // Arena (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $03, $D8, $FF, $A8, $C8
db $FF
..doors
db $0B
db $FF
..chests
db $00
db $FF
.35 ; Swamp BK Chest (2) // Swamp second trench (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(.no_items)
..areas
db $03, $00, $70, $00, $80
db $FF
..doors
db $03
db $FF
..chests
db $00
db $FF
..pots
db $01, $02, $03, $04, $05
db $FF
.36 ; Swamp Big Lobby (1) // Tiny Top-Right Blocked Corner (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $D4, $FF, $00, $48
db $FF
..doors
db $09
db $FF
..pots
db $00, $01
db $FF
.37 ; Swamp Second Chest (2) // Swamp first trench (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $90, $FF, $00, $80
db $FF
..doors
db $09
db $FF
..chests
db $00
db $FF
..enemies
db $02, $03
db $FF
.57 ; SW pot cage (2) // middle section (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $80, $FF
db $FF
..doors
db $08, $0B
db $FF
..chests
db $01
db $FF
..pots
db $02, $03, $04, $05
db $FF
..enemies
db $08, $09, $0A, $0B
db $FF
.6a ; pre-helmasaur-king (2) // PoD rupee basement (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $B4, $C4, $00, $B4
db $03, $A8, $D0, $B0, $D0
db $FF
..doors
db $02
db $FF
..enemies
db $00, $01, $04, $05
db $FF
.74 ; desert north -- trapped area (2) // everything else (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $4C, $C4, $CC, $FF
db $FF
..doors
db $07
db $FF
..enemies
db $06, $07
db $FF
.75 ; desert cannonball (2) // desert northeast + trap room (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..chests
db $00
db $FF
..enemies
db $06, $07
db $FF
.7b ; GT post-compass (3) // island hardhat (2) // DMs room (1)
db $02
%sq($00)
%d(..areas3) : %d(..doors3) : %d(.no_items)
%d(.no_items) : %d(..pots3) : %d(..enemies3)
%sq($00)
%d(..areas2) : %d(..doors2) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies2)
..areas3
db $03, $00, $FF, $00, $80
db $FF
..doors3
db $09
db $FF
..pots3
db $00, $01, $02, $03, $04
db $FF
..enemies3
db $00, $01
db $FF
..areas2
db $03, $80, $FF, $80, $FF
db $FF
..doors2
db $0B
db $FF
..enemies2
db $06, $07
db $FF
.7c ; GT falling bridge // rando room
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $80, $00, $FF
db $FF
..doors
db $03, $05
db $FF
..pots
db $00, $01, $02, $03
db $FF
..enemies
db $01, $02, $03, $04
db $FF
.7d ; GT warp maze (section next to rando room)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $FF, $00, $80
db $03, $00, $80, $80, $FF
db $03, $CA, $DA, $9A, $A6
db $FF
..doors
db $05
db $FF
..chests
db $00
db $FF
..pots
db $00, $01, $02, $03
db $FF
..enemies
db $00, $01, $02, $03, $09
db $FF
.82 ; HC Basement (1) + catwalk (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $03, $00, $20, $00, $50
db $FF
..doors
db $00, $03
db $FF
.87 ; Hera basement: cage (0) // torches (1)
db $01
%sq($08)
%d(..areas) : %d(.no_items) : %d(..stairs)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $FF, $00, $80
db $03, $80, $FF, $80, $FF
db $FF
..stairs
db $00
db $FF
..chests
db $00
db $FF
..pots
db $00, $01, $02, $03, $04, $05, $06, $07
db $FF
..enemies
db $00, $01, $02, $05, $06, $09, $0C
db $FF
.8c
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $80, $FF
db $FF
..doors
db $08
db $FF
..chests
db $03
db $FF
..pots
db $02, $03, $04, $05, $06
db $FF
..enemies
db $06, $07, $09
db $FF
.9d
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $FF, $80, $FF
db $FF
..doors
db $05
db $FF
..enemies
db $06, $07, $08
db $FF
.a2 ; Mire abyss -- EW bridge (2), stairs to basement + hookable chest (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $01, $00, $FF, $70, $84
db $FF
..doors
db $04, $0A
db $FF
.a9
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $00, $40, $70, $FF
db $03, $00, $FF, $A0, $FF
db $03, $C0, $FF, $70, $FF
db $FF
..doors
db $04, $07, $0A
db $FF
..pots
db $04, $05, $06, $07
db $FF
.aa
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $02, $00, $80, $00, $FF
db $01, $34, $D4, $B8, $FF
db $FF
..doors
db $03, $06
db $FF
.b2
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $02, $00, $FF, $00, $80
db $03, $60, $A0, $00, $40
db $FF
..doors
db $01, $09
db $FF
..pots
db $00, $01, $02, $03, $04, $05, $06
db $FF
..enemies
db $00, $01, $02, $03, $04
db $FF
.b6
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..pots
db $00
db $FF
..enemies
db $04
db $FF
.b9
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $01, $00, $20, $28, $60
db $01, $E0, $FF, $28, $60
db $01, $00, $FF, $58, $60
db $FF
..doors
db $03, $09
db $FF
.bc
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $2C, $4C, $CA, $FF
db $FF
..doors
db $06
db $FF
..pots
db $0C, $0D
db $FF
.c7 ; TR Torch Maze (1) // Tiny Bottom-Left Blocked Corner (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $00, $1C, $A8, $FF
db $FF
..doors
db $05
db $FF
..pots
db $02, $03
db $FF
.d1
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $A8
db $FF
..doors
db $02
db $FF
..pots
db $02, $03, $04, $05
db $FF
..enemies
db $00, $01, $07
db $FF
.d6
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $80, $00, $FF
db $FF
..doors
db $00
db $FF
..chests
db $00
db $FF
..enemies
db $00, $01, $02
db $FF
.db
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $02, $B0, $FF, $90, $C0
db $FF
..doors
db $0B
db $FF
..chests
db $01
db $FF

View File

@@ -21,7 +21,7 @@ dw $FFFF, $83B7, $FFFF, $03B7 ; 13
dw $012E, $012F, $013E, $013F ; 14 dw $012E, $012F, $013E, $013F ; 14
dw $C374, $8340, $4341, $0340 ; 15 dw $C374, $8340, $4341, $0340 ; 15
dw $0108, $0109, $436B, $036B ; 16 dw $0108, $0109, $436B, $036B ; 16
dw $C114, $0104, $4114, $0114 ; 17 dw $4104, $0104, $4114, $0114 ; 17
dw $C3B5, $FFFF, $43B4, $FFFF ; 18 - useless fairy drop dw $C3B5, $FFFF, $43B4, $FFFF ; 18 - useless fairy drop
dw $FFFF, $8369, $FFFF, $035A ; 19 dw $FFFF, $8369, $FFFF, $035A ; 19
dw $03E7, $03E8, $03F7, $0361 ; 1A dw $03E7, $03E8, $03F7, $0361 ; 1A
@@ -37,7 +37,7 @@ dw $FFFF, $FFFF, $FFFF, $039B ; 23
dw $4365, $0365, $0132, $0133 ; 24 dw $4365, $0365, $0132, $0133 ; 24
dw $FFFF, $FFFF, $FFFF, $FFFF ; 25 - unused dw $FFFF, $FFFF, $FFFF, $FFFF ; 25 - unused
dw $039B, $03E4, $4363, $0382 ; 26 dw $039B, $03E4, $4363, $0382 ; 26
dw $C114, $0104, $4114, $0114 ; 27 dw $4104, $0104, $4114, $0114 ; 27
dw $C3A5, $FFFF, $4358, $0348 ; 28 dw $C3A5, $FFFF, $4358, $0348 ; 28
dw $FFFF, $FFFF, $FFFF, $0396 ; 29 - Mothula dw $FFFF, $FFFF, $FFFF, $0396 ; 29 - Mothula
dw $C350, $8352, $4350, $03F8 ; 2A dw $C350, $8352, $4350, $03F8 ; 2A
@@ -98,8 +98,8 @@ dw $FFFF, $8379, $FFFF, $036A ; 60
dw $C387, $8385, $4356, $0356 ; 61 dw $C387, $8385, $4356, $0356 ; 61
dw $C346, $8354, $4352, $0340 ; 62 dw $C346, $8354, $4352, $0340 ; 62
dw $039A, $FFFF, $0361, $FFFF ; 63 dw $039A, $FFFF, $0361, $FFFF ; 63
dw $FFFF, $FFFF, $8399, $C3B1 ; 64 dw $FFFF, $FFFF, $8399, $0367 ; 64
dw $FFFF, $FFFF, $83B1, $0381 ; 65 dw $FFFF, $FFFF, $0367, $0381 ; 65
dw $038F, $039A, $0362, $83B2 ; 66 dw $038F, $039A, $0362, $83B2 ; 66
dw $83B4, $83B5, $03B7, $039F ; 67 dw $83B4, $83B5, $03B7, $039F ; 67
dw $C340, $8350, $4341, $0340 ; 68 dw $C340, $8350, $4341, $0340 ; 68
@@ -162,7 +162,7 @@ dw $839B, $C39C, $FFFF, $FFFF ; A0
dw $C3B0, $835D, $FFFF, $036A ; A1 dw $C3B0, $835D, $FFFF, $036A ; A1
dw $03EE, $03EF, $03FE, $03FF ; A2 dw $03EE, $03EF, $03FE, $03FF ; A2
dw $C35A, $FFFF, $436A, $FFFF ; A3 dw $C35A, $FFFF, $436A, $FFFF ; A3
dw $FFFF, $FFFF, $438E, $FFFF ; A4 dw $FFFF, $FFFF, $438F, $FFFF ; A4
dw $039A, $0361, $C3B2, $83B2 ; A5 dw $039A, $0361, $C3B2, $83B2 ; A5
dw $C340, $8370, $4340, $0340 ; A6 dw $C340, $8370, $4340, $0340 ; A6
dw $C396, $FFFF, $FFFF, $FFFF ; A7 - ToH fairy basement room dw $C396, $FFFF, $FFFF, $FFFF ; A7 - ToH fairy basement room

View File

@@ -29,6 +29,12 @@ DrawLoot:
LDA.b $07 LDA.b $07
STA.w $021B STA.w $021B
LDA.l DRMode
BEQ +
LDA.l DungeonMapMode
BNE +
BRA .skip
+
REP #$30 REP #$30
PHX : PHY PHX : PHY
@@ -60,6 +66,7 @@ DrawLoot:
STA.b NMISTRIPES STA.b NMISTRIPES
PLY : PLX PLY : PLX
.skip
LDA.b #$00 LDA.b #$00
RTL RTL

View File

@@ -14,7 +14,13 @@ FinishRoom:
TAX TAX
JML $8AE7F6 JML $8AE7F6
NormalDrawDungeonMapRoom:
JSL DrawDungeonMapRoom
JMP FinishRoom
; $CA has room_id ; $CA has room_id
; $0E has quadrant flags
; X has address to draw at
DrawDungeonMapRoom: DrawDungeonMapRoom:
REP #$20 REP #$20
PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank
@@ -136,7 +142,7 @@ DrawDungeonMapRoom:
.done .done
PLA : STA.b $0A PLA : STA.b $0A
PLB PLB
JMP FinishRoom RTL
DrawEntrances: DrawEntrances:
REP #$30 REP #$30

View File

@@ -1,4 +1,65 @@
CheckSwitchMap: CheckSwitchMap:
LDA.l DRMode
BEQ .not_fancy_door_map
LDA.l DungeonMapMode
BNE .not_fancy_door_map
; fancy door map
SEP #$20
LDA.b $F6
BIT.b #$30
BNE .change_dungeon
BIT.b #$80
BNE .select_new_room
LDA.b $F4
BIT.b #$80
BNE .select_new_room
BIT.b #$20
BNE .next_entrance
BIT.b #$40
BNE .current_room
AND.b #$0F
BEQ .doors_done
BIT.b #$08 : BEQ + : LDA.b #$00 : BRA .doors_move_cursor : +
BIT.b #$04 : BEQ + : LDA.b #$02 : BRA .doors_move_cursor : +
BIT.b #$02 : BEQ + : LDA.b #$01 : BRA .doors_move_cursor : +
LDA.b #$03
.doors_move_cursor
STA.b $00
JSL MoveDoorsMapCursor
BRA .doors_done
.select_new_room
JSL DoorsMapSelectCursor
BRA .doors_done
.next_entrance
JSL DoorsMapNextEntrance
BRA .doors_done
.change_dungeon
JSL DoorsMapChangeDungeon
BRA .doors_done
.current_room
LDA.l CachedDungeonID
CMP.w DungeonID
BNE .doors_done
JSL DoorsMapCurrentRoom
BRA .doors_done
.doors_done
REP #$20
LDA.w #$0002 ; ignore input! nothing to see here!
RTL
.not_fancy_door_map
SEP #$20 SEP #$20
LDA.b $F6 LDA.b $F6
AND.b #$30 AND.b #$30
@@ -6,7 +67,7 @@ CheckSwitchMap:
; what we wrote over ; what we wrote over
REP #$20 REP #$20
LDA.w $8AF5E9, X LDA.w DungeonMapFloorCountData, X
AND.w #$000F AND.w #$000F
CLC : ADC.b $00 CLC : ADC.b $00
RTL RTL
@@ -99,7 +160,12 @@ SkipMapSprites:
LDA.l DRMode LDA.l DRMode
BEQ + BEQ +
JML $8AEAEE LDA.l DungeonMapMode
BEQ .no_vanilla_draw
JML $8AEADE
.no_vanilla_draw
JSL DrawDoorsMapSprites
JML $8AEAFC
+ +
LDA.l CachedDungeonID LDA.l CachedDungeonID
@@ -161,6 +227,7 @@ DrawDungeonLabel:
LDY.b #$20 LDY.b #$20
+ +
; Dungeon Label
REP #$20 REP #$20
LDA.w #$E660 LDA.w #$E660
STA.w GFXStripes+$02, Y STA.w GFXStripes+$02, Y
@@ -171,9 +238,110 @@ DrawDungeonLabel:
STA.w GFXStripes+$06, Y STA.w GFXStripes+$06, Y
LDA.l DungeonLabels+2, X LDA.l DungeonLabels+2, X
STA.w GFXStripes+$08, Y STA.w GFXStripes+$08, Y
TYA
CLC : ADC.w #$0008
TAY
; L/R switch indicators
LDA.w #$E310
STA.w GFXStripes+$02, Y
LDA.w #$E910
STA.w GFXStripes+$0A, Y
LDA.w #$E318
STA.w GFXStripes+$12, Y
LDA.w #$E918
STA.w GFXStripes+$1A, Y
LDA.w #$0300
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$0C, Y
STA.w GFXStripes+$14, Y
STA.w GFXStripes+$1C, Y
LDA.w #$49AF
STA.w GFXStripes+$06, Y
STA.w GFXStripes+$16, Y
LDA.w #$099E
STA.w GFXStripes+$08, Y
STA.w GFXStripes+$18, Y
LDA.w #$099F
STA.w GFXStripes+$0E, Y
STA.w GFXStripes+$1E, Y
LDA.w #$09AF
STA.w GFXStripes+$10, Y
STA.w GFXStripes+$20, Y
TYA
CLC : ADC.w #$0020
TAY
LDA.l DRMode
BEQ .not_doors
LDA.l DungeonMapMode
BEQ .doors
.not_doors
JMP .skip_doors
.doors
; Select for Next Entrance indicator
LDA.w #$E311
STA.w GFXStripes+$02, Y
LDA.w #$E319
STA.w GFXStripes+$16, Y
LDA.w #$0F00
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$18, Y
LDA.w #$09B8
LDX.b #$07
-
STA.w GFXStripes+$06, Y
STA.w GFXStripes+$1A, Y
INC A
INY : INY
DEX
BPL -
TYA
CLC : ADC.w #$0018
TAY
LDA.l CachedDungeonID
AND.w #$00FF
CMP.w DungeonID
BNE .skip_doors
; Y for Current Location indicator
LDA.w #$A411
STA.w GFXStripes+$02, Y
LDA.w #$A419
STA.w GFXStripes+$12, Y
LDA.w #$0B00
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$14, Y
LDA.w #$09A9
LDX.b #$05
-
STA.w GFXStripes+$06, Y
STA.w GFXStripes+$16, Y
INC A
INY : INY
DEX
BPL -
TYA
CLC : ADC.w #$0014
TAY
.skip_doors
SEP #$20 SEP #$20
LDA.b #$FF LDA.b #$FF
STA.w GFXStripes+$0A, Y STA.w GFXStripes+$02, Y
LDA.b #$01 LDA.b #$01
STA.b NMISTRIPES STA.b NMISTRIPES

View File

@@ -5,7 +5,7 @@ db $08
; use AA1 = $1C for map stuff ; use AA1 = $1C for map stuff
org $80E193 org $80E193
skip 4 skip 4
db $61, $62, $62, $D6 db $61, $62, $63, $D6
org $8AE11D org $8AE11D
LDA.b #$1C LDA.b #$1C
@@ -13,10 +13,6 @@ LDA.b #$1C
org $8AE12B org $8AE12B
LDA.b #$20 LDA.b #$20
; change dungeon map subsheet gfx in TR
; org $80DDC9
; db $57
; dungeon map sheets ; dungeon map sheets
org $80DD97 org $80DD97
db $61, $56, $57, $62 db $61, $56, $57, $62
@@ -75,7 +71,7 @@ org $8AEE2B
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $8AE64D org $8AE64D
PLX PLX
JML DrawDungeonMapRoom JML NormalDrawDungeonMapRoom
org $8AE606 org $8AE606
PLX PLX
@@ -221,3 +217,53 @@ org $8AE8F9
org $8AEBC6 org $8AEBC6
JSL GetLocationMarkerLeft JSL GetLocationMarkerLeft
NOP NOP
;================================================================================
; Draw Wacky Door Rando Layouts
;--------------------------------------------------------------------------------
org $8AE3D7
LDA.l DungeonMapMode
BNE .normal
LDA.l DRMode
BEQ .normal
JSL DrawWackyDoorRandoStuff
JMP.w $8AE422
NOP
.normal
warnpc $8AE3EB
org $8AE439
dw $0F19, $4F19, $8F19, $CF19
org $8AE449
dw $0F1A, $8F1A
org $8AE451
dw $0F1B, $4F1B
org $8AE473
NOP #2
org $8AE4A4
NOP #2
org $8AE4DC
NOP #2
org $8AE4F9
dw $0F1E, $0F1F, $0F20, $0F21
dw $0F22, $0F23, $0F24, $0F25
org $8AE539
LDA.w #$0F1C
org $8AE573
LDA.w #$0F1D
org $8AE555
NOP #2
org $8AE576
NOP #2

View File

@@ -27,9 +27,14 @@ endmacro
pullpc pullpc
incsrc mappable_doors.asm incsrc mappable_doors.asm
incsrc current_room_map.asm
incsrc draw_rooms.asm incsrc draw_rooms.asm
incsrc map_bg3.asm incsrc map_bg3.asm
incsrc dungeon_switch.asm incsrc dungeon_switch.asm
incsrc draw_loot.asm incsrc draw_loot.asm
incsrc check_loot.asm incsrc check_loot.asm
incsrc blink_loot.asm incsrc blink_loot.asm
incsrc data/doors_display.asm
incsrc data/spiral_stairs.asm
incsrc data/fall_warps.asm
incsrc data/split_room.asm

View File

@@ -12,23 +12,34 @@ LoadStripes:
.dungeon_map .dungeon_map
LDA.l DungeonMapMode LDA.l DungeonMapMode
BNE .doors BNE .4x3
LDA.l DRMode
BNE .6x6
.not_doors .5x5
LDA.b #BG3DungeonMapStripes>>0 LDA.b #BG3DungeonMap5x5Stripes>>0
STA.b $00 STA.b $00
LDA.b #BG3DungeonMapStripes>>8 LDA.b #BG3DungeonMap5x5Stripes>>8
STA.b $01 STA.b $01
LDA.b #BG3DungeonMapStripes>>16 LDA.b #BG3DungeonMap5x5Stripes>>16
STA.b $02 STA.b $02
RTL RTL
.doors .4x3
LDA.b #BG3DungeonMapDoorStripes>>0 LDA.b #BG3DungeonMap4x3Stripes>>0
STA.b $00 STA.b $00
LDA.b #BG3DungeonMapDoorStripes>>8 LDA.b #BG3DungeonMap4x3Stripes>>8
STA.b $01 STA.b $01
LDA.b #BG3DungeonMapDoorStripes>>16 LDA.b #BG3DungeonMap4x3Stripes>>16
STA.b $02
RTL
.6x6
LDA.b #BG3DungeonMap6x6Stripes>>0
STA.b $00
LDA.b #BG3DungeonMap6x6Stripes>>8
STA.b $01
LDA.b #BG3DungeonMap6x6Stripes>>16
STA.b $02 STA.b $02
RTL RTL
@@ -71,7 +82,7 @@ macro VanillaCommonMapStripes()
endmacro endmacro
BG3DungeonMapStripes: BG3DungeonMap5x5Stripes:
%VanillaCommonMapStripes() %VanillaCommonMapStripes()
; left edge of map border, from vanilla ; left edge of map border, from vanilla
dw $4E60, $0100, $2100 dw $4E60, $0100, $2100
@@ -122,7 +133,7 @@ endmacro
db $FF db $FF
BG3DungeonMapDoorStripes: BG3DungeonMap4x3Stripes:
%VanillaCommonMapStripes() %VanillaCommonMapStripes()
; left edge of map border, adjusted from vanilla ; left edge of map border, adjusted from vanilla
dw $4D60, $0100, $2100 dw $4D60, $0100, $2100
@@ -174,3 +185,96 @@ endmacro
%FullDoorRow($6311) %FullDoorRow($6311)
db $FF db $FF
BG3DungeonMap6x6Stripes:
; vanilla
dw $4260, $0100, $2100
dw $4360, $0E40, $2101
dw $4B60, $0100, $6100
dw $8460, $0B00, $2102, $2103, $2104, $2105, $2106, $2107
dw $A460, $0B00, $2112, $2113, $2114, $2115, $2116, $2117
dw $0060, $7E40, $2111
dw $8063, $3E41, $2111
dw $0060, $3EC0, $2111
dw $0160, $3EC0, $2111
dw $0C60, $3EC0, $2111
dw $0D60, $3EC0, $2111
dw $1E60, $3EC0, $2111
dw $1F60, $3EC0, $2111
; left side border
dw $6260, $1AC0, $2110
dw $6B60, $1AC0, $6110
dw $2262, $0100, $A100
dw $2362, $0E40, $A101
dw $2B62, $0100, $E100
; right side top area border
dw $4E60, $0100, $2100
dw $4F60, $1A40, $2101
dw $5D60, $0100, $6100
dw $6E60, $1AC0, $2110
dw $7D60, $1AC0, $6110
dw $2E62, $0100, $A100
dw $2F62, $1A40, $A101
dw $3D62, $0100, $E100
; right side bottom area border
dw $8E62, $0100, $2100
dw $8F62, $1A40, $2101
dw $9D62, $0100, $6100
dw $AE62, $06C0, $2110
dw $BD62, $06C0, $6110
dw $2E63, $0100, $A100
dw $2F63, $1A40, $A101
dw $3D63, $0100, $E100
; blank below left side
dw $4262, $4440, $2111
dw $6262, $4440, $2111
dw $8262, $1240, $2111
dw $A262, $1240, $2111
dw $C262, $1240, $2111
dw $E262, $1240, $2111
dw $0263, $1240, $2111
dw $2263, $1240, $2111
dw $4263, $4440, $2111
dw $6263, $4440, $2111
; map area inside top area
dw $6F60, $1A40, $1D11
dw $8F60, $1A40, $1D11
dw $AF60, $1A40, $1D11
dw $CF60, $1A40, $1D11
dw $EF60, $1A40, $1D11
dw $0F61, $1A40, $1D11
dw $2F61, $1A40, $1D11
dw $4F61, $1A40, $1D11
dw $6F61, $1A40, $1D11
dw $8F61, $1A40, $1D11
dw $AF61, $1A40, $1D11
dw $CF61, $1A40, $1D11
dw $EF61, $1A40, $1D11
dw $0F62, $1A40, $1D11
; center square
dw $3561, $0300
dw $5D4C, $1D4C
dw $5561, $0300
dw $DD4C, $9D4C
; map area inside bottom area
dw $AF62, $1A40, $1D11
dw $CF62, $1B00
dw $1D11, $5D4C, $1D4C, $1D11, $5D4C, $1D4C, $1D11, $5D4C, $1D4C, $1D11, $1D11, $5D4C, $1D4C, $1D11
dw $EF62, $1B00
dw $1D11, $DD4C, $9D4C, $1D11, $DD4C, $9D4C, $1D11, $DD4C, $9D4C, $1D11, $1D11, $DD4C, $9D4C, $1D11
dw $0F63, $1A40, $1D11
db $FF

View File

@@ -54,10 +54,10 @@ dw $29CA, $69CA, $29DA, $29DB ; 03 - small key
dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - safety - plus dw $29DD, $69DD, $A9DD, $E9DD ; 05 - safety - plus
dw $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest dw $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest
dw $29E8, $69E8, $29F8, $69F8 ; 07 - compass dw $29CE, $29CF, $29DE, $29DF ; 07 - map
dw $29CA, $69CA, $29DA, $29DB ; 08 - small key dw $29E8, $69E8, $29F8, $69F8 ; 08 - compass
dw $29C8, $69C8, $29D8, $29D9 ; 09 - big key dw $29CA, $69CA, $29DA, $29DB ; 09 - small key
dw $29CC, $29CD, $29DC, $69DC ; 0A - pendant dw $29C8, $69C8, $29D8, $29D9 ; 0A - big key
dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest
dw $29CC, $29CD, $29DC, $69DC ; 0C - pendant dw $29CC, $29CD, $29DC, $69DC ; 0C - pendant
dw $2DC9, $69C9, $A9C9, $EDC9 ; 0D - crystal dw $2DC9, $69C9, $A9C9, $EDC9 ; 0D - crystal
@@ -129,7 +129,7 @@ pad $B9FB00
; $B9FB00 ; $B9FB00
DungeonLabels: DungeonLabels:
dw $2550, $2579 ; Sewers dw $2550, $2579 ; Sewers
dw $2550, $2578 ; Hyrule Castle dw $2564, $255F ; Hyrule Castle
dw $2561, $256C ; Eastern Palace dw $2561, $256C ; Eastern Palace
dw $2560, $256C ; Desert Palace dw $2560, $256C ; Desert Palace
dw $255D, $2570 ; Agahnim's Tower dw $255D, $2570 ; Agahnim's Tower
@@ -197,11 +197,12 @@ org $B9FF10
ItemSources: ItemSources:
db $09 db $09
; $B9FF11
AlwaysShowCompass: AlwaysShowCompass:
db $01 db $01
; $00 - vanilla 5x5 maps ; $B9FF12
; $01 - special DR 4x3 maps ; $0000 - vanilla 5x5 maps
; $0001 - special DR 4x3 maps
DungeonMapMode: DungeonMapMode:
dw $0000 dw $0000

View File

@@ -248,7 +248,7 @@ DrawPlayerFileShared:
; Flute ; Flute
LDA.l InventoryTrackingSRAM : AND.w #$0003 : BEQ + LDA.l InventoryTrackingSRAM : AND.w #$0003 : BEQ +
LDA.l $7003C2 : AND.w #$00FF : CMP.w #$00FF : BNE .pseudo LDA.l $7003C2 : AND.w #$00FF : BNE .pseudo
%fs_drawItem(7,16,FileSelectItems_flute) %fs_drawItem(7,16,FileSelectItems_flute)
BRA ++ BRA ++
.pseudo .pseudo

View File

@@ -115,7 +115,7 @@ InitInventoryTracking: skip 2 ; PC 0x18338C \ Need to set bits here fo
InitBowTracking: skip 2 ; PC 0x18338E / boomerangs, powder/mushroom, etc InitBowTracking: skip 2 ; PC 0x18338E / boomerangs, powder/mushroom, etc
InitItemLimitCounts: skip 16 ; PC 0x183390 InitItemLimitCounts: skip 16 ; PC 0x183390
skip 34 ; skip 34 ;
InitFluteBitfield: db $FF ; InitFluteBitfield: db $00 ;
InitSpecialWeaponLevel: db $00 ; InitSpecialWeaponLevel: db $00 ;
InitItemOnB: db $00 ; InitItemOnB: db $00 ;
InitProgressIndicator: db $02 ; PC 0x1833C5 - Set to $80 for instant post-aga with standard InitProgressIndicator: db $02 ; PC 0x1833C5 - Set to $80 for instant post-aga with standard

View File

@@ -34,16 +34,20 @@ RTL
; Output: 0 locked, 1 open ; Output: 0 locked, 1 open
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckForZelda: CheckForZelda:
LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling
LDA.b #$01 ; pretend we have zelda anyway LDA.b #$01 ; pretend we have zelda anyway
RTL RTL
+ +
LDA.l FollowerIndicator LDA.l FollowerIndicator
RTL RTL
;================================================================================ ;================================================================================
SetOverlayIfLamp: SetOverlayIfLamp:
JSL LampCheck JSL LampCheck
STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all CMP.b #$00
BEQ +
LDA.b #$01
+
STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all
RTL RTL
;================================================================================ ;================================================================================
; Mantle Object Changes ; Mantle Object Changes

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -188,12 +188,12 @@ ItemBehavior:
BRA .store_inventory_tracking BRA .store_inventory_tracking
.flute_inactive .flute_inactive
LDA.b #$FF : STA.l FluteBitfield LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$02 LDA.l InventoryTracking : ORA.b #$02
BRA .store_inventory_tracking BRA .store_inventory_tracking
.flute_active .flute_active
LDA.b #$FF : STA.l FluteBitfield LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$01 LDA.l InventoryTracking : ORA.b #$01
BRA .store_inventory_tracking BRA .store_inventory_tracking

View File

@@ -320,7 +320,7 @@ OWLightWorldOrCrossed:
OWFluteCancel: OWFluteCancel:
{ {
lda.l FluteBitfield : beq + lda.l FluteBitfield : cmp.b #$FF : beq +
lda.l OWFlags+1 : and.b #$01 : bne + lda.l OWFlags+1 : and.b #$01 : bne +
jsl FluteMenu_LoadTransport : rtl jsl FluteMenu_LoadTransport : rtl
+ lda.w RandoOverworldTargetEdge : bne + + lda.w RandoOverworldTargetEdge : bne +
@@ -332,7 +332,7 @@ OWFluteCancel2:
lda.b Joy1B_All : ora.b Joy1A_All : and.b #$c0 : bne + lda.b Joy1B_All : ora.b Joy1A_All : and.b #$c0 : bne +
jml FluteMenu_HandleSelection_NoSelection jml FluteMenu_HandleSelection_NoSelection
+ inc.w SubModuleInterface + inc.w SubModuleInterface
lda.l FluteBitfield : beq .cancel lda.l FluteBitfield : cmp.b #$FF : beq .cancel
lda.l OWFlags+1 : and.b #$01 : beq + lda.l OWFlags+1 : and.b #$01 : beq +
lda.b Joy1B_All : cmp.b #$40 : bne + lda.b Joy1B_All : cmp.b #$40 : bne +
.cancel .cancel

View File

@@ -1,35 +1,37 @@
SelectFirstFluteSpot: SelectFirstFluteSpot:
LDA.l FluteBitfield LDA.l FluteBitfield
CMP.b #$FF
BNE + BNE +
RTL RTL
+ LDA.b #$07 + LDA.b #$07
STA.w $1AF0 STA.w FluteSelection
.try_next .try_next
LDA.w $1AF0 LDA.w FluteSelection
INC A INC A
AND.b #$07 AND.b #$07
STA.w $1AF0 STA.w FluteSelection
TAX TAX
LDA.l FluteBitfield LDA.l FluteBitfield
AND.l $8AB7A3, X AND.l FluteMenuNumbers_bits, X
BEQ .try_next BNE .try_next
RTL RTL
SelectFluteNext: SelectFluteNext:
LDA.l FluteBitfield LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep BEQ InvalidBeep
.try_next .try_next
LDA.w $1AF0 LDA.w FluteSelection
INC A INC A
AND.b #$07 AND.b #$07
STA.w $1AF0 STA.w FluteSelection
TAX TAX
LDA.l FluteBitfield LDA.l FluteBitfield
AND.l $8AB7A3, X AND.l FluteMenuNumbers_bits, X
BEQ .try_next BNE .try_next
LDA.b #$20 LDA.b #$20
STA.w $012F STA.w $012F
@@ -37,18 +39,19 @@ RTL
SelectFlutePrev: SelectFlutePrev:
LDA.l FluteBitfield LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep BEQ InvalidBeep
.try_next .try_next
LDA.w $1AF0 LDA.w FluteSelection
DEC A DEC A
AND.b #$07 AND.b #$07
STA.w $1AF0 STA.w FluteSelection
TAX TAX
LDA.l FluteBitfield LDA.l FluteBitfield
AND.l $8AB7A3, X AND.l FluteMenuNumbers_bits, X
BEQ .try_next BNE .try_next
LDA.b #$20 LDA.b #$20
STA.w $012F STA.w $012F
@@ -62,8 +65,8 @@ RTL
SetFluteSpotPalette: SetFluteSpotPalette:
XBA XBA
LDA.l FluteBitfield LDA.l FluteBitfield
AND.l $8AB7A3, X AND.l FluteMenuNumbers_bits, X
BEQ .disabled BNE .disabled
.enabled .enabled
XBA XBA
STA.b $0C STA.b $0C
@@ -93,8 +96,9 @@ MaybeMarkFluteSpotVisited:
TXA TXA
LSR A LSR A
TAX TAX
LDA.l FluteBitfield LDA.l FluteMenuNumbers_bits, X
ORA.l $8AB7A3, X EOR.b #$FF
AND.l FluteBitfield
STA.l FluteBitfield STA.l FluteBitfield
.done .done
@@ -113,33 +117,9 @@ CheckTransitionOverworld:
STA.w $040A ; what we wrote over STA.w $040A ; what we wrote over
JML MaybeMarkFluteSpotVisited JML MaybeMarkFluteSpotVisited
DrawFluteIcon: CheckFlute:
AND.w #$00FF
CMP.w #$0002
BCC .write
LDA.l FluteBitfield LDA.l FluteBitfield
AND.w #$00FF AND.w #$00FF
CMP.w #$00FF
BNE .pseudo
.real
LDA.w #$0003
BRA .write
.pseudo
LDA.w #$0002
.write
STA.b $02
RTL
CheckFluteInHUD:
LDA.l $7EF33F, X
AND.w #$00FF ; what we wrote over
CPX.w #$000D
BNE .done
CMP.w #$0002
BCC .done
LDA.l FluteBitfield
AND.w #$00FF
CMP.w #$00FF
BNE .pseudo BNE .pseudo
.real .real
LDA.w #$0003 LDA.w #$0003
@@ -147,4 +127,24 @@ CheckFluteInHUD:
.pseudo .pseudo
LDA.w #$0002 LDA.w #$0002
.done .done
RTS
DrawFluteIcon:
AND.w #$00FF
CMP.w #$0002
BCC +
JSR CheckFlute
+
STA.b $02
RTL
CheckFluteInHUD:
LDA.l EquipmentWRAM-1, X
AND.w #$00FF ; what we wrote over
CPX.w #$000D
BNE +
CMP.w #$0002
BCC +
JSR CheckFlute
+
RTL RTL

10
ram.asm
View File

@@ -473,6 +473,8 @@ RoomStripes = $7E1100 ; Used for room drawing.
; ;
MirrorPortalPosXH = $7E1ACF ; Mirror portal position. (High byte of X coordinate) MirrorPortalPosXH = $7E1ACF ; Mirror portal position. (High byte of X coordinate)
; ;
FluteSelection = $7E1AF0 ; Currently selected flute spot (zero-indexed)
;
IrisPtr = $7E1B00 ; Spotlight pointers for HDMA. $1C0 bytes (?). IrisPtr = $7E1B00 ; Spotlight pointers for HDMA. $1C0 bytes (?).
; ;
MessageSubModule = $7E1CD8 ; MessageSubModule = $7E1CD8 ;
@@ -566,6 +568,14 @@ GameOverSongCache = $7EC227 ;
CachedDungeonID = $7EC22A ; Cached while opening dungeon map CachedDungeonID = $7EC22A ; Cached while opening dungeon map
CachedCurrentFloor = $7EC22B ; to restore when closing CachedCurrentFloor = $7EC22B ; to restore when closing
; ;
CurrentDisplayedRoom = $7EC22C ; 2 bytes, used by dungeon map
DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map
;
DoorSlots = $7EC230 ; $32 bytes, used by dungeon map
DoorSlotScratch = $7EC262 ; 6 bytes, used by dungeon map
DoorSlotCursor = $7EC268 ; 2 bytes, used by dungeon map
CurrentDoorEntrance = $7EC26A ; 2 bytes, used by dungeon map
;
LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes. LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes.
; ;
PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm

View File

@@ -280,10 +280,16 @@ Module1B_SpawnSelect_spawns = $828481
Overworld_ActualScreenID = $82A4E3 Overworld_ActualScreenID = $82A4E3
UnderworldTransitionLandingCoordinate = $82C034 UnderworldTransitionLandingCoordinate = $82C034
Overworld_FinalizeEntryOntoScreen_Data = $82C176 Overworld_FinalizeEntryOntoScreen_Data = $82C176
EntranceData_room_id = $82C577
EntranceData_y_coordinate = $82CCBD
EntranceData_x_coordinate = $82CDC7
EntranceData_dungeon_id = $82D1EF
EntranceData_layer = $82D2F9
EntranceData_song = $82D592 EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2 SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879 Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879
Sprite_ShowSolicitedMessage_Direction = $85E1A3 Sprite_ShowSolicitedMessage_Direction = $85E1A3
FluteMenuNumbers_bits = $8AB7A3
WorldMap_RedXChars = $8ABF70 WorldMap_RedXChars = $8ABF70
WorldMap_CalculateOAMCoordinates = $8AC3B1 WorldMap_CalculateOAMCoordinates = $8AC3B1
WorldMap_HandleSpriteBlink = $8AC52E WorldMap_HandleSpriteBlink = $8AC52E