diff options
Diffstat (limited to 'engine/warp_connection.asm')
-rwxr-xr-x | engine/warp_connection.asm | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/engine/warp_connection.asm b/engine/warp_connection.asm new file mode 100755 index 000000000..e9a38257d --- /dev/null +++ b/engine/warp_connection.asm @@ -0,0 +1,440 @@ + +RunCallback_05_03: ; 1045b0 + call Clearwc7e8 + call ResetMapBufferEventFlags + call ResetFlashIfOutOfCave + call GetCurrentMapTrigger + call ResetBikeFlags + ld a, $5 + call RunMapCallback + +RunCallback_03: ; 1045c4 + callba ClearCmdQueue + ld a, $3 + call RunMapCallback + call GetMapHeaderTimeOfDayNybble + ld [wc2d0], a + ret + + +EnterMapConnection: ; 1045d6 +; Return carry if a connection has been entered. + ld a, [wPlayerStepDirection] + and a + jp z, EnterSouthConnection + cp 1 + jp z, EnterNorthConnection + cp 2 + jp z, EnterWestConnection + cp 3 + jp z, EnterEastConnection + ret +; 1045ed + + +EnterWestConnection: ; 1045ed + ld a, [WestConnectedMapGroup] + ld [MapGroup], a + ld a, [WestConnectedMapNumber] + ld [MapNumber], a + ld a, [WestConnectionStripXOffset] + ld [XCoord], a + ld a, [WestConnectionStripYOffset] + ld hl, YCoord + add [hl] + ld [hl], a + ld c, a + ld hl, WestConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + srl c + jr z, .skip_to_load + ld a, [WestConnectedMapWidth] + add 6 + ld e, a + ld d, 0 + +.loop + add hl, de + dec c + jr nz, .loop + +.skip_to_load + ld a, l + ld [wd194], a + ld a, h + ld [wd194 + 1], a + jp EnteredConnection +; 104629 + + +EnterEastConnection: ; 104629 + ld a, [EastConnectedMapGroup] + ld [MapGroup], a + ld a, [EastConnectedMapNumber] + ld [MapNumber], a + ld a, [EastConnectionStripXOffset] + ld [XCoord], a + ld a, [EastConnectionStripYOffset] + ld hl, YCoord + add [hl] + ld [hl], a + ld c, a + ld hl, EastConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + srl c + jr z, .skip_to_load + ld a, [EastConnectedMapWidth] + add 6 + ld e, a + ld d, 0 + +.loop + add hl, de + dec c + jr nz, .loop + +.skip_to_load + ld a, l + ld [wd194], a + ld a, h + ld [wd194 + 1], a + jp EnteredConnection +; 104665 + + +EnterNorthConnection: ; 104665 + ld a, [NorthConnectedMapGroup] + ld [MapGroup], a + ld a, [NorthConnectedMapNumber] + ld [MapNumber], a + ld a, [NorthConnectionStripYOffset] + ld [YCoord], a + ld a, [NorthConnectionStripXOffset] + ld hl, XCoord + add [hl] + ld [hl], a + ld c, a + ld hl, NorthConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + ld b, 0 + srl c + add hl, bc + ld a, l + ld [wd194], a + ld a, h + ld [wd194 + 1], a + jp EnteredConnection +; 104696 + + +EnterSouthConnection: ; 104696 + ld a, [SouthConnectedMapGroup] + ld [MapGroup], a + ld a, [SouthConnectedMapNumber] + ld [MapNumber], a + ld a, [SouthConnectionStripYOffset] + ld [YCoord], a + ld a, [SouthConnectionStripXOffset] + ld hl, XCoord + add [hl] + ld [hl], a + ld c, a + ld hl, SouthConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + ld b, 0 + srl c + add hl, bc + ld a, l + ld [wd194], a + ld a, h + ld [wd194 + 1], a + ; fallthrough +; 1046c4 + +EnteredConnection: ; 1046c4 + scf + ret +; 1046c6 + +LoadWarpData: ; 1046c6 + call .SaveDigWarp + call .SetSpawn + ld a, [wNextWarp] + ld [WarpNumber], a + ld a, [wNextMapGroup] + ld [MapGroup], a + ld a, [wNextMapNumber] + ld [MapNumber], a + ret + +.SaveDigWarp: ; 1046df (41:46df) + 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 GROUP_MOUNT_MOON_SQUARE + jr nz, .not_mt_moon_or_tin_tower + ld a, [wPrevMapNumber] + cp MAP_MOUNT_MOON_SQUARE + ret z + cp MAP_TIN_TOWER_ROOF + ret z +.not_mt_moon_or_tin_tower + ld a, [wPrevWarp] + ld [wDigWarp], a + ld a, [wPrevMapGroup] + ld [wDigMapGroup], a + ld a, [wPrevMapNumber] + ld [wDigMapNumber], a + ret + +.SetSpawn: ; 104718 (41:4718) + 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 TILESET_POKECENTER + jr z, .pokecenter_pokecom + cp TILESET_POKECOM_CENTER + jr z, .pokecenter_pokecom + ret +.pokecenter_pokecom + ld a, [wPrevMapGroup] + ld [wLastSpawnMapGroup], a + ld a, [wPrevMapNumber] + ld [wLastSpawnMapNumber], a + ret + +LoadMapTimeOfDay: ; 104750 + ld hl, VramState + res 6, [hl] + ld a, $1 + ld [wSpriteUpdatesEnabled], a + callba Function8c0e5 + callba Function8c001 + call OverworldTextModeSwitch + call Function104770 + call Function1047a3 + ret + +Function104770: ; 104770 (41:4770) + ld a, VBGMap0 / $100 + ld [wBGMapAnchor + 1], a + xor a + ld [wBGMapAnchor], a + ld [hSCY], a + ld [hSCX], a + callba Function5958 + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + xor a + lb bc, 4, 0 + hlbgcoord 0, 0 + call ByteFill + pop af + ld [rVBK], a + ld a, $60 + lb bc, 4, 0 + hlbgcoord 0, 0 + call ByteFill + ret + +Function1047a3: ; 1047a3 (41:47a3) + decoord 0, 0 + call .copy + ld a, [hCGB] + and a + ret z + + decoord 0, 0, AttrMap + ld a, $1 + ld [rVBK], a +.copy: + 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, $20 - SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ld a, $0 + ld [rVBK], a + ret + +LoadGraphics: ; 1047cf + call LoadTilesetHeader + call LoadTileset + xor a + ld [hMapAnims], a + xor a + ld [hTileAnimFrame], a + callba RefreshSprites + call LoadFontsExtra + callba Function106594 + ret + +LoadMapPalettes: ; 1047eb + ld b, SCGB_09 + jp GetSGBLayout +; 1047f0 + +RefreshMapSprites: ; 1047f0 + call ClearSprites + callba ReturnFromMapSetupScript + call GetMovementPermissions + callba Function579d + callba CheckReplaceKrisSprite + ld hl, wPlayerSpriteSetupFlags + bit 6, [hl] + jr nz, .skip + ld hl, VramState + set 0, [hl] + call Function2e31 +.skip + ld a, [wPlayerSpriteSetupFlags] + and $1c + ld [wPlayerSpriteSetupFlags], a + ret + +CheckMovingOffEdgeOfMap:: ; 104820 (41:4820) + 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, [PlayerNextMapY] + sub 4 + ld b, a + ld a, [MapHeight] + add a + cp b + jr z, .ok + and a + ret + +.up + ld a, [PlayerNextMapY] + sub 4 + cp -1 + jr z, .ok + and a + ret + +.left + ld a, [PlayerNextMapX] + sub $4 + cp -1 + jr z, .ok + and a + ret + +.right + ld a, [PlayerNextMapX] + sub 4 + ld b, a + ld a, [MapWidth] + add a + cp b + jr z, .ok + and a + ret + +.ok + scf + ret + + +GetCoordOfUpperLeftCorner:: ; 10486d + ld hl, OverworldMap + ld a, [XCoord] + bit 0, a + jr nz, .increment_then_halve1 + srl a + add $1 + jr .resume + +.increment_then_halve1 + add $1 + srl a + +.resume + ld c, a + ld b, $0 + add hl, bc + ld a, [MapWidth] + add $6 + ld c, a + ld b, $0 + ld a, [YCoord] + bit 0, a + jr nz, .increment_then_halve2 + srl a + add $1 + jr .resume2 + +.increment_then_halve2 + add $1 + srl a + +.resume2 + call AddNTimes + ld a, l + ld [wd194], a + ld a, h + ld [wd194 + 1], a + ld a, [YCoord] + and $1 + ld [wd196], a + ld a, [XCoord] + and $1 + ld [wd197], a + ret +; 1048ba |