pokecrystal/engine/pokegear.asm

2997 lines
43 KiB
NASM
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PokeGear: ; 90b8d (24:4b8d)
ld hl, Options
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
ld a, [hInMenu]
push af
ld a, $1
ld [hInMenu], a
ld a, [VramState]
push af
xor a
ld [VramState], a
call Function90bea
call DelayFrame
.loop
call UpdateTime
call JoyTextDelay
ld a, [wJumptableIndex]
bit 7, a
jr nz, .done
call Function90f04
callba PlaySpriteAnimations
call DelayFrame
jr .loop
.done
ld de, SFX_READ_TEXT_2
call PlaySFX
call WaitSFX
pop af
ld [VramState], a
pop af
ld [hInMenu], a
pop af
ld [Options], a
call ClearBGPalettes
xor a
ld [hBGMapAddress], a
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
ld a, $90
ld [hWY], a
call Function91492
ret
Function90bea: ; 90bea (24:4bea)
call ClearBGPalettes
call ClearTileMap
call ClearSprites
call DisableLCD
xor a
ld [hSCY], a
ld [hSCX], a
ld a, $7
ld [hWX], a
call Function90c4e
callba ClearSpriteAnims
call InitPokegearModeIndicatorArrow
ld a, 8
call SkipMusic
ld a, $e3
ld [rLCDC], a
call Function90d70
xor a
ld [wJumptableIndex], a
ld [wcf64], a
ld [wcf65], a
ld [wcf66], a
ld [wc6d2], a
ld [wc6d1], a
ld [wc6d3], a
ld [wc6d9], a
ld [wc6da], a
ld [wc6db], a
call Function90d9e
call Function90da8
ld b, SCGB_POKEGEAR_PALS
call GetSGBLayout
call SetPalettes
ld a, [hCGB]
and a
ret z
ld a, %11100100
call DmgToCgbObjPal0
ret
Function90c4e: ; 90c4e
call ClearVBank1
ld hl, TownMapGFX
ld de, VTiles2
ld a, BANK(TownMapGFX)
call FarDecompress
ld hl, PokegearGFX
ld de, VTiles2 + $30 tiles
ld a, BANK(PokegearGFX)
call FarDecompress
ld hl, PokegearSpritesGFX
ld de, VTiles0
ld a, BANK(PokegearSpritesGFX)
call Decompress
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
cp FAST_SHIP
jr z, .ssaqua
callba GetPlayerIcon
push de
ld h, d
ld l, e
ld a, b
; standing sprite
push af
ld de, VTiles0 tile $10
ld bc, 4 tiles
call FarCopyBytes
pop af
pop hl
; walking sprite
ld de, 12 tiles
add hl, de
ld de, VTiles0 tile $14
ld bc, 4 tiles
call FarCopyBytes
ret
.ssaqua
ld hl, FastShipGFX
ld de, VTiles0 tile $10
ld bc, 8 tiles
call CopyBytes
ret
; 90cb2
FastShipGFX: ; 90cb2
INCBIN "gfx/misc/fast_ship.2bpp"
; 90d32
InitPokegearModeIndicatorArrow: ; 90d32 (24:4d32)
depixel 4, 2, 4, 0
ld a, SPRITE_ANIM_INDEX_0D
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $0
ret
Function90d41: ; 90d41 (24:4d41)
ld hl, wcf64
ld e, [hl]
ld d, 0
ld hl, Unknown_90d52
add hl, de
ld a, [hl]
ld hl, $6
add hl, bc
ld [hl], a
ret
; 90d52 (24:4d52)
Unknown_90d52: ; 90d52
db $00, $10, $20, $30
; 90d56
Function90d56: ; 90d56
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
cp SPECIAL_MAP
ret nz
ld a, [BackupMapGroup]
ld b, a
ld a, [BackupMapNumber]
ld c, a
call GetWorldMapLocation
ret
; 90d70
Function90d70: ; 90d70 (24:4d70)
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
cp FAST_SHIP
jr z, .FastShip
cp SPECIAL_MAP
jr nz, .LoadLandmark
ld a, [BackupMapGroup]
ld b, a
ld a, [BackupMapNumber]
ld c, a
call GetWorldMapLocation
.LoadLandmark
ld [wc6d8], a
ld [wc6d7], a
ret
.FastShip
ld [wc6d8], a
ld a, NEW_BARK_TOWN
ld [wc6d7], a
ret
Function90d9e: ; 90d9e (24:4d9e)
ld a, $0
ld [wJumptableIndex], a
xor a
ld [wcf64], a
ret
Function90da8: ; 90da8 (24:4da8)
xor a
ld [hBGMapMode], a
hlcoord 0, 0
ld bc, TileMapEnd - TileMap
ld a, $4f
call ByteFill
ld a, [wcf64]
and $3
add a
ld e, a
ld d, 0
ld hl, Jumptable_90e12
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld de, .asm_90dcb
push de
jp [hl]
.asm_90dcb
call Function90eb0
callba TownMapPals
ld a, [wcf65]
and a
jr nz, .asm_90de8
xor a
ld [hBGMapAddress], a
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
call Function90e00
ld a, $90
jr .asm_90df3
.asm_90de8
xor a
ld [hBGMapAddress], a
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
call Function90e00
xor a
.asm_90df3
ld [hWY], a
ld a, [wcf65]
and 1
xor 1
ld [wcf65], a
ret
Function90e00: ; 90e00 (24:4e00)
ld a, [hCGB]
and a
jr z, .asm_90e0e
ld a, $2
ld [hBGMapMode], a
ld c, 3
call DelayFrames
.asm_90e0e
call WaitBGMap
ret
; 90e12 (24:4e12)
Jumptable_90e12: ; 90e12
dw Function90e1a
dw Function90e3f
dw Function90e82
dw Function90e72
; 90e1a
Function90e1a: ; 90e1a
ld de, ClockTilemapRLE
call Function914bb
hlcoord 12, 1
ld de, .switch
call PlaceString
hlcoord 0, 12
lb bc, 4, 18
call TextBox
call Function90f86
ret
; 90e36 (24:4e36)
.switch
db " SWITCH▶@"
; 90e3f
Function90e3f: ; 90e3f
ld a, [wc6d8]
cp FAST_SHIP
jr z, .johto
cp KANTO_LANDMARK
jr nc, .kanto
.johto
ld e, 0
jr .ok
.kanto
ld e, 1
.ok
callba PokegearMap
ld a, $7
ld bc, $12
hlcoord 1, 2
call ByteFill
hlcoord 0, 2
ld [hl], $6
hlcoord 19, 2
ld [hl], $17
ld a, [wc6d7]
call Function910b4
ret
; 90e72
Function90e72: ; 90e72
ld de, RadioTilemapRLE
call Function914bb
hlcoord 0, 12
lb bc, 4, 18
call TextBox
ret
; 90e82
Function90e82: ; 90e82
ld de, PhoneTilemapRLE
call Function914bb
hlcoord 0, 12
lb bc, 4, 18
call TextBox
call Function90e98
call Function912d8
ret
; 90e98
Function90e98: ; 90e98 (24:4e98)
hlcoord 17, 1
ld a, $3c
ld [hli], a
inc a
ld [hl], a
hlcoord 17, 2
inc a
ld [hli], a
call GetMapHeaderPhoneServiceNybble
and a
ret nz
hlcoord 18, 2
ld [hl], $3f
ret
Function90eb0: ; 90eb0 (24:4eb0)
hlcoord 0, 0
ld bc, $8
ld a, $4f
call ByteFill
hlcoord 0, 1
ld bc, $8
ld a, $4f
call ByteFill
ld de, wPokegearFlags
ld a, [de]
bit 0, a
call nz, Function90ee4
ld a, [de]
bit 2, a
call nz, Function90eeb
ld a, [de]
bit 1, a
call nz, Function90ef2
hlcoord 0, 0
ld a, $46
call Function90ef7
ret
Function90ee4: ; 90ee4 (24:4ee4)
hlcoord 2, 0
ld a, $40
jr Function90ef7
Function90eeb: ; 90eeb (24:4eeb)
hlcoord 4, 0
ld a, $44
jr Function90ef7
Function90ef2: ; 90ef2 (24:4ef2)
hlcoord 6, 0
ld a, $42
Function90ef7: ; 90ef7 (24:4ef7)
ld [hli], a
inc a
ld [hld], a
ld bc, $14
add hl, bc
add $f
ld [hli], a
inc a
ld [hld], a
ret
Function90f04: ; 90f04 (24:4f04)
ld a, [wJumptableIndex]
ld e, a
ld d, 0
ld hl, Jumptable_90f13
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
Jumptable_90f13: ; 90f13 (24:4f13)
dw Function90f2d
dw Function90f3e
dw Function90fb4
dw Function90fcd
dw Function90fee
dw Function90fcd
dw Function90fe9
dw Function91156
dw Function91171
dw Function911eb
dw Function91256
dw Function910f9
dw Function91112
Function90f2d: ; 90f2d (24:4f2d)
call Function90da8
ld hl, UnknownText_0x914d3
call PrintText
ld hl, wJumptableIndex
inc [hl]
call Function91492
ret
Function90f3e: ; 90f3e (24:4f3e)
call Function90f7b
ld hl, hJoyLast
ld a, [hl]
and A_BUTTON + B_BUTTON + START + SELECT
jr nz, .asm_90f75
ld a, [hl]
and D_RIGHT
ret z
ld a, [wPokegearFlags]
bit 0, a
jr z, .asm_90f5a
ld c, $2
ld b, $1
jr .asm_90f71
.asm_90f5a
ld a, [wPokegearFlags]
bit 2, a
jr z, .asm_90f67
ld c, $7
ld b, $2
jr .asm_90f71
.asm_90f67
ld a, [wPokegearFlags]
bit 1, a
ret z
ld c, $b
ld b, $3
.asm_90f71
call Function91480
ret
.asm_90f75
ld hl, wJumptableIndex
set 7, [hl]
ret
Function90f7b: ; 90f7b (24:4f7b)
xor a
ld [hBGMapMode], a
call Function90f86
ld a, $1
ld [hBGMapMode], a
ret
Function90f86: ; 90f86 (24:4f86)
hlcoord 3, 5
lb bc, 5, 14
call ClearBox
ld a, [hHours]
ld b, a
ld a, [hMinutes]
ld c, a
decoord 6, 8
callba PrintHoursMins
ld hl, UnknownText_0x90faf
bccoord 6, 6
call PlaceWholeStringInBoxAtOnce
ret
; 90fa8 (24:4fa8)
String_90fa8: db "ごぜん@"
String_90fac: db "ごご@"
UnknownText_0x90faf: ; 0x90faf
text_jump UnknownText_0x1c5821
db "@"
; 0x90fb4
Function90fb4: ; 90fb4 (24:4fb4)
ld a, [wc6d8]
cp FAST_SHIP
jr z, .johto
cp KANTO_LANDMARK
jr nc, .kanto
.johto
ld a, 3
jr .done
ret
.kanto
ld a, 5
.done
ld [wJumptableIndex], a
call Function91492
ret
Function90fcd: ; 90fcd (24:4fcd)
call Function90da8
ld a, [wc6d8]
call Function9106a
ld a, [wc6d7]
call Function91098
ld a, c
ld [wc6d5], a
ld a, b
ld [wc6d6], a
ld hl, wJumptableIndex
inc [hl]
ret
Function90fe9: ; 90fe9 (24:4fe9)
call Function910e8
jr Function90ff2
Function90fee: ; 90fee (24:4fee)
ld d, $2e
ld e, $1
Function90ff2: ; 90ff2 (24:4ff2)
ld hl, hJoyLast
ld a, [hl]
and B_BUTTON
jr nz, .cancel
ld a, [hl]
and D_RIGHT
jr nz, .right
ld a, [hl]
and D_LEFT
jr nz, .left
call Function9102f
ret
.right
ld a, [wPokegearFlags]
bit 2, a
jr z, .asm_91015
ld c, $7
ld b, $2
jr .done
.asm_91015
ld a, [wPokegearFlags]
bit 1, a
ret z
ld c, $b
ld b, $3
jr .done
.left
ld c, $0
ld b, $0
.done
call Function91480
ret
.cancel
ld hl, wJumptableIndex
set 7, [hl]
ret
Function9102f: ; 9102f (24:502f)
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .up
ld a, [hl]
and D_DOWN
jr nz, .down
ret
.up
ld hl, wc6d7
ld a, [hl]
cp d
jr c, .asm_91047
ld a, e
dec a
ld [hl], a
.asm_91047
inc [hl]
jr .done
.down
ld hl, wc6d7
ld a, [hl]
cp e
jr nz, .asm_91054
ld a, d
inc a
ld [hl], a
.asm_91054
dec [hl]
.done
ld a, [wc6d7]
call Function910b4
ld a, [wc6d5]
ld c, a
ld a, [wc6d6]
ld b, a
ld a, [wc6d7]
call Function910d4
ret
Function9106a: ; 9106a
push af
depixel 0, 0
ld b, SPRITE_ANIM_INDEX_WALK_CYCLE
ld a, [PlayerGender]
bit 0, a
jr z, .asm_91079
ld b, SPRITE_ANIM_INDEX_1E
.asm_91079
ld a, b
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $10
pop af
ld e, a
push bc
callba GetLandmarkCoords
pop bc
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
ld [hl], e
ld hl, SPRITEANIMSTRUCT_YCOORD
add hl, bc
ld [hl], d
ret
; 91098
Function91098: ; 91098
push af
depixel 0, 0
ld a, SPRITE_ANIM_INDEX_0D
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $4
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
ld [hl], SPRITE_ANIM_SEQ_NULL
pop af
push bc
call Function910d4
pop bc
ret
; 910b4
Function910b4: ; 910b4
push af
hlcoord 8, 0
lb bc, 2, 12
call ClearBox
pop af
ld e, a
push de
callba GetLandmarkName
pop de
callba Function1de2c5
hlcoord 8, 0
ld [hl], $34
ret
; 910d4
Function910d4: ; 910d4
push bc
ld e, a
callba GetLandmarkCoords
pop bc
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
ld [hl], e
ld hl, SPRITEANIMSTRUCT_YCOORD
add hl, bc
ld [hl], d
ret
; 910e8
Function910e8: ; 910e8
ld a, [StatusFlags]
bit 6, a
jr z, .asm_910f4
ld d, $5e
ld e, $2f
ret
.asm_910f4
ld d, $5e
ld e, $58
ret
; 910f9
Function910f9: ; 910f9 (24:50f9)
call Function90da8
depixel 4, 10, 4, 4
ld a, SPRITE_ANIM_INDEX_14
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $8
call _UpdateRadioStation
ld hl, wJumptableIndex
inc [hl]
ret
Function91112: ; 91112 (24:5112)
ld hl, hJoyLast
ld a, [hl]
and B_BUTTON
jr nz, .cancel
ld a, [hl]
and D_LEFT
jr nz, .left
ld a, [wc6da]
ld l, a
ld a, [wc6db]
ld h, a
ld a, [wc6d9]
and a
ret z
rst FarCall
ret
.left
ld a, [wPokegearFlags]
bit 2, a
jr z, .asm_9113b
ld c, $7
ld b, $2
jr .asm_9114c
.asm_9113b
ld a, [wPokegearFlags]
bit 0, a
jr z, .asm_91148
ld c, $2
ld b, $1
jr .asm_9114c
.asm_91148
ld c, $0
ld b, $0
.asm_9114c
call Function91480
ret
.cancel
ld hl, wJumptableIndex
set 7, [hl]
ret
Function91156: ; 91156 (24:5156)
ld hl, wJumptableIndex
inc [hl]
xor a
ld [wc6d2], a
ld [wc6d1], a
ld [wc6d3], a
call Function90da8
call Function91492
ld hl, UnknownText_0x914ce
call PrintText
ret
Function91171: ; 91171 (24:5171)
ld hl, hJoyPressed
ld a, [hl]
and B_BUTTON
jr nz, .b
ld a, [hl]
and A_BUTTON
jr nz, .a
ld hl, hJoyLast
ld a, [hl]
and D_LEFT
jr nz, .left
ld a, [hl]
and D_RIGHT
jr nz, .right
call Function9126d
ret
.left
ld a, [wPokegearFlags]
bit 0, a
jr z, .asm_9119c
ld c, $2
ld b, $1
jr .asm_911ac
.asm_9119c
ld c, $0
ld b, $0
jr .asm_911ac
.right
ld a, [wPokegearFlags]
bit 1, a
ret z
ld c, $b
ld b, $3
.asm_911ac
call Function91480
ret
.b
ld hl, wJumptableIndex
set 7, [hl]
ret
.a
ld hl, wPhoneList
ld a, [wc6d2]
ld e, a
ld d, 0
add hl, de
ld a, [wc6d1]
ld e, a
ld d, 0
add hl, de
ld a, [hl]
and a
ret z
ld [wc6d3], a
hlcoord 1, 4
ld a, [wc6d1]
ld bc, 20 * 2
call AddNTimes
ld [hl], "▷"
call Function91342
jr c, .asm_911e5
ld hl, wJumptableIndex
inc [hl]
ret
.asm_911e5
ld a, $8
ld [wJumptableIndex], a
ret
Function911eb: ; 911eb (24:51eb)
call GetMapHeaderPhoneServiceNybble
and a
jr nz, .asm_91234
ld hl, Options
res NO_TEXT_SCROLL, [hl]
xor a
ld [hInMenu], a
ld de, SFX_CALL
call PlaySFX
ld hl, UnknownText_0x9124c
call PrintText
call WaitSFX
ld de, SFX_CALL
call PlaySFX
ld hl, UnknownText_0x9124c
call PrintText
call WaitSFX
ld a, [wc6d3]
ld b, a
call Function90199
ld c, 10
call DelayFrames
ld hl, Options
set NO_TEXT_SCROLL, [hl]
ld a, $1
ld [hInMenu], a
call Function912b7
ld hl, wJumptableIndex
inc [hl]
ret
.asm_91234
callba Phone_NoSignal
ld hl, OutOfServiceAreaText
call PrintText
ld a, $8
ld [wJumptableIndex], a
ld hl, UnknownText_0x914ce
call PrintText
ret
; 9124c (24:524c)
UnknownText_0x9124c: ; 0x9124c
;
text_jump UnknownText_0x1c5824
db "@"
; 0x91251
OutOfServiceAreaText: ; 0x91251
; You're out of the service area.
text_jump UnknownText_0x1c5827
db "@"
; 0x91256
Function91256: ; 91256 (24:5256)
ld a, [hJoyPressed]
and A_BUTTON | B_BUTTON
ret z
callba HangUp
ld a, $8
ld [wJumptableIndex], a
ld hl, UnknownText_0x914ce
call PrintText
ret
Function9126d: ; 9126d (24:526d)
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .up
ld a, [hl]
and D_DOWN
jr nz, .down
ret
.up
ld hl, wc6d1
ld a, [hl]
and a
jr z, .asm_91285
dec [hl]
jr .asm_912a3
.asm_91285
ld hl, wc6d2
ld a, [hl]
and a
ret z
dec [hl]
jr .asm_912ad
.down
ld hl, wc6d1
ld a, [hl]
cp $3
jr nc, .asm_91299
inc [hl]
jr .asm_912a3
.asm_91299
ld hl, wc6d2
ld a, [hl]
cp $6
ret nc
inc [hl]
jr .asm_912ad
.asm_912a3
xor a
ld [hBGMapMode], a
call Function912b7
call WaitBGMap
ret
.asm_912ad
xor a
ld [hBGMapMode], a
call Function912d8
call WaitBGMap
ret
Function912b7: ; 912b7 (24:52b7)
ld a, " "
hlcoord 1, 4
ld [hl], a
hlcoord 1, 6
ld [hl], a
hlcoord 1, 8
ld [hl], a
hlcoord 1, 10
ld [hl], a
hlcoord 1, 4
ld a, [wc6d1]
ld bc, $28
call AddNTimes
ld [hl], "▶"
ret
Function912d8: ; 912d8 (24:52d8)
hlcoord 1, 3
ld b, $9
ld a, $7f
.asm_912df
ld c, $12
.asm_912e1
ld [hli], a
dec c
jr nz, .asm_912e1
rept 2
inc hl
endr
dec b
jr nz, .asm_912df
ld a, [wc6d2]
ld e, a
ld d, $0
ld hl, wPhoneList
add hl, de
xor a
ld [wc6d0], a
.asm_912f8
ld a, [hli]
push hl
push af
hlcoord 2, 4
ld a, [wc6d0]
ld bc, $28
call AddNTimes
ld d, h
ld e, l
pop af
ld b, a
call Function90380
pop hl
ld a, [wc6d0]
inc a
ld [wc6d0], a
cp $4
jr c, .asm_912f8
call Function912b7
ret
; 9131e (24:531e)
Function9131e: ; 9131e
ld hl, wPhoneList
ld a, [wc6d2]
ld e, a
ld d, 0
add hl, de
ld a, [wc6d1]
ld e, a
ld d, 0
add hl, de
ld [hl], 0
ld hl, wPhoneList
ld c, $a
.asm_91336
ld a, [hli]
and a
jr nz, .asm_9133e
ld a, [hld]
ld [hli], a
ld [hl], 0
.asm_9133e
dec c
jr nz, .asm_91336
ret
; 91342
Function91342: ; 91342 (24:5342)
ld hl, wPhoneList
ld a, [wc6d2]
ld e, a
ld d, 0
add hl, de
ld a, [wc6d1]
ld e, a
ld d, 0
add hl, de
ld c, [hl]
callba Function9038a
ld a, c
and a
jr z, .asm_91366
ld hl, Jumptable_91455
ld de, Unknown_9143f
jr .asm_9136c
.asm_91366
ld hl, Jumptable_9146a
ld de, Unknown_9145b
.asm_9136c
xor a
ld [hBGMapMode], a
push hl
push de
ld a, [de]
ld l, a
inc de
ld a, [de]
ld h, a
inc de
push hl
ld bc, hBGMapAddress + 1
add hl, bc
ld a, [de]
inc de
sla a
ld b, a
ld c, 8
push de
call TextBox
pop de
pop hl
inc hl
call PlaceString
pop de
xor a
ld [wc6d4], a
call Function9141d
call WaitBGMap
.asm_91398
push de
call JoyTextDelay
pop de
ld hl, hJoyPressed
ld a, [hl]
and D_UP
jr nz, .asm_913b4
ld a, [hl]
and D_DOWN
jr nz, .asm_913c1
ld a, [hl]
and A_BUTTON | B_BUTTON
jr nz, .asm_913d4
call DelayFrame
jr .asm_91398
.asm_913b4
ld hl, wc6d4
ld a, [hl]
and a
jr z, .asm_91398
dec [hl]
call Function9141d
jr .asm_91398
.asm_913c1
ld hl, 2
add hl, de
ld a, [wc6d4]
inc a
cp [hl]
jr nc, .asm_91398
ld [wc6d4], a
call Function9141d
jr .asm_91398
.asm_913d4
xor a
ld [hBGMapMode], a
call Function912d8
ld a, $1
ld [hBGMapMode], a
pop hl
ld a, [hJoyPressed]
and B_BUTTON
jr nz, Function913f1
ld a, [wc6d4]
ld e, a
ld d, 0
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
Function913f1: ; 913f1
ld hl, UnknownText_0x914ce
call PrintText
scf
ret
; 913f9 (24:53f9)
Function913f9: ; 913f9
ld hl, UnknownText_0x914d8
call MenuTextBox
call YesNoBox
call ExitMenu
jr c, .asm_91419
call Function9131e
xor a
ld [hBGMapMode], a
call Function912d8
ld hl, UnknownText_0x914ce
call PrintText
call WaitBGMap
.asm_91419
scf
ret
; 9141b
Function9141b: ; 9141b
and a
ret
; 9141d
Function9141d: ; 9141d (24:541d)
push de
ld a, [de]
inc de
ld l, a
ld a, [de]
inc de
ld h, a
ld a, [de]
ld c, a
push hl
ld a, " "
ld de, 20 * 2
.asm_9142c
ld [hl], a
add hl, de
dec c
jr nz, .asm_9142c
pop hl
ld a, [wc6d4]
ld bc, 20 * 2
call AddNTimes
ld [hl], "▶"
pop de
ret
; 9143f (24:543f)
Unknown_9143f: ; 9143f
dwcoord 10, 6
db 3
db "CALL"
next "DELETE"
next "CANCEL"
db "@"
; 91455
Jumptable_91455: ; 91455
dw Function9141b
dw Function913f9
dw Function913f1
; 9145b
Unknown_9145b: ; 9145b
dwcoord 10, 8
db 2
db "CALL"
next "CANCEL"
db "@"
; 9146a
Jumptable_9146a: ; 9146a
dw Function9141b
dw Function913f1
; 9146e
Function9146e: ; 9146e
ld a, [hHours]
cp 12
jr c, .asm_9147b
sub 12
ld [wd265], a
scf
ret
.asm_9147b
ld [wd265], a
and a
ret
; 91480
Function91480: ; 91480 (24:5480)
ld de, SFX_READ_TEXT_2
call PlaySFX
ld a, c
ld [wJumptableIndex], a
ld a, b
ld [wcf64], a
call DeleteSpriteAnimStruct2ToEnd
ret
Function91492: ; 91492
ld a, [wc6dc]
cp $fe
jr z, .asm_914a3
cp $ff
call z, EnterMapMusic
xor a
ld [wc6dc], a
ret
.asm_914a3
call RestartMapMusic
xor a
ld [wc6dc], a
ret
; 914ab
DeleteSpriteAnimStruct2ToEnd: ; 914ab (24:54ab)
ld hl, SpriteAnim2
ld bc, wSpriteAnimationStructsEnd - SpriteAnim2
xor a
call ByteFill
ld a, 2
ld [wSpriteAnimCount], a
ret
Function914bb: ; 914bb (24:54bb)
hlcoord 0, 0
.asm_914be
ld a, [de]
cp $ff
ret z
ld b, a
inc de
ld a, [de]
ld c, a
inc de
ld a, b
.asm_914c8
ld [hli], a
dec c
jr nz, .asm_914c8
jr .asm_914be
; 914ce (24:54ce)
UnknownText_0x914ce: ; 0x914ce
; Whom do you want to call?
text_jump UnknownText_0x1c5847
db "@"
; 0x914d3
UnknownText_0x914d3: ; 0x914d3
; Press any button to exit.
text_jump UnknownText_0x1c5862
db "@"
; 0x914d8
UnknownText_0x914d8: ; 0x914d8
; Delete this stored phone number?
text_jump UnknownText_0x1c587d
db "@"
; 0x914dd
PokegearSpritesGFX: ; 914dd
INCBIN "gfx/misc/pokegear_sprites.2bpp.lz"
; 9150d
RadioTilemapRLE: ; 9150d
INCBIN "gfx/unknown/09150d.tilemap.rle"
PhoneTilemapRLE: ; 9158a
INCBIN "gfx/unknown/09158a.tilemap.rle"
ClockTilemapRLE: ; 915db
INCBIN "gfx/unknown/0915db.tilemap.rle"
; 9163e
_UpdateRadioStation: ; 9163e (24:563e)
jr UpdateRadioStation
; called from engine/sprite_anims.asm
AnimateTuningKnob: ; 91640 (24:5640)
push bc
call .TuningKnob
pop bc
ld a, [wRadioTuningKnob]
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
ld [hl], a
ret
.TuningKnob: ; 9164e (24:564e)
ld hl, hJoyLast
ld a, [hl]
and D_DOWN
jr nz, .down
ld a, [hl]
and D_UP
jr nz, .up
ret
.down
ld hl, wRadioTuningKnob
ld a, [hl]
and a
ret z
rept 2
dec [hl]
endr
jr .update
.up
ld hl, wRadioTuningKnob
ld a, [hl]
cp 80
ret nc
rept 2
inc [hl]
endr
.update
UpdateRadioStation: ; 9166f (24:566f)
ld hl, wRadioTuningKnob
ld d, [hl]
ld hl, RadioChannels
.loop
ld a, [hli]
cp -1
jr z, .nostation
cp d
jr z, .foundstation
rept 2
inc hl
endr
jr .loop
.nostation
call NoRadioStation
ret
.foundstation
ld a, [hli]
ld h, [hl]
ld l, a
ld de, .returnafterstation
push de
jp [hl]
.returnafterstation
ld a, [wc6d9]
and a
ret z
xor a
ld [hBGMapMode], a
hlcoord 2, 9
call PlaceString
ld a, $1
ld [hBGMapMode], a
ret
; 916a1 (24:56a1)
Function916a1: ; 916a1
ld [wc6d9], a
ld a, [hli]
ld [wc6da], a
ld a, [hli]
ld [wc6db], a
ret
; 916ad
RadioChannels:
; frequencies and the shows that play on them.
; frequency value given here = 4 × ingame_frequency 2
dbw 16, .PkmnTalkAndPokedexShow
dbw 28, .PokemonMusic
dbw 32, .LuckyChannel
dbw 40, .BuenasPassword
dbw 52, .RuinsOfAlphRadio
dbw 64, .PlacesAndPeople
dbw 72, .LetsAllSing
dbw 78, .PokeFluteRadio
dbw 80, .EvolutionRadio
db $ff
.PkmnTalkAndPokedexShow
; Pokédex Show in the morning
; Oak's Pokémon Talk in the afternoon and evening
call .InJohto
jr nc, .NoSignal
ld a, [TimeOfDay]
and a
jp z, LoadStation_PokedexShow
jp LoadStation_OaksPokemonTalk
.PokemonMusic
call .InJohto
jr nc, .NoSignal
jp LoadStation_PokemonMusic
.LuckyChannel
call .InJohto
jr nc, .NoSignal
jp LoadStation_LuckyChannel
.BuenasPassword
call .InJohto
jr nc, .NoSignal
jp LoadStation_BuenasPassword
.RuinsOfAlphRadio
ld a, [wc6d8]
cp RUINS_OF_ALPH
jr nz, .NoSignal
jp LoadStation_UnownRadio
.PlacesAndPeople
call .InJohto
jr c, .NoSignal
ld a, [wPokegearFlags]
bit 3, a
jr z, .NoSignal
jp LoadStation_PlacesAndPeople
.LetsAllSing
call .InJohto
jr c, .NoSignal
ld a, [wPokegearFlags]
bit 3, a
jr z, .NoSignal
jp LoadStation_LetsAllSing
.PokeFluteRadio
call .InJohto
jr c, .NoSignal
ld a, [wPokegearFlags]
bit 3, a
jr z, .NoSignal
jp LoadStation_PokeFluteRadio
.EvolutionRadio
; This station airs in the Lake of Rage area when Rocket are still in Mahogany.
ld a, [StatusFlags]
bit 4, a
jr z, .NoSignal
ld a, [wc6d8]
cp MAHOGANY_TOWN
jr z, .ok
cp ROUTE_43
jr z, .ok
cp LAKE_OF_RAGE
jr nz, .NoSignal
.ok
jp LoadStation_EvolutionRadio
.NoSignal
call NoRadioStation
ret
.InJohto
; if in Johto or on the S.S. Aqua, set carry
; otherwise clear carry
ld a, [wc6d8]
cp FAST_SHIP
jr z, .johto
cp KANTO_LANDMARK
jr c, .johto
.kanto
and a
ret
.johto
scf
ret
LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
xor a ; OAKS_POKEMON_TALK
ld [wd002], a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, OaksPkmnTalkName
ret
LoadStation_PokedexShow: ; 91766 (24:5766)
ld a, POKEDEX_SHOW
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, PokedexShowName
ret
LoadStation_PokemonMusic: ; 9177b (24:577b)
ld a, POKEMON_MUSIC
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, PokemonMusicName
ret
LoadStation_LuckyChannel: ; 91790 (24:5790)
ld a, LUCKY_CHANNEL
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, LuckyChannelName
ret
LoadStation_BuenasPassword: ; 917a5 (24:57a5)
ld a, BUENAS_PASSWORD
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, NotBuenasPasswordName
ld a, [StatusFlags2]
bit 0, a
ret z
ld de, BuenasPasswordName
ret
; 917c3 (24:57c3)
BuenasPasswordName: db "BUENA'S PASSWORD@"
NotBuenasPasswordName: db "@"
LoadStation_UnownRadio: ; 917d5 (24:57d5)
ld a, UNOWN_RADIO
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, UnknownStationName
ret
LoadStation_PlacesAndPeople: ; 917ea (24:57ea)
ld a, PLACES_AND_PEOPLE
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, PlacesAndPeopleName
ret
LoadStation_LetsAllSing: ; 917ff (24:57ff)
ld a, LETS_ALL_SING
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, LetsAllSingName
ret
; 91814 (24:5814)
LoadStation_RocketRadio: ; 91814
ld a, ROCKET_RADIO
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, LetsAllSingName
ret
; 91829
LoadStation_PokeFluteRadio: ; 91829 (24:5829)
ld a, POKE_FLUTE_RADIO
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, PokeFluteStationName
ret
LoadStation_EvolutionRadio: ; 9183e (24:583e)
ld a, EVOLUTION_RADIO
ld [wd002], a
xor a
ld [wd005], a
ld a, BANK(PlayRadioShow)
ld hl, PlayRadioShow
call Radio_BackUpFarCallParams
ld de, UnknownStationName
ret
; 91853 (24:5853)
LoadStation_Dummy: ; 91853
ret
RadioMusicRestartDE: ; 91854 (24:5854)
push de
ld a, e
ld [wc6dc], a
ld de, MUSIC_NONE
call PlayMusic
pop de
ld a, e
ld [wMapMusic], a
call PlayMusic
ret
RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
push de
ld a, $fe
ld [wc6dc], a
ld de, MUSIC_NONE
call PlayMusic
pop de
ld de, MUSIC_POKEMON_CHANNEL
call PlayMusic
ret
Radio_BackUpFarCallParams: ; 9187c (24:587c)
ld [wc6d9], a
ld a, l
ld [wc6da], a
ld a, h
ld [wc6db], a
ret
NoRadioStation: ; 91888 (24:5888)
call NoRadioMusic
call NoRadioName
xor a
ld [wc6d9], a
ld [wc6da], a
ld [wc6db], a
ld a, $1
ld [hBGMapMode], a
ret
NoRadioMusic: ; 9189d (24:589d)
ld de, MUSIC_NONE
call PlayMusic
ld a, $ff
ld [wc6dc], a
ret
NoRadioName: ; 918a9 (24:58a9)
xor a
ld [hBGMapMode], a
hlcoord 1, 8
lb bc, 3, 18
call ClearBox
hlcoord 0, 12
ld bc, $412
call TextBox
ret
; 918bf
OaksPkmnTalkName: db "OAK's <PK><MN> Talk@"
PokedexShowName: db "#DEX Show@"
PokemonMusicName: db "#MON Music@"
LuckyChannelName: db "Lucky Channel@"
UnknownStationName: db "?????@"
PlacesAndPeopleName: db "Places & People@"
LetsAllSingName: db "Let's All Sing!@"
PokeFluteStationName: db "# FLUTE@"
; 9191c
INCLUDE "engine/town_map.asm"
PlayRadio: ; 91a53
ld hl, Options
ld a, [hl]
push af
set 4, [hl]
call .PlayStation
ld c, 100
call DelayFrames
.loop
call JoyTextDelay
ld a, [hJoyPressed]
and A_BUTTON | B_BUTTON
jr nz, .stop
ld a, [wc6da]
ld l, a
ld a, [wc6db]
ld h, a
ld a, [wc6d9]
and a
jr z, .zero
rst FarCall
.zero
call DelayFrame
jr .loop
.stop
pop af
ld [Options], a
call Function91492
ret
; 91a87
.PlayStation: ; 91a87
ld a, -1
ld [EnemyTurnsTaken], a
ld hl, .StationPointers
ld d, $0
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
ld de, .jump_return
push de
jp [hl]
.jump_return
push de
hlcoord 0, 12
lb bc, 4, 18
call TextBox
hlcoord 1, 14
ld [hl], $72
pop de
hlcoord 2, 14
call PlaceString
ld h, b
ld l, c
ld [hl], $73
call WaitBGMap
ret
; 91ab9
.StationPointers: ; 91ab9
dw .OakOrPnP
dw LoadStation_OaksPokemonTalk
dw LoadStation_PokedexShow
dw LoadStation_PokemonMusic
dw LoadStation_LuckyChannel
dw LoadStation_UnownRadio
dw LoadStation_PlacesAndPeople
dw LoadStation_LetsAllSing
dw LoadStation_RocketRadio
; 91acb
.OakOrPnP: ; 91acb
call IsInJohto
and a
jr nz, .kanto
call UpdateTime
ld a, [TimeOfDay]
and a
jp z, LoadStation_PokedexShow
jp LoadStation_OaksPokemonTalk
.kanto
jp LoadStation_PlacesAndPeople
; 91ae1
PokegearMap: ; 91ae1
ld a, e
and a
jr nz, .kanto
call LoadTownMapGFX
call FillJohtoMap
ret
.kanto
call LoadTownMapGFX
call FillKantoMap
ret
; 91af3
_FlyMap: ; 91af3
call ClearBGPalettes
call ClearTileMap
call ClearSprites
ld hl, hInMenu
ld a, [hl]
push af
ld [hl], $1
xor a
ld [hBGMapMode], a
callba ClearSpriteAnims
call LoadTownMapGFX
ld de, FlyMapLabelBorderGFX
ld hl, VTiles2 tile $30
lb bc, BANK(FlyMapLabelBorderGFX), 6
call Request1bpp
call FlyMap
call ret_91c8f
ld b, SCGB_POKEGEAR_PALS
call GetSGBLayout
call SetPalettes
.loop
call JoyTextDelay
ld hl, hJoyPressed
ld a, [hl]
and B_BUTTON
jr nz, .pressedB
ld a, [hl]
and A_BUTTON
jr nz, .pressedA
call FlyMapScroll
call GetMapCursorCoordinates
callba PlaySpriteAnimations
call DelayFrame
jr .loop
.pressedB
ld a, -1
jr .exit
.pressedA
ld a, [wd002]
ld l, a
ld h, 0
add hl, hl
ld de, Flypoints + 1
add hl, de
ld a, [hl]
.exit
ld [wd002], a
pop af
ld [hInMenu], a
call ClearBGPalettes
ld a, $90
ld [hWY], a
xor a
ld [hBGMapAddress], a
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
ld a, [wd002]
ld e, a
ret
; 91b73
FlyMapScroll: ; 91b73
ld a, [StartFlypoint]
ld e, a
ld a, [EndFlypoint]
ld d, a
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .ScrollNext
ld a, [hl]
and D_DOWN
jr nz, .ScrollPrev
ret
.ScrollNext
ld hl, wd002
ld a, [hl]
cp d
jr nz, .NotAtEndYet
ld a, e
dec a
ld [hl], a
.NotAtEndYet
inc [hl]
call CheckIfVisitedFlypoint
jr z, .ScrollNext
jr .Finally
.ScrollPrev
ld hl, wd002
ld a, [hl]
cp e
jr nz, .NotAtStartYet
ld a, d
inc a
ld [hl], a
.NotAtStartYet
dec [hl]
call CheckIfVisitedFlypoint
jr z, .ScrollPrev
.Finally
call TownMapBubble
call WaitBGMap
xor a
ld [hBGMapMode], a
ret
; 91bb5
TownMapBubble: ; 91bb5
; Draw the bubble containing the location text in the town map HUD
; Top-left corner
hlcoord 1, 0
ld a, $30
ld [hli], a
; Top row
ld bc, 16
ld a, " "
call ByteFill
; Top-right corner
ld a, $31
ld [hl], a
hlcoord 1, 1
; Middle row
ld bc, 18
ld a, " "
call ByteFill
; Bottom-left corner
hlcoord 1, 2
ld a, $32
ld [hli], a
; Bottom row
ld bc, 16
ld a, " "
call ByteFill
; Bottom-right corner
ld a, $33
ld [hl], a
; Print "Where?"
hlcoord 2, 0
ld de, .Where
call PlaceString
; Print the name of the default flypoint
call .Name
; Up/down arrows
hlcoord 18, 1
ld [hl], $34
ret
.Where
db "Where?@"
.Name
; We need the map location of the default flypoint
ld a, [wd002]
ld l, a
ld h, 0
add hl, hl ; two bytes per flypoint
ld de, Flypoints
add hl, de
ld e, [hl]
callba GetLandmarkName
hlcoord 2, 1
ld de, StringBuffer1
call PlaceString
ret
; 91c17
GetMapCursorCoordinates: ; 91c17
ld a, [wd002]
ld l, a
ld h, $0
add hl, hl
ld de, Flypoints
add hl, de
ld e, [hl]
callba GetLandmarkCoords
ld a, [wd003]
ld c, a
ld a, [wd004]
ld b, a
ld hl, $4
add hl, bc
ld [hl], e
ld hl, $5
add hl, bc
ld [hl], d
ret
; 91c3c
CheckIfVisitedFlypoint: ; 91c3c
; Check if the flypoint loaded in [hl] has been visited yet.
push bc
push de
push hl
ld l, [hl]
ld h, 0
add hl, hl
ld de, Flypoints + 1
add hl, de
ld c, [hl]
call HasVisitedSpawn
pop hl
pop de
pop bc
and a
ret
; 91c50
HasVisitedSpawn: ; 91c50
; Check if spawn point c has been visited.
ld hl, VisitedSpawns
ld b, CHECK_FLAG
ld d, 0
predef FlagPredef
ld a, c
ret
; 91c5e
Flypoints: ; 91c5e
; landmark, spawn point
const_def
flypoint: MACRO
const FLY_\1
db \2, SPAWN_\1
ENDM
; Johto
flypoint NEW_BARK, NEW_BARK_TOWN
flypoint CHERRYGROVE, CHERRYGROVE_CITY
flypoint VIOLET, VIOLET_CITY
flypoint AZALEA, AZALEA_TOWN
flypoint GOLDENROD, GOLDENROD_CITY
flypoint ECRUTEAK, ECRUTEAK_CITY
flypoint OLIVINE, OLIVINE_CITY
flypoint CIANWOOD, CIANWOOD_CITY
flypoint MAHOGANY, MAHOGANY_TOWN
flypoint LAKE, LAKE_OF_RAGE
flypoint BLACKTHORN, BLACKTHORN_CITY
flypoint MT_SILVER, SILVER_CAVE
; Kanto
KANTO_FLYPOINT EQU const_value
flypoint PALLET, PALLET_TOWN
flypoint VIRIDIAN, VIRIDIAN_CITY
flypoint PEWTER, PEWTER_CITY
flypoint CERULEAN, CERULEAN_CITY
flypoint VERMILION, VERMILION_CITY
flypoint ROCK_TUNNEL, ROCK_TUNNEL
flypoint LAVENDER, LAVENDER_TOWN
flypoint CELADON, CELADON_CITY
flypoint SAFFRON, SAFFRON_CITY
flypoint FUCHSIA, FUCHSIA_CITY
flypoint CINNABAR, CINNABAR_ISLAND
flypoint INDIGO, INDIGO_PLATEAU
db -1
; 91c8f
ret_91c8f: ; 91c8f
ret
; 91c90
FlyMap: ; 91c90
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
; If we're not in a valid location, i.e. Pokecenter floor 2F,
; the backup map information is used
cp SPECIAL_MAP
jr nz, .CheckRegion
ld a, [BackupMapGroup]
ld b, a
ld a, [BackupMapNumber]
ld c, a
call GetWorldMapLocation
.CheckRegion
; The first 46 locations are part of Johto. The rest are in Kanto
cp KANTO_LANDMARK
jr nc, .KantoFlyMap
.JohtoFlyMap
; Note that .NoKanto should be modified in tandem with this branch
push af
; Start from New Bark Town
ld a, FLY_NEW_BARK
ld [wd002], a
; Flypoints begin at New Bark Town...
ld [StartFlypoint], a
; ..and end at Silver Cave
ld a, FLY_MT_SILVER
ld [EndFlypoint], a
; Fill out the map
call FillJohtoMap
call .MapHud
pop af
call TownMapPlayerIcon
ret
.KantoFlyMap
; The event that there are no flypoints enabled in a map is not
; accounted for. As a result, if you attempt to select a flypoint
; when there are none enabled, the game will crash. Additionally,
; the flypoint selection has a default starting point that
; can be flown to even if none are enabled
; To prevent both of these things from happening when the player
; enters Kanto, fly access is restricted until Indigo Plateau is
; visited and its flypoint enabled
push af
ld c, SPAWN_INDIGO
call HasVisitedSpawn
and a
jr z, .NoKanto
; Kanto's map is only loaded if we've visited Indigo Plateau
; Flypoints begin at Pallet Town...
ld a, FLY_PALLET
ld [StartFlypoint], a
; ...and end at Indigo Plateau
ld a, FLY_INDIGO
ld [EndFlypoint], a
; Because Indigo Plateau is the first flypoint the player
; visits, it's made the default flypoint
ld [wd002], a
; Fill out the map
call FillKantoMap
call .MapHud
pop af
call TownMapPlayerIcon
ret
.NoKanto
; If Indigo Plateau hasn't been visited, we use Johto's map instead
; Start from New Bark Town
ld a, FLY_NEW_BARK
ld [wd002], a
; Flypoints begin at New Bark Town...
ld [StartFlypoint], a
; ..and end at Silver Cave
ld a, FLY_MT_SILVER
ld [EndFlypoint], a
call FillJohtoMap
pop af
.MapHud
call TownMapBubble
call TownMapPals
hlbgcoord 0, 0 ; BG Map 0
call TownMapBGUpdate
call TownMapMon
ld a, c
ld [wd003], a
ld a, b
ld [wd004], a
ret
; 91d11
_Area: ; 91d11
; e: Current landmark
ld a, [wd002]
push af
ld a, [wd003]
push af
ld a, e
ld [wd002], a
call ClearSprites
xor a
ld [hBGMapMode], a
ld a, $1
ld [hInMenu], a
ld de, PokedexNestIconGFX
ld hl, VTiles0 tile $7f
lb bc, BANK(PokedexNestIconGFX), 1
call Request2bpp
call .GetPlayerOrFastShipIcon
ld hl, VTiles0 tile $78
ld c, 4
call Request2bpp
call LoadTownMapGFX
call FillKantoMap
call .PlaceString_MonsNest
call TownMapPals
hlbgcoord 0, 0, VBGMap1
call TownMapBGUpdate
call FillJohtoMap
call .PlaceString_MonsNest
call TownMapPals
hlbgcoord 0, 0
call TownMapBGUpdate
ld b, SCGB_POKEGEAR_PALS
call GetSGBLayout
call SetPalettes
xor a
ld [hBGMapMode], a
xor a ; Johto
call .GetAndPlaceNest
.loop
call JoyTextDelay
ld hl, hJoyPressed
ld a, [hl]
and A_BUTTON | B_BUTTON
jr nz, .a_b
ld a, [hJoypadDown]
and SELECT
jr nz, .select
call .LeftRightInput
call .BlinkNestIcons
jr .next
.select
call .HideNestsShowPlayer
.next
call DelayFrame
jr .loop
.a_b
call ClearSprites
pop af
ld [wd003], a
pop af
ld [wd002], a
ret
; 91d9b
.LeftRightInput: ; 91d9b
ld a, [hl]
and D_LEFT
jr nz, .left
ld a, [hl]
and D_RIGHT
jr nz, .right
ret
.left
ld a, [hWY]
cp $90
ret z
call ClearSprites
ld a, $90
ld [hWY], a
xor a ; Johto
call .GetAndPlaceNest
ret
.right
ld a, [StatusFlags]
bit 6, a ; hall of fame
ret z
ld a, [hWY]
and a
ret z
call ClearSprites
xor a
ld [hWY], a
ld a, 1 ; Kanto
call .GetAndPlaceNest
ret
; 91dcd
.BlinkNestIcons: ; 91dcd
ld a, [hVBlankCounter]
ld e, a
and $f
ret nz
ld a, e
and $10
jr nz, .copy_sprites
call ClearSprites
ret
.copy_sprites
hlcoord 0, 0
ld de, Sprites
ld bc, SpritesEnd - Sprites
call CopyBytes
ret
; 91de9
.PlaceString_MonsNest: ; 91de9
hlcoord 0, 0
ld bc, SCREEN_WIDTH
ld a, " "
call ByteFill
hlcoord 0, 1
ld a, $6
ld [hli], a
ld bc, SCREEN_WIDTH - 2
ld a, $7
call ByteFill
ld [hl], $17
call GetPokemonName
hlcoord 2, 0
call PlaceString
ld h, b
ld l, c
ld de, .String_SNest
call PlaceString
ret
; 91e16
.String_SNest:
db "'S NEST@"
; 91e1e
.GetAndPlaceNest: ; 91e1e
ld [wd003], a
ld e, a
callba FindNest ; load nest landmarks into TileMap[0,0]
decoord 0, 0
ld hl, Sprites
.nestloop
ld a, [de]
and a
jr z, .done_nest
push de
ld e, a
push hl
callba GetLandmarkCoords
pop hl
; load into OAM
ld a, d
sub 4
ld [hli], a
ld a, e
sub 4
ld [hli], a
ld a, $7f ; nest icon in this context
ld [hli], a
xor a
ld [hli], a
; next
pop de
inc de
jr .nestloop
.done_nest
ld hl, Sprites
decoord 0, 0
ld bc, SpritesEnd - Sprites
call CopyBytes
ret
; 91e5a
.HideNestsShowPlayer: ; 91e5a
call .CheckPlayerLocation
ret c
ld a, [wd002]
ld e, a
callba GetLandmarkCoords
ld c, e
ld b, d
ld de, .PlayerOAM
ld hl, Sprites
.ShowPlayerLoop
ld a, [de]
cp $80
jr z, .copy
add b
ld [hli], a
inc de
ld a, [de]
add c
ld [hli], a
inc de
ld a, [de]
add $78 ; where the player's sprite is loaded
ld [hli], a
inc de
push bc
ld c, 0 ; RED
ld a, [PlayerGender]
bit 0, a
jr z, .got_gender
inc c ; BLUE
.got_gender
ld a, c
ld [hli], a
pop bc
jr .ShowPlayerLoop
.copy
ld hl, Sprites + $10
ld bc, SpritesEnd - (Sprites + $10)
xor a
call ByteFill
ret
; 91e9c
.PlayerOAM: ; 91e9c
db -1 * 8, -1 * 8, 0 ; top left
db -1 * 8, 0 * 8, 1 ; top right
db 0 * 8, -1 * 8, 2 ; bottom left
db 0 * 8, 0 * 8, 3 ; bottom right
db $80 ; terminator
; 91ea9
.CheckPlayerLocation: ; 91ea9
; Don't show the player's sprite if you're
; not in the same region as what's currently
; on the screen.
ld a, [wd002]
cp FAST_SHIP
jr z, .johto
cp KANTO_LANDMARK
jr c, .johto
.kanto
ld a, [wd003]
and a
jr z, .clear
jr .ok
.johto
ld a, [wd003]
and a
jr nz, .clear
.ok
and a
ret
.clear
ld hl, Sprites
ld bc, SpritesEnd - Sprites
xor a
call ByteFill
scf
ret
; 91ed0
.GetPlayerOrFastShipIcon: ; 91ed0
ld a, [wd002]
cp FAST_SHIP
jr z, .FastShip
callba GetPlayerIcon
ret
.FastShip
ld de, FastShipGFX
ld b, BANK(FastShipGFX)
ret
; 91ee4
TownMapBGUpdate: ; 91ee4
; Update BG Map tiles and attributes
; BG Map address
ld a, l
ld [hBGMapAddress], a
ld a, h
ld [hBGMapAddress + 1], a
; Only update palettes on CGB
ld a, [hCGB]
and a
jr z, .tiles
; BG Map mode 2 (palettes)
ld a, 2
ld [hBGMapMode], a
; The BG Map is updated in thirds, so we wait
; 3 frames to update the whole screen's palettes.
ld c, 3
call DelayFrames
.tiles
; Update BG Map tiles
call WaitBGMap
; Turn off BG Map update
xor a
ld [hBGMapMode], a
ret
; 91eff
FillJohtoMap: ; 91eff
ld de, JohtoMap
jr FillTownMap
FillKantoMap: ; 91f04
ld de, KantoMap
FillTownMap: ; 91f07
hlcoord 0, 0
.loop
ld a, [de]
cp -1
ret z
ld a, [de]
ld [hli], a
inc de
jr .loop
; 91f13
TownMapPals: ; 91f13
; Assign palettes based on tile ids
hlcoord 0, 0
decoord 0, 0, AttrMap
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
.loop
; Current tile
ld a, [hli]
push hl
; HP/borders use palette 0
cp $60
jr nc, .pal0
; The palette data is condensed to nybbles,
; least-significant first.
ld hl, TownMapPalMap
srl a
jr c, .odd
; Even-numbered tile ids take the bottom nybble...
add l
ld l, a
ld a, h
adc 0
ld h, a
ld a, [hl]
and %111
jr .update
.odd
; ...and odd ids take the top.
add l
ld l, a
ld a, h
adc 0
ld h, a
ld a, [hl]
swap a
and %111
jr .update
.pal0
xor a
.update
pop hl
ld [de], a
inc de
dec bc
ld a, b
or c
jr nz, .loop
ret
TownMapPalMap:
dn 1, 1, 2, 1, 2, 2, 0, 0, 1, 1, 1, 3, 5, 4, 5, 4
dn 1, 1, 2, 1, 2, 2, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0
dn 1, 1, 2, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
dn 0, 0, 0, 0, 4, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0
dn 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3
dn 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0
; 91f7b
TownMapMon: ; 91f7b
; Draw the FlyMon icon at town map location in
; Get FlyMon species
ld a, [CurPartyMon]
ld hl, PartySpecies
ld e, a
ld d, $0
add hl, de
ld a, [hl]
ld [wd265], a
; Get FlyMon icon
ld e, 8 ; starting tile in VRAM
callba GetSpeciesIcon
; Animation/palette
depixel 0, 0
ld a, SPRITE_ANIM_INDEX_00
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $8
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
ld [hl], SPRITE_ANIM_SEQ_NULL
ret
; 91fa6
TownMapPlayerIcon: ; 91fa6
; Draw the player icon at town map location in a
push af
callba GetPlayerIcon
; Standing icon
ld hl, VTiles0 tile $10
ld c, 4 ; # tiles
call Request2bpp
; Walking icon
ld hl, $c0
add hl, de
ld d, h
ld e, l
ld hl, VTiles0 tile $14
ld c, 4 ; # tiles
ld a, BANK(ChrisSpriteGFX) ; does nothing
call Request2bpp
; Animation/palette
depixel 0, 0
ld b, SPRITE_ANIM_INDEX_WALK_CYCLE ; Male
ld a, [PlayerGender]
bit 0, a
jr z, .got_gender
ld b, SPRITE_ANIM_INDEX_1E ; Female
.got_gender
ld a, b
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $10
pop af
ld e, a
push bc
callba GetLandmarkCoords
pop bc
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
ld [hl], e
ld hl, SPRITEANIMSTRUCT_YCOORD
add hl, bc
ld [hl], d
ret
; 0x91ff2
LoadTownMapGFX: ; 91ff2
ld hl, TownMapGFX
ld de, VTiles2
lb bc, BANK(TownMapGFX), $30
call DecompressRequest2bpp
ret
; 91fff
JohtoMap: ; 91fff
INCBIN "gfx/misc/johto.bin"
; 92168
KantoMap: ; 92168
INCBIN "gfx/misc/kanto.bin"
; 922d1
PokedexNestIconGFX: ; 922d1
INCBIN "gfx/pokegear/dexmap_nest_icon.2bpp"
FlyMapLabelBorderGFX: ; 922e1
INCBIN "gfx/pokegear/flymap_label_border.2bpp"
Function92311: ; 92311
; unreferenced
xor a
ld [wd002], a
call ClearBGPalettes
call ClearTileMap
call ClearSprites
ld hl, hInMenu
ld a, [hl]
push af
ld [hl], $1
xor a
ld [hBGMapMode], a
callba ClearSpriteAnims
call LoadTownMapGFX
ld de, FlyMapLabelBorderGFX
ld hl, VTiles2 tile $30
lb bc, BANK(FlyMapLabelBorderGFX), 6
call Request1bpp
call FillKantoMap
call TownMapBubble
call TownMapPals
hlbgcoord 0, 0, VBGMap1
call TownMapBGUpdate
call FillJohtoMap
call TownMapBubble
call TownMapPals
hlbgcoord 0, 0
call TownMapBGUpdate
call TownMapMon
ld a, c
ld [wd003], a
ld a, b
ld [wd004], a
ld b, SCGB_POKEGEAR_PALS
call GetSGBLayout
call SetPalettes
.loop
call JoyTextDelay
ld hl, hJoyPressed
ld a, [hl]
and B_BUTTON
jr nz, .pressedB
ld a, [hl]
and A_BUTTON
jr nz, .pressedA
call .HandleDPad
call GetMapCursorCoordinates
callba PlaySpriteAnimations
call DelayFrame
jr .loop
.pressedB
ld a, -1
jr .asm_9239f
.pressedA
ld a, [wd002]
ld l, a
ld h, 0
add hl, hl
ld de, Flypoints + 1
add hl, de
ld a, [hl]
.asm_9239f
ld [wd002], a
pop af
ld [hInMenu], a
call ClearBGPalettes
ld a, $90
ld [hWY], a
xor a
ld [hBGMapAddress], a
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
ld a, [wd002]
ld e, a
ret
; 923b8
.HandleDPad: ; 923b8
ld hl, hJoyLast
ld a, [hl]
and D_DOWN | D_RIGHT
jr nz, .down_right
ld a, [hl]
and D_UP | D_LEFT
jr nz, .up_left
ret
.down_right
ld hl, wd002
ld a, [hl]
cp FLY_INDIGO
jr c, .okay_dr
ld [hl], -1
.okay_dr
inc [hl]
jr .continue
.up_left
ld hl, wd002
ld a, [hl]
and a
jr nz, .okay_ul
ld [hl], FLY_INDIGO + 1
.okay_ul
dec [hl]
.continue
ld a, [wd002]
cp KANTO_FLYPOINT
jr c, .johto
call FillKantoMap
xor a
ld b, $9c
jr .finish
.johto
call FillJohtoMap
ld a, $90
ld b, $98
.finish
ld [hWY], a
ld a, b
ld [hBGMapAddress + 1], a
call TownMapBubble
call WaitBGMap
xor a
ld [hBGMapMode], a
ret
; 92402