Start tracking separated sections

This commit is contained in:
2026-01-12 20:30:08 -06:00
parent 91fab07e5c
commit 17939339bc
5 changed files with 492 additions and 20 deletions

View File

@@ -5,7 +5,7 @@ CheckLoot:
REP #$30
PHB : PHX : PHY
STA.b $00
STA.b $CA
LDA.b $06 : PHA
LDA.b $0E : PHA
@@ -16,7 +16,8 @@ CheckLoot:
AND.w #$00FF
STA.b $0E
LDA.b $00
LDA.b $CA
AND.w #$00FF
ASL A
TAX
@@ -80,7 +81,9 @@ CheckLoot:
RTL
CheckChests:
LDA.b $00
LDA.b $CA
AND.w #$00FF
STA.b $00
ASL A
TAX
@@ -90,6 +93,7 @@ CheckChests:
LDA.w #$0008
STA.b $04
STZ.b $06
LDY.w #$FFFD
.increment_mask
@@ -106,6 +110,10 @@ CheckChests:
CMP.b $00
BNE .next_chest
JSR CheckChestSection
INC.b $06
BCC .increment_mask
LDA.l SaveDataWRAM, X
AND.b $04
BNE .increment_mask ; already got item
@@ -119,6 +127,10 @@ CheckChests:
RTS
CheckBoss:
LDA.b $CA
AND.w #$00FF
STA.b $04
LDX.w #$FFFA
.next_boss
INX #6
@@ -127,7 +139,7 @@ CheckBoss:
RTS
.check
CMP.b $00
CMP.b $04
BNE .next_boss
TXY
@@ -170,6 +182,10 @@ CheckBoss:
BRA .next_boss
CheckPrize:
LDA.b $CA
AND.w #$00FF
STA.b $04
LDX.w #$FFFD
.next_prize
INX #3
@@ -178,7 +194,7 @@ CheckPrize:
RTS
.check
CMP.b $00
CMP.b $04
BNE .next_prize
TXY
@@ -202,7 +218,8 @@ CheckPrize:
BRA .next_prize
CheckPots:
LDA.b $00
LDA.b $CA
AND.w #$00FF
ASL A
TAX
@@ -242,7 +259,18 @@ CheckPots:
LDA.l DungeonMask, X : STA.b $08
.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
LDA.l SpriteDropData, X
else
@@ -264,7 +292,8 @@ endif
RTS
CheckEnemies:
LDA.b $00
LDA.b $CA
AND.w #$00FF
ASL A
TAX
@@ -279,7 +308,10 @@ CheckEnemies:
.next_enemy
LDA.b [$04], Y
AND.w #$00FF
CMP.w #$00FF : BEQ .done
CMP.w #$00FF
BNE +
JMP .done
+
LDA.b [$04], Y
BIT.w #$8000 : BNE .overlord
INY : INY
@@ -333,13 +365,25 @@ CheckEnemies:
LDA.l DungeonMask, X : STA.b $08
.mask_set
LDA.b $00 : ASL A : TAX
TXA
JSR CheckEnemySection
BCS +
PLX
PLA
BRA .next_enemy
+
LDA.b $CA
AND.w #$00FF
ASL A
TAX
LDA.l SpriteDropData, X
PLX
AND.b $08
BEQ .not_obtained
PLA
BRA .next_enemy
JMP .next_enemy
.not_obtained
PLA
@@ -380,3 +424,86 @@ GetLootClass:
.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 #$000A : 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, 2)
%DefineGetFooSection(Chest, 4)
%DefineGetFooSection(Pot, 6)
%DefineGetFooSection(Enemy, 8)
%DefineCheckFooSection(Door)
%DefineCheckFooSection(Chest)
%DefineCheckFooSection(Pot)
%DefineCheckFooSection(Enemy)

View File

