mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-08-09 03:34:37 -05:00
Addresses of sections will now be added to the linkerscript via `org`, and the section name will be the path/to/file. If there is more than one section in the file, then add a @SectionName after the path/to/file to describe the section.
1734 lines
25 KiB
NASM
1734 lines
25 KiB
NASM
INCLUDE "constants.asm"
|
|
|
|
SECTION "home/map.asm", ROM0
|
|
|
|
; Runs a map script indexed by wMapScriptNumber
|
|
RunMapScript:: ; 20ff
|
|
push hl
|
|
push de
|
|
push bc
|
|
ld a, [wMapScriptNumber]
|
|
add a, a
|
|
add a, a
|
|
ld d, 0
|
|
ld e, a
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, .return
|
|
push de
|
|
jp hl
|
|
|
|
.return
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
; TODO: is this used?
|
|
WriteIntod637:: ; 2117
|
|
push af
|
|
; TODO: figure out what variables are concerned here
|
|
ld a, [wd637]
|
|
ld [wd638], a
|
|
pop af
|
|
ld [wd637], a
|
|
ret
|
|
|
|
ClearMapBuffer:: ; 00:2123
|
|
ld hl, wMapBuffer
|
|
ld bc, wMapBufferEnd - wMapBuffer
|
|
ld a, 0
|
|
call ByteFill
|
|
ret
|
|
|
|
SetUpMapBuffer:: ; 212f
|
|
call ClearMapBuffer
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(UnknownMapBufferPointers)
|
|
call Bankswitch
|
|
ld hl, UnknownMapBufferPointers
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapId]
|
|
ld c, a
|
|
.search
|
|
ld a, [hli]
|
|
cp $FF
|
|
jr z, .done
|
|
cp b
|
|
jr nz, .next_with_id
|
|
ld a, [hli]
|
|
cp c
|
|
jr nz, .next_without_id
|
|
|
|
; Match found!
|
|
ld de, wMapScriptNumberLocation
|
|
call GetMapScriptNumber ; Read map script from pointed location
|
|
call CopyWord ; Copy map script pointer
|
|
ld de, wUnknownMapPointer
|
|
call CopyWord
|
|
|
|
.done
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
.next_with_id
|
|
ld de, 7
|
|
add hl, de
|
|
jr .search
|
|
|
|
.next_without_id
|
|
ld de, 6
|
|
add hl, de
|
|
jr .search
|
|
|
|
GetMapScriptNumber:: ; 2171
|
|
push hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [hl]
|
|
ld [wMapScriptNumber], a
|
|
pop hl
|
|
ret
|
|
|
|
CopyWord:: ; 217b
|
|
ld a, [hli]
|
|
ld [de], a
|
|
ld a, [hli]
|
|
inc de
|
|
ld [de], a
|
|
ret
|
|
|
|
|
|
SetMapScriptNumber:: ; 2181
|
|
ld [wMapScriptNumber], a
|
|
ret
|
|
|
|
IncMapScriptNumber:: ; 2185
|
|
ld hl, wMapScriptNumber
|
|
inc [hl]
|
|
ret
|
|
|
|
DecMapScriptNumber:: ; 218a
|
|
ld hl, wMapScriptNumber
|
|
dec [hl]
|
|
ret
|
|
|
|
WriteBackMapScriptNumber:: ; 218f
|
|
ld a, [wMapScriptNumberLocation]
|
|
ld l, a
|
|
ld a, [wMapScriptNumberLocation + 1]
|
|
ld h, a
|
|
ld a, [wMapScriptNumber]
|
|
ld [hl], a
|
|
ret
|
|
|
|
|
|
GetMapPointer:: ; 219c
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapId]
|
|
ld c, a
|
|
GetAnyMapPointer:: ; 21a4
|
|
push bc
|
|
dec b
|
|
ld c, b
|
|
ld b, 0
|
|
ld hl, MapGroupPointers
|
|
add hl, bc
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
pop bc
|
|
dec c
|
|
ld b, 0
|
|
ld a, 8
|
|
call AddNTimes
|
|
ret
|
|
|
|
|
|
SwitchToMapBank:: ; 21bb
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapId]
|
|
ld c, a
|
|
SwitchToAnyMapBank:: ; 21c3
|
|
push hl
|
|
ld a, BANK(MapGroupPointers)
|
|
call Bankswitch
|
|
call GetAnyMapPointer
|
|
ld a, [hl]
|
|
call Bankswitch
|
|
pop hl
|
|
ret
|
|
|
|
|
|
CopyMapPartial:: ; 213d
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(MapGroupPointers)
|
|
call Bankswitch
|
|
call GetMapPointer
|
|
ld de, wMapPartial
|
|
ld bc, wMapPartialEnd - wMapPartial
|
|
call CopyBytes
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
GetMapAttributesPointer:: ; 21eb
|
|
push bc
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(MapGroupPointers)
|
|
call Bankswitch
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapId]
|
|
ld c, a
|
|
call GetAnyMapPointer
|
|
ld bc, 3 ; TODO: constantify this
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
pop af
|
|
call Bankswitch
|
|
pop bc
|
|
ret
|
|
|
|
GetMapEnvironment:: ; 220c
|
|
push hl
|
|
push bc
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(MapGroupPointers)
|
|
call Bankswitch
|
|
call GetMapPointer
|
|
ld bc, 2 ; TODO: constantify this
|
|
add hl, bc
|
|
ld b, [hl]
|
|
pop af
|
|
call Bankswitch
|
|
ld a, b
|
|
pop bc
|
|
pop hl
|
|
ret
|
|
|
|
GetAnyMapEnvironment:: ; 2226
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(MapGroupPointers)
|
|
call Bankswitch
|
|
call GetAnyMapPointer
|
|
ld bc, 2 ; TODO: constantify this
|
|
add hl, bc
|
|
ld b, [hl]
|
|
pop af
|
|
call Bankswitch
|
|
ld a, b
|
|
ret
|
|
|
|
GetWorldMapLocation:: ; 223c
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(MapGroupPointers)
|
|
call Bankswitch
|
|
call GetAnyMapPointer
|
|
ld bc, 5 ; TODO: constantify this
|
|
add hl, bc
|
|
ld b, [hl]
|
|
pop af
|
|
call Bankswitch
|
|
ld a, b
|
|
ret
|
|
|
|
|
|
EmptyFunction2252:: ; 2252
|
|
ret
|
|
|
|
|
|
LoadMap:: ; 2253
|
|
ldh a, [hMapEntryMethod]
|
|
and a ; Possible bug: if the entry method is $X0, this will overflow
|
|
ret z
|
|
and $0F
|
|
dec a
|
|
ld hl, .jumptable
|
|
call CallJumptable
|
|
xor a
|
|
ldh [hMapEntryMethod], a
|
|
scf
|
|
ret
|
|
|
|
.jumptable
|
|
dw MapSetup_Continue
|
|
dw MapSetup_22af ; TODO
|
|
dw MapSetup_Reload
|
|
dw MapSetup_22de ; TODO
|
|
dw MapSetup_22de ; TODO
|
|
dw MapSetup_Warp
|
|
dw MapSetup_Connection
|
|
dw MapSetup_2275 ; TODO
|
|
|
|
|
|
MapSetup_2275:: ; 2275
|
|
ldh a, [hROMBank]
|
|
push af
|
|
call MapSetup_22af ; TODO
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
MapSetup_Reload:: ; 2280
|
|
call DisableLCD
|
|
call DisableAudio
|
|
call VolumeOff
|
|
call SwitchToMapBank
|
|
call LoadGraphics
|
|
call ChangeMap
|
|
call SaveScreen
|
|
call LoadMapTimeOfDay
|
|
call EnableLCD
|
|
call PlayMapMusic
|
|
ld a, $88 ; TODO: constantify this
|
|
ld [wMusicFade], a
|
|
ld b, 9 ; TODO: constantify this
|
|
call GetSGBLayout
|
|
call LoadWildMons
|
|
call FadeIn
|
|
ret
|
|
|
|
MapSetup_22af:: ; 22af
|
|
call DisableLCD
|
|
call DisableAudio
|
|
call VolumeOff
|
|
call SwitchToMapBank
|
|
call SetUpMapBuffer
|
|
call InitUnknownBuffercc9e
|
|
call LoadGraphics
|
|
call ChangeMap
|
|
call LoadMapTimeOfDay
|
|
call EnableLCD
|
|
call PlayMapMusic
|
|
ld a, $88 ; TODO: constantify this
|
|
ld [wMusicFade], a
|
|
ld b, 9 ; TODO: constantify this
|
|
call GetSGBLayout
|
|
call FadeIn
|
|
ret
|
|
|
|
MapSetup_22de:: ; 22de
|
|
callab OverworldFadeOut
|
|
|
|
MapSetup_Continue:: ; 22e6
|
|
call DisableLCD
|
|
call DisableAudio
|
|
call VolumeOff
|
|
callab LoadSpawnPoint
|
|
call CopyMapPartialAndAttributes
|
|
call SetUpMapBuffer
|
|
call InitUnknownBuffercc9e
|
|
call RefreshPlayerCoords
|
|
call GetCoordOfUpperLeftCorner
|
|
call LoadGraphics
|
|
call ChangeMap
|
|
call LoadMapTimeOfDay
|
|
call InitializeVisibleSprites
|
|
call EnableLCD
|
|
call PlayMapMusic
|
|
ld a, $88 ; TODO: constantify this
|
|
ld [wMusicFade], a
|
|
ld b, 9 ; TODO: constantify this
|
|
call GetSGBLayout
|
|
call LoadWildMons
|
|
call $242C ; TODO
|
|
call FadeIn
|
|
ret
|
|
|
|
MapSetup_Warp:: ; 232c
|
|
callab OverworldFadeOut
|
|
call DisableLCD
|
|
call Function27C7 ; TODO
|
|
ld a, [wNextWarp]
|
|
ld [wWarpNumber], a
|
|
ld a, [wNextMapGroup]
|
|
ld [wMapGroup], a
|
|
ld a, [wNextMapId]
|
|
ld [wMapId], a
|
|
call CopyMapPartialAndAttributes
|
|
call SetUpMapBuffer
|
|
call InitUnknownBuffercc9e
|
|
call RestoreFacingAfterWarp
|
|
call RefreshPlayerCoords
|
|
call LoadGraphics
|
|
call ChangeMap
|
|
call LoadMapTimeOfDay
|
|
call InitializeVisibleSprites
|
|
call EnableLCD
|
|
call PlayMapMusic
|
|
ld b, 9 ; TODO: constantify this
|
|
call GetSGBLayout
|
|
call LoadWildMons
|
|
call FadeIn
|
|
call Function2407 ; TODO
|
|
ret
|
|
|
|
LoadMapTimeOfDay:: ; 237c
|
|
callab ReplaceTimeOfDayPals
|
|
call LoadMapPart
|
|
call .ClearBGMap
|
|
call .PushAttrMap
|
|
ret
|
|
|
|
.ClearBGMap ; 238e
|
|
ld a, HIGH(vBGMap0)
|
|
ld [wBGMapAnchor + 1], a
|
|
xor a ; LOW(vBGMap0)
|
|
ld [wBGMapAnchor], a
|
|
ldh [hSCY], a
|
|
ldh [hSCX], a
|
|
|
|
ld a, "■"
|
|
ld bc, vBGMap1 - vBGMap0
|
|
hlbgcoord 0, 0
|
|
call ByteFill
|
|
ret
|
|
|
|
.PushAttrMap ; 23a7
|
|
decoord 0, 0
|
|
hlbgcoord 0, 0
|
|
ld c, SCREEN_WIDTH
|
|
ld b, SCREEN_HEIGHT
|
|
.row
|
|
push bc
|
|
.column
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .column
|
|
ld bc, BG_MAP_WIDTH - SCREEN_WIDTH
|
|
add hl, bc
|
|
pop bc
|
|
dec b
|
|
jr nz, .row
|
|
ret
|
|
|
|
LoadWildMons:: ; 23c1
|
|
callab _LoadWildMons
|
|
ret
|
|
|
|
LoadGraphics:: ; 23ca
|
|
call LoadTileset
|
|
call LoadTilesetGFX
|
|
callba RefreshSprites
|
|
call LoadFontExtra
|
|
ret
|
|
|
|
InitializeVisibleSprites:: ; 23dc
|
|
callab _InitializeVisibleSprites
|
|
ret
|
|
|
|
FadeIn:: ; 23e5 ; This is not OverworldFadeIn, but I don't know what it is
|
|
call InitToolgearBuffer
|
|
call RefreshTiles
|
|
ld hl, wVramState
|
|
set 0, [hl]
|
|
call Function2407
|
|
callab _UpdateSprites
|
|
call DelayFrame
|
|
callab OverworldFadeIn
|
|
ret
|
|
|
|
Function2407:: ; 00:2407
|
|
ld a, NO_MOVEMENT
|
|
ld [wPlayerMovement], a
|
|
xor a
|
|
ld [wPlayerAction], a
|
|
ld a, [wPlayerFacing]
|
|
and $c
|
|
ld [wPlayerFacing], a
|
|
ld a, [wPlayerStandingTile]
|
|
and $f0
|
|
cp $70
|
|
ret nz
|
|
ld a, [wPlayerStandingTile]
|
|
cp $72
|
|
ret z
|
|
cp $70
|
|
ret z
|
|
cp $78
|
|
ret z
|
|
ld a, $0
|
|
ld [wPlayerFacing], a
|
|
ld a, $0
|
|
ld d, $0
|
|
call SetObjectFacing
|
|
ret
|
|
|
|
MapSetup_Connection:: ; 2439
|
|
call EnterMapConnection
|
|
call CopyMapPartialAndAttributes
|
|
call SetUpMapBuffer
|
|
call InitUnknownBuffercc9e
|
|
call RefreshPlayerCoords
|
|
call InitializeVisibleSprites
|
|
call ChangeMap
|
|
call SaveScreen
|
|
call FadeToMapMusic
|
|
ld b, 9 ; TODO: constantify this
|
|
call GetSGBLayout
|
|
call LoadWildMons
|
|
scf
|
|
ret
|
|
|
|
CheckMovingOffEdgeOfMap:: ; 245e
|
|
ld a, [wPlayerStepDirection]
|
|
cp STANDING
|
|
ret z
|
|
and a ; DOWN
|
|
jr z, .down
|
|
cp UP
|
|
jr z, .up
|
|
cp LEFT
|
|
jr z, .left
|
|
cp RIGHT
|
|
jr z, .right
|
|
and a
|
|
ret
|
|
|
|
.down
|
|
ld a, [wPlayerNextMapY]
|
|
sub 4
|
|
ld b, a
|
|
ld a, [wMapHeight]
|
|
add a
|
|
cp b
|
|
jr z, .ok
|
|
and a
|
|
ret
|
|
|
|
.up
|
|
ld a, [wPlayerNextMapY]
|
|
sub 4
|
|
cp -1
|
|
jr z, .ok
|
|
and a
|
|
ret
|
|
|
|
.left
|
|
ld a, [wPlayerNextMapX]
|
|
sub 4
|
|
cp -1
|
|
jr z, .ok
|
|
and a
|
|
ret
|
|
|
|
.right
|
|
ld a, [wPlayerNextMapX]
|
|
sub 4
|
|
ld b, a
|
|
ld a, [wMapWidth]
|
|
add a
|
|
cp b
|
|
jr z, .ok
|
|
and a
|
|
ret
|
|
|
|
.ok
|
|
ld a, MAPSETUP_CONNECTION
|
|
ldh [hMapEntryMethod], a
|
|
scf
|
|
ret
|
|
|
|
EnterMapConnection: ; 24af
|
|
; Return carry if a connection has been entered.
|
|
ld a, [wPlayerStepDirection]
|
|
and a
|
|
jp z, .south
|
|
cp UP
|
|
jp z, .north
|
|
cp LEFT
|
|
jp z, .west
|
|
cp RIGHT
|
|
jp z, .east
|
|
ret
|
|
|
|
.west
|
|
ld a, [wWestConnectedMapGroup]
|
|
ld [wMapGroup], a
|
|
ld a, [wWestConnectedMapNumber]
|
|
ld [wMapId], a
|
|
ld a, [wWestConnectionStripXOffset]
|
|
ld [wXCoord], a
|
|
ld a, [wWestConnectionStripYOffset]
|
|
ld hl, wYCoord
|
|
add [hl]
|
|
ld [hl], a
|
|
ld c, a
|
|
ld hl, wWestConnectionWindow
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
srl c
|
|
jr z, .skip_to_load
|
|
ld a, [wWestConnectedMapWidth]
|
|
add 6
|
|
ld e, a
|
|
ld d, 0
|
|
|
|
.loop
|
|
add hl, de
|
|
dec c
|
|
jr nz, .loop
|
|
|
|
.skip_to_load
|
|
ld a, l
|
|
ld [wOverworldMapAnchor], a
|
|
ld a, h
|
|
ld [wOverworldMapAnchor + 1], a
|
|
jp .done
|
|
|
|
.east
|
|
ld a, [wEastConnectedMapGroup]
|
|
ld [wMapGroup], a
|
|
ld a, [wEastConnectedMapNumber]
|
|
ld [wMapId], a
|
|
ld a, [wEastConnectionStripXOffset]
|
|
ld [wXCoord], a
|
|
ld a, [wEastConnectionStripYOffset]
|
|
ld hl, wYCoord
|
|
add [hl]
|
|
ld [hl], a
|
|
ld c, a
|
|
ld hl, wEastConnectionWindow
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
srl c
|
|
jr z, .skip_to_load2
|
|
ld a, [wEastConnectedMapWidth]
|
|
add 6
|
|
ld e, a
|
|
ld d, 0
|
|
|
|
.loop2
|
|
add hl, de
|
|
dec c
|
|
jr nz, .loop2
|
|
|
|
.skip_to_load2
|
|
ld a, l
|
|
ld [wOverworldMapAnchor], a
|
|
ld a, h
|
|
ld [wOverworldMapAnchor + 1], a
|
|
jp .done
|
|
|
|
.north
|
|
ld a, [wNorthConnectedMapGroup]
|
|
ld [wMapGroup], a
|
|
ld a, [wNorthConnectedMapNumber]
|
|
ld [wMapId], a
|
|
ld a, [wNorthConnectionStripYOffset]
|
|
ld [wYCoord], a
|
|
ld a, [wNorthConnectionStripXOffset]
|
|
ld hl, wXCoord
|
|
add [hl]
|
|
ld [hl], a
|
|
ld c, a
|
|
ld hl, wNorthConnectionWindow
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld b, 0
|
|
srl c
|
|
add hl, bc
|
|
ld a, l
|
|
ld [wOverworldMapAnchor], a
|
|
ld a, h
|
|
ld [wOverworldMapAnchor + 1], a
|
|
jp .done
|
|
|
|
.south
|
|
ld a, [wSouthConnectedMapGroup]
|
|
ld [wMapGroup], a
|
|
ld a, [wSouthConnectedMapNumber]
|
|
ld [wMapId], a
|
|
ld a, [wSouthConnectionStripYOffset]
|
|
ld [wYCoord], a
|
|
ld a, [wSouthConnectionStripXOffset]
|
|
ld hl, wXCoord
|
|
add [hl]
|
|
ld [hl], a
|
|
ld c, a
|
|
ld hl, wSouthConnectionWindow
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld b, 0
|
|
srl c
|
|
add hl, bc
|
|
ld a, l
|
|
ld [wOverworldMapAnchor], a
|
|
ld a, h
|
|
ld [wOverworldMapAnchor + 1], a
|
|
.done
|
|
scf
|
|
ret
|
|
|
|
|
|
WarpCheck:: ; 259f
|
|
call GetDestinationWarpPointer
|
|
ret nc
|
|
ld a, [hli]
|
|
ld [wNextWarp], a
|
|
ld a, [hli]
|
|
ld [wNextMapGroup], a
|
|
ld a, [hli]
|
|
ld [wNextMapId], a
|
|
ld a, c
|
|
ld [wPrevWarp], a
|
|
ld a, MAPSETUP_WARP
|
|
ldh [hMapEntryMethod], a
|
|
scf
|
|
ret
|
|
|
|
GetDestinationWarpPointer: ; 25b9
|
|
ld a, [wPlayerNextMapY]
|
|
sub 4
|
|
ld d, a
|
|
ld a, [wPlayerNextMapX]
|
|
sub 4
|
|
ld e, a
|
|
ld a, [wCurrMapWarpCount]
|
|
ld c, a
|
|
and a
|
|
ret z
|
|
|
|
ld hl, wCurrMapWarps
|
|
.next
|
|
ld a, [hli]
|
|
cp d
|
|
jr nz, .nope
|
|
ld a, [hl]
|
|
cp e
|
|
jr z, .found_warp
|
|
.nope
|
|
push de
|
|
ld de, 4 ; TODO: constantify this
|
|
add hl, de
|
|
pop de
|
|
dec c
|
|
jr nz, .next
|
|
xor a
|
|
ret
|
|
|
|
.found_warp
|
|
ld a, [wCurrMapWarpCount]
|
|
inc a
|
|
sub c
|
|
ld c, a
|
|
inc hl
|
|
scf
|
|
ret
|
|
|
|
|
|
CopyMapPartialAndAttributes:: ; 25ea
|
|
call SwitchToMapBank
|
|
call CopyAndReadHeaders
|
|
call ReadObjectEvents
|
|
ret
|
|
|
|
CopyAndReadHeaders:: ; 25f4
|
|
call CopyMapPartial
|
|
call GetMapAttributesPointer
|
|
ld hl, wMapAttributesPtr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, wMapAttributes
|
|
ld c, wMapAttributesEnd - wMapAttributes
|
|
.copy
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .copy
|
|
call GetMapConnections
|
|
ld hl, wMapObjectsPtr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
inc hl
|
|
inc hl
|
|
call ReadWarps
|
|
call ReadSigns
|
|
ret
|
|
|
|
GetMapConnections:: ; 261d
|
|
ld a, $ff
|
|
ld [wNorthConnectedMapGroup], a
|
|
ld [wSouthConnectedMapGroup], a
|
|
ld [wWestConnectedMapGroup], a
|
|
ld [wEastConnectedMapGroup], a
|
|
|
|
ld a, [wMapConnections]
|
|
ld b, a
|
|
bit 3, b
|
|
jr z, .no_north
|
|
ld de, wNorthMapConnection
|
|
call GetMapConnection
|
|
.no_north
|
|
|
|
bit 2, b
|
|
jr z, .no_south
|
|
ld de, wSouthMapConnection
|
|
call GetMapConnection
|
|
.no_south
|
|
|
|
bit 1, b
|
|
jr z, .no_west
|
|
ld de, wWestMapConnection
|
|
call GetMapConnection
|
|
.no_west
|
|
|
|
bit 0, b
|
|
jr z, .no_east
|
|
ld de, wEastMapConnection
|
|
call GetMapConnection
|
|
.no_east
|
|
|
|
ret
|
|
|
|
GetMapConnection:: ; 2658
|
|
ld c, wSouthMapConnection - wNorthMapConnection
|
|
.copy
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .copy
|
|
ret
|
|
|
|
|
|
ReadWarps:: ; 2661
|
|
ld a, [hli]
|
|
ld [wCurrMapWarpCount], a
|
|
and a
|
|
ret z
|
|
ld c, a
|
|
ld de, wCurrMapWarps
|
|
.next
|
|
ld b, 5 ; TODO: constantify this
|
|
.copy
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec b
|
|
jr nz, .copy
|
|
inc hl
|
|
inc hl
|
|
dec c
|
|
jr nz, .next
|
|
ret
|
|
|
|
|
|
ReadSigns:: ; 2679
|
|
ld a, [hli]
|
|
ld [wCurrMapSignCount], a
|
|
and a
|
|
ret z
|
|
ld c, a
|
|
ld de, wCurrMapSigns
|
|
.next
|
|
ld b, 4
|
|
.copy
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec b
|
|
jr nz, .copy
|
|
dec c
|
|
jr nz, .next
|
|
ret
|
|
|
|
|
|
ReadObjectEvents:: ; 268f
|
|
push hl
|
|
call ClearObjectStructs
|
|
pop de
|
|
ld hl, wMap2Object
|
|
ld a, [de]
|
|
inc de
|
|
ld [wCurrMapObjectCount], a
|
|
and a
|
|
jr z, .skip
|
|
|
|
ld c, a
|
|
.next
|
|
push bc
|
|
push hl
|
|
ld a, $ff
|
|
ld [hli], a
|
|
ld b, wMap2ObjectUnused - wMap2ObjectSprite
|
|
.copy
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
dec b
|
|
jr nz, .copy
|
|
pop hl
|
|
ld bc, wMap3Object - wMap2Object
|
|
add hl, bc
|
|
pop bc
|
|
dec c
|
|
jr nz, .next
|
|
|
|
.skip
|
|
ld a, [wCurrMapObjectCount]
|
|
ld c, a
|
|
ld a, 16 ; 16 objects -- but this causes an overflow, since we only start from object 2
|
|
sub c
|
|
jr z, .finish
|
|
ld bc, 1
|
|
add hl, bc ; Very thorough optimization. Don't do this at home, kids.
|
|
ld bc, wMap3Object - wMap2Object
|
|
.clear
|
|
ld [hl], 0
|
|
add hl, bc
|
|
dec a
|
|
jr nz, .clear
|
|
|
|
.finish
|
|
ld h, d
|
|
ld l, e
|
|
ret
|
|
|
|
ClearObjectStructs:: ; 26cf
|
|
xor a
|
|
ld [wUnkObjectStruct], a ; TODO
|
|
ld hl, wObject2Struct
|
|
ld de, wObject2Struct - wObject1Struct
|
|
ld c, 7
|
|
.clear_struct
|
|
ld [hl], a
|
|
add hl, de
|
|
dec c
|
|
jr nz, .clear_struct
|
|
|
|
ld hl, $D00F ; TODO
|
|
ld de, 16
|
|
ld c, 4
|
|
xor a
|
|
.clear_unk ; TODO
|
|
ld [hl], a
|
|
add hl, de
|
|
dec c
|
|
jr nz, .clear_unk
|
|
ret
|
|
|
|
|
|
ReadWord:: ; 26ef ; TODO: is this used?
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc hl
|
|
ret
|
|
|
|
|
|
InitUnknownBuffercc9e:: ; 26f4
|
|
xor a
|
|
ld hl, wUnknownWordcc9c
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld hl, wUnknownBuffercc9e ; useless
|
|
ld bc, 14 ; TODO: constantify this
|
|
ld a, $ff
|
|
call ByteFill
|
|
ld hl, wUnknownMapPointer
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld a, e
|
|
or d
|
|
jr z, .null
|
|
|
|
ld a, [wMapBuffer]
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, de
|
|
inc hl
|
|
inc hl
|
|
ld c, [hl]
|
|
inc hl
|
|
ld b, [hl]
|
|
ld de, wUnknownBuffercc9e - 2
|
|
.next
|
|
ld a, [bc]
|
|
inc bc
|
|
cp $ff ; Could have used one of the `inc a` below
|
|
jr z, .done
|
|
inc a
|
|
inc a
|
|
and $0f
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, de
|
|
ld [hl], 0
|
|
jr .next
|
|
|
|
.null
|
|
ld hl, wUnknownBuffercc9e
|
|
ld bc, 14 ; TODO: constantify this
|
|
xor a
|
|
call ByteFill
|
|
.done
|
|
ret
|
|
|
|
|
|
RestoreFacingAfterWarp:: ; 273d
|
|
ld hl, wMapObjectsPtr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
; Point to 1st warp
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
ld a, [wWarpNumber]
|
|
dec a
|
|
ld c, a
|
|
ld b, 0
|
|
ld a, 7 ; Size of warp ; TODO: constantify this
|
|
call AddNTimes
|
|
ld a, [hli]
|
|
ld [wYCoord], a
|
|
ld a, [hli]
|
|
ld [wXCoord], a
|
|
call GetCoordOfUpperLeftCorner
|
|
ret
|
|
|
|
|
|
Function275e:: ; 275e ; TODO: is this used?
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
ld a, [hli]
|
|
ld [wOverworldMapAnchor], a
|
|
ld a, [hl]
|
|
ld [wOverworldMapAnchor + 1], a
|
|
ld a, [wYCoord]
|
|
and 1
|
|
ld [wMetatileNextY], a
|
|
ld a, [wXCoord]
|
|
and 1
|
|
ld [wMetatileNextX], a
|
|
ret
|
|
|
|
|
|
GetCoordOfUpperLeftCorner:: ; 277a
|
|
ld hl, wOverworldMapBlocks
|
|
ld a, [wXCoord]
|
|
bit 0, a
|
|
jr nz, .increment_then_halve1
|
|
srl a
|
|
add a, 1
|
|
jr .resume
|
|
|
|
.increment_then_halve1
|
|
add a, 1
|
|
srl a
|
|
|
|
.resume
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
ld a, [wMapWidth]
|
|
add a, 6
|
|
ld c, a
|
|
ld b, 0
|
|
ld a, [wYCoord]
|
|
bit 0, a
|
|
jr nz, .increment_then_halve2
|
|
srl a
|
|
add a, 1
|
|
jr .resume2
|
|
|
|
.increment_then_halve2
|
|
add a, 1
|
|
srl a
|
|
|
|
.resume2
|
|
call AddNTimes
|
|
ld a, l
|
|
ld [wOverworldMapAnchor], a
|
|
ld a, h
|
|
ld [wOverworldMapAnchor + 1], a
|
|
ld a, [wYCoord]
|
|
and 1
|
|
ld [wMetatileNextY], a
|
|
ld a, [wXCoord]
|
|
and 1
|
|
ld [wMetatileNextX], a
|
|
ret
|
|
|
|
Function27C7:: ; 27c7 ; TODO
|
|
call GetMapEnvironment
|
|
cp 2
|
|
jr z, .interior
|
|
cp 1
|
|
jr z, .interior
|
|
ret
|
|
.interior
|
|
ld a, [wNextMapGroup]
|
|
ld b, a
|
|
ld a, [wNextMapId]
|
|
ld c, a
|
|
call GetAnyMapEnvironment
|
|
cp 3
|
|
jr z, .exterior
|
|
cp 4
|
|
jr z, .exterior
|
|
cp 6
|
|
jr z, .exterior
|
|
ret
|
|
|
|
.exterior
|
|
ld hl, $D4B2 ; TODO: figure out what this is
|
|
ld a, [wPrevWarp]
|
|
ld [hli], a
|
|
ld a, [wMapGroup]
|
|
ld [hli], a
|
|
ld a, [wMapId]
|
|
ld [hli], a
|
|
ret
|
|
|
|
LoadMapPart:: ; 27fb
|
|
callab UpdateTimeOfDayPal
|
|
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, [wTilesetBank]
|
|
call Bankswitch
|
|
|
|
call LoadMetatiles
|
|
ld a, "■"
|
|
hlcoord 0, 0
|
|
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
|
|
call ByteFill
|
|
|
|
call ApplyFlashlight
|
|
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
LoadMetatiles:: ; 2822
|
|
ld a, [wOverworldMapAnchor]
|
|
ld e, a
|
|
ld a, [wOverworldMapAnchor + 1]
|
|
ld d, a
|
|
ld hl, wTileMapBackup
|
|
ld b, 5 ; TODO: constantify this
|
|
.row
|
|
push de
|
|
push hl
|
|
ld c, 6 ; TODO: constantify this
|
|
.tile
|
|
push bc
|
|
push de
|
|
push hl
|
|
ld a, [de]
|
|
ld c, a
|
|
call DrawMetatile
|
|
pop hl
|
|
ld bc, 4
|
|
add hl, bc
|
|
pop de
|
|
inc de
|
|
pop bc
|
|
dec c
|
|
jr nz, .tile
|
|
pop hl
|
|
ld de, BG_MAP_WIDTH * 3
|
|
add hl, de
|
|
pop de
|
|
ld a, [wMapWidth]
|
|
add a, 6
|
|
add a, e
|
|
ld e, a
|
|
jr nc, .nocarry
|
|
inc d
|
|
.nocarry
|
|
dec b
|
|
jr nz, .row
|
|
ret
|
|
|
|
ApplyFlashlight:: ; 285a
|
|
ld hl, wTileMapBackup
|
|
ld a, [wMetatileNextY]
|
|
and a
|
|
jr z, .top_row
|
|
ld bc, $30 ; TODO: constantify this
|
|
add hl, bc
|
|
.top_row
|
|
ld a, [wMetatileNextX]
|
|
and a
|
|
jr z, .left_col
|
|
inc hl
|
|
inc hl
|
|
.left_col
|
|
|
|
ldh a, [hOverworldFlashlightEffect]
|
|
and a
|
|
jr z, .no_flashlight
|
|
cp 1
|
|
jr z, .force_1
|
|
cp 2
|
|
jr z, .force_2
|
|
cp 3
|
|
jr z, .force_3
|
|
jp .force_9001
|
|
|
|
.no_flashlight
|
|
ld de, wTileMap
|
|
ld b, SCREEN_HEIGHT ; TODO: constantify this
|
|
.row
|
|
ld c, SCREEN_WIDTH
|
|
.tile
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .tile
|
|
|
|
ld a, l
|
|
add a, 4
|
|
ld l, a
|
|
jr nc, .nocarry
|
|
inc h
|
|
.nocarry
|
|
dec b
|
|
jr nz, .row
|
|
ret
|
|
|
|
; redraw_with_flashlight force
|
|
; force = 1, 2 or 3
|
|
; 0 and 4 have special handling, see above and below
|
|
redraw_with_flashlight: MACRO
|
|
decoord \1 * 2, \1 * 2
|
|
ld bc, \1 * $32 ; TODO: constantify the $32
|
|
add hl, bc
|
|
ld c, SCREEN_HEIGHT - \1 * 4
|
|
.row\1
|
|
ld b, SCREEN_HEIGHT - \1 * 4
|
|
.tile\1
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec b
|
|
jr nz, .tile\1
|
|
ld a, l
|
|
add a, 6 + \1 * 4
|
|
ld l, a
|
|
jr nc, .nohlcarry\1
|
|
inc h
|
|
.nohlcarry\1
|
|
ld a, e
|
|
add a, 2 + \1 * 4
|
|
ld e, a
|
|
jr nc, .nodecarry\1
|
|
inc d
|
|
.nodecarry\1
|
|
dec c
|
|
jr nz, .row\1
|
|
ENDM
|
|
|
|
.force_1 ; 289b
|
|
redraw_with_flashlight 1
|
|
ret
|
|
|
|
.force_2 ; 28be
|
|
redraw_with_flashlight 2
|
|
ret
|
|
|
|
.force_3 ; 28e1
|
|
redraw_with_flashlight 3
|
|
ret
|
|
|
|
.force_9001 ; 2904
|
|
; Actually force 4, but this also applies to larger values
|
|
decoord 4 * 2, 4 * 2
|
|
ld bc, 4 * $32 ; TODO: constantify the $32
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hli]
|
|
ld [de], a
|
|
ld bc, 6 + 4 * 4
|
|
add hl, bc
|
|
ld a, e
|
|
add a, 2 + 4 * 4 + 1 ; Compensate missing `inc de`
|
|
ld e, a
|
|
jr nc, .nocarry9001
|
|
inc d
|
|
.nocarry9001
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hli]
|
|
ld [de], a
|
|
ret
|
|
|
|
DrawMetatile:: ; 2921
|
|
push hl
|
|
ld hl, wTilesetBlocksAddress
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
swap c
|
|
ld a, c
|
|
and $0f
|
|
ld b, a
|
|
ld a, c
|
|
and $f0
|
|
ld c, a
|
|
add hl, bc
|
|
pop de
|
|
lb bc, $14, 4 ; TODO: constantify $14
|
|
.row
|
|
REPT 4
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ENDR
|
|
ld a, e
|
|
add a, b
|
|
ld e, a
|
|
jr nc, .nocarry
|
|
inc d
|
|
.nocarry
|
|
dec c
|
|
jr nz, .row
|
|
ret
|
|
|
|
|
|
ChangeMap:: ; 294d
|
|
ld hl, wOverworldMapBlocks
|
|
ld bc, wOverworldMapBlocksEnd - wOverworldMapBlocks
|
|
ld a, 0
|
|
call ByteFill
|
|
|
|
ld hl, wOverworldMapBlocks
|
|
ld a, [wMapWidth]
|
|
ldh [hConnectedMapWidth], a
|
|
add a, 6
|
|
ldh [hConnectionStripLength], a
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
add hl, bc
|
|
add hl, bc
|
|
ld c, 3
|
|
add hl, bc
|
|
|
|
ld a, [wMapBlocksPointer]
|
|
ld e, a
|
|
ld a, [wMapBlocksPointer + 1]
|
|
ld d, a
|
|
ld a, [wMapHeight]
|
|
ld b, a
|
|
.row
|
|
push hl
|
|
ldh a, [hConnectedMapWidth]
|
|
ld c, a
|
|
.col
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .col
|
|
pop hl
|
|
ldh a, [hConnectionStripLength]
|
|
add l
|
|
ld l, a
|
|
jr nc, .okay
|
|
inc h
|
|
.okay
|
|
dec b
|
|
jr nz, .row
|
|
|
|
; FillMapConnections:: ; 298e
|
|
|
|
ld a, [wNorthConnectedMapGroup]
|
|
cp $ff
|
|
jr z, .south
|
|
ld b, a
|
|
ld a, [wNorthConnectedMapNumber]
|
|
ld c, a
|
|
call SwitchToAnyMapBank
|
|
|
|
ld a, [wNorthConnectionStripPointer]
|
|
ld l, a
|
|
ld a, [wNorthConnectionStripPointer + 1]
|
|
ld h, a
|
|
ld a, [wNorthConnectionStripLocation]
|
|
ld e, a
|
|
ld a, [wNorthConnectionStripLocation + 1]
|
|
ld d, a
|
|
ld a, [wNorthConnectionStripLength]
|
|
ldh [hConnectionStripLength], a
|
|
ld a, [wNorthConnectedMapWidth]
|
|
ldh [hConnectedMapWidth], a
|
|
call FillNorthConnectionStrip
|
|
|
|
.south
|
|
ld a, [wSouthConnectedMapGroup]
|
|
cp $ff
|
|
jr z, .west
|
|
ld b, a
|
|
ld a, [wSouthConnectedMapNumber]
|
|
ld c, a
|
|
call SwitchToAnyMapBank
|
|
|
|
ld a, [wSouthConnectionStripPointer]
|
|
ld l, a
|
|
ld a, [wSouthConnectionStripPointer + 1]
|
|
ld h, a
|
|
ld a, [wSouthConnectionStripLocation]
|
|
ld e, a
|
|
ld a, [wSouthConnectionStripLocation + 1]
|
|
ld d, a
|
|
ld a, [wSouthConnectionStripLength]
|
|
ldh [hConnectionStripLength], a
|
|
ld a, [wSouthConnectedMapWidth]
|
|
ldh [hConnectedMapWidth], a
|
|
call FillSouthConnectionStrip
|
|
|
|
.west
|
|
ld a, [wWestConnectedMapGroup]
|
|
cp $ff
|
|
jr z, .east
|
|
ld b, a
|
|
ld a, [wWestConnectedMapNumber]
|
|
ld c, a
|
|
call SwitchToAnyMapBank
|
|
|
|
ld a, [wWestConnectionStripPointer]
|
|
ld l, a
|
|
ld a, [wWestConnectionStripPointer + 1]
|
|
ld h, a
|
|
ld a, [wWestConnectionStripLocation]
|
|
ld e, a
|
|
ld a, [wWestConnectionStripLocation + 1]
|
|
ld d, a
|
|
ld a, [wWestConnectionStripLength]
|
|
ld b, a
|
|
ld a, [wWestConnectedMapWidth]
|
|
ldh [hConnectionStripLength], a
|
|
call FillWestConnectionStrip
|
|
|
|
.east
|
|
ld a, [wEastConnectedMapGroup]
|
|
cp $ff
|
|
jr z, .done
|
|
ld b, a
|
|
ld a, [wEastConnectedMapNumber]
|
|
ld c, a
|
|
call SwitchToAnyMapBank
|
|
|
|
ld a, [wEastConnectionStripPointer]
|
|
ld l, a
|
|
ld a, [wEastConnectionStripPointer + 1]
|
|
ld h, a
|
|
ld a, [wEastConnectionStripLocation]
|
|
ld e, a
|
|
ld a, [wEastConnectionStripLocation + 1]
|
|
ld d, a
|
|
ld a, [wEastConnectionStripLength]
|
|
ld b, a
|
|
ld a, [wEastConnectedMapWidth]
|
|
ldh [hConnectionStripLength], a
|
|
call FillEastConnectionStrip
|
|
|
|
.done
|
|
ret
|
|
|
|
FillNorthConnectionStrip::
|
|
FillSouthConnectionStrip:: ; 2a3d
|
|
|
|
ld c, 3
|
|
.y
|
|
push de
|
|
|
|
push hl
|
|
ldh a, [hConnectionStripLength]
|
|
ld b, a
|
|
.x
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec b
|
|
jr nz, .x
|
|
pop hl
|
|
|
|
ldh a, [hConnectedMapWidth]
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
pop de
|
|
|
|
ld a, [wMapWidth]
|
|
add a, 6
|
|
add e
|
|
ld e, a
|
|
jr nc, .okay
|
|
inc d
|
|
.okay
|
|
dec c
|
|
jr nz, .y
|
|
ret
|
|
; 25f6
|
|
|
|
FillWestConnectionStrip::
|
|
FillEastConnectionStrip:: ; 2a60
|
|
|
|
.loop
|
|
ld a, [wMapWidth]
|
|
add a, 6
|
|
ldh [hConnectedMapWidth], a
|
|
|
|
push de
|
|
|
|
push hl
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
pop hl
|
|
|
|
ldh a, [hConnectionStripLength]
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
pop de
|
|
|
|
ldh a, [hConnectedMapWidth]
|
|
add e
|
|
ld e, a
|
|
jr nc, .okay
|
|
inc d
|
|
.okay
|
|
dec b
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Function2a85::
|
|
.asm_2a85: ; 00:2a85
|
|
call LoadMap
|
|
call Function2a8d
|
|
jr .asm_2a85
|
|
|
|
Function2a8d:: ; 00:2a8d
|
|
push hl
|
|
push de
|
|
push bc
|
|
push af
|
|
|
|
ld a, [wd637]
|
|
and $f
|
|
add a
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, .Pointers
|
|
add hl, de
|
|
add hl, de
|
|
|
|
ld a, [hli]
|
|
call Bankswitch
|
|
|
|
inc hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, .Return
|
|
push de
|
|
jp hl
|
|
|
|
.Return: ; 00:2aac
|
|
pop af
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
.Pointers: ; 00:2ab1
|
|
dbbw $00, $55, Function2ae5
|
|
dbbw $00, $55, Function2b52
|
|
dbbw $00, $55, Function2b77
|
|
dbbw $0e, $33, Function3904
|
|
dbbw $00, $55, Function2b39
|
|
dbbw $0e, $33, Function391f
|
|
dbbw $00, $33, Function2b78
|
|
dbbw $00, $33, Function2b78
|
|
dbbw $0e, $33, Function3904
|
|
dbbw $00, $55, Function2b79
|
|
dbbw $00, $55, Function2b87
|
|
dbbw $0e, $33, Function3920
|
|
dbbw $05, $33, Function14777
|
|
|
|
Function2ae5::
|
|
.loop: ; 00:2ae5
|
|
ld hl, wJoypadFlags
|
|
set 4, [hl]
|
|
set 6, [hl]
|
|
call UpdateTime
|
|
call TimeOfDayPals
|
|
ld hl, wJoypadFlags
|
|
res 4, [hl]
|
|
res 6, [hl]
|
|
call GetJoypad
|
|
call Function2be5
|
|
ld hl, wc5ed
|
|
bit 7, [hl]
|
|
res 7, [hl]
|
|
ret nz
|
|
call TestWildBattleStart
|
|
ret nz
|
|
call OverworldStartButtonCheck
|
|
ret nz
|
|
callab OverworldMovementCheck
|
|
ldh a, [hMapEntryMethod]
|
|
and a
|
|
ret nz
|
|
call Function2c4a
|
|
jr nc, .loop
|
|
callba Function824c
|
|
ld a, [wc5ed]
|
|
bit 6, a
|
|
jr nz, .loop
|
|
call CheckMovingOffEdgeOfMap
|
|
ret c
|
|
call WarpCheck
|
|
ret c
|
|
jr .loop
|
|
|
|
Function2b39::
|
|
ld hl, wJoypadFlags
|
|
res 4, [hl]
|
|
res 6, [hl]
|
|
ld hl, wDebugFlags
|
|
res 6, [hl]
|
|
res 7, [hl]
|
|
ld hl, wVramState
|
|
res 7, [hl]
|
|
ld a, $0
|
|
call WriteIntod637
|
|
ret
|
|
|
|
Function2b52::
|
|
.asm_2b52: ; 00:2b52
|
|
call UpdateTime
|
|
ld a, [wVramState]
|
|
bit 7, a
|
|
jr z, Function2b39
|
|
ldh a, [hMapEntryMethod]
|
|
and a
|
|
ret nz
|
|
call Function2c4a
|
|
jr nc, .asm_2b52
|
|
callba Function824c
|
|
call CheckMovingOffEdgeOfMap
|
|
ret c
|
|
call WarpCheck
|
|
ret c
|
|
jr .asm_2b52
|
|
|
|
Function2b77::
|
|
ret
|
|
|
|
Function2b78::
|
|
ret
|
|
|
|
Function2b79::
|
|
callab Functionfce3e
|
|
ld a, $4
|
|
call WriteIntod637
|
|
ret
|
|
|
|
Function2b87::
|
|
.asm_2b87: ; 00:2b87
|
|
call UpdateTime
|
|
call GetJoypad
|
|
call OverworldStartButtonCheck
|
|
ret nz
|
|
callab OverworldMovementCheck
|
|
call Function2ba8
|
|
jr nc, .asm_2b87
|
|
callba Function824c
|
|
jr .asm_2b87
|
|
|
|
Function2ba8:: ; 00:2ba8
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(Function50b9)
|
|
call Bankswitch
|
|
call Function50b9
|
|
call Function18a0
|
|
ld a, BANK(Functiond6e4)
|
|
call Bankswitch
|
|
call Functiond6e4
|
|
ld a, BANK(_UpdateSprites)
|
|
call Bankswitch
|
|
call _UpdateSprites
|
|
call DelayFrame
|
|
call UpdateToolgear
|
|
ld hl, wToolgearFlags
|
|
set 2, [hl] ; transfer toolgear to window
|
|
call DelayFrame
|
|
pop af
|
|
call Bankswitch
|
|
and a
|
|
ld a, [wcb6e]
|
|
bit 5, a
|
|
ret z
|
|
bit 6, a
|
|
jr z, Function2ba8
|
|
scf
|
|
ret
|
|
|
|
Function2be5:: ; 00:2be5 ; TODO
|
|
ld a, [wDebugFlags]
|
|
bit 7, a
|
|
ret nz
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapId]
|
|
ld c, a
|
|
call SwitchToAnyMapBank
|
|
call QueueMapTextSubroutine
|
|
ld hl, wMapScriptPtr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, .Return
|
|
push de
|
|
jp hl
|
|
|
|
.Return: ; 00:2c04
|
|
ret |