More separate-section implementation

This commit is contained in:
2026-01-12 22:28:54 -06:00
parent 17939339bc
commit 9c5f0dd5f5
5 changed files with 160 additions and 28 deletions

View File

@@ -110,6 +110,7 @@ CheckChests:
CMP.b $00
BNE .next_chest
LDA.b $06
JSR CheckChestSection
INC.b $06
BCC .increment_mask
@@ -257,6 +258,7 @@ CheckPots:
TXA : ASL A
TAX
LDA.l DungeonMask, X : STA.b $08
TXA : LSR A : TAX
.mask_set
TXA
@@ -363,6 +365,7 @@ CheckEnemies:
TXA : ASL A
TAX
LDA.l DungeonMask, X : STA.b $08
TXA : LSR A : TAX
.mask_set
TXA
@@ -458,7 +461,7 @@ Get<type>Section:
.not_this_section
PLX
TXA : CLC : ADC.w #$000A : TAX
TXA : CLC : ADC.w #$000D : TAX
DEC.b $CE
BNE .check_next_section
BRA .found
@@ -498,12 +501,51 @@ Check<type>Section:
RTS
endmacro
%DefineGetFooSection(Door, 2)
%DefineGetFooSection(Chest, 4)
%DefineGetFooSection(Pot, 6)
%DefineGetFooSection(Enemy, 8)
%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

View File

@@ -525,6 +525,12 @@ DrawStairs:
CLC : ADC.b $00
TAX
LDA.l CurrentDisplayedRoom
STA.b $CA
LDA.b $02
JSR CheckStairSection
BCC .skip
PHY
LDA.b $02
CLC : ADC.w #$0015
@@ -533,9 +539,17 @@ DrawStairs:
LDA.l SpiralTable, X
AND.w #$00FF
STA.b $CA
LDA.l SpiralTable, X
JSR GetIncomingStairSection
INC A
ASL A : ASL A : ASL A : ASL A
XBA
ORA.b $CA
STA.b $CA
TYX
STA.l DoorSlots, X
STA.b $CA
LDA.w DoorSlotsBG2, Y
CLC : ADC.w #!CenterTile
@@ -550,6 +564,7 @@ DrawStairs:
JSL DrawFullRoomTile
PLY
.skip
INY : INY
INC.b $02
DEC.b $06
@@ -675,7 +690,6 @@ DrawDropOrWarp:
RTS
DrawSingleConnectedRoom:
AND.w #$00FF
STA.b $CA
LDA.w DoorSlotsBG2, Y
CLC : ADC.w #!CenterTile
@@ -1586,6 +1600,15 @@ DrawDoorsStairs:
ASL A
TAX
REP #$30
LDA.l CurrentDisplayedRoom
STA.b $CA
LDA.b $0D
AND.w #$00FF
JSR CheckStairSection
SEP #$30
BCC .skip
LDA.b $0A
CMP.b #$04
BCS .draw
@@ -1658,7 +1681,7 @@ DetectLinksSection:
INX
.next_section
PHX
LDA.l SplitRooms, X
LDA.l SplitRooms+1, X
TAX
.next_area
LDA.l SplitRooms, X
@@ -1699,7 +1722,7 @@ DetectLinksSection:
.not_this_section
PLX
TXA : CLC : ADC.w #$000A : TAX
TXA : CLC : ADC.w #$000D : TAX
DEC.b $00
BNE .next_section
BRA .done

View File

@@ -222,7 +222,7 @@ EdgePositions:
.west
db $02 ; TT Attic
db $02, $02 ; Desert North Hall
db $02, $00 ; HC Basement
db $00, $02 ; HC Basement
db $00 ; Desert East Wing
db $02, $00 ; TT Triple
db $02 ; TT Big Key Chest
@@ -236,7 +236,7 @@ EdgePositions:
.east
db $02 ; TT Attic
db $02, $02 ; Desert North Hall
db $00, $02 ; HC Basement
db $02, $00 ; HC Basement
db $00 ; Desert East Wing
db $02, $00 ; TT Triple
db $02 ; TT Big Key Chest

View File

@@ -24,13 +24,13 @@ 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, $00, $02, $01, $00 ; ($10) Pod Basement
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, $00, $03, $01, $04 ; ($30) Hera Big Chest
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

View File

@@ -12,10 +12,14 @@ 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(.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(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
@@ -48,14 +52,14 @@ SplitRooms:
%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(.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(.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) : %d(.no) : %d(.no) : %d(.db) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no)
@@ -65,10 +69,29 @@ 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
%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)
%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
@@ -84,8 +107,9 @@ db $05, $0B
db $FF
.75
db $02
%d(..areas) : %d(..doors) : %d(..chests) : %d(.no_items) : %d(..enemies)
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
@@ -101,7 +125,8 @@ db $FF
.7d ; GT warp maze (section next to rando room)
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..pots) : %d(..enemies)
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $FF, $00, $80
db $03, $00, $80, $80, $FF
@@ -119,7 +144,8 @@ db $FF
.a9
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..pots) : %d(.no_items)
%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
@@ -134,7 +160,8 @@ db $FF
.aa
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items)
%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 $FF
@@ -144,7 +171,8 @@ db $FF
.b2
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..pots) : %d(..enemies)
%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
@@ -159,9 +187,28 @@ db $FF
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
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items)
%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, $00, $20, $28, $60
@@ -173,7 +220,8 @@ db $FF
.bc
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..pots) : %d(.no_items)
%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
@@ -186,7 +234,9 @@ db $FF
.d1
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..pots) : %d(..enemies)
%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
@@ -202,7 +252,9 @@ db $FF
.d6
db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..enemies)
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $80, $00, $FF
db $FF
@@ -212,3 +264,18 @@ 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