@@ -8,8 +8,11 @@ DrawWackyDoorRandoStuff:
STZ.w GFXStripes
LDA.b RoomIndex
AND.w #$00FF
JSL DetectLinksSection
INC A
XBA
ASL A : ASL A : ASL A : ASL A
ORA.b RoomIndex
STA.l CurrentDisplayedRoom
DrawCurrentSupertile:
@@ -28,6 +31,7 @@ DrawCurrentSupertile:
; multiply room id by 24 to get index in doors table
LDA.l CurrentDisplayedRoom
AND.w #$00FF
TAX
LDA.l DoorOffset, X
AND.w #$00FF
@@ -70,6 +74,7 @@ ClearDoorSlotScratch:
DrawFullRoomTile:
LDA.b $CA
AND.w #$00FF
PHX
ASL A
TAX
@@ -81,6 +86,8 @@ DrawFullRoomTile:
PLY
LDA.b $CA
AND.w #$0FFF
CMP.w #$003F : BEQ .top_right
CMP.w #$0096 : BEQ .top_right
CMP.w #$007E : BEQ .top_left
@@ -207,7 +214,10 @@ CheckEdgesTable:
CLC : ADC.b $00
ADC.b $02
XBA
ORA.l CurrentDisplayedRoom
STA.b $0C
LDA.l CurrentDisplayedRoom
AND.w #$00FF
ORA.b $0C
STA.b $0C
PHX
@@ -236,7 +246,10 @@ CheckInRoomTable:
CLC : ADC.b $00
ADC.b $02
XBA
ORA.l CurrentDisplayedRoom
STA.b $0C
LDA.l CurrentDisplayedRoom
AND.w #$00FF
ORA.b $0C
STA.b $0C
PHX
@@ -270,13 +283,32 @@ GetConnection:
BEQ .not_found
STA.b $0C
STA.b $CA
LDA.b $08
JSR GetWhichDoorPosition
PHA
XBA
ORA.b $0C
STA.b $0C
PLA
CLC : ADC.b $00 : ADC.b $00 : ADC.b $00
PHX
TAX
LDA.l IncomingDoorMap, X
AND.w #$00FF
PLX
STA.b $CC
JSR GetDoorSection
INC A
ASL A : ASL A : ASL A : ASL A
XBA
ORA.b $0C
STA.b $0C
JSR CheckCanSeeConnector
BCC .nope
LDA.b $0C
RTS
@@ -380,6 +412,15 @@ DrawSide:
LDY.w #$0002
-
LDA.l CurrentDisplayedRoom
STA.b $CA
LDA.b $00
ASL A
CLC : ADC.b $00
ADC.b $02
JSR CheckDoorSection
BCC +
JSR GetConnection
BMI +
INC.b $06
@@ -459,6 +500,7 @@ DrawSide:
DrawStairs:
PHX
LDA.l CurrentDisplayedRoom
AND.w #$00FF
TAX
LDA.w SpiralPropsIndex, X
AND.w #$00FF
@@ -571,6 +613,7 @@ GetSpecificRoomVisibility:
DrawDropOrWarp:
PHX
LDA.l CurrentDisplayedRoom
AND.w #$00FF
STA.b $00
LDX.w #$0000
@@ -644,7 +687,7 @@ DrawSingleConnectedRoom:
TYX
LDA.l DoorSlots+1, X
AND.w #$00FF
AND.w #$000F
CMP.w #$0003
BNE +
LDA.l DoorSlots, X
@@ -1305,10 +1348,12 @@ DoorsMapSelectCursor:
ASL A
TAX
LDA.l DoorSlots, X
STA.l CurrentDisplayedRoom
REP #$30
LDA.l DoorSlots, X
AND.w #$F0FF
STA.l CurrentDisplayedRoom
STZ.w GFXStripes
JSL ClearDoorsMapBG1
JSL ClearDoorsMapBG2
@@ -1416,7 +1461,7 @@ ClearDoorsMapBG2:
GetRoomEntrance:
PHX : PHY
LDY.w #$0085
LDY.w #$0076 ; entrance IDs 76 - 82 are dropdowns, handle those later
-
DEY
BMI .not_found
@@ -1581,3 +1626,87 @@ DrawDoorsStairs:
.done
RTS
DetectLinksSection:
LDA.b RoomIndex
ASL A
TAX
LDA.l SplitRooms, X
TAX
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $00
BEQ .done
LDA.b LinkPosX
LSR A
AND.w #$00FF
INC A
STA.b $02
LDA.b LinkPosY
LSR A
AND.w #$00FF
INC A
STA.b $04
LDA.b LinkLayer
AND.w #$00FF
INC A
STA.b $06
INX
.next_section
PHX
LDA.l SplitRooms, X
TAX
.next_area
LDA.l SplitRooms, X
AND.w #$00FF
CMP.w #$00FF
BEQ .not_this_section
AND.w $06
BEQ .not_this_area
LDA.l SplitRooms+1, X ; x minimum
AND.w #$00FF
CMP.b $02
BCS .not_this_area
LDA.l SplitRooms+2, X ; x maximum
AND.w #$00FF
INC A
CMP.b $02
BCC .not_this_area
LDA.l SplitRooms+3, X ; y minimum
AND.w #$00FF
CMP.b $04
BCS .not_this_area
LDA.l SplitRooms+4, X ; y maximum
AND.w #$00FF
INC A
CMP.b $04
BCC .not_this_area
BRA .found
.not_this_area
INX #5
BRA .next_area
.not_this_section
PLX
TXA : CLC : ADC.w #$000A : TAX
DEC.b $00
BNE .next_section
BRA .done
.found
PLX
.done
LDA.b $00
RTL

View File

@@ -13,7 +13,7 @@ db $00, $07, $00, $04, $00, $00, $00, $01, $7D, $0A, $00, $00, $00, $00, $04, $0
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, $04, $8F, $00, $00, $00, $00, $00, $00, $00, $0A, $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:
@@ -52,6 +52,7 @@ 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

View File

@@ -0,0 +1,214 @@
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
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(.no) : %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(.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(.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(.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(.75) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %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(.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(.no) : %d(.no) : %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(.no) : %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(.no)
%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(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no)
.no
db $00
.no_items
db $FF
.14
db $02
%d(..areas3) : %d(..doors3) : %d(.no_items) : %d(.no_items) : %d(.no_items)
%d(..areas2) : %d(..doors2) : %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 $FF
..doors2
db $05, $0B
db $FF
.75
db $02
%d(..areas) : %d(..doors) : %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
.7d ; GT warp maze (section next to rando room)
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %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
..pots
db $00, $01, $02, $03
db $FF
..enemies
db $00, $01, $02, $03, $09
db $FF
.a9
db $01
%d(..areas) : %d(..doors) : %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
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $02, $00, $80, $00, $FF
db $FF
..doors
db $03, $06
db $FF
.b2
db $01
%d(..areas) : %d(..doors) : %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
.b9
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $01, $00, $20, $28, $60
db $01, $00, $20, $28, $60
db $01, $E0, $FF, $58, $60
db $FF
..doors
db $03, $09
db $FF
.bc
db $01
%d(..areas) : %d(..doors) : %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
.d1
db $01
%d(..areas) : %d(..doors) : %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
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $80, $00, $FF
db $FF
..doors
db $00
db $FF
..enemies
db $00, $01, $02
db $FF

View File

@@ -37,3 +37,4 @@ incsrc blink_loot.asm
incsrc data/doors_display.asm
incsrc data/spiral_stairs.asm
incsrc data/fall_warps.asm
incsrc data/split_room.asm