Randomize Special Transitions

This commit is contained in:
Catobat
2022-05-01 01:25:32 +02:00
parent 5858f7c1da
commit 4db69b8779
6 changed files with 227 additions and 111 deletions

View File

@@ -2225,7 +2225,6 @@ class Door(object):
class WorldType(IntEnum):
Light = 0
Dark = 1
Special = 2
@unique
@@ -2241,6 +2240,8 @@ class OWEdge(object):
self.type = DoorType.Open
self.direction = direction
self.terrain = terrain
self.specialEntrance = False
self.specialExit = False
self.deadEnd = False
# rom properties
@@ -2254,6 +2255,7 @@ class OWEdge(object):
self.zeroHzCam = False
self.zeroVtCam = False
self.edge_id = edge_id
self.specialID = 0x0
self.midpoint = 0x0
self.linkOpp = 0x0
@@ -2265,12 +2267,10 @@ class OWEdge(object):
self.unknownX = 0x0
self.unknownY = 0x0
if self.owIndex < 0x40:
if self.owIndex < 0x40 or self.owIndex >= 0x80:
self.worldType = WorldType.Light
elif self.owIndex < 0x80:
self.worldType = WorldType.Dark
else:
self.worldType = WorldType.Special
self.worldType = WorldType.Dark
# logical properties
# self.connected = False # combine with Dest?
@@ -2288,7 +2288,7 @@ class OWEdge(object):
return base_address[self.direction] + (self.edge_id * 16)
def getTarget(self):
return self.dest.edge_id
return self.dest.specialID if self.dest.specialExit else self.dest.edge_id
def dead_end(self):
self.deadEnd = True
@@ -2298,6 +2298,16 @@ class OWEdge(object):
self.vramLoc = vram_loc
return self
def special_entrance(self, special_id):
self.specialEntrance = True
self.specialID = special_id
return self
def special_exit(self, special_id):
self.specialExit = True
self.specialID = special_id
return self
def __eq__(self, other):
return isinstance(other, self.__class__) and self.name == other.name

View File

