pokecrystal-board/engine/overworld/warp_connection.asm

433 lines
6.6 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
HandleNewMap:
2019-04-19 08:35:27 -07:00
call ClearUnusedMapBuffer
2015-11-29 18:34:59 -08:00
call ResetMapBufferEventFlags
call ResetFlashIfOutOfCave
call GetCurrentMapSceneID
2015-11-29 18:34:59 -08:00
call ResetBikeFlags
2016-01-06 04:44:50 -08:00
ld a, MAPCALLBACK_NEWMAP
2015-11-29 18:34:59 -08:00
call RunMapCallback
HandleContinueMap:
2017-12-24 09:47:30 -08:00
farcall ClearCmdQueue
2016-01-06 13:59:56 -08:00
ld a, MAPCALLBACK_CMDQUEUE
2015-11-29 18:34:59 -08:00
call RunMapCallback
call GetMapTimeOfDay
2015-12-14 17:06:41 -08:00
ld [wMapTimeOfDay], a
2015-11-29 18:34:59 -08:00
ret
2018-06-24 07:09:41 -07:00
EnterMapConnection:
2015-11-29 18:34:59 -08:00
; Return carry if a connection has been entered.
ld a, [wPlayerStepDirection]
and a ; DOWN
jp z, .south
cp UP
jp z, .north
cp LEFT
jp z, .west
cp RIGHT
jp z, .east
2015-11-29 18:34:59 -08:00
ret
.west
2018-01-23 14:39:09 -08:00
ld a, [wWestConnectedMapGroup]
ld [wMapGroup], a
ld a, [wWestConnectedMapNumber]
ld [wMapNumber], a
ld a, [wWestConnectionStripXOffset]
ld [wXCoord], a
ld a, [wWestConnectionStripYOffset]
ld hl, wYCoord
2015-11-29 18:34:59 -08:00
add [hl]
ld [hl], a
ld c, a
2018-01-23 14:39:09 -08:00
ld hl, wWestConnectionWindow
2015-11-29 18:34:59 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
srl c
jr z, .skip_to_load
2018-01-23 14:39:09 -08:00
ld a, [wWestConnectedMapWidth]
2015-11-29 18:34:59 -08:00
add 6
ld e, a
ld d, 0
.loop
add hl, de
dec c
jr nz, .loop
.skip_to_load
ld a, l
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor], a
2015-11-29 18:34:59 -08:00
ld a, h
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor + 1], a
jp .done
2015-11-29 18:34:59 -08:00
.east
2018-01-23 14:39:09 -08:00
ld a, [wEastConnectedMapGroup]
ld [wMapGroup], a
ld a, [wEastConnectedMapNumber]
ld [wMapNumber], a
ld a, [wEastConnectionStripXOffset]
ld [wXCoord], a
ld a, [wEastConnectionStripYOffset]
ld hl, wYCoord
2015-11-29 18:34:59 -08:00
add [hl]
ld [hl], a
ld c, a
2018-01-23 14:39:09 -08:00
ld hl, wEastConnectionWindow
2015-11-29 18:34:59 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
srl c
jr z, .skip_to_load2
2018-01-23 14:39:09 -08:00
ld a, [wEastConnectedMapWidth]
2015-11-29 18:34:59 -08:00
add 6
ld e, a
ld d, 0
.loop2
2015-11-29 18:34:59 -08:00
add hl, de
dec c
jr nz, .loop2
2015-11-29 18:34:59 -08:00
.skip_to_load2
2015-11-29 18:34:59 -08:00
ld a, l
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor], a
2015-11-29 18:34:59 -08:00
ld a, h
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor + 1], a
jp .done
2015-11-29 18:34:59 -08:00
.north
2018-01-23 14:39:09 -08:00
ld a, [wNorthConnectedMapGroup]
ld [wMapGroup], a
ld a, [wNorthConnectedMapNumber]
ld [wMapNumber], a
ld a, [wNorthConnectionStripYOffset]
ld [wYCoord], a
ld a, [wNorthConnectionStripXOffset]
ld hl, wXCoord
2015-11-29 18:34:59 -08:00
add [hl]
ld [hl], a
ld c, a
2018-01-23 14:39:09 -08:00
ld hl, wNorthConnectionWindow
2015-11-29 18:34:59 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
ld b, 0
srl c
add hl, bc
ld a, l
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor], a
2015-11-29 18:34:59 -08:00
ld a, h
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor + 1], a
jp .done
2015-11-29 18:34:59 -08:00
.south
2018-01-23 14:39:09 -08:00
ld a, [wSouthConnectedMapGroup]
ld [wMapGroup], a
ld a, [wSouthConnectedMapNumber]
ld [wMapNumber], a
ld a, [wSouthConnectionStripYOffset]
ld [wYCoord], a
ld a, [wSouthConnectionStripXOffset]
ld hl, wXCoord
2015-11-29 18:34:59 -08:00
add [hl]
ld [hl], a
ld c, a
2018-01-23 14:39:09 -08:00
ld hl, wSouthConnectionWindow
2015-11-29 18:34:59 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
ld b, 0
srl c
add hl, bc
ld a, l
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor], a
2015-11-29 18:34:59 -08:00
ld a, h
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor + 1], a
.done
2015-11-29 18:34:59 -08:00
scf
ret
EnterMapWarp:
2015-11-29 18:34:59 -08:00
call .SaveDigWarp
call .SetSpawn
ld a, [wNextWarp]
2018-01-23 14:39:09 -08:00
ld [wWarpNumber], a
2015-11-29 18:34:59 -08:00
ld a, [wNextMapGroup]
2018-01-23 14:39:09 -08:00
ld [wMapGroup], a
2015-11-29 18:34:59 -08:00
ld a, [wNextMapNumber]
2018-01-23 14:39:09 -08:00
ld [wMapNumber], a
2015-11-29 18:34:59 -08:00
ret
2018-06-24 07:09:41 -07:00
.SaveDigWarp:
call GetMapEnvironment
2015-11-29 18:34:59 -08:00
call CheckOutdoorMap
ret nz
ld a, [wNextMapGroup]
ld b, a
ld a, [wNextMapNumber]
ld c, a
call GetAnyMapEnvironment
2015-11-29 18:34:59 -08:00
call CheckIndoorMap
ret nz
; MOUNT_MOON_SQUARE and TIN_TOWER_ROOF are outdoor maps within indoor maps.
; Dig and Escape Rope should not take you to them.
2015-11-29 18:34:59 -08:00
ld a, [wPrevMapGroup]
cp GROUP_MOUNT_MOON_SQUARE
assert GROUP_MOUNT_MOON_SQUARE == GROUP_TIN_TOWER_ROOF
2015-11-29 18:34:59 -08:00
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
2015-11-29 18:34:59 -08:00
ld a, [wPrevWarp]
2017-12-09 16:41:03 -08:00
ld [wDigWarpNumber], a
2015-11-29 18:34:59 -08:00
ld a, [wPrevMapGroup]
ld [wDigMapGroup], a
ld a, [wPrevMapNumber]
ld [wDigMapNumber], a
ret
2018-06-24 07:09:41 -07:00
.SetSpawn:
call GetMapEnvironment
2015-11-29 18:34:59 -08:00
call CheckOutdoorMap
ret nz
ld a, [wNextMapGroup]
ld b, a
ld a, [wNextMapNumber]
ld c, a
call GetAnyMapEnvironment
2015-11-29 18:34:59 -08:00
call CheckIndoorMap
ret nz
ld a, [wNextMapGroup]
ld b, a
ld a, [wNextMapNumber]
ld c, a
; Respawn in Pokémon Centers.
2015-11-29 18:34:59 -08:00
call GetAnyMapTileset
ld a, c
cp TILESET_POKECENTER
jr z, .pokecenter_pokecom
cp TILESET_POKECOM_CENTER
jr z, .pokecenter_pokecom
ret
.pokecenter_pokecom
2015-11-29 18:34:59 -08:00
ld a, [wPrevMapGroup]
ld [wLastSpawnMapGroup], a
ld a, [wPrevMapNumber]
ld [wLastSpawnMapNumber], a
ret
2018-06-24 07:09:41 -07:00
LoadMapTimeOfDay:
2018-01-23 14:39:09 -08:00
ld hl, wVramState
2015-11-29 18:34:59 -08:00
res 6, [hl]
ld a, $1
ld [wSpriteUpdatesEnabled], a
2017-12-24 09:47:30 -08:00
farcall ReplaceTimeOfDayPals
farcall UpdateTimeOfDayPal
2015-11-29 18:34:59 -08:00
call OverworldTextModeSwitch
call .ClearBGMap
call .PushAttrmap
2015-11-29 18:34:59 -08:00
ret
2018-06-24 07:09:41 -07:00
.ClearBGMap:
2017-12-28 04:32:33 -08:00
ld a, HIGH(vBGMap0)
2015-11-29 18:34:59 -08:00
ld [wBGMapAnchor + 1], a
2017-12-28 04:32:33 -08:00
xor a ; LOW(vBGMap0)
2015-11-29 18:34:59 -08:00
ld [wBGMapAnchor], a
ldh [hSCY], a
ldh [hSCX], a
2017-12-24 09:47:30 -08:00
farcall ApplyBGMapAnchorToObjects
ldh a, [rVBK]
2015-11-29 18:34:59 -08:00
push af
ld a, $1
ldh [rVBK], a
2015-11-29 18:34:59 -08:00
xor a
2017-12-28 04:32:33 -08:00
ld bc, vBGMap1 - vBGMap0
2015-11-29 18:34:59 -08:00
hlbgcoord 0, 0
call ByteFill
2015-11-29 18:34:59 -08:00
pop af
ldh [rVBK], a
2018-01-18 23:30:19 -08:00
ld a, "■"
2017-12-28 04:32:33 -08:00
ld bc, vBGMap1 - vBGMap0
2015-11-29 18:34:59 -08:00
hlbgcoord 0, 0
call ByteFill
ret
.PushAttrmap:
2015-11-29 18:34:59 -08:00
decoord 0, 0
call .copy
ldh a, [hCGB]
2015-11-29 18:34:59 -08:00
and a
ret z
decoord 0, 0, wAttrmap
2015-11-29 18:34:59 -08:00
ld a, $1
ldh [rVBK], a
.copy
2015-11-29 18:34:59 -08:00
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
2015-11-29 18:34:59 -08:00
add hl, bc
pop bc
dec b
jr nz, .row
ld a, $0
ldh [rVBK], a
2015-11-29 18:34:59 -08:00
ret
LoadMapGraphics:
call LoadMapTileset
call LoadTilesetGFX
2015-11-29 18:34:59 -08:00
xor a
ldh [hMapAnims], a
2015-11-29 18:34:59 -08:00
xor a
ldh [hTileAnimFrame], a
farcall RefreshSprites
2015-11-29 18:34:59 -08:00
call LoadFontsExtra
2017-12-24 09:47:30 -08:00
farcall LoadOverworldFont
2015-11-29 18:34:59 -08:00
ret
2018-06-24 07:09:41 -07:00
LoadMapPalettes:
ld b, SCGB_MAPPALS
2015-11-29 18:34:59 -08:00
jp GetSGBLayout
2018-06-24 07:09:41 -07:00
RefreshMapSprites:
2015-11-29 18:34:59 -08:00
call ClearSprites
farcall InitMapNameSign
2015-11-29 18:34:59 -08:00
call GetMovementPermissions
2017-12-24 09:47:30 -08:00
farcall RefreshPlayerSprite
farcall CheckUpdatePlayerSprite
2015-11-29 18:34:59 -08:00
ld hl, wPlayerSpriteSetupFlags
2018-01-22 11:34:55 -08:00
bit PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl]
2015-11-29 18:34:59 -08:00
jr nz, .skip
2018-01-23 14:39:09 -08:00
ld hl, wVramState
2015-11-29 18:34:59 -08:00
set 0, [hl]
call SafeUpdateSprites
2015-11-29 18:34:59 -08:00
.skip
ld a, [wPlayerSpriteSetupFlags]
and (1 << PLAYERSPRITESETUP_FEMALE_TO_MALE_F) | (1 << 3) | (1 << 4)
2015-11-29 18:34:59 -08:00
ld [wPlayerSpriteSetupFlags], a
ret
2018-06-24 07:09:41 -07:00
CheckMovingOffEdgeOfMap::
2015-11-29 18:34:59 -08:00
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
2018-01-23 14:39:09 -08:00
ld a, [wPlayerStandingMapY]
2015-11-29 18:34:59 -08:00
sub 4
ld b, a
2018-01-23 14:39:09 -08:00
ld a, [wMapHeight]
2015-11-29 18:34:59 -08:00
add a
cp b
jr z, .ok
and a
ret
.up
2018-01-23 14:39:09 -08:00
ld a, [wPlayerStandingMapY]
2015-11-29 18:34:59 -08:00
sub 4
cp -1
jr z, .ok
and a
ret
.left
2018-01-23 14:39:09 -08:00
ld a, [wPlayerStandingMapX]
sub 4
2015-11-29 18:34:59 -08:00
cp -1
jr z, .ok
and a
ret
.right
2018-01-23 14:39:09 -08:00
ld a, [wPlayerStandingMapX]
2015-11-29 18:34:59 -08:00
sub 4
ld b, a
2018-01-23 14:39:09 -08:00
ld a, [wMapWidth]
2015-11-29 18:34:59 -08:00
add a
cp b
jr z, .ok
and a
ret
.ok
scf
ret
GetMapScreenCoords::
ld hl, wOverworldMapBlocks
2018-01-23 14:39:09 -08:00
ld a, [wXCoord]
2015-11-29 18:34:59 -08:00
bit 0, a
jr nz, .odd_x
; even x
2015-11-29 18:34:59 -08:00
srl a
add 1
jr .got_block_x
.odd_x
add 1
2015-11-29 18:34:59 -08:00
srl a
.got_block_x
2015-11-29 18:34:59 -08:00
ld c, a
ld b, 0
2015-11-29 18:34:59 -08:00
add hl, bc
2018-01-23 14:39:09 -08:00
ld a, [wMapWidth]
add MAP_CONNECTION_PADDING_WIDTH * 2
2015-11-29 18:34:59 -08:00
ld c, a
ld b, 0
2018-01-23 14:39:09 -08:00
ld a, [wYCoord]
2015-11-29 18:34:59 -08:00
bit 0, a
jr nz, .odd_y
; even y
2015-11-29 18:34:59 -08:00
srl a
add 1
jr .got_block_y
.odd_y
add 1
2015-11-29 18:34:59 -08:00
srl a
.got_block_y
2015-11-29 18:34:59 -08:00
call AddNTimes
ld a, l
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor], a
2015-11-29 18:34:59 -08:00
ld a, h
2015-12-13 17:33:56 -08:00
ld [wOverworldMapAnchor + 1], a
2018-01-23 14:39:09 -08:00
ld a, [wYCoord]
and 1
2015-12-13 17:33:56 -08:00
ld [wMetatileStandingY], a
2018-01-23 14:39:09 -08:00
ld a, [wXCoord]
and 1
2015-12-13 17:33:56 -08:00
ld [wMetatileStandingX], a
2015-11-29 18:34:59 -08:00
ret