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