mirror of
https://github.com/pret/pokered.git
synced 2024-10-22 22:55:31 +00:00
148 lines
3 KiB
NASM
148 lines
3 KiB
NASM
PrepareForSpecialWarp::
|
|
call LoadSpecialWarpData
|
|
predef LoadTilesetHeader
|
|
ld hl, wStatusFlags6
|
|
bit BIT_FLY_OR_DUNGEON_WARP, [hl]
|
|
res BIT_FLY_OR_DUNGEON_WARP, [hl]
|
|
jr z, .debugNewGameWarp
|
|
ld a, [wDestinationMap]
|
|
jr .next
|
|
.debugNewGameWarp
|
|
bit BIT_DEBUG_MODE, [hl]
|
|
jr z, .setNewGameMatWarp ; apply to StartNewGameDebug only
|
|
call PrepareNewGameDebug
|
|
.setNewGameMatWarp
|
|
; This is called by OakSpeech during StartNewGame and
|
|
; loads the first warp event for the specified map index.
|
|
ld a, PALLET_TOWN
|
|
.next
|
|
ld b, a
|
|
ld a, [wStatusFlags3]
|
|
and a ; ???
|
|
jr nz, .next2
|
|
ld a, b
|
|
.next2
|
|
ld hl, wStatusFlags6
|
|
bit BIT_DUNGEON_WARP, [hl]
|
|
ret nz
|
|
ld [wLastMap], a
|
|
ret
|
|
|
|
LoadSpecialWarpData:
|
|
ld a, [wCableClubDestinationMap]
|
|
cp TRADE_CENTER
|
|
jr nz, .notTradeCenter
|
|
ld hl, TradeCenterPlayerWarp
|
|
ldh a, [hSerialConnectionStatus]
|
|
cp USING_INTERNAL_CLOCK
|
|
jr z, .copyWarpData
|
|
ld hl, TradeCenterFriendWarp
|
|
jr .copyWarpData
|
|
.notTradeCenter
|
|
cp COLOSSEUM
|
|
jr nz, .notColosseum
|
|
ld hl, ColosseumPlayerWarp
|
|
ldh a, [hSerialConnectionStatus]
|
|
cp USING_INTERNAL_CLOCK
|
|
jr z, .copyWarpData
|
|
ld hl, ColosseumFriendWarp
|
|
jr .copyWarpData
|
|
.notColosseum
|
|
ld a, [wStatusFlags6]
|
|
bit BIT_DEBUG_MODE, a
|
|
; warp to wLastMap (PALLET_TOWN) for StartNewGameDebug
|
|
jr nz, .notNewGameWarp
|
|
bit BIT_FLY_OR_DUNGEON_WARP, a
|
|
jr nz, .notNewGameWarp
|
|
ld hl, NewGameWarp
|
|
.copyWarpData
|
|
ld de, wCurMap
|
|
ld c, $7
|
|
.copyWarpDataLoop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .copyWarpDataLoop
|
|
ld a, [hli]
|
|
ld [wCurMapTileset], a
|
|
xor a
|
|
jr .done
|
|
.notNewGameWarp
|
|
ld a, [wLastMap] ; this value is overwritten before it's ever read
|
|
ld hl, wStatusFlags6
|
|
bit BIT_DUNGEON_WARP, [hl]
|
|
jr nz, .usedDungeonWarp
|
|
bit BIT_ESCAPE_WARP, [hl]
|
|
res BIT_ESCAPE_WARP, [hl]
|
|
jr z, .otherDestination
|
|
ld a, [wLastBlackoutMap]
|
|
jr .usedFlyWarp
|
|
.usedDungeonWarp
|
|
ld hl, wStatusFlags3
|
|
res BIT_ON_DUNGEON_WARP, [hl]
|
|
ld a, [wDungeonWarpDestinationMap]
|
|
ld b, a
|
|
ld [wCurMap], a
|
|
ld a, [wWhichDungeonWarp]
|
|
ld c, a
|
|
ld hl, DungeonWarpList
|
|
ld de, 0
|
|
ld a, 6
|
|
ld [wDungeonWarpDataEntrySize], a
|
|
.dungeonWarpListLoop
|
|
ld a, [hli]
|
|
cp b
|
|
jr z, .matchedDungeonWarpDestinationMap
|
|
inc hl
|
|
jr .nextDungeonWarp
|
|
.matchedDungeonWarpDestinationMap
|
|
ld a, [hli]
|
|
cp c
|
|
jr z, .matchedDungeonWarpID
|
|
.nextDungeonWarp
|
|
ld a, [wDungeonWarpDataEntrySize]
|
|
add e
|
|
ld e, a
|
|
jr .dungeonWarpListLoop
|
|
.matchedDungeonWarpID
|
|
ld hl, DungeonWarpData
|
|
add hl, de
|
|
jr .copyWarpData2
|
|
.otherDestination
|
|
ld a, [wDestinationMap]
|
|
.usedFlyWarp
|
|
ld b, a
|
|
ld [wCurMap], a
|
|
ld hl, FlyWarpDataPtr
|
|
.flyWarpDataPtrLoop
|
|
ld a, [hli]
|
|
inc hl
|
|
cp b
|
|
jr z, .foundFlyWarpMatch
|
|
inc hl
|
|
inc hl
|
|
jr .flyWarpDataPtrLoop
|
|
.foundFlyWarpMatch
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
.copyWarpData2
|
|
ld de, wCurrentTileBlockMapViewPointer
|
|
ld c, $6
|
|
.copyWarpDataLoop2
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .copyWarpDataLoop2
|
|
xor a ; OVERWORLD
|
|
ld [wCurMapTileset], a
|
|
.done
|
|
ld [wYOffsetSinceLastSpecialWarp], a
|
|
ld [wXOffsetSinceLastSpecialWarp], a
|
|
ld a, -1 ; exclude normal warps
|
|
ld [wDestinationWarpID], a
|
|
ret
|
|
|
|
INCLUDE "data/maps/special_warps.asm"
|