pokecrystal-board/engine/startmenu.asm

1972 lines
28 KiB
NASM
Raw Normal View History

2015-11-11 13:11:08 -08:00
StartMenu:: ; 125cd
call ResetTextRelatedRAM
ld de, SFX_MENU
call PlaySFX
callba Function6454
ld hl, StatusFlags2
bit 2, [hl] ; bug catching contest
ld hl, .MenuDataHeader
jr z, .GotMenuData
ld hl, .ContestMenuDataHeader
.GotMenuData
call LoadMenuDataHeader
call .SetUpMenuItems
ld a, [wd0d2]
ld [wMenuCursorBuffer], a
call .DrawMenuAccount_
call MenuFunc_1e7f
call .DrawBugContestStatusBox
call Function2e31
call Function2e20
callba Function64bf
call .DrawBugContestStatus
call UpdateTimePals
jr .Select
.Reopen
call UpdateSprites
call UpdateTimePals
call .SetUpMenuItems
ld a, [wd0d2]
ld [wMenuCursorBuffer], a
.Select
call .GetInput
jr c, .Exit
call .DrawMenuAccount
ld a, [wMenuCursorBuffer]
ld [wd0d2], a
call PlayClickSFX
call Function1bee
call .OpenMenu
; Menu items have different return functions.
; For example, saving exits the menu.
ld hl, .MenuReturns
ld e, a
ld d, 0
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
.MenuReturns
dw .Reopen
dw .Exit
dw .ExitMenuCallFuncLoadMoveSprites
dw .ExitMenuRunScriptLoadMoveSprites
dw .ExitMenuRunScript
dw .ReturnEnd
dw .ReturnRedraw
.Exit
ld a, [hOAMUpdate]
push af
ld a, 1
ld [hOAMUpdate], a
call LoadFontsExtra
pop af
ld [hOAMUpdate], a
.ReturnEnd
call ExitMenu
.ReturnEnd2
call LoadMoveSprites
call UpdateTimePals
ret
.GetInput
; Return carry on exit, and no-carry on selection.
xor a
ld [hBGMapMode], a
call .DrawMenuAccount
call SetUpMenu
ld a, $ff
ld [MenuSelection], a
.loop
call .PrintMenuAccount
call Function1f1a
ld a, [wcf73]
cp B_BUTTON
jr z, .b
cp A_BUTTON
jr z, .a
jr .loop
.a
call PlayClickSFX
and a
ret
.b
scf
ret
; 12691
.ExitMenuRunScript ; 12691
call ExitMenu
ld a, HMENURETURN_SCRIPT
ld [hMenuReturn], a
ret
; 12699
.ExitMenuRunScriptLoadMoveSprites ; 12699
call ExitMenu
ld a, HMENURETURN_SCRIPT
ld [hMenuReturn], a
jr .ReturnEnd2
; 126a2
.ExitMenuCallFuncLoadMoveSprites ; 126a2
call ExitMenu
ld hl, wQueuedScriptAddr
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wQueuedScriptBank]
rst FarCall
jr .ReturnEnd2
; 126b1
.ReturnRedraw ; 126b1
call .Clear
jp .Reopen
; 126b7
.Clear ; 126b7
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
call Call_ExitMenu
call Function2bae
call .DrawMenuAccount_
call MenuFunc_1e7f
call .DrawBugContestStatus
call UpdateSprites
call Functiond90
call Function2b5c
ret
; 126d3
.MenuDataHeader
db $40 ; tile backup
db 0, 10 ; start coords
db 17, 19 ; end coords
dw .MenuData
db 1 ; default selection
.ContestMenuDataHeader
db $40 ; tile backup
db 2, 10 ; start coords
db 17, 19 ; end coords
dw .MenuData
db 1 ; default selection
.MenuData
db %10101000 ; x padding, wrap around, start can close
dn 0, 0 ; rows, columns
dw MenuItemsList
dw .MenuString
dw .Items
.Items
dw StartMenu_Pokedex, .PokedexString, .PokedexDesc
dw StartMenu_Pokemon, .PartyString, .PartyDesc
dw StartMenu_Pack, .PackString, .PackDesc
dw StartMenu_Status, .StatusString, .StatusDesc
dw StartMenu_Save, .SaveString, .SaveDesc
dw StartMenu_Option, .OptionString, .OptionDesc
dw StartMenu_Exit, .ExitString, .ExitDesc
dw StartMenu_Pokegear, .PokegearString, .PokegearDesc
dw StartMenu_Quit, .QuitString, .QuitDesc
.PokedexString db "#DEX@"
.PartyString db "#MON@"
.PackString db "PACK@"
.StatusString db "<PLAYER>@"
.SaveString db "SAVE@"
.OptionString db "OPTION@"
.ExitString db "EXIT@"
.PokegearString db $24, "GEAR@"
.QuitString db "QUIT@"
.PokedexDesc db "#MON"
next "database@"
.PartyDesc db "Party ", $4a
next "status@"
.PackDesc db "Contains"
next "items@"
.PokegearDesc db "Trainer's"
next "key device@"
.StatusDesc db "Your own"
next "status@"
.SaveDesc db "Save your"
next "progress@"
.OptionDesc db "Change"
next "settings@"
.ExitDesc db "Close this"
next "menu@"
.QuitDesc db "Quit and"
next "be judged.@"
.OpenMenu ; 127e5
ld a, [MenuSelection]
call .GetMenuAccountTextPointer
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 127ef
.MenuString ; 127ef
push de
ld a, [MenuSelection]
call .GetMenuAccountTextPointer
rept 2
inc hl
endr
ld a, [hli]
ld d, [hl]
ld e, a
pop hl
call PlaceString
ret
; 12800
.MenuDesc ; 12800
push de
ld a, [MenuSelection]
cp $ff
jr z, .none
call .GetMenuAccountTextPointer
rept 4
inc hl
endr
ld a, [hli]
ld d, [hl]
ld e, a
pop hl
call PlaceString
ret
.none
pop de
ret
; 12819
.GetMenuAccountTextPointer ; 12819
ld e, a
ld d, 0
ld hl, wcf97
ld a, [hli]
ld h, [hl]
ld l, a
rept 6
add hl, de
endr
ret
; 12829
.SetUpMenuItems ; 12829
xor a
ld [wcf76], a
call .FillMenuList
ld hl, StatusFlags
bit 0, [hl]
jr z, .no_pokedex
ld a, 0 ; pokedex
call .AppendMenuList
.no_pokedex
ld a, [PartyCount]
and a
jr z, .no_pokemon
ld a, 1 ; pokemon
call .AppendMenuList
.no_pokemon
ld a, [wLinkMode]
and a
jr nz, .no_pack
ld hl, StatusFlags2
bit 2, [hl] ; bug catching contest
jr nz, .no_pack
ld a, 2 ; pack
call .AppendMenuList
.no_pack
ld hl, wPokegearFlags
bit 7, [hl]
jr z, .no_pokegear
ld a, 7 ; pokegear
call .AppendMenuList
.no_pokegear
ld a, 3 ; status
call .AppendMenuList
ld a, [wLinkMode]
and a
jr nz, .no_save
ld hl, StatusFlags2
bit 2, [hl] ; bug catching contest
ld a, 8 ; quit
jr nz, .write
ld a, 4 ; save
.write
call .AppendMenuList
.no_save
ld a, 5 ; option
call .AppendMenuList
ld a, 6 ; exit
call .AppendMenuList
ld a, c
ld [MenuItemsList], a
ret
; 1288d
.FillMenuList ; 1288d
xor a
ld hl, MenuItemsList
ld [hli], a
ld a, -1
ld bc, MenuItemsListEnd - (MenuItemsList + 1)
call ByteFill
ld de, MenuItemsList + 1
ld c, 0
ret
; 128a0
.AppendMenuList ; 128a0
ld [de], a
inc de
inc c
ret
; 128a4
.DrawMenuAccount_ ; 128a4
jp .DrawMenuAccount
; 128a7
.PrintMenuAccount ; 128a7
call .IsMenuAccountOn
ret z
call .DrawMenuAccount
decoord 0, 14
jp .MenuDesc
; 128b4
.DrawMenuAccount ; 128b4
call .IsMenuAccountOn
ret z
hlcoord 0, 13
lb bc, 5, 10
call ClearBox
hlcoord 0, 13
ld b, 3
ld c, 8
jp TextBoxPalette
; 128cb
.IsMenuAccountOn ; 128cb
ld a, [Options2]
and 1
ret
; 128d1
.DrawBugContestStatusBox ; 128d1
ld hl, StatusFlags2
bit 2, [hl] ; bug catching contest
ret z
callba Function24bdc
ret
; 128de
.DrawBugContestStatus ; 128de
ld hl, StatusFlags2
bit 2, [hl] ; bug catching contest
jr nz, .contest
ret
.contest
callba Function24be7
ret
; 128ed
StartMenu_Exit: ; 128ed
; Exit the menu.
ld a, 1
ret
; 128f0
StartMenu_Quit: ; 128f0
; Retire from the bug catching contest.
ld hl, .EndTheContestText
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .DontEndContest
ld a, BANK(BugCatchingContestReturnToGateScript)
ld hl, BugCatchingContestReturnToGateScript
call FarQueueScript
ld a, 4
ret
.DontEndContest
ld a, 0
ret
.EndTheContestText
text_jump UnknownText_0x1c1a6c
db "@"
; 1290b
StartMenu_Save: ; 1290b
; Save the game.
call BufferScreen
2015-11-17 14:56:49 -08:00
callba SaveMenu
2015-11-11 13:11:08 -08:00
jr nc, .asm_12919
ld a, 0
ret
.asm_12919
ld a, 1
ret
; 1291c
StartMenu_Option: ; 1291c
; Game options.
call FadeToMenu
callba OptionsMenu
ld a, 6
ret
; 12928
StartMenu_Status: ; 12928
; Player status.
call FadeToMenu
2015-11-17 14:56:49 -08:00
callba TrainerCard
call ReturnToCallingMenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
; 12937
StartMenu_Pokedex: ; 12937
ld a, [PartyCount]
and a
jr z, .asm_12949
call FadeToMenu
callba Pokedex
2015-11-17 14:56:49 -08:00
call ReturnToCallingMenu
2015-11-11 13:11:08 -08:00
.asm_12949
ld a, 0
ret
; 1294c
StartMenu_Pokegear: ; 1294c
call FadeToMenu
2015-11-16 18:07:26 -08:00
callba PokeGear
2015-11-17 14:56:49 -08:00
call ReturnToCallingMenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
; 1295b
StartMenu_Pack: ; 1295b
call FadeToMenu
callba Pack
ld a, [wcf66]
and a
2015-11-17 14:56:49 -08:00
jr nz, .used_item
call ReturnToCallingMenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
2015-11-17 14:56:49 -08:00
.used_item
call ExitAllMenus
2015-11-11 13:11:08 -08:00
ld a, 4
ret
; 12976
StartMenu_Pokemon: ; 12976
ld a, [PartyCount]
and a
jr z, .return
call FadeToMenu
.choosemenu
xor a
ld [PartyMenuActionText], a ; Choose a POKéMON.
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
.menu
callba Function5004f
callba Function50405
callba Function503e0
.menunoreload
callba WritePartyMenuTilemap
callba PrintPartyMenuText
call WaitBGMap
call SetPalettes ; load regular palettes?
call DelayFrame
callba PartyMenuSelect
jr c, .return ; if cancelled or pressed B
call PokemonActionSubmenu
cp 3
jr z, .menu
cp 0
jr z, .choosemenu
cp 1
jr z, .menunoreload
cp 2
jr z, .quit
.return
2015-11-17 14:56:49 -08:00
call ReturnToCallingMenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
.quit
ld a, b
push af
2015-11-17 14:56:49 -08:00
call ExitAllMenus
2015-11-11 13:11:08 -08:00
pop af
ret
; 129d5
2015-11-17 14:56:49 -08:00
HasNoItems: ; 129d5
2015-11-11 13:11:08 -08:00
ld a, [NumItems]
and a
ret nz
ld a, [NumKeyItems]
and a
ret nz
ld a, [NumBalls]
and a
ret nz
ld hl, TMsHMs
ld b, NUM_TMS + NUM_HMS
2015-11-17 14:56:49 -08:00
.loop
2015-11-11 13:11:08 -08:00
ld a, [hli]
and a
2015-11-17 14:56:49 -08:00
jr nz, .done
2015-11-11 13:11:08 -08:00
dec b
2015-11-17 14:56:49 -08:00
jr nz, .loop
2015-11-11 13:11:08 -08:00
scf
ret
2015-11-17 14:56:49 -08:00
.done
2015-11-11 13:11:08 -08:00
and a
ret
Function129f4: ; 129f4
push de
call PartyMonItemName
callba _CheckTossableItem
ld a, [wItemAttributeParamBuffer]
and a
jr nz, .asm_12a3f
ld hl, UnknownText_0x12a45
call MenuTextBox
callba Function24fbf
push af
call WriteBackup
call ExitMenu
pop af
jr c, .asm_12a42
ld hl, UnknownText_0x12a4a
call MenuTextBox
call YesNoBox
push af
call ExitMenu
pop af
jr c, .asm_12a42
pop hl
ld a, [wd107]
call TossItem
call PartyMonItemName
ld hl, UnknownText_0x12a4f
call MenuTextBox
call ExitMenu
and a
ret
.asm_12a3f
call Function12a54
.asm_12a42
pop hl
scf
ret
; 12a45 (4:6a45)
UnknownText_0x12a45: ; 0x12a45
; Toss out how many @ (S)?
text_jump UnknownText_0x1c1a90
db "@"
; 0x12a4a
UnknownText_0x12a4a: ; 0x12a4a
; Throw away @ @ (S)?
text_jump UnknownText_0x1c1aad
db "@"
; 0x12a4f
UnknownText_0x12a4f: ; 0x12a4f
; Discarded @ (S).
text_jump UnknownText_0x1c1aca
db "@"
; 0x12a54
Function12a54: ; 12a54 (4:6a54)
ld hl, UnknownText_0x12a5b
call MenuTextBoxBackup
ret
; 12a5b (4:6a5b)
UnknownText_0x12a5b: ; 0x12a5b
; That's too impor- tant to toss out!
text_jump UnknownText_0x1c1adf
db "@"
; 0x12a60
CantUseItem: ; 12a60
ld hl, CantUseItemText
call Function2012
ret
; 12a67
CantUseItemText: ; 12a67
text_jump UnknownText_0x1c1b03
db "@"
; 12a6c
PartyMonItemName: ; 12a6c
ld a, [CurItem]
ld [wd265], a
call GetItemName
call CopyName1
ret
; 12a79
CancelPokemonAction: ; 12a79
callba Function50405
callba Function8ea71
ld a, 1
ret
; 12a88
PokemonActionSubmenu: ; 12a88
hlcoord 1, 15
lb bc, 2, 18
call ClearBox
callba MonSubmenu
call GetCurNick
ld a, [MenuSelection]
ld hl, .Actions
ld de, 3
call IsInArray
jr nc, .nothing
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
.nothing
ld a, 0
ret
.Actions
dbw MONMENU_CUT, MonMenu_Cut ; Cut
dbw MONMENU_FLY, MonMenu_Fly ; Fly
dbw MONMENU_SURF, MonMenu_Surf ; Surf
dbw MONMENU_STRENGTH, MonMenu_Strength ; Strength
dbw MONMENU_FLASH, MonMenu_Flash ; Flash
dbw MONMENU_WHIRLPOOL, MonMenu_Whirlpool ; Whirlpool
dbw MONMENU_DIG, MonMenu_Dig ; Dig
dbw MONMENU_TELEPORT, MonMenu_Teleport ; Teleport
dbw MONMENU_SOFTBOILED, MonMenu_Softboiled_MilkDrink ; Softboiled
dbw MONMENU_MILKDRINK, MonMenu_Softboiled_MilkDrink ; MilkDrink
dbw MONMENU_HEADBUTT, MonMenu_Headbutt ; Headbutt
dbw MONMENU_WATERFALL, MonMenu_Waterfall ; Waterfall
dbw MONMENU_ROCKSMASH, MonMenu_RockSmash ; RockSmash
dbw MONMENU_SWEETSCENT, MonMenu_SweetScent ; SweetScent
dbw MONMENU_STATS, OpenPartyStats
dbw MONMENU_SWITCH, SwitchPartyMons
dbw MONMENU_ITEM, GiveTakePartyMonItem
dbw MONMENU_CANCEL, CancelPokemonAction
dbw MONMENU_MOVE, ManagePokemonMoves ; move
dbw MONMENU_MAIL, MonMailAction ; mail
; 12aec
SwitchPartyMons: ; 12aec
; Don't try if there's nothing to switch!
ld a, [PartyCount]
cp 2
jr c, .DontSwitch
ld a, [CurPartyMon]
inc a
ld [wd0e3], a
callba Function8ea8c
callba Function5042d
ld a, 4
ld [PartyMenuActionText], a
callba WritePartyMenuTilemap
callba PrintPartyMenuText
hlcoord 0, 1
ld bc, 20 * 2
ld a, [wd0e3]
dec a
call AddNTimes
ld [hl], "▷"
call WaitBGMap
call SetPalettes
call DelayFrame
callba PartyMenuSelect
bit 1, b
jr c, .DontSwitch
callba _SwitchPartyMons
xor a
ld [PartyMenuActionText], a
callba Function5004f
callba Function50405
callba Function503e0
ld a, 1
ret
.DontSwitch
xor a
ld [PartyMenuActionText], a
call CancelPokemonAction
ret
; 12b60
GiveTakePartyMonItem: ; 12b60
; Eggs can't hold items!
ld a, [CurPartySpecies]
cp EGG
jr z, .asm_12ba6
ld hl, GiveTakeItemMenuData
call LoadMenuDataHeader
call InterpretMenu2
call ExitMenu
jr c, .asm_12ba6
call GetCurNick
ld hl, StringBuffer1
ld de, wd050
ld bc, $b
call CopyBytes
ld a, [MenuSelection2]
cp 1
jr nz, .asm_12ba0
call LoadStandardMenuDataHeader
call ClearPalettes
call Function12ba9
call ClearPalettes
call LoadFontsBattleExtra
call ExitMenu
ld a, 0
ret
.asm_12ba0
call TakePartyItem
ld a, 3
ret
.asm_12ba6
ld a, 3
ret
; 12ba9
Function12ba9: ; 12ba9
callba Function106a5
.loop
callba Function106be
ld a, [wcf66]
and a
jr z, .quit
ld a, [wcf65]
cp 2
jr z, .next
call CheckTossableItem
ld a, [wItemAttributeParamBuffer]
and a
jr nz, .next
call Function12bd9
jr .quit
.next
ld hl, CantBeHeldText
call MenuTextBoxBackup
jr .loop
.quit
ret
; 12bd9
Function12bd9: ; 12bd9
call SpeechTextBox
call PartyMonItemName
call GetPartyItemLocation
ld a, [hl]
and a
jr z, .asm_12bf4
push hl
ld d, a
callba ItemIsMail
pop hl
jr c, .asm_12c01
ld a, [hl]
jr .asm_12c08
.asm_12bf4
2015-11-17 14:56:49 -08:00
call GiveItemToPokemon
2015-11-11 13:11:08 -08:00
ld hl, MadeHoldText
call MenuTextBoxBackup
call GivePartyItem
ret
.asm_12c01
ld hl, PleaseRemoveMailText
call MenuTextBoxBackup
ret
.asm_12c08
ld [wd265], a
call GetItemName
ld hl, SwitchAlreadyHoldingText
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .asm_12c4b
2015-11-17 14:56:49 -08:00
call GiveItemToPokemon
2015-11-11 13:11:08 -08:00
ld a, [wd265]
push af
ld a, [CurItem]
ld [wd265], a
pop af
ld [CurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
jr nc, .asm_12c3c
ld hl, TookAndMadeHoldText
call MenuTextBoxBackup
ld a, [wd265]
ld [CurItem], a
call GivePartyItem
ret
.asm_12c3c
ld a, [wd265]
ld [CurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
ld hl, ItemStorageIsFullText
call MenuTextBoxBackup
.asm_12c4b
ret
; 12c4c
GivePartyItem: ; 12c4c
call GetPartyItemLocation
ld a, [CurItem]
ld [hl], a
ld d, a
callba ItemIsMail
2015-11-18 10:29:30 -08:00
jr nc, .done
call ComposeMailMessage
2015-11-11 13:11:08 -08:00
2015-11-18 10:29:30 -08:00
.done
2015-11-11 13:11:08 -08:00
ret
; 12c60
TakePartyItem: ; 12c60
call SpeechTextBox
call GetPartyItemLocation
ld a, [hl]
and a
jr z, .asm_12c8c
ld [CurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
jr nc, .asm_12c94
callba ItemIsMail
call GetPartyItemLocation
ld a, [hl]
ld [wd265], a
ld [hl], NO_ITEM
call GetItemName
ld hl, TookFromText
call MenuTextBoxBackup
jr .asm_12c9a
.asm_12c8c
ld hl, IsntHoldingAnythingText
call MenuTextBoxBackup
jr .asm_12c9a
.asm_12c94
ld hl, ItemStorageIsFullText
call MenuTextBoxBackup
.asm_12c9a
ret
; 12c9b
GiveTakeItemMenuData: ; 12c9b
db %01010000
db 12, 12 ; start coords
db 17, 19 ; end coords
dw .Items
db 1 ; default option
.Items
db %10000000 ; x padding
db 2 ; # items
db "GIVE@"
db "TAKE@"
; 12caf
TookAndMadeHoldText: ; 12caf
text_jump UnknownText_0x1c1b2c
db "@"
; 12cb4
MadeHoldText: ; 12cb4
text_jump UnknownText_0x1c1b57
db "@"
; 12cb9
PleaseRemoveMailText: ; 12cb9
text_jump UnknownText_0x1c1b6f
db "@"
; 12cbe
IsntHoldingAnythingText: ; 12cbe
text_jump UnknownText_0x1c1b8e
db "@"
; 12cc3
ItemStorageIsFullText: ; 12cc3
text_jump UnknownText_0x1c1baa
db "@"
; 12cc8
TookFromText: ; 12cc8
text_jump UnknownText_0x1c1bc4
db "@"
; 12ccd
SwitchAlreadyHoldingText: ; 12ccd
text_jump UnknownText_0x1c1bdc
db "@"
; 12cd2
CantBeHeldText: ; 12cd2
text_jump UnknownText_0x1c1c09
db "@"
; 12cd7
GetPartyItemLocation: ; 12cd7
push af
ld a, MON_ITEM
call GetPartyParamLocation
pop af
ret
; 12cdf
2015-11-17 14:56:49 -08:00
ReceiveItemFromPokemon: ; 12cdf
2015-11-11 13:11:08 -08:00
ld a, $1
ld [wItemQuantityChangeBuffer], a
ld hl, NumItems
jp ReceiveItem
; 12cea
2015-11-17 14:56:49 -08:00
GiveItemToPokemon: ; 12cea (4:6cea)
2015-11-11 13:11:08 -08:00
ld a, $1
ld [wItemQuantityChangeBuffer], a
ld hl, NumItems
jp TossItem
2015-11-17 14:56:49 -08:00
StartMenuYesNo: ; 12cf5
2015-11-11 13:11:08 -08:00
call MenuTextBox
call YesNoBox
jp ExitMenu
; 12cfe
2015-11-18 10:29:30 -08:00
ComposeMailMessage: ; 12cfe (4:6cfe)
ld de, wTempMailMessage
callba _ComposeMailMessage
2015-11-11 13:11:08 -08:00
ld hl, PlayerName
2015-11-18 10:29:30 -08:00
ld de, wTempMailAuthor
2015-11-17 14:56:49 -08:00
ld bc, NAME_LENGTH - 1
2015-11-11 13:11:08 -08:00
call CopyBytes
ld hl, PlayerID
2015-11-18 10:29:30 -08:00
ld bc, 2
2015-11-11 13:11:08 -08:00
call CopyBytes
ld a, [CurPartySpecies]
ld [de], a
inc de
ld a, [CurItem]
ld [de], a
ld a, [CurPartyMon]
2015-11-17 14:56:49 -08:00
ld hl, sPartyMail
ld bc, MAIL_STRUCT_LENGTH
2015-11-11 13:11:08 -08:00
call AddNTimes
ld d, h
ld e, l
2015-11-18 10:29:30 -08:00
ld hl, wTempMail
2015-11-17 14:56:49 -08:00
ld bc, MAIL_STRUCT_LENGTH
ld a, BANK(sPartyMail)
2015-11-11 13:11:08 -08:00
call GetSRAMBank
call CopyBytes
call CloseSRAM
ret
MonMailAction: ; 12d45
; If in the time capsule or trade center,
; selecting the mail only allows you to
; read the mail.
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jr z, .read
cp LINK_TRADECENTER
jr z, .read
; Show the READ/TAKE/QUIT menu.
ld hl, .MenuDataHeader
call LoadMenuDataHeader
call InterpretMenu2
call ExitMenu
; Interpret the menu.
jp c, .done
ld a, [MenuSelection2]
cp $1
jr z, .read
cp $2
jr z, .take
jp .done
.read
callba ReadPartyMonMail
ld a, $0
ret
.take
ld hl, .sendmailtopctext
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .RemoveMailToBag
ld a, [CurPartyMon]
ld b, a
2015-11-17 14:56:49 -08:00
callba SendMailToPC
2015-11-11 13:11:08 -08:00
jr c, .MailboxFull
ld hl, .sentmailtopctext
call MenuTextBoxBackup
jr .done
.MailboxFull
ld hl, .mailboxfulltext
call MenuTextBoxBackup
jr .done
.RemoveMailToBag
ld hl, .mailwilllosemessagetext
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .done
call GetPartyItemLocation
ld a, [hl]
ld [CurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
jr nc, .BagIsFull
call GetPartyItemLocation
ld [hl], $0
call GetCurNick
ld hl, .tookmailfrommontext
call MenuTextBoxBackup
jr .done
.BagIsFull
ld hl, .bagfulltext
call MenuTextBoxBackup
jr .done
.done
ld a, $3
ret
; 12dc9
.MenuDataHeader: ; 0x12dc9
db $40 ; flags
db 10, 12 ; start coords
db 17, 19 ; end coords
dw .MenuData2
db 1 ; default option
; 0x12dd1
.MenuData2: ; 0x12dd1
db $80 ; flags
db 3 ; items
db "READ@"
db "TAKE@"
db "QUIT@"
; 0x12de2
.mailwilllosemessagetext: ; 0x12de2
; The MAIL will lose its message. OK?
text_jump UnknownText_0x1c1c22
db "@"
; 0x12de7
.tookmailfrommontext: ; 0x12de7
; MAIL detached from <POKEMON>.
text_jump UnknownText_0x1c1c47
db "@"
; 0x12dec
.bagfulltext: ; 0x12dec
; There's no space for removing MAIL.
text_jump UnknownText_0x1c1c62
db "@"
; 0x12df1
.sendmailtopctext: ; 0x12df1
; Send the removed MAIL to your PC?
text_jump UnknownText_0x1c1c86
db "@"
; 0x12df6
.mailboxfulltext: ; 0x12df6
; Your PC's MAILBOX is full.
text_jump UnknownText_0x1c1ca9
db "@"
; 0x12dfb
.sentmailtopctext: ; 0x12dfb
; The MAIL was sent to your PC.
text_jump UnknownText_0x1c1cc4
db "@"
; 0x12e00
OpenPartyStats: ; 12e00
call LoadStandardMenuDataHeader
call ClearSprites
; PartyMon
xor a
ld [MonType], a
call LowVolume
predef StatsScreenInit
call MaxVolume
call Call_ExitMenu
ld a, 0
ret
; 12e1b
MonMenu_Cut: ; 12e1b
callba CutFunction
ld a, [wd0ec]
cp $1
jr nz, .asm_12e2d
ld b, $4
ld a, $2
ret
.asm_12e2d
ld a, $3
ret
; 12e30
MonMenu_Fly: ; 12e30
callba FlyFunction
ld a, [wd0ec]
cp $2
jr z, .asm_12e4c
cp $0
jr z, .asm_12e4f
callba MobileFn_1060b5
ld b, $4
ld a, $2
ret
.asm_12e4c
ld a, $3
ret
.asm_12e4f
ld a, $0
ret
.asm_12e52
ld a, $1
ret
; 12e55
MonMenu_Flash: ; 12e55
callba Functionc8ac
ld a, [wd0ec]
cp $1
jr nz, .asm_12e67
ld b, $4
ld a, $2
ret
.asm_12e67
ld a, $3
ret
; 12e6a
MonMenu_Strength: ; 12e6a
callba StrengthFunction
ld a, [wd0ec]
cp $1
jr nz, .asm_12e7c
ld b, $4
ld a, $2
ret
.asm_12e7c
ld a, $3
ret
; 12e7f
MonMenu_Whirlpool: ; 12e7f
callba WhirlpoolFunction
ld a, [wd0ec]
cp $1
jr nz, .asm_12e91
ld b, $4
ld a, $2
ret
.asm_12e91
ld a, $3
ret
; 12e94
MonMenu_Waterfall: ; 12e94
callba Functioncade
ld a, [wd0ec]
cp $1
jr nz, .asm_12ea6
ld b, $4
ld a, $2
ret
.asm_12ea6
ld a, $3
ret
; 12ea9
MonMenu_Teleport: ; 12ea9
callba TeleportFunction
ld a, [wd0ec]
and a
jr z, .asm_12eba
ld b, $4
ld a, $2
ret
.asm_12eba
ld a, $3
ret
; 12ebd
MonMenu_Surf: ; 12ebd
callba SurfFunction
ld a, [wd0ec]
and a
jr z, .asm_12ece
ld b, $4
ld a, $2
ret
.asm_12ece
ld a, $3
ret
; 12ed1
MonMenu_Dig: ; 12ed1
callba DigFunction
ld a, [wd0ec]
cp $1
jr nz, .asm_12ee3
ld b, $4
ld a, $2
ret
.asm_12ee3
ld a, $3
ret
; 12ee6
MonMenu_Softboiled_MilkDrink: ; 12ee6
call Function12f05
jr nc, .asm_12ef3
callba Functionf3df
jr .asm_12ef9
.asm_12ef3
ld hl, UnknownText_0x12f00
call PrintText
.asm_12ef9
xor a
ld [PartyMenuActionText], a
ld a, $3
ret
; 12f00
UnknownText_0x12f00: ; 0x12f00
; Not enough HP!
text_jump UnknownText_0x1c1ce3
db "@"
; 0x12f05
Function12f05: ; 12f05
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
ld [hDividend + 0], a
ld a, [hl]
ld [hDividend + 1], a
ld a, $5
ld [hDivisor], a
ld b, $2
call Divide
ld a, MON_HP + 1
call GetPartyParamLocation
ld a, [hQuotient + 2]
sub [hl]
dec hl
ld a, [hQuotient + 1]
sbc [hl]
ret
; 12f26
MonMenu_Headbutt: ; 12f26
callba HeadbuttFunction
ld a, [wd0ec]
cp $1
jr nz, .asm_12f38
ld b, $4
ld a, $2
ret
.asm_12f38
ld a, $3
ret
; 12f3b
MonMenu_RockSmash: ; 12f3b
callba RockSmashFunction
ld a, [wd0ec]
cp $1
jr nz, .asm_12f4d
ld b, $4
ld a, $2
ret
.asm_12f4d
ld a, $3
ret
; 12f50
MonMenu_SweetScent: ; 12f50
2015-11-11 20:38:57 -08:00
callba SweetScentFromMenu
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
; 12f5b
Function12f5b: ; 12f5b
ld hl, Options
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call LoadFontsBattleExtra
call Function12f73
pop bc
ld a, b
ld [Options], a
push af
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
pop af
ret
; 12f73
Function12f73: ; 12f73
call SetUpMoveScreenBG
ld de, Unknown_12fb2
call Function1bb1
call Function131ef
ld hl, wcfa5
set 6, [hl]
jr Function12f93
Function12f86: ; 12f86
call Function1bd3
bit 1, a
jp nz, Function12f9f
bit 0, a
jp nz, Function12f9c
Function12f93: ; 12f93
call PrepareToPlaceMoveData
call PlaceMoveData
jp Function12f86
; 12f9c
Function12f9c: ; 12f9c
and a
jr Function12fa0
Function12f9f: ; 12f9f
scf
Function12fa0: ; 12fa0
push af
xor a
ld [wd0e3], a
ld hl, wcfa5
res 6, [hl]
call ClearSprites
call ClearTileMap
pop af
ret
; 12fb2
Unknown_12fb2: ; 12fb2
db $03, $01, $03, $01, $40, $00, $20, $c3
; 12fba
ManagePokemonMoves: ; 12fba
ld a, [CurPartySpecies]
cp EGG
jr z, .egg
ld hl, Options
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call MoveScreenLoop
pop af
ld [Options], a
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
.egg
ld a, $0
ret
; 12fd5
MoveScreenLoop: ; 12fd5
ld a, [CurPartyMon]
inc a
ld [wd0d8], a
call SetUpMoveScreenBG
call Function132d3
ld de, Unknown_13163
call Function1bb1
.loop
call Function131ef
ld hl, wcfa5
set 6, [hl]
jr .skip_joy
.joy_loop
call Function1bd3
bit 1, a
jp nz, .b_button
bit 0, a
jp nz, .a_button
bit 4, a
jp nz, .d_right
bit 5, a
jp nz, .d_left
.skip_joy
call PrepareToPlaceMoveData
ld a, [wMoveSwapBuffer]
and a
jr nz, .moving_move
call PlaceMoveData
jp .joy_loop
.moving_move
ld a, " "
hlcoord 1, 11
ld bc, 5
call ByteFill
hlcoord 1, 12
lb bc, 5, SCREEN_WIDTH - 2
call ClearBox
hlcoord 1, 12
ld de, String_1316b
call PlaceString
jp .joy_loop
.b_button: ; 13038
call PlayClickSFX
call WaitSFX
ld a, [wMoveSwapBuffer]
and a
jp z, .exit
ld a, [wMoveSwapBuffer]
ld [MenuSelection2], a
xor a
ld [wMoveSwapBuffer], a
hlcoord 1, 2
lb bc, 8, SCREEN_WIDTH - 2
call ClearBox
jp .loop
; 1305b
.d_right: ; 1305b
ld a, [wMoveSwapBuffer]
and a
jp nz, .joy_loop
ld a, [CurPartyMon]
ld b, a
push bc
call .cycle_right
pop bc
ld a, [CurPartyMon]
cp b
jp z, .joy_loop
jp MoveScreenLoop
.d_left: ; 13075
ld a, [wMoveSwapBuffer]
and a
jp nz, .joy_loop
ld a, [CurPartyMon]
ld b, a
push bc
call .cycle_left
pop bc
ld a, [CurPartyMon]
cp b
jp z, .joy_loop
jp MoveScreenLoop
.cycle_right
ld a, [CurPartyMon]
inc a
ld [CurPartyMon], a
ld c, a
ld b, 0
ld hl, PartySpecies
add hl, bc
ld a, [hl]
cp -1
jr z, .cycle_left
cp EGG
ret nz
jr .cycle_right
.cycle_left
ld a, [CurPartyMon]
and a
ret z
.cycle_left_loop
ld a, [CurPartyMon]
dec a
ld [CurPartyMon], a
ld c, a
ld b, 0
ld hl, PartySpecies
add hl, bc
ld a, [hl]
cp EGG
ret nz
ld a, [CurPartyMon]
and a
jr z, .cycle_right
jr .cycle_left_loop
; 130c6
.a_button: ; 130c6
call PlayClickSFX
call WaitSFX
ld a, [wMoveSwapBuffer]
and a
jr nz, .place_move
ld a, [MenuSelection2]
ld [wMoveSwapBuffer], a
call Function1bee
jp .moving_move
.place_move
ld hl, PartyMon1Moves
ld bc, PARTYMON_STRUCT_LENGTH
ld a, [CurPartyMon]
call AddNTimes
push hl
call .copy_move
pop hl
ld bc, $15
add hl, bc
call .copy_move
ld a, [wBattleMode]
jr z, .swap_moves
ld hl, BattleMonMoves
ld bc, $20
ld a, [CurPartyMon]
call AddNTimes
push hl
call .copy_move
pop hl
ld bc, 6
add hl, bc
call .copy_move
.swap_moves
ld de, SFX_SWITCH_POKEMON
call PlaySFX
call WaitSFX
ld de, SFX_SWITCH_POKEMON
call PlaySFX
call WaitSFX
hlcoord 1, 2
lb bc, 8, 18
call ClearBox
hlcoord 10, 10
lb bc, 1, 9
call ClearBox
jp .loop
; 1313a
.copy_move: ; 1313a
push hl
ld a, [MenuSelection2]
dec a
ld c, a
ld b, $0
add hl, bc
ld d, h
ld e, l
pop hl
ld a, [wMoveSwapBuffer]
dec a
ld c, a
ld b, $0
add hl, bc
ld a, [de]
ld b, [hl]
ld [hl], a
ld a, b
ld [de], a
ret
; 13154
.exit: ; 13154
xor a
ld [wMoveSwapBuffer], a
ld hl, wcfa5
res 6, [hl]
call ClearSprites
jp ClearTileMap
; 13163
Unknown_13163: ; 13163
db $03, $01, $03, $01, $40, $00, $20, $f3
; 1316b
String_1316b: ; 1316b
db "Where?@"
; 13172
SetUpMoveScreenBG: ; 13172
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
call ClearTileMap
call ClearSprites
xor a
ld [hBGMapMode], a
callba Functionfb571
callba InefficientlyClear121BytesAtwc300
ld a, [CurPartyMon]
ld e, a
ld d, $0
ld hl, PartySpecies
add hl, de
ld a, [hl]
ld [wd265], a
ld e, $2
callba Function8e83f
hlcoord 0, 1
ld b, 9
ld c, 18
call TextBox
hlcoord 0, 11
ld b, 5
ld c, 18
call TextBox
hlcoord 2, 0
lb bc, 2, 3
call ClearBox
xor a
ld [MonType], a
ld hl, PartyMonNicknames
ld a, [CurPartyMon]
call GetNick
hlcoord 5, 1
call PlaceString
push bc
callba CopyPkmnToTempMon
pop hl
call PrintLevel
ld hl, PlayerHPPal
call SetHPPal
ld b, $e
call GetSGBLayout
hlcoord 16, 0
lb bc, 1, 3
jp ClearBox
; 131ef
Function131ef: ; 131ef
xor a
ld [hBGMapMode], a
ld [wMoveSwapBuffer], a
ld [MonType], a
predef CopyPkmnToTempMon
ld hl, TempMonMoves
ld de, wListMoves_MoveIndicesBuffer
ld bc, NUM_MOVES
call CopyBytes
ld a, SCREEN_WIDTH * 2
ld [Buffer1], a
hlcoord 2, 3
predef ListMoves
hlcoord 10, 4
predef Function50c50
call WaitBGMap
call SetPalettes
ld a, [wd0eb]
inc a
ld [wcfa3], a
hlcoord 0, 11
ld b, 5
ld c, 18
jp TextBox
; 13235
PrepareToPlaceMoveData: ; 13235
ld hl, PartyMon1Moves
ld bc, PARTYMON_STRUCT_LENGTH
ld a, [CurPartyMon]
call AddNTimes
ld a, [MenuSelection2]
dec a
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
ld [CurMove], a
hlcoord 1, 12
lb bc, 5, 18
jp ClearBox
; 13256
PlaceMoveData: ; 13256
xor a
ld [hBGMapMode], a
hlcoord 0, 10
ld de, String_132ba
call PlaceString
hlcoord 0, 11
ld de, String_132c2
call PlaceString
hlcoord 12, 12
ld de, String_132ca
call PlaceString
ld a, [CurMove]
ld b, a
hlcoord 2, 12
predef PrintMoveType
ld a, [CurMove]
dec a
ld hl, Moves + MOVE_POWER
ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
hlcoord 16, 12
cp 2
jr c, .no_power
ld [wd265], a
ld de, wd265
lb bc, 1, 3
call PrintNum
jr .description
.no_power
ld de, String_132cf
call PlaceString
.description
hlcoord 1, 14
predef PrintMoveDesc
ld a, $1
ld [hBGMapMode], a
ret
; 132ba
String_132ba: ; 132ba
db "┌─────┐@"
; 132c2
String_132c2: ; 132c2
db "│TYPE/└@"
; 132ca
String_132ca: ; 132ca
db "ATK/@"
; 132cf
String_132cf: ; 132cf
db "---@"
; 132d3
Function132d3: ; 132d3
call Function132da
call Function132fe
ret
; 132da
Function132da: ; 132da
ld a, [CurPartyMon]
and a
ret z
ld c, a
ld e, a
ld d, 0
ld hl, PartyCount
add hl, de
.loop
ld a, [hl]
and a
jr z, .prev
cp EGG
jr z, .prev
cp NUM_POKEMON + 1
jr c, .legal
.prev
dec hl
dec c
jr nz, .loop
ret
.legal
hlcoord 16, 0
ld [hl], "◀"
ret
; 132fe
Function132fe: ; 132fe
ld a, [CurPartyMon]
inc a
ld c, a
ld a, [PartyCount]
cp c
ret z
ld e, c
ld d, 0
ld hl, PartySpecies
add hl, de
.loop
ld a, [hl]
cp -1
ret z
and a
jr z, .next
cp EGG
jr z, .next
cp NUM_POKEMON + 1
jr c, .legal
.next
inc hl
jr .loop
.legal
hlcoord 18, 0
ld [hl], "▶"
ret
; 13327