summaryrefslogtreecommitdiff
path: root/home/map.asm
diff options
context:
space:
mode:
authorDaniel Harding <33dannye@gmail.com>2020-05-16 21:42:24 -0500
committerGitHub <noreply@github.com>2020-05-16 21:42:24 -0500
commit8a924f1f783572ff395f617f99546b4c949c8b04 (patch)
tree1b6c7de331cb983256651b11b8adf413a3a434f1 /home/map.asm
parent88d7e9a34a8b610b358cec1ccc6660634ca9ce80 (diff)
parented94962edf1668aba3f60938e8a5ba8040e2a59c (diff)
Merge pull request #30 from entrpntr/spring-cleaning
Spring Cleaning
Diffstat (limited to 'home/map.asm')
-rw-r--r--home/map.asm1945
1 files changed, 830 insertions, 1115 deletions
diff --git a/home/map.asm b/home/map.asm
index 036969e1..d3a67c71 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -1,111 +1,129 @@
-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 hl, wTilemap
- ld bc, $168
+
+ ld a, "■"
+ hlcoord 0, 0
+ 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
ld a, [wOverworldMapAnchor + 1]
ld d, a
- ld hl, wMisc
+ ld hl, wSurroundingTiles
ld b, SURROUNDING_HEIGHT / METATILE_WIDTH ; 5
.row
@@ -124,13 +142,16 @@ LoadMetatiles:: ; 1fe6 (0:1fe6)
ld a, [wMapBorderBlock]
.ok
- ; Load the current wMisc address into de.
+ ; 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,499 +206,22 @@ endr
ret
ReturnToMapFromSubmenu::
- ld a, $fa
+ ld a, MAPSETUP_SUBMENU
ldh [hMapEntryMethod], a
farcall RunMapSetupScript
xor a
ldh [hMapEntryMethod], a
ret
-Function2086::
- call Clear_wc6e8
- call ResetMapBufferEventFlags
- call ResetFlashIfOutOfCave
- call GetCurrentMapTrigger
- call ResetBikeFlags
- ld a, $5
- call RunMapCallback
- farcall Function97c2a
- ld a, $3
- call RunMapCallback
- call GetMapHeaderTimeOfDayNybble
- ld [wMapTimeOfDay], a
- ret
-
-Function20ac::
- ld a, $1
- ld [wSpriteUpdatesEnabled], a
- farcall Function8c3e9
- farcall UpdateTimeOfDayPal
- call OverworldTextModeSwitch
- call Function20c7
- call Function20e6
- ret
-
-Function20c7:: ; 20c7 (0:20c7)
- ld a, $98
- ld [wd05c], a
- xor a
- ld [wd05b], a
- ldh [hSCY], a
- ldh [hSCX], a
- farcall ApplyBGMapAnchorToObjects
- ld a, $60
- ld bc, $400
- ld hl, $9800
- call ByteFill
- ret
-
-Function20e6:: ; 20e6 (0:20e6)
- decoord 0, 0
- call Function20f7
- 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
- push bc
-.asm_20ff
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .asm_20ff
- ld bc, $c
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_20fe
- ld a, $0
- ldh [rVBK], a
- ret
-
-Function2112::
- call LoadTilesetHeader
- call LoadTileset
- xor a
- ldh [hMapAnims], a
- xor a
- ldh [hTileAnimFrame], a
- farcall Function1416d
- call LoadFontsExtra
- ret
-
-Function2128::
- ld b, $9
- jp GetSGBLayout
-
-Function212d::
- call ClearSprites
- call ResetBGWindow
- call GetMovementPermissions
- farcall Function5730
- farcall Function15612
- ld hl, wd182
- bit 6, [hl]
- jr nz, .asm_2151
- ld hl, wVramState
- set 0, [hl]
- call SafeUpdateSprites
-.asm_2151
- xor a
- ld [wd182], a
- ret
-
-Function2156::
- ld a, [wPlayerStepDirection]
- cp $ff
- 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
- ret
-
-.asm_216d
- ld a, [wPlayerStandingMapY]
- sub $4
- ld b, a
- ld a, [wd087]
- add a
- cp b
- jr z, .asm_21a1
- and a
- ret
-
-.asm_217c
- ld a, [wPlayerStandingMapY]
- sub $4
- cp $ff
- jr z, .asm_21a1
- and a
- ret
+INCLUDE "home/warp_connection.asm"
-.asm_2187
- ld a, [wPlayerStandingMapX]
- sub $4
- cp $ff
- jr z, .asm_21a1
- and a
- ret
-
-.asm_2192
- ld a, [wPlayerStandingMapX]
- sub $4
- ld b, a
- ld a, [wMapWidth]
- add a
- cp b
- jr z, .asm_21a1
- and a
- ret
-
-.asm_21a1
- scf
- ret
-
-Function21a3::
- 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]
- ld [wMapGroup], a
- ld a, [wd0ab]
- ld [wMapNumber], a
- ld a, [wd0b3]
- ld [wXCoord], a
- ld a, [wd0b2]
- ld hl, wYCoord
- add [hl]
- ld [hl], a
- ld c, a
- ld hl, wd0b4
- ld a, [hli]
- ld h, [hl]
- ld l, a
- srl c
- jr z, .asm_21eb
- ld a, [wd0b1]
- add $6
- ld e, a
- ld d, $0
-.asm_21e7
- add hl, de
- dec c
- jr nz, .asm_21e7
-.asm_21eb
- ld a, l
- ld [wOverworldMapAnchor], a
- ld a, h
- ld [wOverworldMapAnchor + 1], a
- jp Function2291
-
-Function21f6:: ; 21f6 (0:21f6)
- ld a, [wd0b6]
- ld [wMapGroup], a
- ld a, [wd0b7]
- ld [wMapNumber], a
- ld a, [wd0bf]
- ld [wXCoord], a
- ld a, [wd0be]
- ld hl, wYCoord
- add [hl]
- ld [hl], a
- ld c, a
- ld hl, wd0c0
- ld a, [hli]
- ld h, [hl]
- ld l, a
- srl c
- jr z, .asm_2227
- ld a, [wd0bd]
- add $6
- ld e, a
- ld d, $0
-.asm_2223
- add hl, de
- dec c
- jr nz, .asm_2223
-.asm_2227
- ld a, l
- ld [wOverworldMapAnchor], a
- ld a, h
- ld [wOverworldMapAnchor + 1], a
- jp Function2291
-
-Function2232:: ; 2232 (0:2232)
- ld a, [wd092]
- ld [wMapGroup], a
- ld a, [wd093]
- ld [wMapNumber], a
- ld a, [wd09a]
- ld [wYCoord], a
- ld a, [wd09b]
- ld hl, wXCoord
- add [hl]
- ld [hl], a
- ld c, a
- ld hl, wd09c
- 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 Function2291
-
-Function2263:: ; 2263 (0:2263)
- ld a, [wd09e]
- ld [wMapGroup], a
- ld a, [wd09f]
- ld [wMapNumber], a
- ld a, [wd0a6]
- ld [wYCoord], a
- ld a, [wd0a7]
- ld hl, wXCoord
- add [hl]
- ld [hl], a
- ld c, a
- ld hl, wd0a8
- 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
-Function2291:: ; 2291 (0:2291)
- scf
- ret
-
-Function2293::
- call Function22ad
- ret nc
- push bc
- farcall Function14a2d
- pop bc
- ret nc
- call Function2302
- scf
- ret
-
-Function22a5::
- call Function22ad
- ret nc
- call Function2302
- ret
-
-Function22ad:: ; 22ad (0:22ad)
- farcall Function14a18
- ret nc
- ldh a, [hROMBank]
- push af
- call SwitchToMapScriptsBank
- call Function22c1
- pop de
- ld a, d
- rst Bankswitch
- ret
-
-Function22c1:: ; 22c1 (0:22c1)
- ld a, [wPlayerStandingMapY]
- sub $4
- ld e, a
- ld a, [wPlayerStandingMapX]
- 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
- push hl
- ld a, [hli]
- cp e
- jr nz, .asm_22e4
- ld a, [hli]
- cp d
- jr nz, .asm_22e4
- jr .asm_22f1
-
-.asm_22e4
- pop hl
- ld a, $5
- add l
- ld l, a
- jr nc, .asm_22ec
- inc h
-.asm_22ec
- dec c
- jr nz, .asm_22d9
- xor a
- ret
-
-.asm_22f1
- pop hl
- call Function22fe
- ret nc
- ld a, [wCurMapWarpCount]
- inc a
- sub c
- ld c, a
- scf
- ret
-
-Function22fe:: ; 22fe (0:22fe)
- inc hl
- inc hl
- scf
- ret
-
-Function2302:: ; 2302 (0:2302)
- ldh a, [hROMBank]
- push af
- call SwitchToMapScriptsBank
- call Function230f
- pop af
- rst Bankswitch
- scf
- ret
-
-Function230f:: ; 230f (0:230f)
- push bc
- ld hl, wCurMapWarpsPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, c
- dec a
- ld bc, $5
- call AddNTimes
- ld bc, $2
- add hl, bc
- ld a, [hli]
- cp $ff
- jr nz, .asm_232b
- ld hl, wBackupWarpNumber
- ld a, [hli]
-.asm_232b
- pop bc
- ld [wNextWarpNumber], a
- ld a, [hli]
- ld [wNextMapGroup], a
- ld a, [hli]
- ld [wNextMapNumber], a
- ld a, c
- ld [wPrevWarpNumber], a
- ld a, [wMapGroup]
- ld [wPrevMapGroup], a
- ld a, [wMapNumber]
- ld [wPrevMapNumber], a
- scf
- ret
-
-Function2349::
- call Function2362
- call Function239b
- ld a, [wNextWarpNumber]
- ld [wd9ff], a
- ld a, [wNextMapGroup]
- ld [wMapGroup], a
- ld a, [wNextMapNumber]
- ld [wMapNumber], a
- ret
-
-Function2362:: ; 2362 (0:2362)
- call GetMapPermission
- call CheckOutdoorMap
- ret nz
- ld a, [wNextMapGroup]
- ld b, a
- ld a, [wNextMapNumber]
- ld c, a
- call GetAnyMapPermission
- call CheckIndoorMap
- ret nz
- ld a, [wPrevMapGroup]
- cp $f
- jr nz, .asm_2388
- ld a, [wPrevMapNumber]
- cp $a
- ret z
- cp $c
- ret z
-.asm_2388
- ld a, [wPrevWarpNumber]
- ld [wDigWarpNumber], a
- ld a, [wPrevMapGroup]
- ld [wDigMapGroup], a
- ld a, [wPrevMapNumber]
- ld [wDigMapNumber], a
- ret
-
-Function239b:: ; 239b (0:239b)
- call GetMapPermission
- call CheckOutdoorMap
- ret nz
- ld a, [wNextMapGroup]
- ld b, a
- ld a, [wNextMapNumber]
- ld c, a
- call GetAnyMapPermission
- call CheckIndoorMap
- ret nz
- ld a, [wNextMapGroup]
- ld b, a
- ld a, [wNextMapNumber]
- ld c, a
- call GetAnyMapTileset
- ld a, c
- cp $6
- ret nz
- ld a, [wPrevMapGroup]
- ld [wd9fb], a
- ld a, [wPrevMapNumber]
- ld [wd9fc], 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
@@ -687,7 +231,8 @@ CheckIndoorMap:: ; 23d3 (0:23d3)
cp GATE
ret
-CheckDungeonMap::
+; unused
+UnreferencedCheckEnvironment::
cp INDOOR
ret z
cp GATE
@@ -696,32 +241,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_SkipPeople::
- call CopyMapHeaders
+LoadMapAttributes_SkipObjects::
+ 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
@@ -729,104 +274,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
@@ -837,145 +393,165 @@ 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 [wd94b], a
+ ld [wCurMapBGEventCount], a
ld a, l
- ld [wd94c], a
+ ld [wCurMapBGEventsPointer], a
ld a, h
- ld [wd94d], a
+ 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
-RestoreFacingAfterWarp::
+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
- call GetCoordOfUpperLeftCorner
+ 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
@@ -983,19 +559,20 @@ BackUpWarp:: ; 2596 (0:2596)
ld [wBackupMapNumber], a
ret
-GetCoordOfUpperLeftCorner:: ; 25a9 (0:25a9)
- ld hl, wc700
+GetMapScreenCoords::
+ 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
@@ -1005,15 +582,16 @@ GetCoordOfUpperLeftCorner:: ; 25a9 (0:25a9)
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
@@ -1021,193 +599,211 @@ GetCoordOfUpperLeftCorner:: ; 25a9 (0:25a9)
ld [wOverworldMapAnchor + 1], a
ld a, [wYCoord]
and $1
- ld [wd07f], a
+ ld [wMetatileStandingY], a
ld a, [wXCoord]
and $1
- ld [wd080], a
+ ld [wMetatileStandingX], a
ret
LoadBlockData::
- ld hl, wOverworldMap
- ld bc, wOverworldMapEnd - wOverworldMap
- ld a, $0
+ ld hl, wOverworldMapBlocks
+ ld bc, wOverworldMapBlocksEnd - wOverworldMapBlocks
+ 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
@@ -1219,83 +815,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]
@@ -1303,44 +909,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::
- ld [wBuffer], a
+; Call a:de.
+
+ ld [wTempBank], a
ldh a, [hROMBank]
push af
- ld a, [wBuffer]
+ ld a, [wTempBank]
rst Bankswitch
+
call .de
+
pop af
rst Bankswitch
ret
@@ -1350,33 +964,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
@@ -1390,82 +1013,80 @@ ObjectEvent::
ObjectEventText::
text_far _ObjectEventText
- db "@"
+ text_end
BGEvent::
jumptext BGEventText
BGEventText::
- text_far BGEventText_
- db "@"
+ text_far _BGEventText
+ text_end
CoordinatesEvent::
jumptext CoordinatesEventText
CoordinatesEventText::
- text_far CoordinatesEventText_
- db "@"
+ text_far _CoordinatesEventText
+ text_end
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
@@ -1473,83 +1094,85 @@ ScrollMapUp::
ldh [hBGMapUpdate], a
ret
-ScrollMapRight::
- ld hl, wTilemap
+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
@@ -1564,60 +1187,63 @@ UpdateBGMapRow:: ; 28f6 (0:28f6)
or b
ld e, a
dec c
- jr nz, .asm_2904
- ld a, $14
- ldh [hFFDE], a
+ 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
- ldh [hFFDE], a
+ 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
@@ -1627,27 +1253,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::
@@ -1655,91 +1281,94 @@ 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
-LoadNeighboringBlockData::
+LoadConnectionBlockData::
ld hl, wOverworldMapAnchor
ld a, [hli]
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]
@@ -1748,12 +1377,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]
@@ -1763,25 +1393,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
@@ -1794,11 +1426,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
@@ -1810,14 +1444,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
@@ -1826,14 +1461,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
@@ -1842,14 +1478,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
@@ -1858,43 +1495,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
@@ -1905,6 +1549,7 @@ GetFacingTileCoord:: ; 2aec (0:2aec)
ret
.Directions:
+ ; x, y
db 0, 1
dw wTileDown
db 0, -1
@@ -1914,182 +1559,201 @@ 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
- ld a, [wd94b]
+; 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)
- ld hl, wd94c
+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, wcf29
- ld bc, $5
+ ld de, wCurBGEvent
+ ld bc, BG_EVENT_SIZE
call CopyBytes
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, wcf29
- ld bc, $8
+ ld de, wCurCoordEvent
+ ld bc, COORD_EVENT_SIZE
call CopyBytes
scf
ret
@@ -2108,7 +1772,7 @@ CloseSubmenu::
call ReloadTilesetAndPalettes
call UpdateSprites
call Call_ExitMenu
- call Functiond2a
+ call ReloadPalettes
jr FinishExitMenu
ExitAllMenus::
@@ -2116,9 +1780,9 @@ ExitAllMenus::
call Call_ExitMenu
call ReloadTilesetAndPalettes
call UpdateSprites
- call Functiond2a
+ call ReloadPalettes
FinishExitMenu::
- ld b, $9
+ ld b, SCGB_MAPPALS
call GetSGBLayout
call WaitBGMap2
farcall FadeInPalettes
@@ -2139,7 +1803,7 @@ ReturnToMapWithSpeechTextbox::
set 0, [hl]
call UpdateSprites
call WaitBGMap2
- ld b, $9
+ ld b, SCGB_MAPPALS
call GetSGBLayout
call UpdateTimePals
call DelayFrame
@@ -2148,11 +1812,11 @@ ReturnToMapWithSpeechTextbox::
pop af
ret
-ReloadTilesetAndPalettes:: ; 2c87 (0:2c87)
+ReloadTilesetAndPalettes::
call DisableLCD
call ClearSprites
- farcall RefreshSprites
- call Functiond9e
+ farcall _RefreshSprites
+ call LoadStandardFont
call LoadFontsExtra
ldh a, [hROMBank]
push af
@@ -2160,181 +1824,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
-GetMapPermission:: ; 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
@@ -2343,60 +2046,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
@@ -2405,30 +2113,37 @@ 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
ret
-LoadTilesetHeader:: ; 2dfa (0:2dfa)
+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