@@ -38,7 +38,7 @@ NP = IsParallel.No
def create_owedges(world, player):
edges = [
# name, owID,dir,type,edge_id,(owSlot) vram
create_owedge(player, 'Lost Woods NW', 0x00, No, Ld, 0x00) .coordInfo(0x00a0, 0x0284),
create_owedge(player, 'Lost Woods NW', 0x00, No, Ld, 0x00) .coordInfo(0x00a0, 0x0284).special_entrance(0x80),
create_owedge(player, 'Lost Woods SW', 0x00, So, Ld, 0x01, 0x08).coordInfo(0x0058, 0x2000),
create_owedge(player, 'Lost Woods SC', 0x00, So, Ld, 0x02, 0x08).coordInfo(0x0178, 0x2020),
create_owedge(player, 'Lost Woods SE', 0x00, So, Ld, 0x03, 0x09).coordInfo(0x0388, 0x2060),
@@ -53,7 +53,7 @@ def create_owedges(world, player):
create_owedge(player, 'Death Mountain TR Pegs WN', 0x07, We, Ld, 0x02) .coordInfo(0x0078, 0x00e0),
create_owedge(player, 'Mountain Entry NW', 0x0a, No, Ld, 0x01) .coordInfo(0x04cc, 0x180a),
create_owedge(player, 'Mountain Entry SE', 0x0a, So, Ld, 0x04) .coordInfo(0x0518, 0x1012),
create_owedge(player, 'Zora Waterfall NE', 0x0f, No, Ld, 0x02) .coordInfo(0x0f80, 0x009a),
create_owedge(player, 'Zora Waterfall NE', 0x0f, No, Ld, 0x02) .coordInfo(0x0f80, 0x009a).special_entrance(0x82),
create_owedge(player, 'Zora Waterfall SE', 0x0f, So, Ld, 0x05) .coordInfo(0x0f80, 0x1020),
create_owedge(player, 'Lost Woods Pass NW', 0x10, No, Ld, 0x03) .coordInfo(0x0058, 0x1800),
create_owedge(player, 'Lost Woods Pass NE', 0x10, No, Ld, 0x04) .coordInfo(0x0178, 0x181e),
@@ -132,7 +132,7 @@ def create_owedges(world, player):
create_owedge(player, 'Links House ES', 0x2c, Ea, Ld, 0x17) .coordInfo(0x0b80, 0x08c0),
create_owedge(player, 'Stone Bridge NC', 0x2d, No, Ld, 0x14) .coordInfo(0x0af0, 0x180e),
create_owedge(player, 'Stone Bridge SC', 0x2d, So, Ld, 0x19) .coordInfo(0x0ae0, 0x100c),
create_owedge(player, 'Stone Bridge WC', 0x2d, We, Wr, 0x17) .coordInfo(0x0b1c, 0x061c),
create_owedge(player, 'Stone Bridge WC', 0x2d, We, Wr, 0x17) .coordInfo(0x0b1c, 0x061c).special_entrance(0x81),
create_owedge(player, 'Stone Bridge WS', 0x2d, We, Ld, 0x18) .coordInfo(0x0b80, 0x08e0),
create_owedge(player, 'Stone Bridge EN', 0x2d, Ea, Ld, 0x18) .coordInfo(0x0a90, 0x01c0),
create_owedge(player, 'Stone Bridge EC', 0x2d, Ea, Wr, 0x19) .coordInfo(0x0b3c, 0x0640),
@@ -317,9 +317,9 @@ def create_owedges(world, player):
create_owedge(player, 'Bomber Corner NE', 0x7f, No, Ld, 0x41) .coordInfo(0x0f50, 0x181c),
create_owedge(player, 'Bomber Corner WC', 0x7f, We, Wr, 0x49) .coordInfo(0x0f30, 0x05e0),
create_owedge(player, 'Bomber Corner WS', 0x7f, We, Ld, 0x4a) .coordInfo(0x0f94, 0x0860),
create_owedge(player, 'Master Sword Meadow SC', 0x80, So, Ld, 0x40) .coordInfo(0x0080, 0x0000),
create_owedge(player, 'Hobo EC', 0x80, Ea, Wr, 0x4a) .coordInfo(0x008c, 0x0020),
create_owedge(player, 'Zoras Domain SW', 0x81, So, Ld, 0x41, 0x89).coordInfo(0x02a4, 0x1782)
create_owedge(player, 'Master Sword Meadow SC', 0x80, So, Ld, 0x40) .coordInfo(0x0080, 0x0000).special_exit(0x80),
create_owedge(player, 'Hobo EC', 0x80, Ea, Wr, 0x4a) .coordInfo(0x008c, 0x0020).special_exit(0x81),
create_owedge(player, 'Zoras Domain SW', 0x81, So, Ld, 0x41, 0x89).coordInfo(0x02a4, 0x1782).special_exit(0x82)
]
world.owedges += edges
@@ -439,16 +439,16 @@ OWEdgeGroups = {
['Octoballoon NE']
]
),
# (Op, LW, Vt, Ld, NP, 1): (
# [
# ['Master Sword Meadow SC'],
# ['Zoras Domain SW']
# ],
# [
# ['Lost Woods NW'],
# ['Zora Waterfall NE']
# ]
# ),
(Op, LW, Vt, Ld, NP, 1): (
[
['Master Sword Meadow SC'],
['Zoras Domain SW']
],
[
['Lost Woods NW'],
['Zora Waterfall NE']
]
),
(Op, LW, Hz, Ld, PL, 2): (
[
['Kakariko Fortune EN', 'Kakariko Fortune ES'],
@@ -505,14 +505,14 @@ OWEdgeGroups = {
['Statues WC']
]
),
# (Op, LW, Hz, Wr, NP, 1): (
# [
# ['Hobo EC']
# ],
# [
# ['Stone Bridge WC']
# ]
# ),
(Op, LW, Hz, Wr, NP, 1): (
[
['Hobo EC']
],
[
['Stone Bridge WC']
]
),
(Op, LW, Vt, Wr, PL, 1): (
[
['Tree Line SC'],
@@ -627,6 +627,10 @@ OWEdgeGroups = {
['Hype Cave WN', 'Hype Cave WS']
]
),
(Op, DW, Vt, Ld, NP, 1): (
[ ],
[ ]
),
(Op, DW, Hz, Ld, NP, 2): (
[
['Dig Game EC', 'Dig Game ES']
@@ -675,6 +679,10 @@ OWEdgeGroups = {
['Hype Cave WC']
]
),
(Op, DW, Hz, Wr, NP, 1): (
[ ],
[ ]
),
(Op, DW, Vt, Wr, PL, 1): (
[
['Dark Tree Line SC'],

View File

@@ -11,8 +11,6 @@ def link_overworld(world, player):
# setup mandatory connections
for exitname, regionname in mandatory_connections:
connect_simple(world, exitname, regionname, player)
for exitname, destname in temporary_mandatory_connections:
connect_two_way(world, exitname, destname, player)
def performSwap(groups, swaps):
def getParallel(edgename):
@@ -539,18 +537,13 @@ def shuffle_tiles(world, groups, result_list, player):
exist_dw_regions.extend(new_results[2])
# replace LW edges with DW
ignore_list = list() #TODO: Remove ignore_list when special OW areas are included in pool
for edgeset in temporary_mandatory_connections:
for edge in edgeset:
ignore_list.append(edge)
if world.owCrossed[player] != 'polar':
# in polar, the actual edge connections remain vanilla
def getSwappedEdges(world, lst, player):
for regionname in lst:
region = world.get_region(regionname, player)
for exit in region.exits:
if exit.spot_type == 'OWEdge' and exit.name not in ignore_list:
if exit.spot_type == 'OWEdge':
swapped_edges.append(exit.name)
getSwappedEdges(world, result_list[1], player)
@@ -1140,13 +1133,6 @@ test_connections = [
#('Links House NE', 'Lost Woods Pass SW')
]
temporary_mandatory_connections = [
# Special OW Areas
('Lost Woods NW', 'Master Sword Meadow SC'),
('Zora Waterfall NE', 'Zoras Domain SW'),
('Stone Bridge WC', 'Hobo EC'),
]
# these are connections that cannot be shuffled and always exist. They link together separate parts of the world we need to divide into regions
mandatory_connections = [# Intra-tile OW Connections
('Lost Woods Bush (West)', 'Lost Woods East Area'), #pearl
@@ -1750,14 +1736,14 @@ parallelsimilar_connections = [('Maze Race ES', 'Kakariko Suburb WS'),
]
# non shuffled overworld
default_connections = [#('Lost Woods NW', 'Master Sword Meadow SC'),
default_connections = [('Lost Woods NW', 'Master Sword Meadow SC'),
('Lost Woods SW', 'Lost Woods Pass NW'),
('Lost Woods SC', 'Lost Woods Pass NE'),
('Lost Woods SE', 'Kakariko Fortune NE'),
('Lost Woods EN', 'Lumberjack WN'),
('Lumberjack SW', 'Mountain Entry NW'),
('Mountain Entry SE', 'Kakariko Pond NE'),
#('Zora Waterfall NE', 'Zoras Domain SW'),
('Zora Waterfall NE', 'Zoras Domain SW'),
('Lost Woods Pass SW', 'Kakariko NW'),
('Lost Woods Pass SE', 'Kakariko NC'),
('Kakariko Fortune SC', 'Kakariko NE'),
@@ -1806,7 +1792,7 @@ default_connections = [#('Lost Woods NW', 'Master Sword Meadow SC'),
('Stone Bridge SC', 'Lake Hylia NW'),
('Stone Bridge EN', 'Tree Line WN'),
('Stone Bridge EC', 'Tree Line WC'),
#('Stone Bridge WC', 'Hobo EC'),
('Stone Bridge WC', 'Hobo EC'),
('Tree Line SC', 'Lake Hylia NC'),
('Tree Line SE', 'Lake Hylia NE'),
('Desert EC', 'Desert Pass WC'),

11
Rom.py
View File

@@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx
JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '4a1dfc4fa793b8659a95d579f6a5a925'
RANDOMIZERBASEHASH = '32da3b3eb8f7a3e43f7c7351aeeddf11'
class JsonRom(object):
@@ -698,17 +698,18 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
inverted_buffer[b] ^= 0x1
# set world flag
world_flag = 0x00 if b >= 0x40 else 0x40
world_flag = 0x00 if b >= 0x40 and b < 0x80 else 0x40
rom.write_byte(0x153A00 + b, world_flag)
if b % 0x40 in megatiles:
if b & 0xBF in megatiles:
rom.write_byte(0x153A00 + b + 1, world_flag)
rom.write_byte(0x153A00 + b + 8, world_flag)
rom.write_byte(0x153A00 + b + 9, world_flag)
for edge in world.owedges:
if edge.dest is not None and isinstance(edge.dest, OWEdge) and edge.player == player:
write_int16(rom, edge.getAddress() + 0x0a, edge.vramLoc)
write_int16(rom, edge.getAddress() + 0x0e, edge.getTarget())
if not edge.specialExit:
rom.write_byte(0x1539e0 + (edge.specialID - 0x80) * 2 if edge.specialEntrance else edge.getAddress() + 0x0e, edge.getTarget())
write_int16(rom, 0x150002, owMode)
write_int16(rom, 0x150004, owFlags)

View File

@@ -9,10 +9,28 @@ OWReserved:
dw 0
;Hooks
org $02a929
OWDetectTransitionReturn:
org $02a939
JSL OWDetectEdgeTransition
BCS OWDetectTransitionReturn
org $04e8ae
JSL OWDetectSpecialTransition
RTL : NOP
org $02a999
jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA
;org $02e238 ;LDX #$9E : - DEX : DEX : CMP $DAEE,X : BNE -
;jsl OWSpecialTransition : nop #5
org $02e809
JSL OWSpecialExit
org $02bfe8
JSL OWAdjustExitPosition
org $02c1a9
JSL OWEndScrollTransition
org $05af75
jsl OWPreserveMirrorSprite : nop #2 ; LDA $7EF3CA : BNE $05AFDF
@@ -107,10 +125,14 @@ org $1bed95 ; < ? - palettes.asm:748 ()
jsl.l OWWorldCheck16 : nop
org $02b16e ; AND #$3F : ORA 7EF3CA
and #$7f : eor #$40 : nop #2 ; something to do with mirroring and simply toggling world to opposite one: TODO: better comment
and #$7f : eor #$40 : nop #2
;Code
org $aa8800
OWTransitionDirection:
dw 3, 2, 1, 0 ; $02 after $02A932
OWEdgeDataOffset:
dw OWSouthEdges, OWEastEdges, OWSouthEdges
OWCoordIndex: ; Horizontal 1st
db 2, 2, 0, 0 ; Coordinate Index $20-$23
OWOppCoordIndex: ; Horizontal 1st
@@ -304,22 +326,88 @@ LoadMapDarkOrMixed:
dw $0C00-$01F0 ; top right
dw 0,0,0,0,0,0
dw $0800+$01F0 ; bottom left
dw $0400+$0210 ; bottom
dw $0400+$0210 ; bottom right
}
org $aa9000
OWDetectEdgeTransition:
{
STZ.w $06FC
LDA.l OWMode : ORA.l OWMode+1 : BEQ .normal
JSR OWShuffle
LDA.w $06FA : BMI .special
.normal
REP #$31 : LDX.b $02 : LDA.b $84 ; what we wrote over
RTL
.special
REP #$30
AND.w #$0003 : TAY : ASL : TAX
LDA.w #$007F : STA.w $06FA
JSR OWLoadSpecialArea
SEC
RTL
}
OWDetectSpecialTransition:
{
STZ.w $06FC
LDA.l OWMode : BEQ .normal
LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BNE .special
STA.w $06FA
LDA.l OWEdgeDataOffset,X : STA.w $06F8
PLA : SEP #$30 : PLA ; delete 3 bytes from stack
JSL $07F413 : BCS .return ; Link_CheckForEdgeScreenTransition
LDA.l $04E879,X : STA.b $00 : CMP.b #$08 : BNE .hobo
LSR : STA.b $20 : STZ.b $E8 ; move Link and camera to edge
LDA.b #$06 : STA.b $02
STZ.w $0418
BRA .continue
.hobo
STA.b $02 : STA.w $0418
ASL : STA.b $22 : STZ.b $E2 ; move Link and camera to edge
LDA.b #$0A : STA.b $23 : STA.b $E3
.continue
STZ.b $03
; copied from DeleteCertainAncillaeStopDashing at $028A0E
JSL $09AC57 ; Ancilla_TerminateSelectInteractives
LDA.w $0372 : BEQ .not_dashing
STZ.b $4D : STZ.b $46
LDA.b #$FF : STA.b $29 : STA.b $C7
STZ.b $3D : STZ.b $5E : STZ.w $032B : STZ.w $0372 : STZ.b $5D
.not_dashing
PLA : REP #$31 : PLA ; delete 3 bytes from stack
LDX.b $02
LDA.b $84
JML $02A93F
.special
AND.w #$0003 : TAY : ASL : TAX
.normal
JSR OWLoadSpecialArea
.return
RTL
}
OWEdgeTransition:
{
php : phy
lda.l OWMode : ora.l OWMode+1 : beq +
jsl OWShuffle : bra .return
+ jsl OWVanilla
.return
ply : plp : rtl
LDA.l OWMode : ORA.l OWMode+1 : BEQ .normal
LDY.w $06FA : CPY.b #$7F
BEQ .normal
REP #$10
LDX.w $06F8
PHB : PHK : PLB
JSR OWNewDestination
PLB
SEP #$30
RTL
.normal
LDA.l $02A4E3,X : ORA.l $7EF3CA ; what we wrote over
RTL
}
OWVanilla:
OWSpecialExit:
{
lda $02a4e3,X : ora $7ef3ca : rtl
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .return
JSR OWWorldUpdate
.return
LDA.l $7EFD40,X ; what we wrote over
RTL
}
OWShuffle:
{
@@ -330,21 +418,13 @@ OWShuffle:
;down X = $34
;compares X to determine direction of edge transition
phx : lsr $700 : cpx $700 : !blt .upOrLeft
dex : cpx $700 : bne .downEdge
lda #$3 : sta $418 : bra .setOWID ;right
.downEdge
lda #$1 : sta $418 : bra .setOWID ;down
.upOrLeft
inx : cpx $700 : bne .upEdge
lda #$2 : sta $418 : bra .setOWID ;left
.upEdge
lda #$0 : sta $418 ;up
phx : lsr.w $0700
tyx : lda.l OWTransitionDirection,X : sta.w $0418
.setOWID
;look up transitions in current area in table OWEdgeOffsets
;offset is (8bytes * OW Slot ID) + (2bytes * direction)
asl : rep #$20 : pha : sep #$20 ;2 bytes per direction
asl : rep #$20 : and.w #$00ff : pha : sep #$20 ;2 bytes per direction
lda $8a : and #$40 : !add $700 : rep #$30 : and #$00ff : asl #3
adc 1,S : tax
asl $700 : pla
@@ -368,25 +448,25 @@ OWShuffle:
pla : dec : bne .nextTransition : bra .noTransition
.newDestination
pla : sep #$30 : plx : lda $8a : bra .return
pla : sep #$30 : plx : rts
.noTransition
sep #$30 : plx : jsl OWVanilla
sep #$30 : plx
lda.b #$7f : sta.w $06fa
.return
rtl
rts
}
OWSearchTransition:
{
;A-16 XY-16
lda $418 : bne + ;north
lda.l OWNorthEdges,x : dec
cmp $22 : !bge .nomatch
lda.l OWNorthEdges+2,x : cmp $22 : !blt .nomatch
cmp $22 : !bge .exitloop
lda.l OWNorthEdges+2,x : cmp $22 : !blt .exitloop
;MATCH
lda.l OWNorthEdges+14,x : tay ;y = record id of dest
sep #$20 : lda #OWSouthEdges>>16 : phb : pha : plb
ldx #OWSouthEdges : jsr OWNewDestination : plb ;x = address of table
ldx.w #OWSouthEdges ;x = address of table
bra .matchfound
+ dec : bne + ;south
lda.l OWSouthEdges,x : dec
@@ -394,29 +474,25 @@ OWSearchTransition:
lda.l OWSouthEdges+2,x : cmp $22 : !blt .exitloop
;MATCH
lda.l OWSouthEdges+14,x : tay ;y = record id of dest
sep #$20 : lda #OWNorthEdges>>16 : phb : pha : plb : phx
ldx #OWNorthEdges : jsr OWNewDestination : plx : plb ;x = address of table
ldx.w #OWNorthEdges ;x = address of table
bra .matchfound
.nomatch
bra .exitloop
+ dec : bne + ; west
lda.l OWWestEdges,x : dec
cmp $20 : !bge .exitloop
lda.l OWWestEdges+2,x : cmp $20 : !blt .exitloop
;MATCH
lda.l OWWestEdges+14,x : tay ;y = record id of dest
sep #$20 : lda #OWEastEdges>>16 : phb : pha : plb
ldx #OWEastEdges : jsr OWNewDestination : plb ;x = address of table
ldx.w #OWEastEdges ;x = address of table
bra .matchfound
+ lda.l OWEastEdges,x : dec ;east
cmp $20 : !bge .exitloop
lda.l OWEastEdges+2,x : cmp $20 : !blt .exitloop
;MATCH
lda.l OWEastEdges+14,x : tay ;y = record id of dest
sep #$20 : lda #OWWestEdges>>16 : phb : pha : plb
ldx #OWWestEdges : jsr OWNewDestination : plb ;x = address of table
ldx.w #OWWestEdges ;x = address of table
.matchfound
stx $06f8 : sty $06fa : sec : rts
plx : pla : pea $0001 : phx
sec : rts
@@ -449,10 +525,11 @@ OWNewDestination:
++ lda $84 : !add 1,s : sta $84 : pla : pla
.adjustMainAxis
;LDA $84 : SEC : SBC #$0400 : AND #$0F80 : ASL : XBA : STA $88 ; vram
LDA $84 : SEC : SBC #$0400 : AND #$0F00 : ASL : XBA : STA $88
LDA $84 : SEC : SBC #$0400 : AND #$0F00 : ASL : XBA : STA $88 ; vram
LDA $84 : SEC : SBC #$0010 : AND #$003E : LSR : STA $86
LDA.w $000F,X : AND.w #$00FF : STA.w $06FC ; position to walk to after transition (if non-zero)
pla : pla : sep #$10 : ldy $418
ldx OWCoordIndex,y : lda $20,x : and #$fe00 : pha
lda $20,x : and #$01ff : pha ;s1 = relative cur, s3 = ow cur
@@ -496,7 +573,7 @@ OWNewDestination:
ldx OWOppBGIndex,y : lda $e0,x : !add 1,s : sta $e0,x
lda $418 : asl : tax : lda $610,x : !add 1,s : sta $610,x : pla
sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700
sep #$30 : lda $04 : and #$3f : !add OWOppSlotOffset,y : asl : sta $700
; crossed OW shuffle
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .return
@@ -504,13 +581,18 @@ OWNewDestination:
.return
lda $05 : sta $8a
;bra +
; nop #8
; jsl $02EA41
; nop #8
;+
rep #$30 : rts
}
OWLoadSpecialArea:
{
LDA.l $04E881,X : STA.b $A0
JSL $04E8B4
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .return
TYX : LDA.l OWSpecialDestSlot,X : TAX
JSR OWWorldUpdate
.return
RTS
}
OWWorldUpdate: ; x = owid of destination screen
{
lda.l OWTileWorldAssoc,x : cmp.l $7ef3ca : beq .return
@@ -545,10 +627,29 @@ OWWorldUpdate: ; x = owid of destination screen
.return
rts
}
OWSpecialTransition:
OWAdjustExitPosition:
{
LDX #$9E
- DEX : DEX : CMP $DAEE,X : BNE -
LDA.w $06FC : CMP.b #$60 : BEQ .stone_bridge
CMP.b #$B0 : BNE .normal
LDA.b #$80 : STA.b $20 : STZ.b $21
BRA .normal
.stone_bridge
LDA.b #$A0 : STA.b $E2
LDA.b #$3D : STA.w $061C
LDA.b #$3B : STA.w $061E
INC.b $23 : INC.w $061D : INC.w $061F
.normal
INC.b $11 : STZ.b $B0 ; what we wrote over
RTL
}
OWEndScrollTransition:
{
LDY.w $06FC : BEQ .normal
CMP.w $06FC
RTL
.normal
CMP.l $02C176,X ; what we wrote over
RTL
}
;Data
@@ -556,7 +657,7 @@ org $aaa000
OWEdgeOffsets:
;2 bytes per each direction per each OW Slot, order is NSWE per value at $0418
;AABB, A = offset to the transition table, B = number of transitions
dw $0001, $0000, $0000, $0000 ;OW Slot 00, OWID 0x00 Lost Woods
dw $0000, $0000, $0000, $0000 ;OW Slot 00, OWID 0x00 Lost Woods
dw $0000, $0000, $0000, $0001 ;OW Slot 01, OWID 0x00
dw $0000, $0001, $0001, $0000 ;OW Slot 02, OWID 0x02 Lumberjack
dw $0000, $0000, $0000, $0000
@@ -572,7 +673,7 @@ dw $0000, $0000, $0000, $0000
dw $0000, $0000, $0000, $0301
dw $0000, $0000, $0301, $0000
dw $0000, $0000, $0000, $0000
dw $0201, $0501, $0000, $0000 ;Zora
dw $0000, $0501, $0000, $0000 ;Zora
dw $0302, $0602, $0000, $0000
dw $0501, $0801, $0000, $0402
@@ -606,7 +707,7 @@ dw $1101, $0000, $1201, $1301
dw $0000, $1502, $1301, $0000
dw $1201, $1701, $0000, $1403
dw $1301, $1801, $1403, $1701 ;Links
dw $1401, $1901, $1702, $1802 ;Hobo
dw $1401, $1901, $1801, $1802 ;Hobo
dw $1501, $1a02, $1902, $0000
dw $1601, $0000, $0000, $0000
@@ -704,12 +805,15 @@ dw $0000, $4001, $0000, $0000
dw $0000, $0000, $0000, $4a01
dw $0000, $4101, $0000, $0000
OWSpecialDestSlot:
db $80, $80, $81
org $aaa800 ;PC 152800
OWNorthEdges:
; Min Max Width Mid OW Slot/OWID VRAM *FREE* Dest Index
dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $0040 ;Lost Woods
dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $B040 ;Lost Woods (exit only)
dw $0458, $0540, $00e8, $04cc, $0a0a, $0000, $0000, $0000
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $0041
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $2041 ;Waterfall (exit only)
dw $0058, $0058, $0000, $0058, $1010, $0000, $0000, $0001
dw $0178, $0178, $0000, $0178, $1010, $0000, $0000, $0002
dw $0388, $0388, $0000, $0388, $1111, $0000, $0000, $0003
@@ -838,8 +942,8 @@ dw $06a0, $07b0, $0110, $0728, $7373, $0000, $0000, $003e
dw $0830, $09b0, $0180, $08f0, $7474, $0000, $0000, $003f
dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0000, $0040
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $0000, $0000, $0041
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal
dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused)
dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora (unused)
OWWestEdges:
dw $0070, $00a0, $0030, $0088, $0202, $0000, $0000, $0000
dw $0068, $0078, $0010, $0070, $0505, $0000, $0000, $0001
@@ -864,7 +968,7 @@ dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0000, $0000, $0013
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0000, $0000, $0014
dw $0af0, $0b40, $0050, $0b18, $2c2c, $0000, $0000, $0015
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $0000, $0000, $0016
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0000, $004a
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0000, $604a ;Stone Bridge (exit only)
dw $0b68, $0b98, $0030, $0b80, $2d2d, $0000, $0000, $0017
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $0000, $0000, $0018
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0000, $0019
@@ -991,7 +1095,11 @@ dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $0000, $0000, $0047
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $0000, $0000, $0048
dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0000, $0049
dw $0f70, $0fb8, $0048, $0f94, $757e, $0000, $0000, $004a
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0000, $0017 ;Hobo
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0000, $0017 ;Hobo (unused)
org $aab9e0 ;PC 1539e0
OWSpecialDestIndex:
dw $0080, $0081, $0082
org $aaba00 ;PC 153a00
OWTileWorldAssoc:
@@ -1011,6 +1119,7 @@ db $40, $40, $40, $40, $40, $40, $40, $40
db $40, $40, $40, $40, $40, $40, $40, $40
db $40, $40, $40, $40, $40, $40, $40, $40
db $40, $40, $40, $40, $40, $40, $40, $40
db $00, $00
org $aabb00 ;PC 153b00
OWTileMapAlt:
@@ -1031,3 +1140,5 @@ db 0, 0, 0, 0, 0, 0, 0, 0
db 0, 0, 0, 0, 0, 0, 0, 0
db 0, 0, 0, 0, 0, 0, 0, 0
db 0, 0, 0, 0, 0, 0, 0, 0
db 0, 0

Binary file not shown.