summaryrefslogtreecommitdiff
path: root/home/map.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/map.asm')
-rw-r--r--home/map.asm1747
1 files changed, 983 insertions, 764 deletions
diff --git a/home/map.asm b/home/map.asm
index c210f03d..0ed02c46 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -1,105 +1,123 @@
-Clear_wc6e8:: ; 1f5d (0:1f5d)
- ld hl, wc6e8
- ld bc, $18
- ld a, $0
+; Functions dealing with rendering and interacting with maps.
+
+ClearUnusedMapBuffer::
+ ld hl, wUnusedMapBuffer
+ ld bc, wUnusedMapBufferEnd - wUnusedMapBuffer
+ ld a, 0
call ByteFill
ret
-CheckTriggers:: ; 1f69 (0:1f69)
+CheckScenes::
+; Checks wCurMapSceneScriptPointer. If it's empty, returns -1 in a. Otherwise, returns the active scene ID in a.
push hl
- ld hl, wCurrentMapTriggerPointer
+ ld hl, wCurMapSceneScriptPointer
ld a, [hli]
ld h, [hl]
ld l, a
or h
ld a, [hl]
- jr nz, .asm_1f76
- ld a, $ff
-.asm_1f76
+ jr nz, .scene_exists
+ ld a, -1
+
+.scene_exists
pop hl
ret
-GetCurrentMapTrigger:: ; 1f78 (0:1f78)
+GetCurrentMapSceneID::
+; Grabs the wram map scene script pointer for the current map and loads it into wCurMapSceneScriptPointer.
+; If there is no scene, both bytes of wCurMapSceneScriptPointer are wiped clean.
+; Copy the current map group and number into bc. This is needed for GetMapSceneID.
ld a, [wMapGroup]
ld b, a
ld a, [wMapNumber]
ld c, a
+; Blank out wCurMapSceneScriptPointer; this is the default scenario.
xor a
- ld [wCurrentMapTriggerPointer], a
- ld [wCurrentMapTriggerPointer + 1], a
- call GetMapTrigger
- ret c
+ ld [wCurMapSceneScriptPointer], a
+ ld [wCurMapSceneScriptPointer + 1], a
+ call GetMapSceneID
+ ret c ; The map is not in the scene script table
+; Load the scene script pointer from de into wCurMapSceneScriptPointer
ld a, e
- ld [wCurrentMapTriggerPointer], a
+ ld [wCurMapSceneScriptPointer], a
ld a, d
- ld [wCurrentMapTriggerPointer + 1], a
+ ld [wCurMapSceneScriptPointer + 1], a
xor a
ret
-GetMapTrigger:: ; 1f95 (0:1f95)
+GetMapSceneID::
+; Searches the scene_var table for the map group and number loaded in bc, and returns the wram pointer in de.
+; If the map is not in the scene_var table, returns carry.
push bc
ldh a, [hROMBank]
push af
- ld a, BANK(MapTriggers)
+ ld a, BANK(MapScenes)
rst Bankswitch
- ld hl, MapTriggers
-.asm_1f9f
+
+ ld hl, MapScenes
+.loop
push hl
- ld a, [hli]
- cp $ff
- jr z, .asm_1fb5
+ ld a, [hli] ; map group, or terminator
+ cp -1
+ jr z, .end ; the current map is not in the scene_var table
cp b
- jr nz, .asm_1fae
- ld a, [hli]
+ jr nz, .next ; map group did not match
+ ld a, [hli] ; map number
cp c
- jr nz, .asm_1fae
- jr .asm_1fb8
+ jr nz, .next ; map number did not match
+ jr .found ; we found our map
-.asm_1fae
+.next
pop hl
- ld de, $4
+ ld de, 4 ; scene_var size
add hl, de
- jr .asm_1f9f
+ jr .loop
-.asm_1fb5
+.end
scf
- jr .asm_1fbb
+ jr .done
-.asm_1fb8
+.found
ld e, [hl]
inc hl
ld d, [hl]
-.asm_1fbb
+
+.done
pop hl
pop bc
ld a, b
rst Bankswitch
+
pop bc
ret
-OverworldTextModeSwitch:: ; 1fc1 (0:1fc1)
+OverworldTextModeSwitch::
call LoadMapPart
call SwapTextboxPalettes
ret
-LoadMapPart:: ; 1fc8 (0:1fc8)
+LoadMapPart::
ldh a, [hROMBank]
push af
+
ld a, [wTilesetBlocksBank]
rst Bankswitch
call LoadMetatiles
- ld a, $60
+
+ ld a, "■"
hlcoord 0, 0
- ld bc, $168
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
call ByteFill
- ld a, $5
+
+ ld a, BANK(_LoadMapPart)
rst Bankswitch
- call $538d
+ call _LoadMapPart
+
pop af
rst Bankswitch
ret
-LoadMetatiles:: ; 1fe6 (0:1fe6)
+LoadMetatiles::
; de <- wOverworldMapAnchor
ld a, [wOverworldMapAnchor]
ld e, a
@@ -127,10 +145,13 @@ LoadMetatiles:: ; 1fe6 (0:1fe6)
; Load the current wSurroundingTiles address into de.
ld e, l
ld d, h
- ; Set hl to the address of the current metatile data ([TilesetBlocksAddress] + (a) tiles).
- add a
+ ; Set hl to the address of the current metatile data ([wTilesetBlocksAddress] + (a) tiles).
+ ; This is buggy; it wraps around past 128 blocks.
+ ; To fix, uncomment the line below.
+ add a ; Comment or delete this line to fix the above bug.
ld l, a
ld h, 0
+ ; add hl, hl
add hl, hl
add hl, hl
add hl, hl
@@ -142,7 +163,7 @@ LoadMetatiles:: ; 1fe6 (0:1fe6)
ld h, a
; copy the 4x4 metatile
-rept METATILE_WIDTH + -1
+rept METATILE_WIDTH - 1
rept METATILE_WIDTH
ld a, [hli]
ld [de], a
@@ -162,7 +183,7 @@ rept METATILE_WIDTH
endr
; Next metatile
pop hl
- ld de, 4
+ ld de, METATILE_WIDTH
add hl, de
pop de
inc de
@@ -185,7 +206,7 @@ endr
ret
ReturnToMapFromSubmenu::
- ld a, $fa
+ ld a, MAPSETUP_SUBMENU
ldh [hMapEntryMethod], a
farcall RunMapSetupScript
xor a
@@ -193,78 +214,80 @@ ReturnToMapFromSubmenu::
ret
HandleNewMap::
- call Clear_wc6e8
+ call ClearUnusedMapBuffer
call ResetMapBufferEventFlags
call ResetFlashIfOutOfCave
- call GetCurrentMapTrigger
+ call GetCurrentMapSceneID
call ResetBikeFlags
- ld a, $5
+ ld a, MAPCALLBACK_NEWMAP
call RunMapCallback
HandleContinueMap::
- farcall Function97c2a
- ld a, $3
+ farcall ClearCmdQueue
+ ld a, MAPCALLBACK_CMDQUEUE
call RunMapCallback
- call GetMapHeaderTimeOfDayNybble
+ call GetMapTimeOfDay
ld [wMapTimeOfDay], a
ret
LoadMapTimeOfDay::
ld a, $1
ld [wSpriteUpdatesEnabled], a
- farcall Function8c3e9
+ farcall ReplaceTimeOfDayPals
farcall UpdateTimeOfDayPal
call OverworldTextModeSwitch
- call Function20c7
- call Function20e6
+ call .ClearBGMap
+ call .PushAttrmap
ret
-Function20c7:: ; 20c7 (0:20c7)
- ld a, $98
- ld [wd05c], a
- xor a
- ld [wd05b], a
+.ClearBGMap:
+ ld a, HIGH(vBGMap0)
+ ld [wBGMapAnchor + 1], a
+ xor a ; LOW(vBGMap0)
+ ld [wBGMapAnchor], a
ldh [hSCY], a
ldh [hSCX], a
farcall ApplyBGMapAnchorToObjects
- ld a, $60
- ld bc, $400
- ld hl, $9800
+
+ ld a, "■"
+ ld bc, vBGMap1 - vBGMap0
+ hlbgcoord 0, 0
call ByteFill
ret
-Function20e6:: ; 20e6 (0:20e6)
+.PushAttrmap:
decoord 0, 0
- call Function20f7
+ call .copy
ldh a, [hCGB]
and a
ret z
+
decoord 0, 0, wAttrmap
ld a, $1
ldh [rVBK], a
-Function20f7:: ; 20f7 (0:20f7)
- ld hl, $9800
- ld c, $14
- ld b, $12
-.asm_20fe
+.copy
+ hlbgcoord 0, 0
+ ld c, SCREEN_WIDTH
+ ld b, SCREEN_HEIGHT
+.row
push bc
-.asm_20ff
+.column
ld a, [de]
inc de
ld [hli], a
dec c
- jr nz, .asm_20ff
- ld bc, $c
+ jr nz, .column
+ ld bc, BG_MAP_WIDTH - SCREEN_WIDTH
add hl, bc
pop bc
dec b
- jr nz, .asm_20fe
+ jr nz, .row
ld a, $0
ldh [rVBK], a
ret
LoadMapGraphics::
call LoadMapTileset
- call LoadTileset
+ call LoadTilesetGFX
xor a
ldh [hMapAnims], a
xor a
@@ -281,277 +304,290 @@ RefreshMapSprites::
call ClearSprites
call ResetBGWindow
call GetMovementPermissions
- farcall Function5730
+ farcall RefreshPlayerSprite
farcall CheckReplaceChrisSprite
ld hl, wPlayerSpriteSetupFlags
- bit 6, [hl]
- jr nz, .asm_2151
+ bit PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl]
+ jr nz, .skip
ld hl, wVramState
set 0, [hl]
call SafeUpdateSprites
-.asm_2151
+.skip
xor a
ld [wPlayerSpriteSetupFlags], a
ret
-Function2156::
+CheckMovingOffEdgeOfMap::
ld a, [wPlayerStepDirection]
- cp $ff
+ cp STANDING
ret z
- and a
- jr z, .asm_216d
- cp $1
- jr z, .asm_217c
- cp $2
- jr z, .asm_2187
- cp $3
- jr z, .asm_2192
+ and a ; DOWN
+ jr z, .down
+ cp UP
+ jr z, .up
+ cp LEFT
+ jr z, .left
+ cp RIGHT
+ jr z, .right
and a
ret
-.asm_216d
+.down
ld a, [wPlayerStandingMapY]
- sub $4
+ sub 4
ld b, a
- ld a, [wd087]
+ ld a, [wMapHeight]
add a
cp b
- jr z, .asm_21a1
+ jr z, .ok
and a
ret
-.asm_217c
+.up
ld a, [wPlayerStandingMapY]
- sub $4
- cp $ff
- jr z, .asm_21a1
+ sub 4
+ cp -1
+ jr z, .ok
and a
ret
-.asm_2187
+.left
ld a, [wPlayerStandingMapX]
- sub $4
- cp $ff
- jr z, .asm_21a1
+ sub 4
+ cp -1
+ jr z, .ok
and a
ret
-.asm_2192
+.right
ld a, [wPlayerStandingMapX]
- sub $4
+ sub 4
ld b, a
ld a, [wMapWidth]
add a
cp b
- jr z, .asm_21a1
+ jr z, .ok
and a
ret
-.asm_21a1
+.ok
scf
ret
EnterMapConnection::
+; Return carry if a connection has been entered.
ld a, [wPlayerStepDirection]
- and a
- jp z, Function2263
- cp $1
- jp z, Function2232
- cp $2
- jp z, Function21ba
- cp $3
- jp z, Function21f6
- ret
-
-Function21ba:: ; 21ba (0:21ba)
- ld a, [wd0aa]
+ and a ; DOWN
+ 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, [wd0ab]
+ ld a, [wWestConnectedMapNumber]
ld [wMapNumber], a
- ld a, [wd0b3]
+ ld a, [wWestConnectionStripXOffset]
ld [wXCoord], a
- ld a, [wd0b2]
+ ld a, [wWestConnectionStripYOffset]
ld hl, wYCoord
add [hl]
ld [hl], a
ld c, a
- ld hl, wd0b4
+ ld hl, wWestConnectionWindow
ld a, [hli]
ld h, [hl]
ld l, a
srl c
- jr z, .asm_21eb
- ld a, [wd0b1]
- add $6
+ jr z, .skip_to_load
+ ld a, [wWestConnectedMapWidth]
+ add 6
ld e, a
- ld d, $0
-.asm_21e7
+ ld d, 0
+
+.loop
add hl, de
dec c
- jr nz, .asm_21e7
-.asm_21eb
+ jr nz, .loop
+
+.skip_to_load
ld a, l
ld [wOverworldMapAnchor], a
ld a, h
ld [wOverworldMapAnchor + 1], a
- jp Function2291
+ jp .done
-Function21f6:: ; 21f6 (0:21f6)
- ld a, [wd0b6]
+.east
+ ld a, [wEastConnectedMapGroup]
ld [wMapGroup], a
- ld a, [wd0b7]
+ ld a, [wEastConnectedMapNumber]
ld [wMapNumber], a
- ld a, [wd0bf]
+ ld a, [wEastConnectionStripXOffset]
ld [wXCoord], a
- ld a, [wd0be]
+ ld a, [wEastConnectionStripYOffset]
ld hl, wYCoord
add [hl]
ld [hl], a
ld c, a
- ld hl, wd0c0
+ ld hl, wEastConnectionWindow
ld a, [hli]
ld h, [hl]
ld l, a
srl c
- jr z, .asm_2227
- ld a, [wd0bd]
- add $6
+ jr z, .skip_to_load2
+ ld a, [wEastConnectedMapWidth]
+ add 6
ld e, a
- ld d, $0
-.asm_2223
+ ld d, 0
+
+.loop2
add hl, de
dec c
- jr nz, .asm_2223
-.asm_2227
+ jr nz, .loop2
+
+.skip_to_load2
ld a, l
ld [wOverworldMapAnchor], a
ld a, h
ld [wOverworldMapAnchor + 1], a
- jp Function2291
+ jp .done
-Function2232:: ; 2232 (0:2232)
- ld a, [wd092]
+.north
+ ld a, [wNorthConnectedMapGroup]
ld [wMapGroup], a
- ld a, [wd093]
+ ld a, [wNorthConnectedMapNumber]
ld [wMapNumber], a
- ld a, [wd09a]
+ ld a, [wNorthConnectionStripYOffset]
ld [wYCoord], a
- ld a, [wd09b]
+ ld a, [wNorthConnectionStripXOffset]
ld hl, wXCoord
add [hl]
ld [hl], a
ld c, a
- ld hl, wd09c
+ ld hl, wNorthConnectionWindow
ld a, [hli]
ld h, [hl]
ld l, a
- ld b, $0
+ ld b, 0
srl c
add hl, bc
ld a, l
ld [wOverworldMapAnchor], a
ld a, h
ld [wOverworldMapAnchor + 1], a
- jp Function2291
+ jp .done
-Function2263:: ; 2263 (0:2263)
- ld a, [wd09e]
+.south
+ ld a, [wSouthConnectedMapGroup]
ld [wMapGroup], a
- ld a, [wd09f]
+ ld a, [wSouthConnectedMapNumber]
ld [wMapNumber], a
- ld a, [wd0a6]
+ ld a, [wSouthConnectionStripYOffset]
ld [wYCoord], a
- ld a, [wd0a7]
+ ld a, [wSouthConnectionStripXOffset]
ld hl, wXCoord
add [hl]
ld [hl], a
ld c, a
- ld hl, wd0a8
+ ld hl, wSouthConnectionWindow
ld a, [hli]
ld h, [hl]
ld l, a
- ld b, $0
+ ld b, 0
srl c
add hl, bc
ld a, l
ld [wOverworldMapAnchor], a
ld a, h
ld [wOverworldMapAnchor + 1], a
-Function2291:: ; 2291 (0:2291)
+.done
scf
ret
-Function2293::
- call Function22ad
+CheckWarpTile::
+ call GetDestinationWarpNumber
ret nc
+
push bc
farcall CheckDirectionalWarp
pop bc
ret nc
- call Function2302
+
+ call CopyWarpData
scf
ret
-Function22a5::
- call Function22ad
+WarpCheck::
+ call GetDestinationWarpNumber
ret nc
- call Function2302
+ call CopyWarpData
ret
-Function22ad:: ; 22ad (0:22ad)
+GetDestinationWarpNumber::
farcall CheckWarpCollision
ret nc
+
ldh a, [hROMBank]
push af
+
call SwitchToMapScriptsBank
- call Function22c1
+ call .GetDestinationWarpNumber
+
pop de
ld a, d
rst Bankswitch
ret
-Function22c1:: ; 22c1 (0:22c1)
+.GetDestinationWarpNumber:
ld a, [wPlayerStandingMapY]
- sub $4
+ sub 4
ld e, a
ld a, [wPlayerStandingMapX]
- sub $4
+ sub 4
ld d, a
ld a, [wCurMapWarpCount]
and a
ret z
+
ld c, a
ld hl, wCurMapWarpsPointer
ld a, [hli]
ld h, [hl]
ld l, a
-.asm_22d9
+.loop
push hl
ld a, [hli]
cp e
- jr nz, .asm_22e4
+ jr nz, .next
ld a, [hli]
cp d
- jr nz, .asm_22e4
- jr .asm_22f1
+ jr nz, .next
+ jr .found_warp
-.asm_22e4
+.next
pop hl
- ld a, $5
+ ld a, WARP_EVENT_SIZE
add l
ld l, a
- jr nc, .asm_22ec
+ jr nc, .okay
inc h
-.asm_22ec
+
+.okay
dec c
- jr nz, .asm_22d9
+ jr nz, .loop
xor a
ret
-.asm_22f1
+.found_warp
pop hl
- call Function22fe
- ret nc
+ call .IncreaseHLTwice
+ ret nc ; never encountered
+
ld a, [wCurMapWarpCount]
inc a
sub c
@@ -559,23 +595,25 @@ Function22c1:: ; 22c1 (0:22c1)
scf
ret
-Function22fe:: ; 22fe (0:22fe)
+.IncreaseHLTwice:
inc hl
inc hl
scf
ret
-Function2302:: ; 2302 (0:2302)
+CopyWarpData::
ldh a, [hROMBank]
push af
+
call SwitchToMapScriptsBank
- call Function230f
+ call .CopyWarpData
+
pop af
rst Bankswitch
scf
ret
-Function230f:: ; 230f (0:230f)
+.CopyWarpData:
push bc
ld hl, wCurMapWarpsPointer
ld a, [hli]
@@ -583,24 +621,26 @@ Function230f:: ; 230f (0:230f)
ld l, a
ld a, c
dec a
- ld bc, $5
+ ld bc, WARP_EVENT_SIZE
call AddNTimes
- ld bc, $2
+ ld bc, 2 ; warp number
add hl, bc
ld a, [hli]
- cp $ff
- jr nz, .asm_232b
+ cp -1
+ jr nz, .skip
ld hl, wBackupWarpNumber
ld a, [hli]
-.asm_232b
+
+.skip
pop bc
- ld [wNextWarpNumber], a
+ ld [wNextWarp], a
ld a, [hli]
ld [wNextMapGroup], a
ld a, [hli]
ld [wNextMapNumber], a
+
ld a, c
- ld [wPrevWarpNumber], a
+ ld [wPrevWarp], a
ld a, [wMapGroup]
ld [wPrevMapGroup], a
ld a, [wMapNumber]
@@ -609,17 +649,17 @@ Function230f:: ; 230f (0:230f)
ret
EnterMapWarp::
- call Function2362
- call Function239b
- ld a, [wNextWarpNumber]
- ld [wd9ff], a
+ call .SaveDigWarp
+ call .SetSpawn
+ ld a, [wNextWarp]
+ ld [wWarpNumber], a
ld a, [wNextMapGroup]
ld [wMapGroup], a
ld a, [wNextMapNumber]
ld [wMapNumber], a
ret
-Function2362:: ; 2362 (0:2362)
+.SaveDigWarp::
call GetMapEnvironment
call CheckOutdoorMap
ret nz
@@ -627,19 +667,23 @@ Function2362:: ; 2362 (0:2362)
ld b, a
ld a, [wNextMapNumber]
ld c, a
- call GetAnyMapPermission
+ call GetAnyMapEnvironment
call CheckIndoorMap
ret nz
+
+; MOUNT_MOON_SQUARE and TIN_TOWER_ROOF are outdoor maps within indoor maps.
+; Dig and Escape Rope should not take you to them.
ld a, [wPrevMapGroup]
- cp $f
- jr nz, .asm_2388
+ cp GROUP_MOUNT_MOON_SQUARE ; aka GROUP_TIN_TOWER_ROOF
+ jr nz, .not_mt_moon_or_tin_tower
ld a, [wPrevMapNumber]
- cp $a
+ cp MAP_MOUNT_MOON_SQUARE
ret z
- cp $c
+ cp MAP_TIN_TOWER_ROOF
ret z
-.asm_2388
- ld a, [wPrevWarpNumber]
+.not_mt_moon_or_tin_tower
+
+ ld a, [wPrevWarp]
ld [wDigWarpNumber], a
ld a, [wPrevMapGroup]
ld [wDigMapGroup], a
@@ -647,7 +691,7 @@ Function2362:: ; 2362 (0:2362)
ld [wDigMapNumber], a
ret
-Function239b:: ; 239b (0:239b)
+.SetSpawn:
call GetMapEnvironment
call CheckOutdoorMap
ret nz
@@ -655,30 +699,34 @@ Function239b:: ; 239b (0:239b)
ld b, a
ld a, [wNextMapNumber]
ld c, a
- call GetAnyMapPermission
+ call GetAnyMapEnvironment
call CheckIndoorMap
ret nz
ld a, [wNextMapGroup]
ld b, a
ld a, [wNextMapNumber]
ld c, a
+
+; Respawn in Pokémon Centers.
call GetAnyMapTileset
ld a, c
- cp $6
+ cp TILESET_POKECENTER
ret nz
+
+.pokecenter
ld a, [wPrevMapGroup]
- ld [wd9fb], a
+ ld [wLastSpawnMapGroup], a
ld a, [wPrevMapNumber]
- ld [wd9fc], a
+ ld [wLastSpawnMapNumber], a
ret
-CheckOutdoorMap:: ; 23cd (0:23cd)
+CheckOutdoorMap::
cp ROUTE
ret z
cp TOWN
ret
-CheckIndoorMap:: ; 23d3 (0:23d3)
+CheckIndoorMap::
cp INDOOR
ret z
cp CAVE
@@ -688,7 +736,8 @@ CheckIndoorMap:: ; 23d3 (0:23d3)
cp GATE
ret
-CheckDungeonMap::
+; unused
+UnreferencedCheckEnvironment::
cp INDOOR
ret z
cp GATE
@@ -697,32 +746,32 @@ CheckDungeonMap::
ret
LoadMapAttributes::
- call CopyMapHeaders
+ call CopyMapPartialAndAttributes
call SwitchToMapScriptsBank
call ReadMapScripts
- xor a
- call ReadMapEventHeader
+ xor a ; do not skip object events
+ call ReadMapEvents
ret
LoadMapAttributes_SkipObjects::
- call CopyMapHeaders
+ call CopyMapPartialAndAttributes
call SwitchToMapScriptsBank
call ReadMapScripts
- ld a, $1
- call ReadMapEventHeader
+ ld a, TRUE ; skip object events
+ call ReadMapEvents
ret
-CopyMapHeaders:: ; 2405 (0:2405)
- call PartiallyCopyMapHeader
- call SwitchToMapBank
- call GetSecondaryMapHeaderPointer
- call CopySecondMapHeader
+CopyMapPartialAndAttributes::
+ call CopyMapPartial
+ call SwitchToMapAttributesBank
+ call GetMapAttributesPointer
+ call CopyMapAttributes
call GetMapConnections
ret
-ReadMapEventHeader:: ; 2415 (0:2415)
+ReadMapEvents::
push af
- ld hl, wd08f
+ ld hl, wMapEventsPointer
ld a, [hli]
ld h, [hl]
ld l, a
@@ -730,104 +779,115 @@ ReadMapEventHeader:: ; 2415 (0:2415)
inc hl
call ReadWarps
call ReadCoordEvents
- call ReadSignposts
+ call ReadBGEvents
+
pop af
- and a
+ and a ; skip object events?
ret nz
+
call ReadObjectEvents
ret
-ReadMapScripts:: ; 242e (0:242e)
- ld hl, wd08d
+ReadMapScripts::
+ ld hl, wMapScriptsPointer
ld a, [hli]
ld h, [hl]
ld l, a
- call ReadMapTriggers
+ call ReadMapSceneScripts
call ReadMapCallbacks
ret
-CopySecondMapHeader:: ; 243b (0:243b)
- ld de, wMapBorderBlock
- ld c, $c
-.asm_2440
+CopyMapAttributes::
+ ld de, wMapAttributes
+ ld c, wMapAttributesEnd - wMapAttributes
+.loop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_2440
+ jr nz, .loop
ret
-GetMapConnections:: ; 2447 (0:2447)
+GetMapConnections::
ld a, $ff
- ld [wd092], a
- ld [wd09e], a
- ld [wd0aa], a
- ld [wd0b6], a
- ld a, [wd091]
+ ld [wNorthConnectedMapGroup], a
+ ld [wSouthConnectedMapGroup], a
+ ld [wWestConnectedMapGroup], a
+ ld [wEastConnectedMapGroup], a
+
+ ld a, [wMapConnections]
ld b, a
- bit 3, b
- jr z, .asm_2463
- ld de, wd092
+
+ bit NORTH_F, b
+ jr z, .no_north
+ ld de, wNorthMapConnection
call GetMapConnection
-.asm_2463
- bit 2, b
- jr z, .asm_246d
- ld de, wd09e
+.no_north
+
+ bit SOUTH_F, b
+ jr z, .no_south
+ ld de, wSouthMapConnection
call GetMapConnection
-.asm_246d
- bit 1, b
- jr z, .asm_2477
- ld de, wd0aa
+.no_south
+
+ bit WEST_F, b
+ jr z, .no_west
+ ld de, wWestMapConnection
call GetMapConnection
-.asm_2477
- bit 0, b
- jr z, .asm_2481
- ld de, wd0b6
+.no_west
+
+ bit EAST_F, b
+ jr z, .no_east
+ ld de, wEastMapConnection
call GetMapConnection
-.asm_2481
+.no_east
+
ret
-GetMapConnection:: ; 2482 (0:2482)
- ld c, $c
-.asm_2484
+GetMapConnection::
+; Load map connection struct at hl into de.
+ ld c, wSouthMapConnection - wNorthMapConnection
+.loop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_2484
+ jr nz, .loop
ret
-ReadMapTriggers:: ; 248b (0:248b)
- ld a, [hli]
+ReadMapSceneScripts::
+ ld a, [hli] ; scene_script count
ld c, a
- ld [wd951], a
+ ld [wCurMapSceneScriptCount], a
ld a, l
- ld [wd952], a
+ ld [wCurMapSceneScriptsPointer], a
ld a, h
- ld [wd953], a
+ ld [wCurMapSceneScriptsPointer + 1], a
ld a, c
and a
ret z
- ld bc, $4
+
+ ld bc, SCENE_SCRIPT_SIZE
call AddNTimes
ret
-ReadMapCallbacks:: ; 24a2 (0:24a2)
+ReadMapCallbacks::
ld a, [hli]
ld c, a
- ld [wd954], a
+ ld [wCurMapCallbackCount], a
ld a, l
- ld [wd955], a
+ ld [wCurMapCallbacksPointer], a
ld a, h
- ld [wd956], a
+ ld [wCurMapCallbacksPointer + 1], a
ld a, c
and a
ret z
- ld bc, $3
+
+ ld bc, CALLBACK_SIZE
call AddNTimes
ret
-ReadWarps:: ; 24b9 (0:24b9)
+ReadWarps::
ld a, [hli]
ld c, a
ld [wCurMapWarpCount], a
@@ -838,26 +898,28 @@ ReadWarps:: ; 24b9 (0:24b9)
ld a, c
and a
ret z
- ld bc, $5
+ ld bc, WARP_EVENT_SIZE
call AddNTimes
ret
-ReadCoordEvents:: ; 24d0 (0:24d0)
+ReadCoordEvents::
ld a, [hli]
ld c, a
- ld [wd948], a
+ ld [wCurMapCoordEventCount], a
ld a, l
- ld [wd949], a
+ ld [wCurMapCoordEventsPointer], a
ld a, h
- ld [wd94a], a
+ ld [wCurMapCoordEventsPointer + 1], a
+
ld a, c
and a
ret z
- ld bc, $8
+
+ ld bc, COORD_EVENT_SIZE
call AddNTimes
ret
-ReadSignposts:: ; 24e7 (0:24e7)
+ReadBGEvents::
ld a, [hli]
ld c, a
ld [wCurMapBGEventCount], a
@@ -865,118 +927,136 @@ ReadSignposts:: ; 24e7 (0:24e7)
ld [wCurMapBGEventsPointer], a
ld a, h
ld [wCurMapBGEventsPointer + 1], a
+
ld a, c
and a
ret z
- ld bc, $5
+
+ ld bc, BG_EVENT_SIZE
call AddNTimes
ret
-ReadObjectEvents:: ; 24fe (0:24fe)
+ReadObjectEvents::
push hl
call ClearObjectStructs
pop de
ld hl, wMap2Object
ld a, [de]
inc de
- ld [wd94e], a
+ ld [wCurMapObjectEventCount], a
ld a, e
- ld [wd94f], a
+ ld [wCurMapObjectEventsPointer], a
ld a, d
- ld [wd950], a
- ld a, [wd94e]
- call CopyMapObjectHeaders
- ld a, [wd94e]
+ ld [wCurMapObjectEventsPointer + 1], a
+
+ ld a, [wCurMapObjectEventCount]
+ call CopyMapObjectEvents
+
+; get NUM_OBJECTS - [wCurMapObjectEventCount]
+ ld a, [wCurMapObjectEventCount]
ld c, a
- ld a, $10
+ ld a, NUM_OBJECTS ; - 1
sub c
- jr z, .asm_2533
- ld bc, $1
+ jr z, .skip
+ ; jr c, .skip
+
+ ; could have done "inc hl" instead
+ ld bc, 1
add hl, bc
- ld bc, $10
-.asm_2529
- ld [hl], $0
+; Fill the remaining sprite IDs and y coords with 0 and -1, respectively.
+; Bleeds into wObjectMasks due to a bug. Uncomment the above code to fix.
+ ld bc, MAPOBJECT_LENGTH
+.loop
+ ld [hl], 0
inc hl
- ld [hl], $ff
+ ld [hl], -1
dec hl
add hl, bc
dec a
- jr nz, .asm_2529
-.asm_2533
+ jr nz, .loop
+
+.skip
ld h, d
ld l, e
ret
-CopyMapObjectHeaders:: ; 2536 (0:2536)
+CopyMapObjectEvents::
and a
ret z
+
ld c, a
-.asm_2539
+.loop
push bc
push hl
ld a, $ff
ld [hli], a
- ld b, $d
-.asm_2540
+ ld b, OBJECT_EVENT_SIZE
+.loop2
ld a, [de]
inc de
ld [hli], a
dec b
- jr nz, .asm_2540
+ jr nz, .loop2
+
pop hl
- ld bc, $10
+ ld bc, MAPOBJECT_LENGTH
add hl, bc
pop bc
dec c
- jr nz, .asm_2539
+ jr nz, .loop
ret
-ClearObjectStructs:: ; 2550 (0:2550)
+ClearObjectStructs::
ld hl, wObject1Struct
- ld bc, $1e0
+ ld bc, OBJECT_LENGTH * (NUM_OBJECT_STRUCTS - 1)
xor a
call ByteFill
+
+; Just to make sure (this is rather pointless)
ld hl, wObject1Struct
- ld de, $28
- ld c, $c
+ ld de, OBJECT_LENGTH
+ ld c, NUM_OBJECT_STRUCTS - 1
xor a
-.asm_2563
+.loop
ld [hl], a
add hl, de
dec c
- jr nz, .asm_2563
+ jr nz, .loop
ret
GetWarpDestCoords::
call GetMapScriptsBank
rst Bankswitch
- ld hl, wd08f
+
+ ld hl, wMapEventsPointer
ld a, [hli]
ld h, [hl]
ld l, a
+rept 3 ; get to the warp coords
inc hl
- inc hl
- inc hl
- ld a, [wd9ff]
+endr
+ ld a, [wWarpNumber]
dec a
ld c, a
- ld b, $0
- ld a, $5
+ ld b, 0
+ ld a, WARP_EVENT_SIZE
call AddNTimes
ld a, [hli]
ld [wYCoord], a
ld a, [hli]
ld [wXCoord], a
+ ; destination warp number
ld a, [hli]
- cp $ff
- jr nz, .asm_2592
- call BackUpWarp
-.asm_2592
+ cp -1
+ jr nz, .skip
+ call .backup
+
+.skip
call GetMapScreenCoords
ret
-BackUpWarp:: ; 2596 (0:2596)
- ld a, [wPrevWarpNumber]
+.backup
+ ld a, [wPrevWarp]
ld [wBackupWarpNumber], a
ld a, [wPrevMapGroup]
ld [wBackupMapGroup], a
@@ -985,18 +1065,19 @@ BackUpWarp:: ; 2596 (0:2596)
ret
GetMapScreenCoords::
- ld hl, wc700
+ ld hl, wOverworldMapBlocks
ld a, [wXCoord]
bit 0, a
- jr nz, .asm_25b9
+ jr nz, .increment_then_halve1
srl a
add $1
- jr .asm_25bd
+ jr .resume
-.asm_25b9
+.increment_then_halve1
add $1
srl a
-.asm_25bd
+
+.resume
ld c, a
ld b, $0
add hl, bc
@@ -1006,15 +1087,16 @@ GetMapScreenCoords::
ld b, $0
ld a, [wYCoord]
bit 0, a
- jr nz, .asm_25d6
+ jr nz, .increment_then_halve2
srl a
add $1
- jr .asm_25da
+ jr .resume2
-.asm_25d6
+.increment_then_halve2
add $1
srl a
-.asm_25da
+
+.resume2
call AddNTimes
ld a, l
ld [wOverworldMapAnchor], a
@@ -1031,184 +1113,202 @@ GetMapScreenCoords::
LoadBlockData::
ld hl, wOverworldMapBlocks
ld bc, wOverworldMapBlocksEnd - wOverworldMapBlocks
- ld a, $0
+ ld a, 0
call ByteFill
call ChangeMap
call FillMapConnections
- ld a, $1
+ ld a, MAPCALLBACK_TILES
call RunMapCallback
ret
-ChangeMap:: ; 260d (0:260d)
+ChangeMap::
ldh a, [hROMBank]
push af
- ld hl, wc700
+
+ ld hl, wOverworldMapBlocks
ld a, [wMapWidth]
- ldh [hObjectStructIndexBuffer], a
+ ldh [hConnectedMapWidth], a
add $6
ldh [hConnectionStripLength], a
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
add hl, bc
add hl, bc
- ld c, $3
+ ld c, 3
add hl, bc
- ld a, [wd089]
+ ld a, [wMapBlocksBank]
rst Bankswitch
- ld a, [wd08a]
+
+ ld a, [wMapBlocksPointer]
ld e, a
- ld a, [wd08b]
+ ld a, [wMapBlocksPointer + 1]
ld d, a
- ld a, [wd087]
+ ld a, [wMapHeight]
ld b, a
-.asm_2635
+.row
push hl
- ldh a, [hObjectStructIndexBuffer]
+ ldh a, [hConnectedMapWidth]
ld c, a
-.asm_2639
+.col
ld a, [de]
inc de
ld [hli], a
dec c
- jr nz, .asm_2639
+ jr nz, .col
pop hl
- ldh a, [hMapObjectIndexBuffer]
+ ldh a, [hConnectionStripLength]
add l
ld l, a
- jr nc, .asm_2647
+ jr nc, .okay
inc h
-.asm_2647
+.okay
dec b
- jr nz, .asm_2635
+ jr nz, .row
+
pop af
rst Bankswitch
ret
-FillMapConnections:: ; 264d (0:264d)
- ld a, [wd092]
+FillMapConnections::
+; North
+ ld a, [wNorthConnectedMapGroup]
cp $ff
- jr z, .asm_2679
+ jr z, .South
ld b, a
- ld a, [wd093]
+ ld a, [wNorthConnectedMapNumber]
ld c, a
- call GetAnyMapBlockdataBank
- ld a, [wd094]
+ call GetAnyMapBlocksBank
+
+ ld a, [wNorthConnectionStripPointer]
ld l, a
- ld a, [wd095]
+ ld a, [wNorthConnectionStripPointer + 1]
ld h, a
- ld a, [wd096]
+ ld a, [wNorthConnectionStripLocation]
ld e, a
- ld a, [wd097]
+ ld a, [wNorthConnectionStripLocation + 1]
ld d, a
- ld a, [wd098]
+ ld a, [wNorthConnectionStripLength]
ldh [hConnectionStripLength], a
- ld a, [wd099]
- ldh [hObjectStructIndexBuffer], a
+ ld a, [wNorthConnectedMapWidth]
+ ldh [hConnectedMapWidth], a
call FillNorthConnectionStrip
-.asm_2679
- ld a, [wd09e]
+
+.South:
+ ld a, [wSouthConnectedMapGroup]
cp $ff
- jr z, .asm_26a5
+ jr z, .West
ld b, a
- ld a, [wd09f]
+ ld a, [wSouthConnectedMapNumber]
ld c, a
- call GetAnyMapBlockdataBank
- ld a, [wd0a0]
+ call GetAnyMapBlocksBank
+
+ ld a, [wSouthConnectionStripPointer]
ld l, a
- ld a, [wd0a1]
+ ld a, [wSouthConnectionStripPointer + 1]
ld h, a
- ld a, [wd0a2]
+ ld a, [wSouthConnectionStripLocation]
ld e, a
- ld a, [wd0a3]
+ ld a, [wSouthConnectionStripLocation + 1]
ld d, a
- ld a, [wd0a4]
+ ld a, [wSouthConnectionStripLength]
ldh [hConnectionStripLength], a
- ld a, [wd0a5]
- ldh [hObjectStructIndexBuffer], a
+ ld a, [wSouthConnectedMapWidth]
+ ldh [hConnectedMapWidth], a
call FillSouthConnectionStrip
-.asm_26a5
- ld a, [wd0aa]
+
+.West:
+ ld a, [wWestConnectedMapGroup]
cp $ff
- jr z, .asm_26d0
+ jr z, .East
ld b, a
- ld a, [wd0ab]
+ ld a, [wWestConnectedMapNumber]
ld c, a
- call GetAnyMapBlockdataBank
- ld a, [wd0ac]
+ call GetAnyMapBlocksBank
+
+ ld a, [wWestConnectionStripPointer]
ld l, a
- ld a, [wd0ad]
+ ld a, [wWestConnectionStripPointer + 1]
ld h, a
- ld a, [wd0ae]
+ ld a, [wWestConnectionStripLocation]
ld e, a
- ld a, [wd0af]
+ ld a, [wWestConnectionStripLocation + 1]
ld d, a
- ld a, [wd0b0]
+ ld a, [wWestConnectionStripLength]
ld b, a
- ld a, [wd0b1]
+ ld a, [wWestConnectedMapWidth]
ldh [hConnectionStripLength], a
call FillWestConnectionStrip
-.asm_26d0
- ld a, [wd0b6]
+
+.East:
+ ld a, [wEastConnectedMapGroup]
cp $ff
- jr z, .asm_26fb
+ jr z, .Done
ld b, a
- ld a, [wd0b7]
+ ld a, [wEastConnectedMapNumber]
ld c, a
- call GetAnyMapBlockdataBank
- ld a, [wd0b8]
+ call GetAnyMapBlocksBank
+
+ ld a, [wEastConnectionStripPointer]
ld l, a
- ld a, [wd0b9]
+ ld a, [wEastConnectionStripPointer + 1]
ld h, a
- ld a, [wd0ba]
+ ld a, [wEastConnectionStripLocation]
ld e, a
- ld a, [wd0bb]
+ ld a, [wEastConnectionStripLocation + 1]
ld d, a
- ld a, [wd0bc]
+ ld a, [wEastConnectionStripLength]
ld b, a
- ld a, [wd0bd]
+ ld a, [wEastConnectedMapWidth]
ldh [hConnectionStripLength], a
call FillEastConnectionStrip
-.asm_26fb
+
+.Done:
ret
-FillNorthConnectionStrip:: ; 26fc (0:26fc)
-FillSouthConnectionStrip:: ; 26fc (0:26fc)
- ld c, $3
-.asm_26fe
+FillNorthConnectionStrip::
+FillSouthConnectionStrip::
+ ld c, 3
+.y
push de
+
push hl
- ldh a, [hMapObjectIndexBuffer]
+ ldh a, [hConnectionStripLength]
ld b, a
-.asm_2703
+.x
ld a, [hli]
ld [de], a
inc de
dec b
- jr nz, .asm_2703
+ jr nz, .x
pop hl
- ldh a, [hObjectStructIndexBuffer]
+
+ ldh a, [hConnectedMapWidth]
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
pop de
+
ld a, [wMapWidth]
- add $6
+ add 6
add e
ld e, a
- jr nc, .asm_271b
+ jr nc, .okay
inc d
-.asm_271b
+.okay
dec c
- jr nz, .asm_26fe
+ jr nz, .y
ret
-FillWestConnectionStrip:: ; 271f (0:271f)
-FillEastConnectionStrip:: ; 271f (0:271f)
+FillWestConnectionStrip::
+FillEastConnectionStrip::
+.loop
ld a, [wMapWidth]
- add $6
+ add 6
ldh [hConnectedMapWidth], a
+
push de
+
push hl
ld a, [hli]
ld [de], a
@@ -1220,83 +1320,93 @@ FillEastConnectionStrip:: ; 271f (0:271f)
ld [de], a
inc de
pop hl
- ldh a, [hMapObjectIndexBuffer]
+
+ ldh a, [hConnectionStripLength]
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
pop de
+
ldh a, [hConnectedMapWidth]
add e
ld e, a
- jr nc, .asm_2740
+ jr nc, .okay
inc d
-.asm_2740
+.okay
dec b
- jr nz, FillWestConnectionStrip
+ jr nz, .loop
ret
LoadMapStatus::
- ld [wd159], a
+ ld [wMapStatus], a
ret
CallScript::
+; Call a script at a:hl.
+
ld [wScriptBank], a
ld a, l
- ld [wd161], a
+ ld [wScriptPos], a
ld a, h
- ld [wd162], a
- ld a, $ff
- ld [wd15f], a
+ ld [wScriptPos + 1], a
+
+ ld a, PLAYEREVENT_MAPSCRIPT
+ ld [wScriptRunning], a
+
scf
ret
CallMapScript::
- ld a, [wd15f]
+; Call a script at hl in the current bank if there isn't already a script running
+ ld a, [wScriptRunning]
and a
ret nz
call GetMapScriptsBank
jr CallScript
-RunMapCallback:: ; 2764 (0:2764)
+RunMapCallback::
+; Will run the first callback found with execution index equal to a.
ld b, a
ldh a, [hROMBank]
push af
call SwitchToMapScriptsBank
- call FindCallback
- jr nc, .asm_2779
+ call .FindCallback
+ jr nc, .done
+
call GetMapScriptsBank
ld b, a
ld d, h
ld e, l
call ExecuteCallbackScript
-.asm_2779
+
+.done
pop af
rst Bankswitch
ret
-FindCallback:: ; 277c (0:277c)
- ld a, [wd954]
+.FindCallback:
+ ld a, [wCurMapCallbackCount]
ld c, a
and a
ret z
- ld hl, wd955
+ ld hl, wCurMapCallbacksPointer
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
- ld de, $3
-.asm_278d
+ ld de, CALLBACK_SIZE
+.loop
ld a, [hl]
cp b
- jr z, .asm_2797
+ jr z, .found
add hl, de
dec c
- jr nz, .asm_278d
+ jr nz, .loop
xor a
ret
-.asm_2797
+.found
inc hl
ld a, [hli]
ld h, [hl]
@@ -1304,44 +1414,52 @@ FindCallback:: ; 277c (0:277c)
scf
ret
-ExecuteCallbackScript:: ; 279d (0:279d)
+ExecuteCallbackScript::
+; Do map callback de and return to script bank b.
farcall CallCallback
- ld a, [wd15e]
+ ld a, [wScriptMode]
push af
- ld hl, wd15b
+ ld hl, wScriptFlags
ld a, [hl]
push af
set 1, [hl]
farcall EnableScriptMode
farcall ScriptEvents
pop af
- ld [wd15b], a
+ ld [wScriptFlags], a
pop af
- ld [wd15e], a
+ ld [wScriptMode], a
ret
MapTextbox::
ldh a, [hROMBank]
push af
+
ld a, b
rst Bankswitch
+
call SetUpTextbox
- ld a, $1
+ ld a, 1
ldh [hOAMUpdate], a
call PrintTextboxText
xor a
ldh [hOAMUpdate], a
+
pop af
rst Bankswitch
ret
Call_a_de::
+; Call a:de.
+
ld [wBuffer], a
ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
+
call .de
+
pop af
rst Bankswitch
ret
@@ -1351,33 +1469,42 @@ Call_a_de::
ret
GetMovementData::
+; Initialize the movement data for object c at b:hl
ldh a, [hROMBank]
push af
ld a, b
rst Bankswitch
+
ld a, c
call LoadMovementDataPointer
+
pop hl
ld a, h
rst Bankswitch
ret
GetScriptByte::
+; Return byte at wScriptBank:wScriptPos in a.
+
push hl
push bc
ldh a, [hROMBank]
push af
ld a, [wScriptBank]
rst Bankswitch
- ld hl, wd161
+
+ ld hl, wScriptPos
ld c, [hl]
inc hl
ld b, [hl]
+
ld a, [bc]
+
inc bc
ld [hl], b
dec hl
ld [hl], c
+
ld b, a
pop af
rst Bankswitch
@@ -1409,64 +1536,62 @@ CoordinatesEventText::
CheckObjectMask::
ldh a, [hMapObjectIndexBuffer]
-.asm_282c
ld e, a
ld d, $0
- ld hl, wMapObjectsEnd
+ ld hl, wObjectMasks
add hl, de
ld a, [hl]
-.asm_2834
ret
-MaskObject:: ; 2835 (0:2835)
- ldh a, [hConnectionStripLength]
+MaskObject::
+ ldh a, [hMapObjectIndexBuffer]
ld e, a
ld d, $0
- ld hl, wd545
-.asm_283c
+ ld hl, wObjectMasks
add hl, de
- ld [hl], $ff
+ ld [hl], -1 ; , masked
ret
-UnmaskObject:: ; 2841 (0:2841)
+UnmaskObject::
ldh a, [hMapObjectIndexBuffer]
ld e, a
ld d, $0
- ld hl, wMapObjectsEnd
+ ld hl, wObjectMasks
add hl, de
- ld [hl], $0
+ ld [hl], 0 ; unmasked
ret
-ScrollMapDown::
+ScrollMapUp::
hlcoord 0, 0
ld de, wBGMapBuffer
call BackupBGMapRow
- ld c, $28
+ ld c, 2 * SCREEN_WIDTH
call ScrollBGMapPalettes
- ld a, [wd05b]
+ ld a, [wBGMapAnchor]
ld e, a
- ld a, [wd05c]
+ ld a, [wBGMapAnchor + 1]
ld d, a
call UpdateBGMapRow
ld a, $1
ldh [hBGMapUpdate], a
ret
-ScrollMapUp::
- hlcoord 0, 16
+ScrollMapDown::
+ hlcoord 0, SCREEN_HEIGHT - 2
ld de, wBGMapBuffer
call BackupBGMapRow
- ld c, $28
+ ld c, 2 * SCREEN_WIDTH
call ScrollBGMapPalettes
- ld a, [wd05b]
+ ld a, [wBGMapAnchor]
ld l, a
- ld a, [wd05c]
+ ld a, [wBGMapAnchor + 1]
ld h, a
- ld bc, $200
+ ld bc, BG_MAP_WIDTH tiles
add hl, bc
+; cap d at HIGH(vBGMap0)
ld a, h
- and $3
- or $98
+ and %00000011
+ or HIGH(vBGMap0)
ld e, l
ld d, a
call UpdateBGMapRow
@@ -1474,83 +1599,85 @@ ScrollMapUp::
ldh [hBGMapUpdate], a
ret
-ScrollMapRight::
+ScrollMapLeft::
hlcoord 0, 0
ld de, wBGMapBuffer
call BackupBGMapColumn
- ld c, $24
+ ld c, 2 * SCREEN_HEIGHT
call ScrollBGMapPalettes
- ld a, [wd05b]
+ ld a, [wBGMapAnchor]
ld e, a
- ld a, [wd05c]
+ ld a, [wBGMapAnchor + 1]
ld d, a
call UpdateBGMapColumn
ld a, $1
ldh [hBGMapUpdate], a
ret
-ScrollMapLeft::
- hlcoord 18, 0
+ScrollMapRight::
+ hlcoord SCREEN_WIDTH - 2, 0
ld de, wBGMapBuffer
call BackupBGMapColumn
- ld c, $24
+ ld c, 2 * SCREEN_HEIGHT
call ScrollBGMapPalettes
- ld a, [wd05b]
+ ld a, [wBGMapAnchor]
ld e, a
- and $e0
+ and %11100000
ld b, a
ld a, e
- add $12
- and $1f
+ add SCREEN_HEIGHT
+ and %00011111
or b
ld e, a
- ld a, [wd05c]
+ ld a, [wBGMapAnchor + 1]
ld d, a
call UpdateBGMapColumn
ld a, $1
ldh [hBGMapUpdate], a
ret
-BackupBGMapRow:: ; 28da (0:28da)
- ld c, $28
-.asm_28dc
+BackupBGMapRow::
+ ld c, 2 * SCREEN_WIDTH
+.loop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_28dc
+ jr nz, .loop
ret
-BackupBGMapColumn:: ; 28e3 (0:28e3)
- ld c, $12
-.asm_28e5
+BackupBGMapColumn::
+ ld c, SCREEN_HEIGHT
+.loop
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
inc de
- ld a, $13
+ ld a, SCREEN_WIDTH - 1
add l
ld l, a
- jr nc, .asm_28f2
+ jr nc, .skip
inc h
-.asm_28f2
+
+.skip
dec c
- jr nz, .asm_28e5
+ jr nz, .loop
ret
-UpdateBGMapRow:: ; 28f6 (0:28f6)
+UpdateBGMapRow::
ld hl, wBGMapBufferPtrs
push de
call .iteration
pop de
- ld a, $20
+ ld a, BG_MAP_WIDTH
add e
ld e, a
+
.iteration
- ld c, $a
-.asm_2904
+ ld c, 10
+.loop
ld a, e
ld [hli], a
ld a, d
@@ -1565,60 +1692,63 @@ UpdateBGMapRow:: ; 28f6 (0:28f6)
or b
ld e, a
dec c
- jr nz, .asm_2904
- ld a, $14
+ jr nz, .loop
+ ld a, SCREEN_WIDTH
ldh [hBGMapTileCount], a
ret
-UpdateBGMapColumn:: ; 291b (0:291b)
+UpdateBGMapColumn::
ld hl, wBGMapBufferPtrs
- ld c, $12
-.asm_2920
+ ld c, SCREEN_HEIGHT
+.loop
ld a, e
ld [hli], a
ld a, d
ld [hli], a
- ld a, $20
+ ld a, BG_MAP_WIDTH
add e
ld e, a
- jr nc, .asm_2931
+ jr nc, .skip
inc d
+; cap d at HIGH(vBGMap0)
ld a, d
- and $3
- or $98
+ and %11
+ or HIGH(vBGMap0)
ld d, a
-.asm_2931
+
+.skip
dec c
- jr nz, .asm_2920
- ld a, $12
+ jr nz, .loop
+ ld a, SCREEN_HEIGHT
ldh [hBGMapTileCount], a
ret
-Function2939::
+Unreferenced_Function2939::
ld hl, wBGMapBuffer
- ld bc, $78
+ ld bc, wBGMapBufferEnd - wBGMapBuffer
xor a
call ByteFill
ret
-LoadTileset:: ; 2944 (0:2944)
- ld hl, wd0c3
+LoadTilesetGFX::
+ ld hl, wTilesetAddress
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, $9000
- ld a, [wd0c2]
+ ld de, vTiles2
+ ld a, [wTilesetBank]
call FarDecompress
- ld a, [wd082]
- cp $1
- jr z, .asm_2960
- cp $2
- jr z, .asm_2960
- jr .asm_2966
-
-.asm_2960
+ ld a, [wMapTileset]
+ cp TILESET_JOHTO
+ jr z, .load_roof
+ cp TILESET_JOHTO_MODERN
+ jr z, .load_roof
+ jr .skip_roof
+
+.load_roof
farcall LoadMapGroupRoof
-.asm_2966
+
+.skip_roof
xor a
ldh [hTileAnimFrame], a
ret
@@ -1628,27 +1758,27 @@ BufferScreen::
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wda04
- ld c, $5
- ld b, $6
-.asm_2977
+ ld de, wScreenSave
+ ld c, SCREEN_META_HEIGHT
+ ld b, SCREEN_META_WIDTH
+.row
push bc
push hl
-.asm_2979
+.col
ld a, [hli]
ld [de], a
inc de
dec b
- jr nz, .asm_2979
+ jr nz, .col
pop hl
ld a, [wMapWidth]
- add $6
+ add 6
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
pop bc
dec c
- jr nz, .asm_2977
+ jr nz, .row
ret
SaveScreen::
@@ -1656,47 +1786,47 @@ SaveScreen::
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wda04
+ ld de, wScreenSave
ld a, [wMapWidth]
- add $6
- ldh [hConnectionStripLength], a
+ add 6
+ ldh [hMapObjectIndexBuffer], a
ld a, [wPlayerStepDirection]
and a
- jr z, .asm_29bc
- cp $1
- jr z, .asm_29b1
- cp $2
- jr z, .asm_29c5
- cp $3
- jr z, .asm_29cb
+ jr z, .down
+ cp UP
+ jr z, .up
+ cp LEFT
+ jr z, .left
+ cp RIGHT
+ jr z, .right
ret
-.asm_29b1
- ld de, wda0a
- ldh a, [hConnectionStripLength]
+.up
+ ld de, wScreenSave + SCREEN_META_WIDTH
+ ldh a, [hMapObjectIndexBuffer]
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
- jr .asm_29bf
+ jr .vertical
-.asm_29bc
- ld de, wda04
-.asm_29bf
- ld b, $6
- ld c, $4
- jr SaveScreen_LoadNeighbor
+.down
+ ld de, wScreenSave
+.vertical
+ ld b, SCREEN_META_WIDTH
+ ld c, SCREEN_META_HEIGHT - 1
+ jr SaveScreen_LoadConnection
-.asm_29c5
- ld de, wda05
+.left
+ ld de, wScreenSave + 1
inc hl
- jr .asm_29ce
+ jr .horizontal
-.asm_29cb
- ld de, wda04
-.asm_29ce
- ld b, $5
- ld c, $5
- jr SaveScreen_LoadNeighbor
+.right
+ ld de, wScreenSave
+.horizontal
+ ld b, SCREEN_META_WIDTH - 1
+ ld c, SCREEN_META_HEIGHT
+ jr SaveScreen_LoadConnection
LoadConnectionBlockData::
ld hl, wOverworldMapAnchor
@@ -1704,43 +1834,46 @@ LoadConnectionBlockData::
ld h, [hl]
ld l, a
ld a, [wMapWidth]
- add $6
- ldh [hMapObjectIndexBuffer], a
- ld de, wda04
- ld b, $6
- ld c, $5
-SaveScreen_LoadNeighbor::
+ add 6
+ ldh [hConnectionStripLength], a
+ ld de, wScreenSave
+ ld b, SCREEN_META_WIDTH
+ ld c, SCREEN_META_HEIGHT
+
+SaveScreen_LoadConnection::
+.row
push bc
push hl
push de
-.asm_29eb
+.col
ld a, [de]
inc de
ld [hli], a
dec b
- jr nz, .asm_29eb
+ jr nz, .col
pop de
ld a, e
- add $6
+ add 6
ld e, a
- jr nc, .asm_29f9
+ jr nc, .okay
inc d
-.asm_29f9
+.okay
pop hl
ldh a, [hConnectionStripLength]
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
pop bc
dec c
- jr nz, SaveScreen_LoadNeighbor
+ jr nz, .row
ret
-GetMovementPermissions:: ; 2a05 (0:2a05)
+GetMovementPermissions::
xor a
ld [wTilePermissions], a
call .LeftRight
call .UpDown
+; get coords of current tile
ld a, [wPlayerStandingMapX]
ld d, a
ld a, [wPlayerStandingMapY]
@@ -1749,12 +1882,13 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
ld [wPlayerStandingTile], a
call .CheckHiNybble
ret nz
+
ld a, [wPlayerStandingTile]
- and $7
+ and 7
ld hl, .MovementPermissionsData
add l
ld l, a
- ld a, $0
+ ld a, 0
adc h
ld h, a
ld a, [hl]
@@ -1764,25 +1898,27 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
ret
.MovementPermissionsData:
- db 1 << DOWN
- db 1 << UP
- db 1 << LEFT
- db 1 << RIGHT
- db (1 << DOWN) | (1 << RIGHT)
- db (1 << UP) | (1 << RIGHT)
- db (1 << DOWN) | (1 << LEFT)
- db (1 << UP) | (1 << LEFT)
+ db DOWN_MASK
+ db UP_MASK
+ db LEFT_MASK
+ db RIGHT_MASK
+ db DOWN_MASK | RIGHT_MASK
+ db UP_MASK | RIGHT_MASK
+ db DOWN_MASK | LEFT_MASK
+ db UP_MASK | LEFT_MASK
.UpDown:
ld a, [wPlayerStandingMapX]
ld d, a
ld a, [wPlayerStandingMapY]
ld e, a
+
push de
inc e
call GetCoordTile
ld [wTileDown], a
call .Down
+
pop de
dec e
call GetCoordTile
@@ -1795,11 +1931,13 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
ld d, a
ld a, [wPlayerStandingMapY]
ld e, a
+
push de
dec d
call GetCoordTile
ld [wTileLeft], a
call .Left
+
pop de
inc d
call GetCoordTile
@@ -1811,14 +1949,15 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
call .CheckHiNybble
ret nz
ld a, [wTileDown]
- and $7
- cp $2
- jr z, .asm_2a90
- cp $6
- jr z, .asm_2a90
- cp $7
+ and %111
+ cp COLL_UP_WALL & %111 ; COLL_UP_BUOY & %111
+ jr z, .ok_down
+ cp COLL_UP_RIGHT_WALL & %111 ; COLL_UP_RIGHT_BUOY & %111
+ jr z, .ok_down
+ cp COLL_UP_LEFT_WALL & %111 ; COLL_UP_LEFT_BUOY & %111
ret nz
-.asm_2a90
+
+.ok_down
ld hl, wTilePermissions
set 3, [hl]
ret
@@ -1827,14 +1966,15 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
call .CheckHiNybble
ret nz
ld a, [wTileUp]
- and $7
- cp $3
- jr z, .asm_2aaa
- cp $4
- jr z, .asm_2aaa
- cp $5
+ and %111
+ cp COLL_DOWN_WALL & %111 ; COLL_DOWN_BUOY & %111
+ jr z, .ok_up
+ cp COLL_DOWN_RIGHT_WALL & %111 ; COLL_DOWN_RIGHT_BUOY & %111
+ jr z, .ok_up
+ cp COLL_DOWN_LEFT_WALL & %111 ; COLL_DOWN_LEFT_BUOY & %111
ret nz
-.asm_2aaa
+
+.ok_up
ld hl, wTilePermissions
set 3, [hl]
ret
@@ -1843,14 +1983,15 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
call .CheckHiNybble
ret nz
ld a, [wTileRight]
- and $7
- cp $1
- jr z, .asm_2ac4
- cp $5
- jr z, .asm_2ac4
- cp $7
+ and %111
+ cp COLL_LEFT_WALL & %111 ; COLL_LEFT_BUOY & %111
+ jr z, .ok_right
+ cp COLL_DOWN_LEFT_WALL & %111 ; COLL_DOWN_LEFT_BUOY & %111
+ jr z, .ok_right
+ cp COLL_UP_LEFT_WALL & %111 ; COLL_UP_LEFT_BUOY & %111
ret nz
-.asm_2ac4
+
+.ok_right
ld hl, wTilePermissions
set 3, [hl]
ret
@@ -1859,43 +2000,50 @@ GetMovementPermissions:: ; 2a05 (0:2a05)
call .CheckHiNybble
ret nz
ld a, [wTileLeft]
- and $7
- cp $0
- jr z, .asm_2ade
- cp $4
- jr z, .asm_2ade
- cp $6
+ and %111
+ cp COLL_RIGHT_WALL & %111 ; COLL_RIGHT_BUOY & %111
+ jr z, .ok_left
+ cp COLL_DOWN_RIGHT_WALL & %111 ; COLL_DOWN_RIGHT_BUOY & %111
+ jr z, .ok_left
+ cp COLL_UP_RIGHT_WALL & %111 ; COLL_UP_RIGHT_BUOY & %111
ret nz
-.asm_2ade
+
+.ok_left
ld hl, wTilePermissions
set 3, [hl]
ret
.CheckHiNybble:
and $f0
- cp $b0
+ cp HI_NYBBLE_SIDE_WALLS
ret z
- cp $c0
+ cp HI_NYBBLE_SIDE_BUOYS
ret
-GetFacingTileCoord:: ; 2aec (0:2aec)
+GetFacingTileCoord::
+; Return map coordinates in (d, e) and tile id in a
+; of the tile the player is facing.
+
ld a, [wPlayerDirection]
- and $c
+ and %1100
srl a
srl a
ld l, a
- ld h, $0
+ ld h, 0
add hl, hl
add hl, hl
ld de, .Directions
add hl, de
+
ld d, [hl]
inc hl
ld e, [hl]
inc hl
+
ld a, [hli]
ld h, [hl]
ld l, a
+
ld a, [wPlayerStandingMapX]
add d
ld d, a
@@ -1906,6 +2054,7 @@ GetFacingTileCoord:: ; 2aec (0:2aec)
ret
.Directions:
+ ; x, y
db 0, 1
dw wTileDown
db 0, -1
@@ -1915,115 +2064,126 @@ GetFacingTileCoord:: ; 2aec (0:2aec)
db 1, 0
dw wTileRight
-GetCoordTile:: ; 2b21 (0:2b21)
+GetCoordTile::
+; Get the collision byte for tile d, e
call GetBlockLocation
ld a, [hl]
and a
- jr z, .asm_2b48
+ jr z, .nope
ld l, a
ld h, $0
add hl, hl
add hl, hl
- ld a, [wd0c9]
+ ld a, [wTilesetCollisionAddress]
ld c, a
- ld a, [wd0ca]
+ ld a, [wTilesetCollisionAddress + 1]
ld b, a
add hl, bc
rr d
- jr nc, .asm_2b3b
+ jr nc, .nocarry
inc hl
-.asm_2b3b
+
+.nocarry
rr e
- jr nc, .asm_2b41
+ jr nc, .nocarry2
inc hl
inc hl
-.asm_2b41
- ld a, [wd0c8]
+
+.nocarry2
+ ld a, [wTilesetCollisionBank]
call GetFarByte
ret
-.asm_2b48
- ld a, $ff
+.nope
+ ld a, -1
ret
GetBlockLocation::
ld a, [wMapWidth]
- add $6
+ add 6
ld c, a
- ld b, $0
- ld hl, wc701
+ ld b, 0
+ ld hl, wOverworldMapBlocks + 1
add hl, bc
ld a, e
srl a
- jr z, .asm_2b69
+ jr z, .nope
and a
-.asm_2b5d
+.loop
srl a
- jr nc, .asm_2b62
+ jr nc, .ok
add hl, bc
-.asm_2b62
+
+.ok
sla c
rl b
and a
- jr nz, .asm_2b5d
-.asm_2b69
+ jr nz, .loop
+
+.nope
ld c, d
srl c
- ld b, $0
+ ld b, 0
add hl, bc
ret
-CheckFacingSign::
+CheckFacingBGEvent::
call GetFacingTileCoord
+; Load facing into b.
ld b, a
+; Convert the coordinates at de to within-boundaries coordinates.
ld a, d
- sub $4
+ sub 4
ld d, a
ld a, e
- sub $4
+ sub 4
ld e, a
+; If there are no BG events, we don't need to be here.
ld a, [wCurMapBGEventCount]
and a
ret z
+
ld c, a
ldh a, [hROMBank]
push af
call SwitchToMapScriptsBank
- call CheckIfFacingTileCoordIsSign
+ call CheckIfFacingTileCoordIsBGEvent
pop hl
ld a, h
rst Bankswitch
ret
-CheckIfFacingTileCoordIsSign:: ; 2b8f (0:2b8f)
+CheckIfFacingTileCoordIsBGEvent::
+; Checks to see if you are facing a BG event. If so, copies it into wCurBGEvent and sets carry.
ld hl, wCurMapBGEventsPointer
ld a, [hli]
ld h, [hl]
ld l, a
-.asm_2b95
+.loop
push hl
ld a, [hli]
cp e
- jr nz, .asm_2ba0
+ jr nz, .next
ld a, [hli]
cp d
- jr nz, .asm_2ba0
- jr .asm_2bad
+ jr nz, .next
+ jr .copysign
-.asm_2ba0
+.next
pop hl
- ld a, $5
+ ld a, BG_EVENT_SIZE
add l
ld l, a
- jr nc, .asm_2ba8
+ jr nc, .nocarry
inc h
-.asm_2ba8
+
+.nocarry
dec c
- jr nz, .asm_2b95
+ jr nz, .loop
xor a
ret
-.asm_2bad
+.copysign
pop hl
ld de, wCurBGEvent
ld bc, BG_EVENT_SIZE
@@ -2031,63 +2191,71 @@ CheckIfFacingTileCoordIsSign:: ; 2b8f (0:2b8f)
scf
ret
-CheckCurrentMapXYTriggers::
- ld a, [wd948]
+CheckCurrentMapCoordEvents::
+; If there are no coord events, we don't need to be here.
+ ld a, [wCurMapCoordEventCount]
and a
ret z
+; Copy the coord event count into c.
ld c, a
ldh a, [hROMBank]
push af
call SwitchToMapScriptsBank
- call .TriggerCheck
+ call .CoordEventCheck
pop hl
ld a, h
rst Bankswitch
ret
-.TriggerCheck:
- ld hl, wd949
+.CoordEventCheck:
+; Checks to see if you are standing on a coord event. If yes, copies the event to wCurCoordEvent and sets carry.
+ ld hl, wCurMapCoordEventsPointer
ld a, [hli]
ld h, [hl]
ld l, a
- call CheckTriggers
+; Load the active scene ID into b
+ call CheckScenes
ld b, a
+; Load your current coordinates into de. This will be used to check if your position is in the coord event table for the current map.
ld a, [wPlayerStandingMapX]
- sub $4
+ sub 4
ld d, a
ld a, [wPlayerStandingMapY]
- sub $4
+ sub 4
ld e, a
-.asm_2be2
+
+.loop
push hl
ld a, [hli]
cp b
- jr z, .asm_2beb
- cp $ff
- jr nz, .asm_2bf5
-.asm_2beb
+ jr z, .got_id
+ cp -1
+ jr nz, .next
+
+.got_id
ld a, [hli]
cp e
- jr nz, .asm_2bf5
+ jr nz, .next
ld a, [hli]
cp d
- jr nz, .asm_2bf5
- jr .asm_2c02
+ jr nz, .next
+ jr .copy_coord_event
-.asm_2bf5
+.next
pop hl
- ld a, $8
+ ld a, COORD_EVENT_SIZE
add l
ld l, a
- jr nc, .asm_2bfd
+ jr nc, .nocarry
inc h
-.asm_2bfd
+
+.nocarry
dec c
- jr nz, .asm_2be2
+ jr nz, .loop
xor a
ret
-.asm_2c02
+.copy_coord_event
pop hl
ld de, wCurCoordEvent
ld bc, COORD_EVENT_SIZE
@@ -2119,7 +2287,7 @@ ExitAllMenus::
call UpdateSprites
call Functiond2a
FinishExitMenu::
- ld b, $9
+ ld b, SCGB_MAPPALS
call GetSGBLayout
call WaitBGMap2
farcall FadeInPalettes
@@ -2140,7 +2308,7 @@ ReturnToMapWithSpeechTextbox::
set 0, [hl]
call UpdateSprites
call WaitBGMap2
- ld b, $9
+ ld b, SCGB_MAPPALS
call GetSGBLayout
call UpdateTimePals
call DelayFrame
@@ -2149,7 +2317,7 @@ ReturnToMapWithSpeechTextbox::
pop af
ret
-ReloadTilesetAndPalettes:: ; 2c87 (0:2c87)
+ReloadTilesetAndPalettes::
call DisableLCD
call ClearSprites
farcall Function1414b
@@ -2161,181 +2329,220 @@ ReloadTilesetAndPalettes:: ; 2c87 (0:2c87)
ld b, a
ld a, [wMapNumber]
ld c, a
- call SwitchToAnyMapBank
+ call SwitchToAnyMapAttributesBank
farcall UpdateTimeOfDayPal
call OverworldTextModeSwitch
- call LoadTileset
- ld a, $8
+ call LoadTilesetGFX
+ ld a, 8
call SkipMusic
pop af
rst Bankswitch
+
call EnableLCD
ret
-GetMapHeaderPointer:: ; 2cbe (0:2cbe)
+GetMapPointer::
ld a, [wMapGroup]
ld b, a
ld a, [wMapNumber]
ld c, a
-GetAnyMapHeaderPointer:: ; 2cc6 (0:2cc6)
- push bc
+GetAnyMapPointer::
+; Prior to calling this function, you must have switched banks so that
+; MapGroupPointers is visible.
+
+; inputs:
+; b = map group, c = map number
+
+; outputs:
+; hl points to the map within its group
+ push bc ; save map number for later
+
+ ; get pointer to map group
dec b
ld c, b
- ld b, $0
- ld hl, MapGroupPointers ; 25:40ed
+ ld b, 0
+ ld hl, MapGroupPointers
add hl, bc
add hl, bc
+
ld a, [hli]
ld h, [hl]
ld l, a
- pop bc
+ pop bc ; restore map number
+
+ ; find the cth map within the group
dec c
- ld b, $0
- ld a, $9
+ ld b, 0
+ ld a, 9
call AddNTimes
ret
-GetMapHeaderMember:: ; 2cdd (0:2cdd)
+GetMapField::
+; Extract data from the current map's group entry.
+
+; inputs:
+; de = offset of desired data within the map (a MAP_* constant)
+
+; outputs:
+; bc = data from the current map's field
+; (e.g., de = MAP_TILESET would return a pointer to the tileset id)
+
ld a, [wMapGroup]
ld b, a
ld a, [wMapNumber]
ld c, a
-GetAnyMapHeaderMember:: ; 2ce5 (0:2ce5)
+GetAnyMapField::
+ ; bankswitch
ldh a, [hROMBank]
push af
ld a, BANK(MapGroupPointers)
rst Bankswitch
- call GetAnyMapHeaderPointer
+
+ call GetAnyMapPointer
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
+
+ ; bankswitch back
pop af
rst Bankswitch
ret
-SwitchToMapBank:: ; 2cf5 (0:2cf5)
+SwitchToMapAttributesBank::
ld a, [wMapGroup]
ld b, a
ld a, [wMapNumber]
ld c, a
-SwitchToAnyMapBank:: ; 2cfd (0:2cfd)
- call GetAnyMapBank
+SwitchToAnyMapAttributesBank::
+ call GetAnyMapAttributesBank
rst Bankswitch
ret
-GetMapBank::
+GetMapAttributesBank::
ld a, [wMapGroup]
ld b, a
ld a, [wMapNumber]
ld c, a
-GetAnyMapBank:: ; 2d0a (0:2d0a)
+GetAnyMapAttributesBank::
push hl
push de
- ld de, 0
- call GetAnyMapHeaderMember
+ ld de, MAP_MAPATTRIBUTES_BANK
+ call GetAnyMapField
ld a, c
pop de
pop hl
ret
-PartiallyCopyMapHeader:: ; 2d16 (0:2d16)
+CopyMapPartial::
+; Copy map data bank, tileset, environment, and map data address
+; from the current map's entry within its group.
ldh a, [hROMBank]
push af
ld a, BANK(MapGroupPointers)
rst Bankswitch
- call GetMapHeaderPointer
- ld de, wd081
- ld bc, $5
+
+ call GetMapPointer
+ ld de, wMapPartial
+ ld bc, wMapPartialEnd - wMapPartial
call CopyBytes
+
pop af
rst Bankswitch
ret
-SwitchToMapScriptsBank:: ; 2d2b (0:2d2b)
- ld a, [wd08c]
+SwitchToMapScriptsBank::
+ ld a, [wMapScriptsBank]
rst Bankswitch
ret
-GetMapScriptsBank:: ; 2d30 (0:2d30)
- ld a, [wd08c]
+GetMapScriptsBank::
+ ld a, [wMapScriptsBank]
ret
-GetAnyMapBlockdataBank:: ; 2d34 (0:2d34)
+GetAnyMapBlocksBank::
+; Return the blockdata bank for group b map c.
push hl
push de
push bc
+
push bc
- ld de, $3
- call GetAnyMapHeaderMember
+ ld de, MAP_MAPATTRIBUTES
+ call GetAnyMapField
ld l, c
ld h, b
pop bc
+
push hl
- ld de, MBC3SRamEnable
- call GetAnyMapHeaderMember
+ ld de, MAP_MAPATTRIBUTES_BANK
+ call GetAnyMapField
pop hl
- ld de, $3
+
+ ld de, MAP_MAPATTRIBUTES ; blockdata bank
add hl, de
ld a, c
call GetFarByte
rst Bankswitch
+
pop bc
pop de
pop hl
ret
-GetSecondaryMapHeaderPointer:: ; 2d56 (0:2d56)
+GetMapAttributesPointer::
+; returns the current map's data pointer in hl.
push bc
push de
- ld de, $3
- call GetMapHeaderMember
+ ld de, MAP_MAPATTRIBUTES
+ call GetMapField
ld l, c
ld h, b
pop de
pop bc
ret
-GetMapEnvironment:: ; 2d63 (0:2d63)
+GetMapEnvironment::
push hl
push de
push bc
- ld de, $2
- call GetMapHeaderMember
+ ld de, MAP_ENVIRONMENT
+ call GetMapField
ld a, c
pop bc
pop de
pop hl
ret
-Function2d71:: ; XXX
- ret
+ ret ; unused
-GetAnyMapPermission:: ; 2d72 (0:2d72)
+GetAnyMapEnvironment::
push hl
push de
push bc
- ld de, $2
- call GetAnyMapHeaderMember
+ ld de, MAP_ENVIRONMENT
+ call GetAnyMapField
ld a, c
pop bc
pop de
pop hl
ret
-GetAnyMapTileset:: ; 2d80 (0:2d80)
- ld de, $1
- call GetAnyMapHeaderMember
+GetAnyMapTileset::
+ ld de, MAP_TILESET
+ call GetAnyMapField
ld a, c
ret
GetWorldMapLocation::
+; given a map group/id in bc, return its location on the Pokégear map.
push hl
push de
push bc
- ld de, $5
- call GetAnyMapHeaderMember
+
+ ld de, MAP_LOCATION
+ call GetAnyMapField
ld a, c
+
pop bc
pop de
pop hl
@@ -2344,60 +2551,65 @@ GetWorldMapLocation::
GetMapMusic::
push hl
push bc
- ld de, $6
- call GetMapHeaderMember
+ ld de, MAP_MUSIC
+ call GetMapField
ld a, c
cp MUSIC_MAHOGANY_MART
- jr z, .mahogany_mart_check
- bit 7, c
- jr nz, .radio_tower_check
+ jr z, .mahoganymart
+ bit RADIO_TOWER_MUSIC_F, c
+ jr nz, .radiotower
ld e, c
- ld d, $0
-.load
+ ld d, 0
+.done
pop bc
pop hl
ret
-.radio_tower_check
- CheckFlag ENGINE_ROCKETS_IN_RADIO_TOWER
- jr z, .no_rockets
+.radiotower
+ ld a, [wStatusFlags2]
+ bit STATUSFLAGS2_ROCKETS_IN_RADIO_TOWER_F, a
+ jr z, .clearedradiotower
ld de, MUSIC_ROCKET_OVERTURE
- jr .load
+ jr .done
-.no_rockets
+.clearedradiotower
+ ; the rest of the byte
ld a, c
- and $7f
+ and RADIO_TOWER_MUSIC - 1
ld e, a
- ld d, $0
- jr .load
+ ld d, 0
+ jr .done
-.mahogany_mart_check
- CheckFlag ENGINE_ROCKETS_IN_MAHOGANY
- jr z, .no_rockets2
+.mahoganymart
+ ld a, [wStatusFlags2]
+ bit STATUSFLAGS2_ROCKETS_IN_MAHOGANY_F, a
+ jr z, .clearedmahogany
ld de, MUSIC_ROCKET_HIDEOUT
- jr .load
+ jr .done
-.no_rockets2
+.clearedmahogany
ld de, MUSIC_CHERRYGROVE_CITY
- jr .load
+ jr .done
-GetMapHeaderTimeOfDayNybble:: ; 2dd2 (0:2dd2)
+GetMapTimeOfDay::
call GetPhoneServiceTimeOfDayByte
and $f
ret
-GetMapHeaderPhoneServiceNybble::
+GetMapPhoneService::
call GetPhoneServiceTimeOfDayByte
and $f0
swap a
ret
-GetPhoneServiceTimeOfDayByte:: ; 2de0 (0:2de0)
+GetPhoneServiceTimeOfDayByte::
push hl
push bc
- ld de, $7
- call GetMapHeaderMember
+
+ ld de, MAP_PALETTE
+ call GetMapField
ld a, c
+
pop bc
pop hl
ret
@@ -2406,9 +2618,11 @@ GetFishingGroup::
push de
push hl
push bc
- ld de, $8
- call GetMapHeaderMember
+
+ ld de, MAP_FISHGROUP
+ call GetMapField
ld a, c
+
pop bc
pop hl
pop de
@@ -2417,19 +2631,24 @@ GetFishingGroup::
LoadMapTileset::
push hl
push bc
- ld hl, $56be
- ld bc, $f
- ld a, [wd082]
+
+ ld hl, Tilesets
+ ld bc, wTilesetEnd - wTileset
+ ld a, [wMapTileset]
call AddNTimes
- ld de, wd0c2
- ld bc, $f
- ld a, $5
+
+ ld de, wTilesetBank
+ ld bc, wTilesetEnd - wTileset
+
+ ld a, BANK(Tilesets)
call FarCopyBytes
+
pop bc
pop hl
ret
-InexplicablyEmptyFunction:: ; 2e16
+InexplicablyEmptyFunction::
+; unused
; Inexplicably empty.
; Seen in PredefPointers.
rept 16