pokecrystal-board/engine/pokegear.asm

2997 lines
42 KiB
NASM
Raw Normal View History

2015-11-16 18:07:26 -08:00
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
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
call InitPokegearModeIndicatorArrow
2015-11-16 18:07:26 -08:00
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_02
call GetSGBLayout
call SetPalettes
ld a, [hCGB]
and a
ret z
2015-12-09 08:38:40 -08:00
ld a, %11100100
call DmgToCgbObjPal0
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
; standing sprite
2015-11-16 18:07:26 -08:00
push af
ld de, VTiles0 tile $10
ld bc, 4 tiles
call FarCopyBytes
pop af
pop hl
2015-12-09 08:38:40 -08:00
; walking sprite
ld de, 12 tiles
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
InitPokegearModeIndicatorArrow: ; 90d32 (24:4d32)
2015-11-18 10:01:55 -08:00
depixel 4, 2, 4, 0
2015-11-16 18:07:26 -08:00
ld a, SPRITE_ANIM_INDEX_0D
call _InitSpriteAnimStruct
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
jr z, .FastShip
2015-11-16 18:07:26 -08:00
cp SPECIAL_MAP
2015-12-09 08:38:40 -08:00
jr nz, .LoadLandmark
2015-11-16 18:07:26 -08:00
ld a, [BackupMapGroup]
ld b, a
ld a, [BackupMapNumber]
ld c, a
call GetWorldMapLocation
2015-12-09 08:38:40 -08:00
.LoadLandmark
2015-11-16 18:07:26 -08:00
ld [wc6d8], a
ld [wc6d7], a
ret
2015-12-09 08:38:40 -08:00
.FastShip
2015-11-16 18:07:26 -08:00
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
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
depixel 0, 0
2015-12-18 17:07:09 -08:00
ld b, SPRITE_ANIM_INDEX_WALK_CYCLE
2015-11-16 18:07:26 -08:00
ld a, [PlayerGender]
bit 0, a
jr z, .asm_91079
ld b, SPRITE_ANIM_INDEX_1E
.asm_91079
ld a, b
call _InitSpriteAnimStruct
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], $10
pop af
ld e, a
push bc
callba GetLandmarkCoords
pop bc
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_XCOORD
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], e
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_YCOORD
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], d
ret
; 91098
Function91098: ; 91098
push af
2015-12-09 08:38:40 -08:00
depixel 0, 0
2015-11-16 18:07:26 -08:00
ld a, SPRITE_ANIM_INDEX_0D
call _InitSpriteAnimStruct
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], $4
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
2015-11-16 18:07:26 -08:00
add hl, bc
2015-12-18 17:07:09 -08:00
ld [hl], SPRITE_ANIM_SEQ_NULL
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_XCOORD
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], e
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_YCOORD
2015-11-16 18:07:26 -08:00
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
2015-11-18 10:01:55 -08:00
depixel 4, 10, 4, 4
2015-11-16 18:07:26 -08:00
ld a, SPRITE_ANIM_INDEX_14
call _InitSpriteAnimStruct
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:07:26 -08:00
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
2015-12-04 05:46:11 -08:00
; called from engine/sprite_anims.asm
AnimateTuningKnob: ; 91640 (24:5640)
2015-11-16 18:07:26 -08:00
push bc
call .TuningKnob
pop bc
ld a, [wRadioTuningKnob]
2015-12-04 05:46:11 -08:00
ld hl, SPRITEANIMSTRUCT_XOFFSET
2015-11-16 18:07:26 -08:00
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
2015-11-16 18:07:26 -08:00
ld a, e
and a
jr nz, .kanto
2015-12-09 08:38:40 -08:00
call LoadTownMapGFX
2015-11-16 18:07:26 -08:00
call FillJohtoMap
ret
.kanto
2015-12-09 08:38:40 -08:00
call LoadTownMapGFX
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
call LoadTownMapGFX
ld de, FlyMapLabelBorderGFX
2015-11-16 18:07:26 -08:00
ld hl, VTiles2 tile $30
2015-12-09 08:38:40 -08:00
lb bc, BANK(FlyMapLabelBorderGFX), 6
2015-11-16 18:07:26 -08:00
call Request1bpp
call FlyMap
2015-12-09 08:38:40 -08:00
call ret_91c8f
2015-11-20 12:15:32 -08:00
ld b, SCGB_02
2015-11-16 18:07:26 -08:00
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
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
ret_91c8f: ; 91c8f
2015-11-16 18:07:26 -08:00
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
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0 ; BG Map 0
2015-11-16 18:07:26 -08:00
call TownMapBGUpdate
call TownMapMon
ld a, c
ld [wd003], a
ld a, b
ld [wd004], a
ret
; 91d11
2015-12-09 08:38:40 -08:00
_Area: ; 91d11
; e: Current landmark
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
ld de, PokedexNestIconGFX
2015-11-16 18:07:26 -08:00
ld hl, VTiles0 tile $7f
2015-12-09 08:38:40 -08:00
lb bc, BANK(PokedexNestIconGFX), 1
call Request2bpp
2015-11-16 18:07:26 -08:00
2015-12-09 08:38:40 -08:00
call .GetPlayerOrFastShipIcon
2015-11-16 18:07:26 -08:00
ld hl, VTiles0 tile $78
2015-12-09 08:38:40 -08:00
ld c, 4
2015-11-16 18:07:26 -08:00
call Request2bpp
2015-12-09 08:38:40 -08:00
call LoadTownMapGFX
2015-11-16 18:07:26 -08:00
call FillKantoMap
2015-12-09 08:38:40 -08:00
call .PlaceString_MonsNest
2015-11-16 18:07:26 -08:00
call TownMapPals
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0, VBGMap1
2015-11-16 18:07:26 -08:00
call TownMapBGUpdate
call FillJohtoMap
2015-12-09 08:38:40 -08:00
call .PlaceString_MonsNest
2015-11-16 18:07:26 -08:00
call TownMapPals
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0
2015-11-16 18:07:26 -08:00
call TownMapBGUpdate
2015-11-20 12:15:32 -08:00
ld b, SCGB_02
2015-11-16 18:07:26 -08:00
call GetSGBLayout
call SetPalettes
xor a
ld [hBGMapMode], a
2015-12-09 08:38:40 -08:00
xor a ; Johto
call .GetAndPlaceNest
2015-11-16 18:07:26 -08:00
.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
2015-12-09 08:38:40 -08:00
call .LeftRightInput
call .BlinkNestIcons
2015-11-16 18:07:26 -08:00
jr .next
.select
2015-12-09 08:38:40 -08:00
call .HideNestsShowPlayer
2015-11-16 18:07:26 -08:00
.next
call DelayFrame
jr .loop
.a_b
call ClearSprites
pop af
ld [wd003], a
pop af
ld [wd002], a
ret
; 91d9b
2015-12-09 08:38:40 -08:00
.LeftRightInput: ; 91d9b
2015-11-16 18:07:26 -08:00
ld a, [hl]
2015-12-09 08:38:40 -08:00
and D_LEFT
jr nz, .left
2015-11-16 18:07:26 -08:00
ld a, [hl]
2015-12-09 08:38:40 -08:00
and D_RIGHT
jr nz, .right
2015-11-16 18:07:26 -08:00
ret
2015-12-09 08:38:40 -08:00
.left
2015-11-16 18:07:26 -08:00
ld a, [hWY]
cp $90
ret z
call ClearSprites
ld a, $90
ld [hWY], a
2015-12-09 08:38:40 -08:00
xor a ; Johto
call .GetAndPlaceNest
2015-11-16 18:07:26 -08:00
ret
2015-12-09 08:38:40 -08:00
.right
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
ld a, 1 ; Kanto
call .GetAndPlaceNest
2015-11-16 18:07:26 -08:00
ret
; 91dcd
2015-12-09 08:38:40 -08:00
.BlinkNestIcons: ; 91dcd
2015-11-16 18:07:26 -08:00
ld a, [hVBlankCounter]
ld e, a
and $f
ret nz
ld a, e
and $10
2015-12-09 08:38:40 -08:00
jr nz, .copy_sprites
2015-11-16 18:07:26 -08:00
call ClearSprites
ret
2015-12-09 08:38:40 -08:00
.copy_sprites
2015-11-16 18:07:26 -08:00
hlcoord 0, 0
ld de, Sprites
2015-12-09 08:38:40 -08:00
ld bc, SpritesEnd - Sprites
2015-11-16 18:07:26 -08:00
call CopyBytes
ret
; 91de9
2015-12-09 08:38:40 -08:00
.PlaceString_MonsNest: ; 91de9
2015-11-16 18:07:26 -08:00
hlcoord 0, 0
ld bc, SCREEN_WIDTH
2015-12-09 08:38:40 -08:00
ld a, " "
2015-11-16 18:07:26 -08:00
call ByteFill
hlcoord 0, 1
ld a, $6
ld [hli], a
2015-12-09 08:38:40 -08:00
ld bc, SCREEN_WIDTH - 2
2015-11-16 18:07:26 -08:00
ld a, $7
call ByteFill
ld [hl], $17
call GetPokemonName
hlcoord 2, 0
call PlaceString
ld h, b
ld l, c
2015-12-09 08:38:40 -08:00
ld de, .String_SNest
2015-11-16 18:07:26 -08:00
call PlaceString
ret
; 91e16
2015-12-09 08:38:40 -08:00
.String_SNest:
2015-11-16 18:07:26 -08:00
db "'S NEST@"
; 91e1e
2015-12-09 08:38:40 -08:00
.GetAndPlaceNest: ; 91e1e
2015-11-16 18:07:26 -08:00
ld [wd003], a
ld e, a
2015-12-09 08:38:40 -08:00
callba FindNest ; load nest landmarks into TileMap[0,0]
2015-11-16 18:07:26 -08:00
decoord 0, 0
ld hl, Sprites
2015-12-09 08:38:40 -08:00
.nestloop
2015-11-16 18:07:26 -08:00
ld a, [de]
and a
2015-12-09 08:38:40 -08:00
jr z, .done_nest
2015-11-16 18:07:26 -08:00
push de
ld e, a
push hl
callba GetLandmarkCoords
pop hl
2015-12-09 08:38:40 -08:00
; load into OAM
2015-11-16 18:07:26 -08:00
ld a, d
2015-12-09 08:38:40 -08:00
sub 4
2015-11-16 18:07:26 -08:00
ld [hli], a
ld a, e
2015-12-09 08:38:40 -08:00
sub 4
2015-11-16 18:07:26 -08:00
ld [hli], a
2015-12-09 08:38:40 -08:00
ld a, $7f ; nest icon in this context
2015-11-16 18:07:26 -08:00
ld [hli], a
xor a
ld [hli], a
2015-12-09 08:38:40 -08:00
; next
2015-11-16 18:07:26 -08:00
pop de
inc de
2015-12-09 08:38:40 -08:00
jr .nestloop
2015-11-16 18:07:26 -08:00
2015-12-09 08:38:40 -08:00
.done_nest
2015-11-16 18:07:26 -08:00
ld hl, Sprites
decoord 0, 0
2015-12-09 08:38:40 -08:00
ld bc, SpritesEnd - Sprites
2015-11-16 18:07:26 -08:00
call CopyBytes
ret
; 91e5a
2015-12-09 08:38:40 -08:00
.HideNestsShowPlayer: ; 91e5a
call .CheckPlayerLocation
2015-11-16 18:07:26 -08:00
ret c
ld a, [wd002]
ld e, a
callba GetLandmarkCoords
ld c, e
ld b, d
2015-12-09 08:38:40 -08:00
ld de, .PlayerOAM
2015-11-16 18:07:26 -08:00
ld hl, Sprites
2015-12-09 08:38:40 -08:00
.ShowPlayerLoop
2015-11-16 18:07:26 -08:00
ld a, [de]
cp $80
2015-12-09 08:38:40 -08:00
jr z, .copy
2015-11-16 18:07:26 -08:00
add b
ld [hli], a
inc de
ld a, [de]
add c
ld [hli], a
inc de
ld a, [de]
2015-12-09 08:38:40 -08:00
add $78 ; where the player's sprite is loaded
2015-11-16 18:07:26 -08:00
ld [hli], a
inc de
push bc
2015-12-09 08:38:40 -08:00
ld c, 0 ; RED
2015-11-16 18:07:26 -08:00
ld a, [PlayerGender]
bit 0, a
2015-12-09 08:38:40 -08:00
jr z, .got_gender
inc c ; BLUE
.got_gender
2015-11-16 18:07:26 -08:00
ld a, c
ld [hli], a
pop bc
2015-12-09 08:38:40 -08:00
jr .ShowPlayerLoop
2015-11-16 18:07:26 -08:00
2015-12-09 08:38:40 -08:00
.copy
2015-11-16 18:07:26 -08:00
ld hl, Sprites + $10
ld bc, SpritesEnd - (Sprites + $10)
xor a
call ByteFill
ret
; 91e9c
2015-12-09 08:38:40 -08:00
.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
2015-11-16 18:07:26 -08:00
db $80 ; terminator
; 91ea9
2015-12-09 08:38:40 -08:00
.CheckPlayerLocation: ; 91ea9
; Don't show the player's sprite if you're
; not in the same region as what's currently
; on the screen.
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
.GetPlayerOrFastShipIcon: ; 91ed0
2015-11-16 18:07:26 -08:00
ld a, [wd002]
cp FAST_SHIP
2015-12-09 08:38:40 -08:00
jr z, .FastShip
2015-11-16 18:07:26 -08:00
callba GetPlayerIcon
ret
2015-12-09 08:38:40 -08:00
.FastShip
2015-11-16 18:07:26 -08:00
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]
2015-12-09 08:38:40 -08:00
cp -1
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
2015-11-16 18:07:26 -08:00
.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:
2015-12-09 08:38:40 -08:00
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
2015-11-16 18:07:26 -08:00
; 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
2015-12-09 08:38:40 -08:00
depixel 0, 0
ld a, SPRITE_ANIM_INDEX_00
2015-11-16 18:07:26 -08:00
call _InitSpriteAnimStruct
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:07:26 -08:00
add hl, bc
2015-12-09 08:38:40 -08:00
ld [hl], $8
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
2015-11-16 18:07:26 -08:00
add hl, bc
2015-12-18 17:07:09 -08:00
ld [hl], SPRITE_ANIM_SEQ_NULL
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
depixel 0, 0
2015-12-18 17:07:09 -08:00
ld b, SPRITE_ANIM_INDEX_WALK_CYCLE ; Male
2015-11-16 18:07:26 -08:00
ld a, [PlayerGender]
bit 0, a
2015-12-09 08:38:40 -08:00
jr z, .got_gender
ld b, SPRITE_ANIM_INDEX_1E ; Female
.got_gender
2015-11-16 18:07:26 -08:00
ld a, b
call _InitSpriteAnimStruct
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], $10
pop af
ld e, a
push bc
callba GetLandmarkCoords
pop bc
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_XCOORD
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], e
2015-12-09 08:38:40 -08:00
ld hl, SPRITEANIMSTRUCT_YCOORD
2015-11-16 18:07:26 -08:00
add hl, bc
ld [hl], d
ret
; 0x91ff2
2015-12-09 08:38:40 -08:00
LoadTownMapGFX: ; 91ff2
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
PokedexNestIconGFX: ; 922d1
INCBIN "gfx/pokegear/dexmap_nest_icon.2bpp"
FlyMapLabelBorderGFX: ; 922e1
INCBIN "gfx/pokegear/flymap_label_border.2bpp"
2015-11-16 18:07:26 -08:00
2015-12-09 08:38:40 -08:00
Function92311: ; 92311
; unreferenced
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
call LoadTownMapGFX
ld de, FlyMapLabelBorderGFX
2015-11-16 18:07:26 -08:00
ld hl, VTiles2 tile $30
2015-12-09 08:38:40 -08:00
lb bc, BANK(FlyMapLabelBorderGFX), 6
2015-11-16 18:07:26 -08:00
call Request1bpp
call FillKantoMap
call TownMapBubble
call TownMapPals
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0, VBGMap1
2015-11-16 18:07:26 -08:00
call TownMapBGUpdate
call FillJohtoMap
call TownMapBubble
call TownMapPals
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0
2015-11-16 18:07:26 -08:00
call TownMapBGUpdate
call TownMapMon
ld a, c
ld [wd003], a
ld a, b
ld [wd004], a
ld b, SCGB_02
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
2015-12-09 08:38:40 -08:00
call .HandleDPad
2015-11-16 18:07:26 -08:00
call GetMapCursorCoordinates
callba PlaySpriteAnimations
2015-11-16 18:07:26 -08:00
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
2015-12-09 08:38:40 -08:00
.HandleDPad: ; 923b8
2015-11-16 18:07:26 -08:00
ld hl, hJoyLast
ld a, [hl]
and D_DOWN | D_RIGHT
2015-12-09 08:38:40 -08:00
jr nz, .down_right
2015-11-16 18:07:26 -08:00
ld a, [hl]
and D_UP | D_LEFT
2015-12-09 08:38:40 -08:00
jr nz, .up_left
2015-11-16 18:07:26 -08:00
ret
2015-12-09 08:38:40 -08:00
.down_right
2015-11-16 18:07:26 -08:00
ld hl, wd002
ld a, [hl]
cp FLY_INDIGO
2015-12-09 08:38:40 -08:00
jr c, .okay_dr
2015-11-16 18:07:26 -08:00
ld [hl], -1
2015-12-09 08:38:40 -08:00
.okay_dr
2015-11-16 18:07:26 -08:00
inc [hl]
2015-12-09 08:38:40 -08:00
jr .continue
2015-11-16 18:07:26 -08:00
2015-12-09 08:38:40 -08:00
.up_left
2015-11-16 18:07:26 -08:00
ld hl, wd002
ld a, [hl]
and a
2015-12-09 08:38:40 -08:00
jr nz, .okay_ul
2015-11-16 18:07:26 -08:00
ld [hl], FLY_INDIGO + 1
2015-12-09 08:38:40 -08:00
.okay_ul
2015-11-16 18:07:26 -08:00
dec [hl]
2015-12-09 08:38:40 -08:00
.continue
2015-11-16 18:07:26 -08:00
ld a, [wd002]
cp KANTO_FLYPOINT
jr c, .johto
call FillKantoMap
xor a
ld b, $9c
2015-12-09 08:38:40 -08:00
jr .finish
2015-11-16 18:07:26 -08:00
.johto
call FillJohtoMap
ld a, $90
ld b, $98
2015-12-09 08:38:40 -08:00
.finish
2015-11-16 18:07:26 -08:00
ld [hWY], a
ld a, b
ld [hBGMapAddress + 1], a
call TownMapBubble
call WaitBGMap
xor a
ld [hBGMapMode], a
ret
; 92402