diff options
Diffstat (limited to 'home/map.asm')
-rw-r--r-- | home/map.asm | 2220 |
1 files changed, 1133 insertions, 1087 deletions
diff --git a/home/map.asm b/home/map.asm index b5b0d8c8..8dee046f 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1,15 +1,11 @@ -; Functions dealing with rendering and interacting with maps. - -Clearwc7e8:: ; 210f - ld hl, wc7e8 - ld bc, 24 +Clear_wc6e8:: ; 1f5d (0:1f5d) + ld hl, wc6e8 + ld bc, $18 ld a, $0 call ByteFill ret -; 211b -CheckTriggers:: ; 211b -; Checks wCurrentMapTriggerPointer. If it's empty, returns -1 in a. Otherwise, returns the active trigger ID in a. +CheckTriggers:: ; 1f69 (0:1f69) push hl ld hl, wCurrentMapTriggerPointer ld a, [hli] @@ -17,113 +13,93 @@ CheckTriggers:: ; 211b ld l, a or h ld a, [hl] - jr nz, .triggerexists - ld a, -1 - -.triggerexists + jr nz, .asm_1f76 + ld a, $ff +.asm_1f76 pop hl ret -; 212a -GetCurrentMapTrigger:: ; 212a -; Grabs the wram map trigger pointer for the current map and loads it into wCurrentMapTriggerPointer. -; If there are no triggers, both bytes of wCurrentMapTriggerPointer are wiped clean. -; Copy the current map group and number into bc. This is needed for GetMapTrigger. - ld a, [MapGroup] +GetCurrentMapTrigger:: ; 1f78 (0:1f78) + ld a, [wMapGroup] ld b, a - ld a, [MapNumber] + ld a, [wMapNumber] ld c, a -; Blank out wCurrentMapTriggerPointer; this is the default scenario. xor a ld [wCurrentMapTriggerPointer], a ld [wCurrentMapTriggerPointer + 1], a call GetMapTrigger - ret c ; The map is not in the trigger table -; Load the trigger table pointer from de into wCurrentMapTriggerPointer + ret c ld a, e ld [wCurrentMapTriggerPointer], a ld a, d ld [wCurrentMapTriggerPointer + 1], a xor a ret -; 2147 -GetMapTrigger:: ; 2147 -; Searches the trigger table for the map group and number loaded in bc, and returns the wram pointer in de. -; If the map is not in the trigger table, returns carry. +GetMapTrigger:: ; 1f95 (0:1f95) push bc ld a, [hROMBank] push af ld a, BANK(MapTriggers) rst Bankswitch - ld hl, MapTriggers -.loop +.asm_1f9f push hl - ld a, [hli] ; map group, or terminator - cp -1 - jr z, .end ; the current map is not in the trigger table + ld a, [hli] + cp $ff + jr z, .asm_1fb5 cp b - jr nz, .next ; map group did not match - ld a, [hli] ; map number + jr nz, .asm_1fae + ld a, [hli] cp c - jr nz, .next ; map number did not match - jr .found ; we found our map + jr nz, .asm_1fae + jr .asm_1fb8 -.next +.asm_1fae pop hl - ld de, 4 ; size of an entry in the trigger table + ld de, $4 add hl, de - jr .loop + jr .asm_1f9f -.end +.asm_1fb5 scf - jr .done + jr .asm_1fbb -.found +.asm_1fb8 ld e, [hl] inc hl ld d, [hl] - -.done +.asm_1fbb pop hl pop bc ld a, b rst Bankswitch - pop bc ret -; 2173 -OverworldTextModeSwitch:: ; 2173 +OverworldTextModeSwitch:: ; 1fc1 (0:1fc1) call LoadMapPart call FarCallSwapTextboxPalettes ret -; 217a -LoadMapPart:: ; 217a +LoadMapPart:: ; 1fc8 (0:1fc8) ld a, [hROMBank] push af - - ld a, [TilesetBlocksBank] + ld a, [wTilesetBlocksBank] rst Bankswitch - call LoadMetatiles ld a, $60 - hlcoord 0, 0 - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld hl, wTileMap + ld bc, $168 call ByteFill - - ld a, BANK(_LoadMapPart) + ld a, $5 rst Bankswitch - call _LoadMapPart - + call $538d pop af rst Bankswitch ret -; 2198 -LoadMetatiles:: ; 2198 +LoadMetatiles:: ; 1fe6 (0:1fe6) ; de <- wOverworldMapAnchor ld a, [wOverworldMapAnchor] ld e, a @@ -145,7 +121,7 @@ LoadMetatiles:: ; 2198 ld a, [de] and a jr nz, .ok - ld a, [MapBorderBlock] + ld a, [wMapBorderBlock] .ok ; Load the current wMisc address into de. @@ -155,13 +131,13 @@ LoadMetatiles:: ; 2198 add a ld l, a ld h, 0 -rept 3 add hl, hl -endr - ld a, [TilesetBlocksAddress] + add hl, hl + add hl, hl + ld a, [wTilesetBlocksAddress] add l ld l, a - ld a, [TilesetBlocksAddress + 1] + ld a, [wTilesetBlocksAddress + 1] adc h ld h, a @@ -197,7 +173,7 @@ endr ld de, WMISC_WIDTH * 4 add hl, de pop de - ld a, [MapWidth] + ld a, [wMapWidth] add 6 add e ld e, a @@ -207,170 +183,501 @@ endr dec b jp nz, .row ret -; 222a -ReturnToMapFromSubmenu:: ; 222a - ld a, MAPSETUP_SUBMENU +ReturnToMapFromSubmenu:: + ld a, $fa ld [hMapEntryMethod], a callba RunMapSetupScript xor a ld [hMapEntryMethod], a ret -; 2238 -CheckWarpTile:: ; 2238 - call GetDestinationWarpNumber - ret nc +Function2086:: + call Clear_wc6e8 + call Function2f10 + call Function2f1d + call GetCurrentMapTrigger + call Function2f16 + ld a, $5 + call RunMapCallback + callba Function97c2a + ld a, $3 + call RunMapCallback + call GetMapHeaderTimeOfDayNybble + ld [wMapTimeOfDay], a + ret + +Function20ac:: + ld a, $1 + ld [wRTCEnabled], a + callba Function8c3e9 + callba UpdateTimeOfDayPal + call OverworldTextModeSwitch + call Function20c7 + call Function20e6 + ret +Function20c7:: ; 20c7 (0:20c7) + ld a, $98 + ld [wd05c], a + xor a + ld [wd05b], a + ld [hSCY], a + ld [hSCX], a + callba Function58c5 + ld a, $60 + ld bc, $400 + ld hl, $9800 + call ByteFill + ret + +Function20e6:: ; 20e6 (0:20e6) + decoord 0, 0 + call Function20f7 + ld a, [hCGB] + and a + ret z + decoord 0, 0, wAttrMap + ld a, $1 + ld [rVBK], a +Function20f7:: ; 20f7 (0:20f7) + ld hl, $9800 + ld c, $14 + ld b, $12 +.asm_20fe push bc - callba CheckDirectionalWarp +.asm_20ff + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_20ff + ld bc, $c + add hl, bc pop bc - ret nc + dec b + jr nz, .asm_20fe + ld a, $0 + ld [rVBK], a + ret - call CopyWarpData +Function2112:: + call LoadTilesetHeader + call LoadTileset + xor a + ld [hMapAnims], a + xor a + ld [hTileAnimFrame], a + callba Function1416d + call Functiondac + ret + +Function2128:: + ld b, $9 + jp Function3583 + +Function212d:: + call Function30ff + call ResetBGWindow + call GetMovementPermissions + callba Function5730 + callba Function15612 + ld hl, wd182 + bit 6, [hl] + jr nz, .asm_2151 + ld hl, wVramState + set 0, [hl] + call Function2ef1 +.asm_2151 + xor a + ld [wd182], a + ret + +Function2156:: + ld a, [wce86] + 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 + +.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 -; 224a -WarpCheck:: ; 224a - call GetDestinationWarpNumber +Function21a3:: + ld a, [wce86] + 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 [wda03], a + ld a, [wd0b2] + ld hl, wda02 + 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 [wda03], a + ld a, [wd0be] + ld hl, wda02 + 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 [wda02], a + ld a, [wd09b] + ld hl, wda03 + 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 [wda02], a + ld a, [wd0a7] + ld hl, wda03 + 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 - call CopyWarpData + push bc + callba Function14a2d + pop bc + ret nc + call Function2302 + scf ret -; 2252 -GetDestinationWarpNumber:: ; 2252 - callba CheckWarpCollision +Function22a5:: + call Function22ad ret nc + call Function2302 + ret +Function22ad:: ; 22ad (0:22ad) + callba Function14a18 + ret nc ld a, [hROMBank] push af - call SwitchToMapScriptHeaderBank - call .GetDestinationWarpNumber - + call Function22c1 pop de ld a, d rst Bankswitch ret -; 2266 -.GetDestinationWarpNumber ; 2266 - ld a, [PlayerStandingMapY] +Function22c1:: ; 22c1 (0:22c1) + ld a, [wPlayerStandingMapY] sub $4 ld e, a - ld a, [PlayerStandingMapX] + ld a, [wPlayerStandingMapX] sub $4 ld d, a - ld a, [wCurrMapWarpCount] + ld a, [wd945] and a ret z - ld c, a - ld hl, wCurrMapWarpHeaderPointer + ld hl, wd946 ld a, [hli] ld h, [hl] ld l, a -.loop +.asm_22d9 push hl ld a, [hli] cp e - jr nz, .next + jr nz, .asm_22e4 ld a, [hli] cp d - jr nz, .next - jr .found_warp + jr nz, .asm_22e4 + jr .asm_22f1 -.next +.asm_22e4 pop hl - ld a, 5 + ld a, $5 add l ld l, a - jr nc, .okay + jr nc, .asm_22ec inc h - -.okay +.asm_22ec dec c - jr nz, .loop + jr nz, .asm_22d9 xor a ret -.found_warp +.asm_22f1 pop hl - call .IncreaseHLTwice - ret nc ; never encountered - - ld a, [wCurrMapWarpCount] + call Function22fe + ret nc + ld a, [wd945] inc a sub c ld c, a scf ret -.IncreaseHLTwice +Function22fe:: ; 22fe (0:22fe) inc hl inc hl scf ret -; 22a7 -CopyWarpData:: ; 22a7 +Function2302:: ; 2302 (0:2302) ld a, [hROMBank] push af - call SwitchToMapScriptHeaderBank - call .CopyWarpData - + call Function230f pop af rst Bankswitch scf ret -; 22b4 -.CopyWarpData ; 22b4 +Function230f:: ; 230f (0:230f) push bc - ld hl, wCurrMapWarpHeaderPointer + ld hl, wd946 ld a, [hli] ld h, [hl] ld l, a ld a, c dec a - ld bc, 5 ; warp size - call AddNTimes - ld bc, 2 ; warp number + ld bc, $5 + call Function31a3 + ld bc, $2 add hl, bc ld a, [hli] cp $ff - jr nz, .skip - ld hl, BackupWarpNumber + jr nz, .asm_232b + ld hl, wd9f5 ld a, [hli] - -.skip +.asm_232b pop bc - ld [wNextWarp], a + ld [wd043], a ld a, [hli] - ld [wNextMapGroup], a + ld [wd044], a ld a, [hli] - ld [wNextMapNumber], a - + ld [wd045], a ld a, c - ld [wPrevWarp], a - ld a, [MapGroup] - ld [wPrevMapGroup], a - ld a, [MapNumber] - ld [wPrevMapNumber], a + ld [wd046], a + ld a, [wMapGroup] + ld [wd047], a + ld a, [wMapNumber] + ld [wd048], a scf ret -; 22ee -CheckOutdoorMap:: ; 22ee +Function2349:: + call Function2362 + call Function239b + ld a, [wd043] + ld [wd9ff], a + ld a, [wd044] + ld [wMapGroup], a + ld a, [wd045] + ld [wMapNumber], a + ret + +Function2362:: ; 2362 (0:2362) + call GetMapPermission + call CheckOutdoorMap + ret nz + ld a, [wd044] + ld b, a + ld a, [wd045] + ld c, a + call GetAnyMapPermission + call CheckIndoorMap + ret nz + ld a, [wd047] + cp $f + jr nz, .asm_2388 + ld a, [wd048] + cp $a + ret z + cp $c + ret z +.asm_2388 + ld a, [wd046] + ld [wd9f2], a + ld a, [wd047] + ld [wd9f3], a + ld a, [wd048] + ld [wd9f4], a + ret + +Function239b:: ; 239b (0:239b) + call GetMapPermission + call CheckOutdoorMap + ret nz + ld a, [wd044] + ld b, a + ld a, [wd045] + ld c, a + call GetAnyMapPermission + call CheckIndoorMap + ret nz + ld a, [wd044] + ld b, a + ld a, [wd045] + ld c, a + call GetAnyMapTileset + ld a, c + cp $6 + ret nz + ld a, [wd047] + ld [wd9fb], a + ld a, [wd048] + ld [wd9fc], a + ret + +CheckOutdoorMap:: ; 23cd (0:23cd) cp ROUTE ret z cp TOWN ret -; 22f4 -CheckIndoorMap:: ; 22f4 +CheckIndoorMap:: ; 23d3 (0:23d3) cp INDOOR ret z cp CAVE @@ -379,47 +686,42 @@ CheckIndoorMap:: ; 22f4 ret z cp GATE ret -; 2300 -; XXX +CheckDungeonMap:: cp INDOOR ret z cp GATE ret z cp PERM_5 ret -; 2309 -LoadMapAttributes:: ; 2309 +LoadMapAttributes:: call CopyMapHeaders call SwitchToMapScriptHeaderBank call ReadMapScripts xor a call ReadMapEventHeader ret -; 2317 -LoadMapAttributes_SkipPeople:: ; 2317 +LoadMapAttributes_SkipPeople:: call CopyMapHeaders call SwitchToMapScriptHeaderBank call ReadMapScripts ld a, $1 call ReadMapEventHeader ret -; 2326 -CopyMapHeaders:: ; 2326 +CopyMapHeaders:: ; 2405 (0:2405) call PartiallyCopyMapHeader call SwitchToMapBank call GetSecondaryMapHeaderPointer call CopySecondMapHeader call GetMapConnections ret -; 2336 -ReadMapEventHeader:: ; 2336 +ReadMapEventHeader:: ; 2415 (0:2415) push af - ld hl, MapEventHeaderPointer + ld hl, wd08f ld a, [hli] ld h, [hl] ld l, a @@ -428,512 +730,484 @@ ReadMapEventHeader:: ; 2336 call ReadWarps call ReadCoordEvents call ReadSignposts - pop af and a ret nz - call ReadObjectEvents ret -; 234f -ReadMapScripts:: ; 234f - ld hl, MapScriptHeaderPointer +ReadMapScripts:: ; 242e (0:242e) + ld hl, wd08d ld a, [hli] ld h, [hl] ld l, a call ReadMapTriggers call ReadMapCallbacks ret -; 235c -CopySecondMapHeader:: ; 235c - ld de, MapHeader - ld c, 12 ; size of the second map header -.loop +CopySecondMapHeader:: ; 243b (0:243b) + ld de, wMapBorderBlock + ld c, $c +.asm_2440 ld a, [hli] ld [de], a inc de dec c - jr nz, .loop + jr nz, .asm_2440 ret -; 2368 -GetMapConnections:: ; 2368 +GetMapConnections:: ; 2447 (0:2447) ld a, $ff - ld [NorthConnectedMapGroup], a - ld [SouthConnectedMapGroup], a - ld [WestConnectedMapGroup], a - ld [EastConnectedMapGroup], a - - ld a, [MapConnections] + ld [wd092], a + ld [wd09e], a + ld [wd0aa], a + ld [wd0b6], a + ld a, [wd091] ld b, a - - bit NORTH_F, b - jr z, .no_north - ld de, NorthMapConnection + bit 3, b + jr z, .asm_2463 + ld de, wd092 call GetMapConnection -.no_north - - bit SOUTH_F, b - jr z, .no_south - ld de, SouthMapConnection +.asm_2463 + bit 2, b + jr z, .asm_246d + ld de, wd09e call GetMapConnection -.no_south - - bit WEST_F, b - jr z, .no_west - ld de, WestMapConnection +.asm_246d + bit 1, b + jr z, .asm_2477 + ld de, wd0aa call GetMapConnection -.no_west - - bit EAST_F, b - jr z, .no_east - ld de, EastMapConnection +.asm_2477 + bit 0, b + jr z, .asm_2481 + ld de, wd0b6 call GetMapConnection -.no_east - +.asm_2481 ret -; 23a3 -GetMapConnection:: ; 23a3 -; Load map connection struct at hl into de. - ld c, SouthMapConnection - NorthMapConnection -.loop +GetMapConnection:: ; 2482 (0:2482) + ld c, $c +.asm_2484 ld a, [hli] ld [de], a inc de dec c - jr nz, .loop + jr nz, .asm_2484 ret -; 23ac -ReadMapTriggers:: ; 23ac - ld a, [hli] ; trigger count +ReadMapTriggers:: ; 248b (0:248b) + ld a, [hli] ld c, a - ld [wCurrMapTriggerCount], a ; current map trigger count + ld [wd951], a ld a, l - ld [wCurrMapTriggerHeaderPointer], a ; map trigger pointer + ld [wd952], a ld a, h - ld [wCurrMapTriggerHeaderPointer + 1], a + ld [wd953], a ld a, c and a ret z - - ld bc, 4 ; size of a map trigger header entry - call AddNTimes + ld bc, $4 + call Function31a3 ret -; 23c3 -ReadMapCallbacks:: ; 23c3 +ReadMapCallbacks:: ; 24a2 (0:24a2) ld a, [hli] ld c, a - ld [wCurrMapCallbackCount], a + ld [wd954], a ld a, l - ld [wCurrMapCallbackHeaderPointer], a + ld [wd955], a ld a, h - ld [wCurrMapCallbackHeaderPointer + 1], a + ld [wd956], a ld a, c and a ret z - - ld bc, 3 - call AddNTimes + ld bc, $3 + call Function31a3 ret -; 23da -ReadWarps:: ; 23da +ReadWarps:: ; 24b9 (0:24b9) ld a, [hli] ld c, a - ld [wCurrMapWarpCount], a + ld [wd945], a ld a, l - ld [wCurrMapWarpHeaderPointer], a + ld [wd946], a ld a, h - ld [wCurrMapWarpHeaderPointer + 1], a + ld [wd947], a ld a, c and a ret z - ld bc, 5 - call AddNTimes + ld bc, $5 + call Function31a3 ret -; 23f1 -ReadCoordEvents:: ; 23f1 +ReadCoordEvents:: ; 24d0 (0:24d0) ld a, [hli] ld c, a - ld [wCurrentMapXYTriggerCount], a + ld [wd948], a ld a, l - ld [wCurrentMapXYTriggerHeaderPointer], a + ld [wd949], a ld a, h - ld [wCurrentMapXYTriggerHeaderPointer + 1], a - + ld [wd94a], a ld a, c and a ret z - - ld bc, 8 - call AddNTimes + ld bc, $8 + call Function31a3 ret -; 2408 -ReadSignposts:: ; 2408 +ReadSignposts:: ; 24e7 (0:24e7) ld a, [hli] ld c, a - ld [wCurrentMapSignpostCount], a + ld [wd94b], a ld a, l - ld [wCurrentMapSignpostHeaderPointer], a + ld [wd94c], a ld a, h - ld [wCurrentMapSignpostHeaderPointer + 1], a - + ld [wd94d], a ld a, c and a ret z - - ld bc, 5 - call AddNTimes + ld bc, $5 + call Function31a3 ret -; 241f -ReadObjectEvents:: ; 241f +ReadObjectEvents:: ; 24fe (0:24fe) push hl call ClearObjectStructs pop de - ld hl, Map1Object + ld hl, wMap2Object ld a, [de] inc de - ld [wCurrentMapPersonEventCount], a + ld [wd94e], a ld a, e - ld [wCurrentMapPersonEventHeaderPointer], a + ld [wd94f], a ld a, d - ld [wCurrentMapPersonEventHeaderPointer + 1], a - - ld a, [wCurrentMapPersonEventCount] + ld [wd950], a + ld a, [wd94e] call CopyMapObjectHeaders - -; get NUM_OBJECTS - [wCurrentMapPersonEventCount] - ld a, [wCurrentMapPersonEventCount] + ld a, [wd94e] ld c, a - ld a, NUM_OBJECTS ; - 1 + ld a, $10 sub c - jr z, .skip - ; jr c, .skip - -; stupid waste of time and space - ld bc, 1 + jr z, .asm_2533 + ld bc, $1 add hl, bc -; Fill the remaining sprite IDs and y coords with 0 and -1, respectively. -; Bleeds into wObjectMasks due to a bug. Uncomment the above subtraction -; to fix. - ld bc, OBJECT_LENGTH -.loop - ld [hl], 0 + ld bc, $10 +.asm_2529 + ld [hl], $0 inc hl - ld [hl], -1 + ld [hl], $ff dec hl add hl, bc dec a - jr nz, .loop - -.skip + jr nz, .asm_2529 +.asm_2533 ld h, d ld l, e ret -; 2457 -CopyMapObjectHeaders:: ; 2457 +CopyMapObjectHeaders:: ; 2536 (0:2536) and a ret z - ld c, a -.loop +.asm_2539 push bc push hl ld a, $ff ld [hli], a - ld b, MAPOBJECT_E - MAPOBJECT_SPRITE -.loop2 + ld b, $d +.asm_2540 ld a, [de] inc de ld [hli], a dec b - jr nz, .loop2 - + jr nz, .asm_2540 pop hl - ld bc, OBJECT_LENGTH + ld bc, $10 add hl, bc pop bc dec c - jr nz, .loop + jr nz, .asm_2539 ret -; 2471 -ClearObjectStructs:: ; 2471 - ld hl, Object1Struct - ld bc, OBJECT_STRUCT_LENGTH * (NUM_OBJECT_STRUCTS - 1) +ClearObjectStructs:: ; 2550 (0:2550) + ld hl, wObject1Struct + ld bc, $1e0 xor a call ByteFill - -; Just to make sure (this is rather pointless) - ld hl, Object1Struct - ld de, OBJECT_STRUCT_LENGTH - ld c, NUM_OBJECT_STRUCTS - 1 + ld hl, wObject1Struct + ld de, $28 + ld c, $c xor a -.loop +.asm_2563 ld [hl], a add hl, de dec c - jr nz, .loop + jr nz, .asm_2563 ret -; 248a -RestoreFacingAfterWarp:: ; 248a +RestoreFacingAfterWarp:: call GetMapScriptHeaderBank rst Bankswitch - - ld hl, MapEventHeaderPointer + ld hl, wd08f ld a, [hli] ld h, [hl] ld l, a -rept 3 - inc hl ; get to the warp coords -endr - ld a, [WarpNumber] + inc hl + inc hl + inc hl + ld a, [wd9ff] dec a ld c, a - ld b, 0 - ld a, 5 - call AddNTimes + ld b, $0 + ld a, $5 + call Function31a3 ld a, [hli] - ld [YCoord], a + ld [wda02], a ld a, [hli] - ld [XCoord], a - ; destination warp number + ld [wda03], a ld a, [hli] cp $ff - jr nz, .skip - call .backup - -.skip - callba GetCoordOfUpperLeftCorner + jr nz, .asm_2592 + call BackUpWarp +.asm_2592 + call GetCoordOfUpperLeftCorner ret -; 24ba -.backup - ld a, [wPrevWarp] - ld [BackupWarpNumber], a - ld a, [wPrevMapGroup] - ld [BackupMapGroup], a - ld a, [wPrevMapNumber] - ld [BackupMapNumber], a +BackUpWarp:: ; 2596 (0:2596) + ld a, [wd046] + ld [wd9f5], a + ld a, [wd047] + ld [wd9f6], a + ld a, [wd048] + ld [wd9f7], a ret -; 24cd -LoadBlockData:: ; 24cd - ld hl, OverworldMap - ld bc, OverworldMapEnd - OverworldMap - ld a, 0 +GetCoordOfUpperLeftCorner:: ; 25a9 (0:25a9) + ld hl, wc700 + ld a, [wda03] + bit 0, a + jr nz, .asm_25b9 + srl a + add $1 + jr .asm_25bd + +.asm_25b9 + add $1 + srl a +.asm_25bd + ld c, a + ld b, $0 + add hl, bc + ld a, [wMapWidth] + add $6 + ld c, a + ld b, $0 + ld a, [wda02] + bit 0, a + jr nz, .asm_25d6 + srl a + add $1 + jr .asm_25da + +.asm_25d6 + add $1 + srl a +.asm_25da + call Function31a3 + ld a, l + ld [wOverworldMapAnchor], a + ld a, h + ld [wOverworldMapAnchor + 1], a + ld a, [wda02] + and $1 + ld [wd07f], a + ld a, [wda03] + and $1 + ld [wd080], a + ret + +LoadBlockData:: + ld hl, wOverworldMap + ld bc, wOverworldMapEnd - wOverworldMap + ld a, $0 call ByteFill call ChangeMap call FillMapConnections - ld a, MAPCALLBACK_TILES + ld a, $1 call RunMapCallback ret -; 24e4 -ChangeMap:: ; 24e4 +ChangeMap:: ; 260d (0:260d) ld a, [hROMBank] push af - - ld hl, OverworldMap - ld a, [MapWidth] - ld [hConnectedMapWidth], a + ld hl, wc700 + ld a, [wMapWidth] + ld [hObjectStructIndexBuffer], a add $6 ld [hConnectionStripLength], a ld c, a - ld b, 0 -rept 3 + ld b, $0 add hl, bc -endr - ld c, 3 add hl, bc - ld a, [MapBlockDataBank] + add hl, bc + ld c, $3 + add hl, bc + ld a, [wd089] rst Bankswitch - - ld a, [MapBlockDataPointer] + ld a, [wd08a] ld e, a - ld a, [MapBlockDataPointer+1] + ld a, [wd08b] ld d, a - ld a, [MapHeight] + ld a, [wd087] ld b, a -.row +.asm_2635 push hl - ld a, [hConnectedMapWidth] + ld a, [hObjectStructIndexBuffer] ld c, a -.col +.asm_2639 ld a, [de] inc de ld [hli], a dec c - jr nz, .col + jr nz, .asm_2639 pop hl - ld a, [hConnectionStripLength] + ld a, [hMapObjectIndexBuffer] add l ld l, a - jr nc, .okay + jr nc, .asm_2647 inc h -.okay +.asm_2647 dec b - jr nz, .row - + jr nz, .asm_2635 pop af rst Bankswitch ret -; 2524 - -FillMapConnections:: ; 2524 -; North - ld a, [NorthConnectedMapGroup] +FillMapConnections:: ; 264d (0:264d) + ld a, [wd092] cp $ff - jr z, .South + jr z, .asm_2679 ld b, a - ld a, [NorthConnectedMapNumber] + ld a, [wd093] ld c, a call GetAnyMapBlockdataBank - - ld a, [NorthConnectionStripPointer] + ld a, [wd094] ld l, a - ld a, [NorthConnectionStripPointer + 1] + ld a, [wd095] ld h, a - ld a, [NorthConnectionStripLocation] + ld a, [wd096] ld e, a - ld a, [NorthConnectionStripLocation + 1] + ld a, [wd097] ld d, a - ld a, [NorthConnectionStripLength] + ld a, [wd098] ld [hConnectionStripLength], a - ld a, [NorthConnectedMapWidth] - ld [hConnectedMapWidth], a + ld a, [wd099] + ld [hObjectStructIndexBuffer], a call FillNorthConnectionStrip - -.South - ld a, [SouthConnectedMapGroup] +.asm_2679 + ld a, [wd09e] cp $ff - jr z, .West + jr z, .asm_26a5 ld b, a - ld a, [SouthConnectedMapNumber] + ld a, [wd09f] ld c, a call GetAnyMapBlockdataBank - - ld a, [SouthConnectionStripPointer] + ld a, [wd0a0] ld l, a - ld a, [SouthConnectionStripPointer + 1] + ld a, [wd0a1] ld h, a - ld a, [SouthConnectionStripLocation] + ld a, [wd0a2] ld e, a - ld a, [SouthConnectionStripLocation + 1] + ld a, [wd0a3] ld d, a - ld a, [SouthConnectionStripLength] + ld a, [wd0a4] ld [hConnectionStripLength], a - ld a, [SouthConnectedMapWidth] - ld [hConnectedMapWidth], a + ld a, [wd0a5] + ld [hObjectStructIndexBuffer], a call FillSouthConnectionStrip - -.West - ld a, [WestConnectedMapGroup] +.asm_26a5 + ld a, [wd0aa] cp $ff - jr z, .East + jr z, .asm_26d0 ld b, a - ld a, [WestConnectedMapNumber] + ld a, [wd0ab] ld c, a call GetAnyMapBlockdataBank - - ld a, [WestConnectionStripPointer] + ld a, [wd0ac] ld l, a - ld a, [WestConnectionStripPointer + 1] + ld a, [wd0ad] ld h, a - ld a, [WestConnectionStripLocation] + ld a, [wd0ae] ld e, a - ld a, [WestConnectionStripLocation + 1] + ld a, [wd0af] ld d, a - ld a, [WestConnectionStripLength] + ld a, [wd0b0] ld b, a - ld a, [WestConnectedMapWidth] + ld a, [wd0b1] ld [hConnectionStripLength], a call FillWestConnectionStrip - -.East - ld a, [EastConnectedMapGroup] +.asm_26d0 + ld a, [wd0b6] cp $ff - jr z, .Done + jr z, .asm_26fb ld b, a - ld a, [EastConnectedMapNumber] + ld a, [wd0b7] ld c, a call GetAnyMapBlockdataBank - - ld a, [EastConnectionStripPointer] + ld a, [wd0b8] ld l, a - ld a, [EastConnectionStripPointer + 1] + ld a, [wd0b9] ld h, a - ld a, [EastConnectionStripLocation] + ld a, [wd0ba] ld e, a - ld a, [EastConnectionStripLocation + 1] + ld a, [wd0bb] ld d, a - ld a, [EastConnectionStripLength] + ld a, [wd0bc] ld b, a - ld a, [EastConnectedMapWidth] + ld a, [wd0bd] ld [hConnectionStripLength], a call FillEastConnectionStrip - -.Done +.asm_26fb ret -; 25d3 - -FillNorthConnectionStrip:: -FillSouthConnectionStrip:: ; 25d3 - ld c, 3 -.y +FillNorthConnectionStrip:: ; 26fc (0:26fc) +FillSouthConnectionStrip:: ; 26fc (0:26fc) + ld c, $3 +.asm_26fe push de - push hl - ld a, [hConnectionStripLength] + ld a, [hMapObjectIndexBuffer] ld b, a -.x +.asm_2703 ld a, [hli] ld [de], a inc de dec b - jr nz, .x + jr nz, .asm_2703 pop hl - - ld a, [hConnectedMapWidth] + ld a, [hObjectStructIndexBuffer] ld e, a - ld d, 0 + ld d, $0 add hl, de pop de - - ld a, [MapWidth] - add 6 + ld a, [wMapWidth] + add $6 add e ld e, a - jr nc, .okay + jr nc, .asm_271b inc d -.okay +.asm_271b dec c - jr nz, .y + jr nz, .asm_26fe ret -; 25f6 - -FillWestConnectionStrip:: -FillEastConnectionStrip:: ; 25f6 -.loop - ld a, [MapWidth] - add 6 +FillWestConnectionStrip:: ; 271f (0:271f) +FillEastConnectionStrip:: ; 271f (0:271f) + ld a, [wMapWidth] + add $6 ld [hConnectedMapWidth], a - push de - push hl ld a, [hli] ld [de], a @@ -945,158 +1219,128 @@ FillEastConnectionStrip:: ; 25f6 ld [de], a inc de pop hl - - ld a, [hConnectionStripLength] + ld a, [hMapObjectIndexBuffer] ld e, a - ld d, 0 + ld d, $0 add hl, de pop de - ld a, [hConnectedMapWidth] add e ld e, a - jr nc, .okay + jr nc, .asm_2740 inc d -.okay +.asm_2740 dec b - jr nz, .loop + jr nz, FillWestConnectionStrip ret -; 261b -LoadMapStatus:: ; 261b - ld [MapStatus], a +LoadMapStatus:: + ld [wd159], a ret -; 261f - -CallScript:: ; 261f -; Call a script at a:hl. - ld [ScriptBank], a +CallScript:: + ld [wd160], a ld a, l - ld [ScriptPos], a + ld [wd161], a ld a, h - ld [ScriptPos + 1], a - - ld a, PLAYEREVENT_MAPSCRIPT - ld [ScriptRunning], a - + ld [wd162], a + ld a, $ff + ld [wd15f], a scf ret -; 2631 -CallMapScript:: ; 2631 -; Call a script at hl in the current bank if there isn't already a script running - ld a, [ScriptRunning] +CallMapScript:: + ld a, [wd15f] and a ret nz call GetMapScriptHeaderBank jr CallScript -; 263b -RunMapCallback:: ; 263b -; Will run the first callback found in the map header with execution index equal to a. +RunMapCallback:: ; 2764 (0:2764) ld b, a ld a, [hROMBank] push af call SwitchToMapScriptHeaderBank - call .FindCallback - jr nc, .done - + call FindCallback + jr nc, .asm_2779 call GetMapScriptHeaderBank ld b, a ld d, h ld e, l call ExecuteCallbackScript - -.done +.asm_2779 pop af rst Bankswitch ret -; 2653 -.FindCallback: ; 2653 - ld a, [wCurrMapCallbackCount] +FindCallback:: ; 277c (0:277c) + ld a, [wd954] ld c, a and a ret z - ld hl, wCurrMapCallbackHeaderPointer + ld hl, wd955 ld a, [hli] ld h, [hl] ld l, a or h ret z - ld de, 3 -.loop + ld de, $3 +.asm_278d ld a, [hl] cp b - jr z, .found + jr z, .asm_2797 add hl, de dec c - jr nz, .loop + jr nz, .asm_278d xor a ret -.found +.asm_2797 inc hl ld a, [hli] ld h, [hl] ld l, a scf ret -; 2674 -ExecuteCallbackScript:: ; 2674 -; Do map callback de and return to script bank b. +ExecuteCallbackScript:: ; 279d (0:279d) callba CallCallback - ld a, [ScriptMode] + ld a, [wd15e] push af - ld hl, ScriptFlags + ld hl, wd15b ld a, [hl] push af set 1, [hl] callba EnableScriptMode callba ScriptEvents pop af - ld [ScriptFlags], a + ld [wd15b], a pop af - ld [ScriptMode], a + ld [wd15e], a ret -; 269a -MapTextbox:: ; 269a +MapTextbox:: ld a, [hROMBank] push af - ld a, b rst Bankswitch - - push hl - call SpeechTextBox - call Function2e31 - ld a, 1 + call SetUpTextBox + ld a, $1 ld [hOAMUpdate], a - call ApplyTilemap - pop hl call PrintTextBoxText xor a ld [hOAMUpdate], a - pop af rst Bankswitch ret -; 26b7 - -Call_a_de:: ; 26b7 -; Call a:de. - ld [hBuffer], a +Call_a_de:: + ld [wBuffer], a ld a, [hROMBank] push af - ld a, [hBuffer] + ld a, [wBuffer] rst Bankswitch - call .de - pop af rst Bankswitch ret @@ -1104,46 +1348,35 @@ Call_a_de:: ; 26b7 .de push de ret -; 26c7 -GetMovementData:: ; 26c7 -; Initialize the movement data for person c at b:hl +GetMovementData:: ld a, [hROMBank] push af ld a, b rst Bankswitch - ld a, c call LoadMovementDataPointer - pop hl ld a, h rst Bankswitch ret -; 26d4 - -GetScriptByte:: ; 0x26d4 -; Return byte at ScriptBank:ScriptPos in a. +GetScriptByte:: push hl push bc ld a, [hROMBank] push af - ld a, [ScriptBank] + ld a, [wd160] rst Bankswitch - - ld hl, ScriptPos + ld hl, wd161 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 @@ -1151,188 +1384,172 @@ GetScriptByte:: ; 0x26d4 pop bc pop hl ret -; 0x26ef -ObjectEvent:: ; 0x26ef +ObjectEvent:: jumptextfaceplayer ObjectEventText -; 0x26f2 ObjectEventText:: - text_jump _ObjectEventText + text_jump ObjectEventText_ db "@" -; 0x26f7 -BGEvent:: ; 26f7 +BGEvent:: jumptext BGEventText -; 26fa -BGEventText:: ; 26fa - text_jump UnknownText_0x1c46fc +BGEventText:: + text_jump BGEventText_ db "@" -; 26ff -CoordinatesEvent:: ; 26ff +CoordinatesEvent:: jumptext CoordinatesEventText -; 2702 -CoordinatesEventText:: ; 2702 - text_jump UnknownText_0x1c4706 +CoordinatesEventText:: + text_jump CoordinatesEventText_ db "@" -; 2707 -CheckObjectMask:: ; 2707 +CheckObjectMask:: ld a, [hMapObjectIndexBuffer] +.asm_282c ld e, a ld d, $0 - ld hl, wObjectMasks + ld hl, MapObjectsEnd add hl, de ld a, [hl] +.asm_2834 ret -; 2712 -MaskObject:: ; 2712 - ld a, [hMapObjectIndexBuffer] +MaskObject:: ; 2835 (0:2835) + ld a, [hConnectionStripLength] ld e, a ld d, $0 - ld hl, wObjectMasks + ld hl, wd545 +.asm_283c add hl, de - ld [hl], -1 ; , masked + ld [hl], $ff ret -; 271e -UnmaskObject:: ; 271e +UnmaskObject:: ; 2841 (0:2841) ld a, [hMapObjectIndexBuffer] ld e, a ld d, $0 - ld hl, wObjectMasks + ld hl, MapObjectsEnd add hl, de - ld [hl], 0 ; unmasked + ld [hl], $0 ret -; 272a -ScrollMapDown:: ; 272a +ScrollMapDown:: hlcoord 0, 0 - ld de, BGMapBuffer + ld de, wBGMapBuffer call BackupBGMapRow - ld c, 2 * SCREEN_WIDTH + ld c, $28 call FarCallScrollBGMapPalettes - ld a, [wBGMapAnchor] + ld a, [wd05b] ld e, a - ld a, [wBGMapAnchor + 1] + ld a, [wd05c] ld d, a call UpdateBGMapRow ld a, $1 ld [hBGMapUpdate], a ret -; 2748 -ScrollMapUp:: ; 2748 - hlcoord 0, SCREEN_HEIGHT - 2 - ld de, BGMapBuffer +ScrollMapUp:: + hlcoord 0, 16 + ld de, wBGMapBuffer call BackupBGMapRow - ld c, 2 * SCREEN_WIDTH + ld c, $28 call FarCallScrollBGMapPalettes - ld a, [wBGMapAnchor] + ld a, [wd05b] ld l, a - ld a, [wBGMapAnchor + 1] + ld a, [wd05c] ld h, a - ld bc, $0200 + ld bc, $200 add hl, bc -; cap d at VBGMap1 / $100 ld a, h - and %00000011 - or VBGMap0 / $100 + and $3 + or $98 ld e, l ld d, a call UpdateBGMapRow ld a, $1 ld [hBGMapUpdate], a ret -; 2771 -ScrollMapRight:: ; 2771 - hlcoord 0, 0 - ld de, BGMapBuffer +ScrollMapRight:: + ld hl, wTileMap + ld de, wBGMapBuffer call BackupBGMapColumn - ld c, 2 * SCREEN_HEIGHT + ld c, $24 call FarCallScrollBGMapPalettes - ld a, [wBGMapAnchor] + ld a, [wd05b] ld e, a - ld a, [wBGMapAnchor + 1] + ld a, [wd05c] ld d, a call UpdateBGMapColumn ld a, $1 ld [hBGMapUpdate], a ret -; 278f -ScrollMapLeft:: ; 278f - hlcoord SCREEN_WIDTH - 2, 0 - ld de, BGMapBuffer +ScrollMapLeft:: + hlcoord 18, 0 + ld de, wBGMapBuffer call BackupBGMapColumn - ld c, 2 * SCREEN_HEIGHT + ld c, $24 call FarCallScrollBGMapPalettes - ld a, [wBGMapAnchor] + ld a, [wd05b] ld e, a - and %11100000 + and $e0 ld b, a ld a, e - add SCREEN_HEIGHT - and %00011111 + add $12 + and $1f or b ld e, a - ld a, [wBGMapAnchor + 1] + ld a, [wd05c] ld d, a call UpdateBGMapColumn ld a, $1 ld [hBGMapUpdate], a ret -; 27b7 -BackupBGMapRow:: ; 27b7 - ld c, 2 * SCREEN_WIDTH -.loop +BackupBGMapRow:: ; 28da (0:28da) + ld c, $28 +.asm_28dc ld a, [hli] ld [de], a inc de dec c - jr nz, .loop + jr nz, .asm_28dc ret -; 27c0 -BackupBGMapColumn:: ; 27c0 - ld c, SCREEN_HEIGHT -.loop +BackupBGMapColumn:: ; 28e3 (0:28e3) + ld c, $12 +.asm_28e5 ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a inc de - ld a, SCREEN_WIDTH - 1 + ld a, $13 add l ld l, a - jr nc, .skip + jr nc, .asm_28f2 inc h - -.skip +.asm_28f2 dec c - jr nz, .loop + jr nz, .asm_28e5 ret -; 27d3 -UpdateBGMapRow:: ; 27d3 - ld hl, BGMapBufferPtrs +UpdateBGMapRow:: ; 28f6 (0:28f6) + ld hl, wBGMapBufferPtrs push de call .iteration pop de ld a, $20 add e ld e, a - .iteration - ld c, 10 -.loop + ld c, $a +.asm_2904 ld a, e ld [hli], a ld a, d @@ -1347,16 +1564,15 @@ UpdateBGMapRow:: ; 27d3 or b ld e, a dec c - jr nz, .loop - ld a, SCREEN_WIDTH + jr nz, .asm_2904 + ld a, $14 ld [hFFDE], a ret -; 27f8 -UpdateBGMapColumn:: ; 27f8 - ld hl, BGMapBufferPtrs - ld c, SCREEN_HEIGHT -.loop +UpdateBGMapColumn:: ; 291b (0:291b) + ld hl, wBGMapBufferPtrs + ld c, $12 +.asm_2920 ld a, e ld [hli], a ld a, d @@ -1364,225 +1580,180 @@ UpdateBGMapColumn:: ; 27f8 ld a, $20 add e ld e, a - jr nc, .skip + jr nc, .asm_2931 inc d -; cap d at VBGMap1 / $100 ld a, d and $3 - or VBGMap0 / $100 + or $98 ld d, a - -.skip +.asm_2931 dec c - jr nz, .loop - ld a, SCREEN_HEIGHT + jr nz, .asm_2920 + ld a, $12 ld [hFFDE], a ret -; 2816 -; unreferenced - ld hl, BGMapBuffer - ld bc, SGBPredef - BGMapBuffer +Function2939:: + ld hl, wBGMapBuffer + ld bc, $78 xor a call ByteFill ret -; 2821 -LoadTileset:: ; 2821 - ld hl, TilesetAddress +LoadTileset:: ; 2944 (0:2944) + ld hl, wd0c3 ld a, [hli] ld h, [hl] ld l, a - ld a, [TilesetBank] - ld e, a - - ld a, [rSVBK] - push af - ld a, $6 - ld [rSVBK], a - - ld a, e - ld de, wDecompressScratch + ld de, $9000 + ld a, [wd0c2] call FarDecompress + ld a, [wd082] + cp $1 + jr z, .asm_2960 + cp $2 + jr z, .asm_2960 + jr .asm_2966 - ld hl, wDecompressScratch - ld de, VTiles2 - ld bc, $60 tiles - call CopyBytes - - ld a, [rVBK] - push af - ld a, $1 - ld [rVBK], a - - ld hl, w6_d600 - ld de, VTiles2 - ld bc, $60 tiles - call CopyBytes - - pop af - ld [rVBK], a - - pop af - ld [rSVBK], a - - ld a, [wTileset] - cp TILESET_JOHTO_1 - jr z, .load_roof - cp TILESET_JOHTO_2 - jr z, .load_roof - cp TILESET_BATTLE_TOWER_OUTSIDE - jr z, .load_roof - jr .skip_roof - -.load_roof +.asm_2960 callba LoadMapGroupRoof - -.skip_roof +.asm_2966 xor a ld [hTileAnimFrame], a ret -; 2879 -BufferScreen:: ; 2879 +BufferScreen:: ld hl, wOverworldMapAnchor ld a, [hli] ld h, [hl] ld l, a - ld de, wScreenSave + ld de, wda04 ld c, $5 ld b, $6 -.row +.asm_2977 push bc push hl -.col +.asm_2979 ld a, [hli] ld [de], a inc de dec b - jr nz, .col + jr nz, .asm_2979 pop hl - ld a, [MapWidth] + ld a, [wMapWidth] add $6 ld c, a ld b, $0 add hl, bc pop bc dec c - jr nz, .row + jr nz, .asm_2977 ret -; 289d -SaveScreen:: ; 289d +SaveScreen:: ld hl, wOverworldMapAnchor ld a, [hli] ld h, [hl] ld l, a - ld de, wScreenSave - ld a, [MapWidth] - add 6 - ld [hMapObjectIndexBuffer], a - ld a, [wPlayerStepDirection] + ld de, wda04 + ld a, [wMapWidth] + add $6 + ld [hConnectionStripLength], a + ld a, [wce86] and a - jr z, .down - cp UP - jr z, .up - cp LEFT - jr z, .left - cp RIGHT - jr z, .right + jr z, .asm_29bc + cp $1 + jr z, .asm_29b1 + cp $2 + jr z, .asm_29c5 + cp $3 + jr z, .asm_29cb ret -.up - ld de, wScreenSave + 6 - ld a, [hMapObjectIndexBuffer] +.asm_29b1 + ld de, wda0a + ld a, [hConnectionStripLength] ld c, a ld b, $0 add hl, bc - jr .vertical + jr .asm_29bf -.down - ld de, wScreenSave -.vertical - ld b, 6 - ld c, 4 +.asm_29bc + ld de, wda04 +.asm_29bf + ld b, $6 + ld c, $4 jr SaveScreen_LoadNeighbor -.left - ld de, wScreenSave + 1 +.asm_29c5 + ld de, wda05 inc hl - jr .horizontal + jr .asm_29ce -.right - ld de, wScreenSave -.horizontal - ld b, 5 - ld c, 5 +.asm_29cb + ld de, wda04 +.asm_29ce + ld b, $5 + ld c, $5 jr SaveScreen_LoadNeighbor -LoadNeighboringBlockData:: ; 28e3 +LoadNeighboringBlockData:: ld hl, wOverworldMapAnchor ld a, [hli] ld h, [hl] ld l, a - ld a, [MapWidth] - add 6 - ld [hConnectionStripLength], a - ld de, wScreenSave - ld b, 6 - ld c, 5 - -SaveScreen_LoadNeighbor:: ; 28f7 -.row + ld a, [wMapWidth] + add $6 + ld [hMapObjectIndexBuffer], a + ld de, wda04 + ld b, $6 + ld c, $5 +SaveScreen_LoadNeighbor:: push bc push hl push de -.col +.asm_29eb ld a, [de] inc de ld [hli], a dec b - jr nz, .col + jr nz, .asm_29eb pop de ld a, e - add 6 + add $6 ld e, a - jr nc, .okay + jr nc, .asm_29f9 inc d - -.okay +.asm_29f9 pop hl ld a, [hConnectionStripLength] ld c, a - ld b, 0 + ld b, $0 add hl, bc pop bc dec c - jr nz, .row + jr nz, SaveScreen_LoadNeighbor ret -; 2914 -GetMovementPermissions:: ; 2914 +GetMovementPermissions:: ; 2a05 (0:2a05) xor a ld [TilePermissions], a call .LeftRight call .UpDown -; get coords of current tile - ld a, [PlayerStandingMapX] + ld a, [wPlayerStandingMapX] ld d, a - ld a, [PlayerStandingMapY] + ld a, [wPlayerStandingMapY] ld e, a call GetCoordTile - ld [PlayerStandingTile], a + ld [wPlayerStandingTile], a call .CheckHiNybble ret nz - - ld a, [PlayerStandingTile] - and 7 + ld a, [wPlayerStandingTile] + and $7 ld hl, .MovementPermissionsData add l ld l, a - ld a, 0 + ld a, $0 adc h ld h, a ld a, [hl] @@ -1590,262 +1761,229 @@ GetMovementPermissions:: ; 2914 or [hl] ld [hl], a ret -; 2945 -.MovementPermissionsData ; 2945 - db 1, 2, 4, 8, 9, 10, 5, 6 -; 294d +.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) -.UpDown - ld a, [PlayerStandingMapX] +.UpDown: + ld a, [wPlayerStandingMapX] ld d, a - ld a, [PlayerStandingMapY] + ld a, [wPlayerStandingMapY] ld e, a - push de inc e call GetCoordTile - ld [TileDown], a + ld [wTileDown], a call .Down - pop de dec e call GetCoordTile - ld [TileUp], a + ld [wTileUp], a call .Up ret -; 296c -.LeftRight - ld a, [PlayerStandingMapX] +.LeftRight: + ld a, [wPlayerStandingMapX] ld d, a - ld a, [PlayerStandingMapY] + ld a, [wPlayerStandingMapY] ld e, a - push de dec d call GetCoordTile - ld [TileLeft], a + ld [wTileLeft], a call .Left - pop de inc d call GetCoordTile - ld [TileRight], a + ld [wTileRight], a call .Right ret -; 298b -.Down +.Down: call .CheckHiNybble ret nz - ld a, [TileDown] - and 7 + ld a, [wTileDown] + and $7 cp $2 - jr z, .ok_down + jr z, .asm_2a90 cp $6 - jr z, .ok_down + jr z, .asm_2a90 cp $7 ret nz - -.ok_down - ld a, [TilePermissions] - or FACE_DOWN - ld [TilePermissions], a +.asm_2a90 + ld hl, TilePermissions + set 3, [hl] ret -; 29a8 -.Up +.Up: call .CheckHiNybble ret nz - ld a, [TileUp] - and 7 + ld a, [wTileUp] + and $7 cp $3 - jr z, .ok_up + jr z, .asm_2aaa cp $4 - jr z, .ok_up + jr z, .asm_2aaa cp $5 ret nz - -.ok_up - ld a, [TilePermissions] - or FACE_UP - ld [TilePermissions], a +.asm_2aaa + ld hl, TilePermissions + set 3, [hl] ret -; 29c5 -.Right +.Right: call .CheckHiNybble ret nz - ld a, [TileRight] - and 7 + ld a, [wTileRight] + and $7 cp $1 - jr z, .ok_right + jr z, .asm_2ac4 cp $5 - jr z, .ok_right + jr z, .asm_2ac4 cp $7 ret nz - -.ok_right - ld a, [TilePermissions] - or FACE_RIGHT - ld [TilePermissions], a +.asm_2ac4 + ld hl, TilePermissions + set 3, [hl] ret -; 29e2 -.Left +.Left: call .CheckHiNybble ret nz - ld a, [TileLeft] - and 7 + ld a, [wTileLeft] + and $7 cp $0 - jr z, .ok_left + jr z, .asm_2ade cp $4 - jr z, .ok_left + jr z, .asm_2ade cp $6 ret nz - -.ok_left - ld a, [TilePermissions] - or FACE_LEFT - ld [TilePermissions], a +.asm_2ade + ld hl, TilePermissions + set 3, [hl] ret -; 29ff -.CheckHiNybble +.CheckHiNybble: and $f0 cp $b0 ret z cp $c0 ret -; 2a07 - -GetFacingTileCoord:: ; 2a07 -; Return map coordinates in (d, e) and tile id in a -; of the tile the player is facing. - ld a, [PlayerDirection] - and %1100 +GetFacingTileCoord:: ; 2aec (0:2aec) + ld a, [wPlayerDirection] + and $c 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, [PlayerStandingMapX] + ld a, [wPlayerStandingMapX] add d ld d, a - ld a, [PlayerStandingMapY] + ld a, [wPlayerStandingMapY] add e ld e, a ld a, [hl] ret -.Directions - ; x, y +.Directions: db 0, 1 - dw TileDown + dw wTileDown db 0, -1 - dw TileUp + dw wTileUp db -1, 0 - dw TileLeft + dw wTileLeft db 1, 0 - dw TileRight -; 2a3c + dw wTileRight -GetCoordTile:: ; 2a3c -; Get the collision byte for tile d, e +GetCoordTile:: ; 2b21 (0:2b21) call GetBlockLocation ld a, [hl] and a - jr z, .nope + jr z, .asm_2b48 ld l, a ld h, $0 add hl, hl add hl, hl - ld a, [TilesetCollisionAddress] + ld a, [wd0c9] ld c, a - ld a, [TilesetCollisionAddress + 1] + ld a, [wd0ca] ld b, a add hl, bc rr d - jr nc, .nocarry + jr nc, .asm_2b3b inc hl - -.nocarry +.asm_2b3b rr e - jr nc, .nocarry2 + jr nc, .asm_2b41 inc hl inc hl - -.nocarry2 - ld a, [TilesetCollisionBank] - call GetFarByte +.asm_2b41 + ld a, [wd0c8] + call Function3128 ret -.nope - ld a, -1 +.asm_2b48 + ld a, $ff ret -; 2a66 -GetBlockLocation:: ; 2a66 - ld a, [MapWidth] - add 6 +GetBlockLocation:: + ld a, [wMapWidth] + add $6 ld c, a - ld b, 0 - ld hl, wc801 + ld b, $0 + ld hl, wc701 add hl, bc ld a, e srl a - jr z, .nope + jr z, .asm_2b69 and a -.loop +.asm_2b5d srl a - jr nc, .ok + jr nc, .asm_2b62 add hl, bc - -.ok +.asm_2b62 sla c rl b and a - jr nz, .loop - -.nope + jr nz, .asm_2b5d +.asm_2b69 ld c, d srl c - ld b, 0 + ld b, $0 add hl, bc ret -; 2a8b -CheckFacingSign:: ; 2a8b +CheckFacingSign:: 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 signposts, we don't need to be here. - ld a, [wCurrentMapSignpostCount] + ld a, [wd94b] and a ret z - ld c, a ld a, [hROMBank] push af @@ -1855,53 +1993,47 @@ CheckFacingSign:: ; 2a8b ld a, h rst Bankswitch ret -; 2aaa -CheckIfFacingTileCoordIsSign:: ; 2aaa -; Checks to see if you are facing a signpost. If so, copies it into EngineBuffer1 and sets carry. - ld hl, wCurrentMapSignpostHeaderPointer +CheckIfFacingTileCoordIsSign:: ; 2b8f (0:2b8f) + ld hl, wd94c ld a, [hli] ld h, [hl] ld l, a -.loop +.asm_2b95 push hl ld a, [hli] cp e - jr nz, .next + jr nz, .asm_2ba0 ld a, [hli] cp d - jr nz, .next - jr .copysign + jr nz, .asm_2ba0 + jr .asm_2bad -.next +.asm_2ba0 pop hl - ld a, 5 ; signpost event length + ld a, $5 add l ld l, a - jr nc, .nocarry + jr nc, .asm_2ba8 inc h - -.nocarry +.asm_2ba8 dec c - jr nz, .loop + jr nz, .asm_2b95 xor a ret -.copysign +.asm_2bad pop hl - ld de, wCurSignpostYCoord - ld bc, 5 ; signpost event length + ld de, wcf29 + ld bc, $5 call CopyBytes scf ret -; 2ad4 -CheckCurrentMapXYTriggers:: ; 2ad4 -; If there are no xy triggers, we don't need to be here. - ld a, [wCurrentMapXYTriggerCount] +CheckCurrentMapXYTriggers:: + ld a, [wd948] and a ret z -; Copy the trigger count into c. ld c, a ld a, [hROMBank] push af @@ -1912,236 +2044,191 @@ CheckCurrentMapXYTriggers:: ; 2ad4 rst Bankswitch ret -.TriggerCheck -; Checks to see if you are standing on an xy-trigger. If yes, copies the trigger to EngineBuffer1 and sets carry. - ld hl, wCurrentMapXYTriggerHeaderPointer +.TriggerCheck: + ld hl, wd949 ld a, [hli] ld h, [hl] ld l, a -; Load the active trigger ID into b call CheckTriggers ld b, a -; Load your current coordinates into de. This will be used to check if your position is in the xy-trigger table for the current map. - ld a, [PlayerStandingMapX] - sub 4 + ld a, [wPlayerStandingMapX] + sub $4 ld d, a - ld a, [PlayerStandingMapY] - sub 4 + ld a, [wPlayerStandingMapY] + sub $4 ld e, a - -.loop +.asm_2be2 push hl ld a, [hli] cp b - jr z, .got_id - cp -1 - jr nz, .next - -.got_id + jr z, .asm_2beb + cp $ff + jr nz, .asm_2bf5 +.asm_2beb ld a, [hli] cp e - jr nz, .next + jr nz, .asm_2bf5 ld a, [hli] cp d - jr nz, .next - jr .copytrigger + jr nz, .asm_2bf5 + jr .asm_2c02 -.next +.asm_2bf5 pop hl - ld a, $8 ; xy-trigger size + ld a, $8 add l ld l, a - jr nc, .nocarry + jr nc, .asm_2bfd inc h - -.nocarry +.asm_2bfd dec c - jr nz, .loop + jr nz, .asm_2be2 xor a ret -.copytrigger +.asm_2c02 pop hl - ld de, wCurCoordEventTriggerID - ld bc, 8 ; xy-trigger size + ld de, wcf29 + ld bc, $8 call CopyBytes scf ret -; 2b29 -FadeToMenu:: ; 2b29 +FadeToMenu:: xor a ld [hBGMapMode], a call LoadStandardMenuDataHeader - callba FadeOutPalettes - call ClearSprites - call DisableSpriteUpdates + callba Function8c3ab + call Function30ff + call Function2f93 ret -; 2b3c -CloseSubmenu:: ; 2b3c - call ClearBGPalettes +CloseSubmenu:: + call Function3449 call ReloadTilesetAndPalettes call UpdateSprites call Call_ExitMenu - call ret_d90 + call Functiond2a jr FinishExitMenu -; 2b4d -ExitAllMenus:: ; 2b4d - call ClearBGPalettes +ExitAllMenus:: + call Function3449 call Call_ExitMenu call ReloadTilesetAndPalettes call UpdateSprites - call ret_d90 -FinishExitMenu:: ; 2b5c - ld b, SCGB_MAPPALS - call GetSGBLayout - callba LoadOW_BGPal7 - call WaitBGMap2 + call Functiond2a +FinishExitMenu:: + ld b, $9 + call Function3583 + call Function3456 callba FadeInPalettes - call EnableSpriteUpdates + call Function2fa4 ret -; 2b74 -ReturnToMapWithSpeechTextbox:: ; 0x2b74 +ReturnToMapWithSpeechTextbox:: push af ld a, $1 - ld [wSpriteUpdatesEnabled], a - call ClearBGPalettes - call ClearSprites + ld [wRTCEnabled], a + call Function3449 + call Function30ff call ReloadTilesetAndPalettes hlcoord 0, 12 lb bc, 4, 18 call TextBox - ld hl, VramState + ld hl, wVramState set 0, [hl] call UpdateSprites - call WaitBGMap2 - ld b, SCGB_MAPPALS - call GetSGBLayout - callba LoadOW_BGPal7 + call Function3456 + ld b, $9 + call Function3583 call UpdateTimePals call DelayFrame ld a, $1 ld [hMapAnims], a pop af ret -; 0x2bae -ReloadTilesetAndPalettes:: ; 2bae +ReloadTilesetAndPalettes:: ; 2c87 (0:2c87) call DisableLCD - call ClearSprites + call Function30ff callba RefreshSprites - call LoadStandardFont - call LoadFontsExtra + call Functiond9e + call Functiondac ld a, [hROMBank] push af - ld a, [MapGroup] + ld a, [wMapGroup] ld b, a - ld a, [MapNumber] + ld a, [wMapNumber] ld c, a call SwitchToAnyMapBank callba UpdateTimeOfDayPal call OverworldTextModeSwitch call LoadTileset - ld a, 9 - call SkipMusic + ld a, $8 + call Function3e92 pop af rst Bankswitch - call EnableLCD ret -; 2be5 -GetMapHeaderPointer:: ; 2be5 - ld a, [MapGroup] +GetMapHeaderPointer:: ; 2cbe (0:2cbe) + ld a, [wMapGroup] ld b, a - ld a, [MapNumber] + ld a, [wMapNumber] ld c, a -GetAnyMapHeaderPointer:: ; 0x2bed -; Prior to calling this function, you must have switched banks so that -; MapGroupPointers is visible. - -; inputs: -; b = map group, c = map number -; XXX de = ??? - -; outputs: -; hl points to the map header - push bc ; save map number for later - - ; get pointer to map group +GetAnyMapHeaderPointer:: ; 2cc6 (0:2cc6) + push bc dec b ld c, b - ld b, 0 - ld hl, MapGroupPointers + ld b, $0 + ld hl, MapGroupPointers ; 25:40ed add hl, bc add hl, bc - ld a, [hli] ld h, [hl] ld l, a - pop bc ; restore map number - - ; find the cth map header + pop bc dec c - ld b, 0 - ld a, 9 - call AddNTimes + ld b, $0 + ld a, $9 + call Function31a3 ret -; 0x2c04 - -GetMapHeaderMember:: ; 0x2c04 -; Extract data from the current map's header. - -; inputs: -; de = offset of desired data within the mapheader - -; outputs: -; bc = data from the current map's header -; (e.g., de = $0003 would return a pointer to the secondary map header) - ld a, [MapGroup] +GetMapHeaderMember:: ; 2cdd (0:2cdd) + ld a, [wMapGroup] ld b, a - ld a, [MapNumber] + ld a, [wMapNumber] ld c, a -GetAnyMapHeaderMember:: ; 0x2c0c - ; bankswitch +GetAnyMapHeaderMember:: ; 2ce5 (0:2ce5) ld a, [hROMBank] push af ld a, BANK(MapGroupPointers) rst Bankswitch - call GetAnyMapHeaderPointer add hl, de ld c, [hl] inc hl ld b, [hl] - - ; bankswitch back pop af rst Bankswitch ret -; 0x2c1c -SwitchToMapBank:: ; 2c1c - ld a, [MapGroup] +SwitchToMapBank:: ; 2cf5 (0:2cf5) + ld a, [wMapGroup] ld b, a - ld a, [MapNumber] + ld a, [wMapNumber] ld c, a -SwitchToAnyMapBank:: ; 2c24 +SwitchToAnyMapBank:: ; 2cfd (0:2cfd) call GetAnyMapBank rst Bankswitch ret -; 2c29 -GetMapBank:: ; 2c29 - ld a, [MapGroup] +GetMapBank:: + ld a, [wMapGroup] ld b, a - ld a, [MapNumber] + ld a, [wMapNumber] ld c, a -GetAnyMapBank:: ; 2c31 +GetAnyMapBank:: ; 2d0a (0:2d0a) push hl push de ld de, 0 @@ -2150,236 +2237,195 @@ GetAnyMapBank:: ; 2c31 pop de pop hl ret -; 2c3d -PartiallyCopyMapHeader:: ; 2c3d -; Copy second map header bank, tileset, permission, and second map header address -; from the current map's map header. +PartiallyCopyMapHeader:: ; 2d16 (0:2d16) ld a, [hROMBank] push af ld a, BANK(MapGroupPointers) rst Bankswitch - call GetMapHeaderPointer - ld de, wSecondMapHeaderBank - ld bc, MapHeader - wSecondMapHeaderBank + ld de, wd081 + ld bc, $5 call CopyBytes - pop af rst Bankswitch ret -; 2c52 -SwitchToMapScriptHeaderBank:: ; 2c52 - ld a, [MapScriptHeaderBank] +SwitchToMapScriptHeaderBank:: ; 2d2b (0:2d2b) + ld a, [wd08c] rst Bankswitch ret -; 2c57 -GetMapScriptHeaderBank:: ; 2c57 - ld a, [MapScriptHeaderBank] +GetMapScriptHeaderBank:: ; 2d30 (0:2d30) + ld a, [wd08c] ret -; 2c5b -GetAnyMapBlockdataBank:: ; 2c5b -; Return the blockdata bank for group b map c. +GetAnyMapBlockdataBank:: ; 2d34 (0:2d34) push hl push de push bc - push bc - ld de, 3 ; second map header pointer + ld de, $3 call GetAnyMapHeaderMember ld l, c ld h, b pop bc - push hl - ld de, 0 ; second map header bank + ld de, MBC3SRamEnable call GetAnyMapHeaderMember pop hl - - ld de, 3 ; blockdata bank + ld de, $3 add hl, de ld a, c - call GetFarByte + call Function3128 rst Bankswitch - pop bc pop de pop hl ret -; 2c7d -GetSecondaryMapHeaderPointer:: ; 0x2c7d -; returns the current map's secondary map header pointer in hl. +GetSecondaryMapHeaderPointer:: ; 2d56 (0:2d56) push bc push de - ld de, 3 ; secondary map header pointer (offset within header) + ld de, $3 call GetMapHeaderMember ld l, c ld h, b pop de pop bc ret -; 2c8a -GetMapPermission:: ; 2c8a +GetMapPermission:: ; 2d63 (0:2d63) push hl push de push bc - ld de, 2 ; permission + ld de, $2 call GetMapHeaderMember ld a, c pop bc pop de pop hl ret -; 2c98 - ret ; XXX -; 2c99 +Function2d71:: ; XXX + ret -GetAnyMapPermission:: ; 2c99 +GetAnyMapPermission:: ; 2d72 (0:2d72) push hl push de push bc - ld de, 2 ; permission + ld de, $2 call GetAnyMapHeaderMember ld a, c pop bc pop de pop hl ret -; 2ca7 -GetAnyMapTileset:: ; 2ca7 - ld de, 1 ; tileset +GetAnyMapTileset:: ; 2d80 (0:2d80) + ld de, $1 call GetAnyMapHeaderMember ld a, c ret -; 2caf -GetWorldMapLocation:: ; 0x2caf -; given a map group/id in bc, return its location on the Pokégear map. +GetWorldMapLocation:: push hl push de push bc - - ld de, 5 ; landmark + ld de, $5 call GetAnyMapHeaderMember ld a, c - pop bc pop de pop hl ret -; 0x2cbd - -GetMapHeaderMusic:: ; 2cbd -RADIO_TOWER_MUSIC EQU 7 +GetMapHeaderMusic:: push hl push bc - ld de, 6 ; music + ld de, $6 call GetMapHeaderMember ld a, c - cp MUSIC_MAHOGANY_MART - jr z, .mahoganymart - bit RADIO_TOWER_MUSIC, c - jr nz, .radiotower - callba Function8b342 + cp $64 + jr z, .asm_2dc1 + bit 7, c + jr nz, .asm_2dad ld e, c - ld d, 0 -.done + ld d, $0 +.asm_2daa pop bc pop hl ret -.radiotower - ld a, [StatusFlags2] +.asm_2dad + ld a, [wd572] bit 0, a - jr z, .clearedradiotower - ld de, MUSIC_ROCKET_OVERTURE - jr .done + jr z, .asm_2db9 + ld de, $56 + jr .asm_2daa -.clearedradiotower - ; the rest of the byte +.asm_2db9 ld a, c - and 1 << RADIO_TOWER_MUSIC - 1 + and $7f ld e, a - ld d, 0 - jr .done + ld d, $0 + jr .asm_2daa -.mahoganymart - ld a, [StatusFlags2] +.asm_2dc1 + ld a, [wd572] bit 7, a - jr z, .clearedmahogany - ld de, MUSIC_ROCKET_HIDEOUT - jr .done + jr z, .asm_2dcd + ld de, $48 + jr .asm_2daa -.clearedmahogany - ld de, MUSIC_CHERRYGROVE_CITY - jr .done -; 2cff +.asm_2dcd + ld de, $26 + jr .asm_2daa -GetMapHeaderTimeOfDayNybble:: ; 2cff +GetMapHeaderTimeOfDayNybble:: ; 2dd2 (0:2dd2) call GetPhoneServiceTimeOfDayByte and $f ret -; 2d05 -GetMapHeaderPhoneServiceNybble:: ; 2d05 +GetMapHeaderPhoneServiceNybble:: call GetPhoneServiceTimeOfDayByte and $f0 swap a ret -; 2d0d -GetPhoneServiceTimeOfDayByte:: ; 2d0d +GetPhoneServiceTimeOfDayByte:: ; 2de0 (0:2de0) push hl push bc - - ld de, 7 ; phone service and time of day + ld de, $7 call GetMapHeaderMember ld a, c - pop bc pop hl ret -; 2d19 -GetFishingGroup:: ; 2d19 +GetFishingGroup:: push de push hl push bc - - ld de, 8 ; fishing group + ld de, $8 call GetMapHeaderMember ld a, c - pop bc pop hl pop de ret -; 2d27 -LoadTilesetHeader:: ; 2d27 +LoadTilesetHeader:: ; 2dfa (0:2dfa) push hl push bc - - ld hl, Tilesets - ld bc, Tileset01 - Tileset00 - ld a, [wTileset] - call AddNTimes - - ld de, TilesetBank - ld bc, Tileset01 - Tileset00 - - ld a, BANK(Tilesets) + ld hl, $56be + ld bc, $f + ld a, [wd082] + call Function31a3 + ld de, wd0c2 + ld bc, $f + ld a, $5 call FarCopyBytes - pop bc pop hl ret -; 2d43 |