diff options
Diffstat (limited to 'home/map.asm')
-rw-r--r-- | home/map.asm | 370 |
1 files changed, 206 insertions, 164 deletions
diff --git a/home/map.asm b/home/map.asm index d2a5b1771..81c7988d8 100644 --- a/home/map.asm +++ b/home/map.asm @@ -95,20 +95,20 @@ GetMapTrigger:: ; 2147 ret ; 2173 -Function2173:: ; 2173 - call Function217a +OverworldTextModeSwitch:: ; 2173 + call LoadMapPart call FarCallSwapTextboxPalettes ret ; 217a -Function217a:: ; 217a +LoadMapPart:: ; 217a ld a, [hROMBank] push af ld a, [TilesetBlocksBank] rst Bankswitch - call Function2198 + call LoadMetatiles ld a, $60 hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT @@ -123,36 +123,39 @@ Function217a:: ; 217a ret ; 2198 -Function2198:: ; 2198 +LoadMetatiles:: ; 2198 +; de <- wd194 ld a, [wd194] ld e, a - ld a, [wd195] + ld a, [wd194 + 1] ld d, a - ld hl, wEnemyMoveStruct - ld b, $5 + ld hl, wMisc + ld b, 5 ; SCREEN_WIDTH / 4 .loop push de push hl - ld c, $6 + ld c, 6 ; SCREEN_HEIGHT / 3 .loop2 push de push hl ld a, [de] and a - jr nz, .asm_21b2 + jr nz, .ok ld a, [MapBorderBlock] -.asm_21b2 +.ok ld e, l ld d, h +; double a, load hl <- a, multiply hl by 8 add a ld l, a ld h, 0 rept 3 add hl,hl endr +; hl <- hl + [TilesetBlocksAddress] ld a, [TilesetBlocksAddress] add l ld l, a @@ -161,20 +164,21 @@ endr ld h, a rept 3 +; copy 4 bytes from hl to de rept 4 ld a, [hli] ld [de], a inc de endr - +; next row ld a, e - add 20 + add SCREEN_WIDTH ld e, a jr nc, .next\@ inc d .next\@ endr - +; copy 4 more bytes from hl to de rept 4 ld a, [hli] ld [de], a @@ -182,31 +186,31 @@ rept 4 endr pop hl - ld de, $0004 + ld de, 4 add hl, de pop de inc de dec c jp nz, .loop2 pop hl - ld de, $0060 + ld de, $60 add hl, de pop de ld a, [MapWidth] - add $6 + add 6 add e ld e, a - jr nc, .asm_2225 + jr nc, .ok2 inc d -.asm_2225 +.ok2 dec b jp nz, .loop ret ; 222a -Function222a:: ; 222a - ld a, $fa +ReturnToMapFromSubmenu:: ; 222a + ld a, MAPSETUP_SUBMENU ld [hMapEntryMethod], a callba RunMapSetupScript xor a @@ -215,27 +219,29 @@ Function222a:: ; 222a ; 2238 CheckWarpTile:: ; 2238 - call Function2252 + call GetDestinationWarpNumber ret nc + push bc callba Function149af pop bc ret nc - call Function22a7 + + call CopyWarpData scf ret ; 224a -Function224a:: ; 224a - call Function2252 +WarpCheck:: ; 224a + call GetDestinationWarpNumber ret nc - call Function22a7 + call CopyWarpData ret ; 2252 -Function2252:: ; 2252 +GetDestinationWarpNumber:: ; 2252 callba Function1499a ret nc @@ -243,7 +249,7 @@ Function2252:: ; 2252 push af call SwitchToMapScriptHeaderBank - call Function2266 + call .GetDestinationWarpNumber pop de ld a, d @@ -251,7 +257,7 @@ Function2252:: ; 2252 ret ; 2266 -Function2266:: ; 2266 +.GetDestinationWarpNumber ; 2266 ld a, [PlayerMapY] sub $4 ld e, a @@ -261,48 +267,49 @@ Function2266:: ; 2266 ld a, [wCurrMapWarpCount] and a ret z + ld c, a ld hl, wCurrMapWarpHeaderPointer ld a, [hli] ld h, [hl] ld l, a -.asm_227e +.loop push hl ld a, [hli] cp e - jr nz, .asm_2289 + jr nz, .next ld a, [hli] cp d - jr nz, .asm_2289 - jr .asm_2296 + jr nz, .next + jr .found_warp -.asm_2289 +.next pop hl - ld a, $5 + ld a, 5 add l ld l, a - jr nc, .asm_2291 + jr nc, .okay inc h -.asm_2291 +.okay dec c - jr nz, .asm_227e + jr nz, .loop xor a ret -.asm_2296 +.found_warp pop hl - call Function22a3 - ret nc + call .IncreaseHLTwice + ret nc ; never encountered + ld a, [wCurrMapWarpCount] inc a sub c ld c, a scf ret -; 22a3 -Function22a3:: ; 22a3 +.IncreaseHLTwice rept 2 inc hl endr @@ -310,12 +317,12 @@ endr ret ; 22a7 -Function22a7:: ; 22a7 +CopyWarpData:: ; 22a7 ld a, [hROMBank] push af call SwitchToMapScriptHeaderBank - call Function22b4 + call .CopyWarpData pop af rst Bankswitch @@ -323,7 +330,7 @@ Function22a7:: ; 22a7 ret ; 22b4 -Function22b4:: ; 22b4 +.CopyWarpData ; 22b4 push bc ld hl, wCurrMapWarpHeaderPointer ld a, [hli] @@ -331,29 +338,30 @@ Function22b4:: ; 22b4 ld l, a ld a, c dec a - ld bc, $0005 + ld bc, 5 ; warp size call AddNTimes - ld bc, $0002 + ld bc, 2 ; warp number add hl, bc ld a, [hli] cp $ff - jr nz, .asm_22d0 - ld hl, wdcac + jr nz, .skip + ld hl, BackupWarpNumber ld a, [hli] -.asm_22d0 +.skip pop bc - ld [wd146], a + ld [wNextWarp], a ld a, [hli] - ld [wd147], a + ld [wNextMapGroup], a ld a, [hli] - ld [wd148], a + ld [wNextMapNumber], a + ld a, c - ld [wd149], a + ld [wPrevWarp], a ld a, [MapGroup] - ld [wd14a], a + ld [wPrevMapGroup], a ld a, [MapNumber] - ld [wd14b], a + ld [wPrevMapNumber], a scf ret ; 22ee @@ -378,40 +386,40 @@ CheckIndoorMap:: ; 22f4 ret ; 2300 -Function2300:: ; 2300 +Function2300:: ; unreferenced cp INDOOR ret z cp GATE ret z - cp $5 + cp PERM_5 ret ; 2309 LoadMapAttributes:: ; 2309 - call Function2326 + call CopyMapHeaders call SwitchToMapScriptHeaderBank - call Function234f + call ReadMapScripts xor a call ReadMapEventHeader ret ; 2317 -LoadMapAttributes_IgnoreHidden:: ; 2317 - call Function2326 +LoadMapAttributes_SkipPeople:: ; 2317 + call CopyMapHeaders call SwitchToMapScriptHeaderBank - call Function234f + call ReadMapScripts ld a, $1 call ReadMapEventHeader ret ; 2326 -Function2326:: ; 2326 - call Function2c3d +CopyMapHeaders:: ; 2326 + call PartiallyCopyMapHeader call SwitchToMapBank call GetSecondaryMapHeaderPointer - call Function235c - call Function2368 + call CopySecondMapHeader + call GetMapConnections ret ; 2336 @@ -427,14 +435,16 @@ endr call ReadWarps call ReadCoordEvents call ReadSignposts + pop af and a ret nz + call ReadObjectEvents ret ; 234f -Function234f:: ; 234f +ReadMapScripts:: ; 234f ld hl, MapScriptHeaderPointer ld a, [hli] ld h, [hl] @@ -444,19 +454,19 @@ Function234f:: ; 234f ret ; 235c -Function235c:: ; 235c +CopySecondMapHeader:: ; 235c ld de, MapHeader - ld c, $c -.asm_2361 + ld c, 12 ; size of the second map header +.loop ld a, [hli] ld [de], a inc de dec c - jr nz, .asm_2361 + jr nz, .loop ret ; 2368 -Function2368:: ; 2368 +GetMapConnections:: ; 2368 ld a, $ff ld [NorthConnectedMapGroup], a ld [SouthConnectedMapGroup], a @@ -466,29 +476,29 @@ Function2368:: ; 2368 ld a, [MapConnections] ld b, a - bit 3, b - jr z, .asm_2384 + bit NORTH_F, b + jr z, .no_north ld de, NorthMapConnection call GetMapConnection -.asm_2384 +.no_north - bit 2, b - jr z, .asm_238e + bit SOUTH_F, b + jr z, .no_south ld de, SouthMapConnection call GetMapConnection -.asm_238e +.no_south - bit 1, b - jr z, .asm_2398 + bit WEST_F, b + jr z, .no_west ld de, WestMapConnection call GetMapConnection -.asm_2398 +.no_west - bit 0, b - jr z, .asm_23a2 + bit EAST_F, b + jr z, .no_east ld de, EastMapConnection call GetMapConnection -.asm_23a2 +.no_east ret ; 23a3 @@ -564,11 +574,13 @@ ReadCoordEvents:: ; 23f1 ld a, l ld [wCurrentMapXYTriggerHeaderPointer], a ld a, h - ld [wdc00], a + ld [wCurrentMapXYTriggerHeaderPointer + 1], a + ld a, c and a ret z - ld bc, $0008 + + ld bc, 8 call AddNTimes ret ; 2408 @@ -578,93 +590,108 @@ ReadSignposts:: ; 2408 ld c, a ld [wCurrentMapSignpostCount], a ld a, l - ld [wdc02], a + ld [wCurrentMapSignpostHeaderPointer], a ld a, h - ld [wdc03], a + ld [wCurrentMapSignpostHeaderPointer + 1], a + ld a, c and a ret z - ld bc, $0005 + + ld bc, 5 call AddNTimes ret ; 241f ReadObjectEvents:: ; 241f push hl - call Function2471 + call ClearObjectStructs pop de - ld hl, MapObjects + OBJECT_LENGTH + ld hl, Map1Object ld a, [de] inc de - ld [wdc04], a + ld [wCurrentMapPersonEventCount], a ld a, e - ld [wdc05], a + ld [wCurrentMapPersonEventHeaderPointer], a ld a, d - ld [wdc06], a - ld a, [wdc04] - call Function2457 - ld a, [wdc04] + ld [wCurrentMapPersonEventHeaderPointer + 1], a + + ld a, [wCurrentMapPersonEventCount] + call CopyMapObjectHeaders + +; get NUM_OBJECTS - [wCurrentMapPersonEventCount] + ld a, [wCurrentMapPersonEventCount] ld c, a - ld a, $10 + ld a, NUM_OBJECTS ; - 1 sub c - jr z, .asm_2454 - ld bc, $0001 + jr z, .skip + ; jr c, .skip + +; stupid waste of time and space + ld bc, 1 add hl, bc - ld bc, $0010 -.asm_244a - 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 subtraction +; to fix. + ld bc, OBJECT_LENGTH +.loop + ld [hl], 0 inc hl - ld [hl], $ff + ld [hl], -1 dec hl add hl, bc dec a - jr nz, .asm_244a + jr nz, .loop -.asm_2454 +.skip ld h, d ld l, e ret ; 2457 -Function2457:: ; 2457 +CopyMapObjectHeaders:: ; 2457 and a ret z + ld c, a -.asm_245a +.loop push bc push hl ld a, $ff ld [hli], a - ld b, $d -.asm_2461 + ld b, MAPOBJECT_E - MAPOBJECT_SPRITE +.loop2 ld a, [de] inc de ld [hli], a dec b - jr nz, .asm_2461 + jr nz, .loop2 + pop hl - ld bc, $0010 + ld bc, OBJECT_LENGTH add hl, bc pop bc dec c - jr nz, .asm_245a + jr nz, .loop ret ; 2471 -Function2471:: ; 2471 +ClearObjectStructs:: ; 2471 ld hl, Object1Struct ld bc, OBJECT_STRUCT_LENGTH * (NUM_OBJECT_STRUCTS - 1) 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 xor a -.asm_2484 +.loop ld [hl], a add hl, de dec c - jr nz, .asm_2484 + jr nz, .loop ret ; 248a @@ -677,34 +704,35 @@ RestoreFacingAfterWarp:: ; 248a ld h, [hl] ld l, a rept 3 - inc hl + inc hl ; get to the warp coords endr ld a, [WarpNumber] dec a ld c, a - ld b, $0 - ld a, $5 + ld b, 0 + ld a, 5 call AddNTimes ld a, [hli] ld [YCoord], a ld a, [hli] ld [XCoord], a + ; destination warp number ld a, [hli] cp $ff - jr nz, .asm_24b3 - call Function24ba + jr nz, .skip + call .backup -.asm_24b3 +.skip callba GetCoordOfUpperLeftCorner ret ; 24ba -Function24ba:: ; 24ba - ld a, [wd149] - ld [wdcac], a - ld a, [wd14a] +.backup + ld a, [wPrevWarp] + ld [BackupWarpNumber], a + ld a, [wPrevMapGroup] ld [BackupMapGroup], a - ld a, [wd14b] + ld a, [wPrevMapNumber] ld [BackupMapNumber], a ret ; 24cd @@ -965,14 +993,15 @@ CallScript:: ; 261f ld a, h ld [ScriptPos + 1], a - ld a, $ff + ld a, PLAYEREVENT_MAPSCRIPT ld [ScriptRunning], a scf ret ; 2631 -Function2631:: ; 2631 +CallMapScript:: ; 2631 +; Call a script at hl in the current bank if there isn't already a script running ld a, [ScriptRunning] and a ret nz @@ -986,7 +1015,7 @@ RunMapCallback:: ; 263b ld a, [hROMBank] push af call SwitchToMapScriptHeaderBank - call Function2653 + call .FindCallback jr nc, .done call GetMapScriptHeaderBank @@ -1001,7 +1030,7 @@ RunMapCallback:: ; 263b ret ; 2653 -Function2653:: ; 2653 +.FindCallback: ; 2653 ld a, [wCurrMapCallbackCount] ld c, a and a @@ -1016,14 +1045,14 @@ Function2653:: ; 2653 .loop ld a, [hl] cp b - jr z, .done + jr z, .found add hl, de dec c jr nz, .loop xor a ret -.done +.found inc hl ld a, [hli] ld h, [hl] @@ -1033,7 +1062,8 @@ Function2653:: ; 2653 ; 2674 ExecuteCallbackScript:: ; 2674 - callba Function974f3 +; Do map callback de and return to script bank b. + callba CallCallback ld a, [ScriptMode] push af ld hl, ScriptFlags @@ -1093,13 +1123,14 @@ Call_a_de:: ; 26b7 ; 26c7 GetMovementData:: ; 26c7 +; Initialize the movement data for person c at b:hl ld a, [hROMBank] push af ld a, b rst Bankswitch ld a, c - call Function19e9 + call LoadMovementDataPointer pop hl ld a, h @@ -1394,7 +1425,7 @@ Function2821:: ; 2821 call FarDecompress ld hl, w6_d000 ld de, VTiles2 - ld bc, $0600 + ld bc, $60 tiles call CopyBytes ld a, [rVBK] push af @@ -1402,13 +1433,13 @@ Function2821:: ; 2821 ld [rVBK], a ld hl, w6_d600 ld de, VTiles2 - ld bc, $0600 + ld bc, $60 tiles call CopyBytes pop af ld [rVBK], a pop af ld [rSVBK], a - ld a, [wd199] + ld a, [wTileset] cp $1 jr z, .asm_286f cp $2 @@ -1829,6 +1860,7 @@ CheckFacingSign:: ; 2a8b ld a, [wCurrentMapSignpostCount] and a ret z + ld c, a ld a, [hROMBank] push af @@ -1842,7 +1874,7 @@ CheckFacingSign:: ; 2a8b CheckIfFacingTileCoordIsSign:: ; 2aaa ; Checks to see if you are facing a signpost. If so, copies it into EngineBuffer1 and sets carry. - ld hl, wdc02 + ld hl, wCurrentMapSignpostHeaderPointer ld a, [hli] ld h, [hl] ld l, a @@ -1947,7 +1979,7 @@ CheckStandingOnXYTrigger:: ; 2ae7 .copytrigger pop hl ld de, EngineBuffer1 - ld bc, $0008 ; xy-trigger size + ld bc, 8 ; xy-trigger size call CopyBytes scf ret @@ -1957,8 +1989,8 @@ CheckStandingOnXYTrigger:: ; 2ae7 FadeToMenu:: ; 2b29 xor a ld [hBGMapMode], a - call LoadMenuDataHeader_0x1d75 - callba FadeBlackBGMap + call LoadStandardMenuDataHeader + callba FadeOutPalettes call ClearSprites call DisableSpriteUpdates ret @@ -1966,7 +1998,7 @@ FadeToMenu:: ; 2b29 Function2b3c:: ; 2b3c - call WhiteBGMap + call ClearBGPalettes call Function2bae call UpdateSprites call Call_ExitMenu @@ -1975,7 +2007,7 @@ Function2b3c:: ; 2b3c ; 2b4d Function2b4d:: ; 2b4d - call WhiteBGMap + call ClearBGPalettes call Call_ExitMenu call Function2bae call UpdateSprites @@ -1987,7 +2019,7 @@ Function2b5c:: ; 2b5c call GetSGBLayout callba Function49409 call Function3200 - callba FadeInBGMap + callba FadeInPalettes call EnableSpriteUpdates ret ; 2b74 @@ -1997,11 +2029,11 @@ Function2b74:: ; 0x2b74 push af ld a, $1 ld [wc2ce], a - call WhiteBGMap + call ClearBGPalettes call ClearSprites call Function2bae hlcoord 0, 12 - ld bc, $0412 + lb bc, 4, 18 call TextBox ld hl, VramState set 0, [hl] @@ -2013,7 +2045,7 @@ Function2b74:: ; 0x2b74 call UpdateTimePals call DelayFrame ld a, $1 - ld [$ffde], a + ld [hMapAnims], a pop af ret ; 0x2bae @@ -2021,9 +2053,9 @@ Function2b74:: ; 0x2b74 Function2bae:: ; 2bae call DisableLCD call ClearSprites - callba Function14168 - call Functione51 - call Functione5f + callba RefreshSprites + call LoadStandardFont + call LoadFontsExtra ld a, [hROMBank] push af ld a, [MapGroup] @@ -2032,7 +2064,7 @@ Function2bae:: ; 2bae ld c, a call SwitchToAnyMapBank callba Function8c001 - call Function2173 + call OverworldTextModeSwitch call Function2821 ld a, 9 call SkipMusic @@ -2153,15 +2185,19 @@ GetAnyMapBank:: ; 2c31 ret ; 2c3d -Function2c3d:: ; 2c3d +PartiallyCopyMapHeader:: ; 2c3d +; Copy second map header bank, tileset, permission, and second map header address +; from the current map's map header. ld a, [hROMBank] push af ld a, BANK(MapGroupPointers) rst Bankswitch + call GetMapHeaderPointer - ld de, wd197 + 1 - ld bc, $0005 + ld de, wSecondMapHeaderBank + ld bc, MapHeader - wSecondMapHeaderBank call CopyBytes + pop af rst Bankswitch ret @@ -2213,7 +2249,7 @@ GetSecondaryMapHeaderPointer:: ; 0x2c7d ; returns the current map's secondary map header pointer in hl. push bc push de - ld de, $0003 ; secondary map header pointer (offset within header) + ld de, 3 ; secondary map header pointer (offset within header) call GetMapHeaderMember ld l, c ld h, b @@ -2226,7 +2262,7 @@ GetMapPermission:: ; 2c8a push hl push de push bc - ld de, 2 + ld de, 2 ; permission call GetMapHeaderMember ld a, c pop bc @@ -2243,7 +2279,7 @@ GetAnyMapPermission:: ; 2c99 push hl push de push bc - ld de, $0002 + ld de, 2 ; permission call GetAnyMapHeaderMember ld a, c pop bc @@ -2253,7 +2289,7 @@ GetAnyMapPermission:: ; 2c99 ; 2ca7 GetAnyMapTileset:: ; 2ca7 - ld de, $0001 + ld de, 1 ; tileset call GetAnyMapHeaderMember ld a, c ret @@ -2264,9 +2300,11 @@ GetWorldMapLocation:: ; 0x2caf push hl push de push bc - ld de, 5 + + ld de, 5 ; landmark call GetAnyMapHeaderMember ld a, c + pop bc pop de pop hl @@ -2336,21 +2374,25 @@ GetMapHeaderPhoneServiceNybble:: ; 2d05 GetPhoneServiceTimeOfDayByte:: ; 2d0d push hl push bc + ld de, 7 ; phone service and time of day call GetMapHeaderMember ld a, c + pop bc pop hl ret ; 2d19 -Function2d19:: ; 2d19 +GetFishingGroup:: ; 2d19 push de push hl push bc + ld de, 8 ; fishing group call GetMapHeaderMember ld a, c + pop bc pop hl pop de @@ -2363,7 +2405,7 @@ LoadTilesetHeader:: ; 2d27 ld hl, Tilesets ld bc, Tileset01 - Tileset00 - ld a, [wd199] + ld a, [wTileset] call AddNTimes ld de, TilesetBank |