pokecrystal-board/mobile/mobile_12_2.asm
2022-08-31 18:03:49 -04:00

931 lines
12 KiB
NASM

MobileCheckOwnMonAnywhere:
; Like CheckOwnMonAnywhere, but only checks for species.
; OT/ID don't matter.
; inputs:
; [wScriptVar] should contain the species we're looking for.
; outputs:
; sets carry if monster matches species.
; If there are no monsters in the party,
; the player must not own any yet.
ld a, [wPartyCount]
and a
ret z
ld d, a
ld e, 0
ld hl, wPartyMon1Species
ld bc, wPartyMonOTs
; Run .CheckMatch on each Pokémon in the party.
.partymon
call .CheckMatch
ret c
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
pop bc
call .AdvanceOTName
dec d
jr nz, .partymon
; Run .CheckMatch on each Pokémon in the PC.
ld a, BANK(sBoxCount)
call OpenSRAM
ld a, [sBoxCount]
and a
jr z, .boxes
ld d, a
ld hl, sBoxMon1Species
ld bc, sBoxMonOTs
.openboxmon
call .CheckMatch
jr nc, .loop
call CloseSRAM
ret
.loop
push bc
ld bc, BOXMON_STRUCT_LENGTH
add hl, bc
pop bc
call .AdvanceOTName
dec d
jr nz, .openboxmon
; Run .CheckMatch on each monster in the other 13 PC boxes.
.boxes
call CloseSRAM
ld c, 0
.box
; Don't search the current box again.
ld a, [wCurBox]
and $f
cp c
jr z, .loopbox
; Load the box.
ld hl, .BoxAddresses
ld b, 0
add hl, bc
add hl, bc
add hl, bc
ld a, [hli]
call OpenSRAM
ld a, [hli]
ld h, [hl]
ld l, a
; Number of monsters in the box
ld a, [hl]
and a
jr z, .loopbox
push bc
push hl
ld de, sBoxMons - sBoxCount
add hl, de
ld d, h
ld e, l
pop hl
push de
ld de, sBoxMonOTs - sBoxCount
add hl, de
ld b, h
ld c, l
pop hl
ld d, a
.boxmon
call .CheckMatch
jr nc, .loopboxmon
pop bc
call CloseSRAM
ret
.loopboxmon
push bc
ld bc, BOXMON_STRUCT_LENGTH
add hl, bc
pop bc
call .AdvanceOTName
dec d
jr nz, .boxmon
pop bc
.loopbox
inc c
ld a, c
cp NUM_BOXES
jr c, .box
call CloseSRAM
and a
ret
.CheckMatch:
; Check if a Pokémon is of a specific species.
; We compare the species we are looking for in
; [wScriptVar] to the species we have in [hl].
; Sets carry flag if species matches.
push bc
push hl
push de
ld d, b
ld e, c
; check species
ld a, [wScriptVar]
ld b, [hl]
cp b
jr nz, .no_match
jr .match
.no_match
pop de
pop hl
pop bc
and a
ret
.match
pop de
pop hl
pop bc
scf
ret
.BoxAddresses:
table_width 3, MobileCheckOwnMonAnywhere.BoxAddresses
for n, 1, NUM_BOXES + 1
dba sBox{d:n}
endr
assert_table_length NUM_BOXES
.AdvanceOTName:
push hl
ld hl, NAME_LENGTH
add hl, bc
ld b, h
ld c, l
pop hl
ret
UnusedFindItemInPCOrBag:
ld a, [wScriptVar]
ld [wCurItem], a
ld hl, wNumPCItems
call CheckItem
jr c, .found
ld a, [wScriptVar]
ld [wCurItem], a
ld hl, wNumItems
call CheckItem
jr c, .found
xor a
ld [wScriptVar], a
ret
.found
ld a, 1
ld [wScriptVar], a
ret
Function4a94e:
call FadeToMenu
ld a, -1
ld hl, wd002
ld bc, 3
call ByteFill
xor a
ld [wd018], a
ld [wd019], a
ld b, SCGB_PACKPALS
call GetSGBLayout
call SetPalettes
call Function4aa22
jr c, .asm_4a985
jr z, .asm_4a9a1
jr .asm_4a97b
.asm_4a974
call Function4aa25
jr c, .asm_4a985
jr z, .asm_4a9a1
.asm_4a97b
call Function4ac58
ld hl, wd019
res 1, [hl]
jr .asm_4a974
.asm_4a985
ld a, [wd018]
and a
jr nz, .asm_4a990
call Function4aba8
jr c, .asm_4a974
.asm_4a990
call CloseSubmenu
ld hl, wd002
ld a, -1
ld bc, 3
call ByteFill
scf
jr .asm_4a9af
.asm_4a9a1
call Function4a9c3
jr c, .asm_4a9b0
call Function4a9d7
jr c, .asm_4a974
call CloseSubmenu
and a
.asm_4a9af
ret
.asm_4a9b0
ld de, SFX_WRONG
call PlaySFX
ld hl, MobilePickThreeMonForBattleText
call PrintText
jr .asm_4a974
MobilePickThreeMonForBattleText:
text_far _MobilePickThreeMonForBattleText
text_end
Function4a9c3:
ld hl, wd002
ld a, $ff
cp [hl]
jr z, .asm_4a9d5
inc hl
cp [hl]
jr z, .asm_4a9d5
inc hl
cp [hl]
jr z, .asm_4a9d5
and a
ret
.asm_4a9d5
scf
ret
Function4a9d7:
ld a, [wd002]
ld hl, wPartyMonNicknames
call GetNickname
ld h, d
ld l, e
ld de, wMobileParticipant1Nickname
ld bc, NAME_LENGTH_JAPANESE
call CopyBytes
ld a, [wd003]
ld hl, wPartyMonNicknames
call GetNickname
ld h, d
ld l, e
ld de, wMobileParticipant2Nickname
ld bc, NAME_LENGTH_JAPANESE
call CopyBytes
ld a, [wd004]
ld hl, wPartyMonNicknames
call GetNickname
ld h, d
ld l, e
ld de, wMobileParticipant3Nickname
ld bc, NAME_LENGTH_JAPANESE
call CopyBytes
ld hl, MobileUseTheseThreeMonText
call PrintText
call YesNoBox
ret
MobileUseTheseThreeMonText:
text_far _MobileUseTheseThreeMonText
text_end
Function4aa22:
call ClearBGPalettes
Function4aa25:
farcall LoadPartyMenuGFX
farcall InitPartyMenuWithCancel
call Function4aad3
Function4aa34:
ld a, PARTYMENUACTION_MOBILE
ld [wPartyMenuActionText], a
farcall WritePartyMenuTilemap
xor a
ld [wPartyMenuActionText], a
farcall PrintPartyMenuText
call Function4aab6
call WaitBGMap
call SetPalettes
call DelayFrame
call Function4ab1a
jr z, .asm_4aa66
push af
call Function4aafb
jr c, .asm_4aa67
call Function4ab06
jr c, .asm_4aa67
pop af
.asm_4aa66
ret
.asm_4aa67
ld hl, wd019
set 1, [hl]
pop af
ret
Function4aa6e: ; unreferenced
pop af
ld de, SFX_WRONG
call PlaySFX
call WaitSFX
jr Function4aa34
Function4aa7a:
ld hl, wd002
ld d, $3
.loop
ld e, PARTY_LENGTH
ld a, [hli]
push de
push hl
cp -1
jr z, .done
ld hl, wSpriteAnimationStructs
inc a
ld d, a
.inner_loop
ld a, [hl]
and a
jr z, .next
cp d
jr z, .same_as_d
jr .next
ld a, $3
jr .proceed
.same_as_d
ld a, $2
.proceed
push hl
ld c, l
ld b, h
ld hl, $2
add hl, bc
ld [hl], a
pop hl
.next
ld bc, $10
add hl, bc
dec e
jr nz, .inner_loop
pop hl
pop de
dec d
jr nz, .loop
jr .finished
.done
pop hl
pop de
.finished
ret
Function4aab6:
ld hl, wd002
ld d, $3
.loop
ld a, [hli]
cp -1
jr z, .done
push de
push hl
hlcoord 0, 1
ld bc, $28
call AddNTimes
ld [hl], $ec
pop hl
pop de
dec d
jr nz, .loop
.done
ret
Function4aad3:
ld hl, wPartyCount
ld a, [hli]
and a
ret z ; Nothing in your party
ld c, a
xor a
ldh [hObjectStructIndex], a
.loop
push bc
push hl
ld e, MONICON_PARTYMENU
farcall LoadMenuMonIcon
ldh a, [hObjectStructIndex]
inc a
ldh [hObjectStructIndex], a
pop hl
pop bc
dec c
jr nz, .loop
call Function4aa7a
farcall PlaySpriteAnimations
ret
Function4aafb:
ld a, [wCurPartySpecies]
cp EGG
jr z, .egg
and a
ret
.egg
scf
ret
Function4ab06:
ld a, [wCurPartyMon]
ld bc, PARTYMON_STRUCT_LENGTH
ld hl, wPartyMon1HP
call AddNTimes
ld a, [hli]
ld b, a
ld a, [hl]
or b
jr nz, .NotFainted
scf
.NotFainted:
ret
Function4ab1a:
.asm_4ab1a
ld a, $fb
ld [wMenuJoypadFilter], a
ld a, $26
ld [w2DMenuCursorOffsets], a
ld a, $2
ld [w2DMenuNumCols], a
call Function4adf7
call StaticMenuJoypad
call Function4abc3
jr c, .asm_4ab1a
push af
call Function4ab99
call nc, PlaceHollowCursor
pop af
bit 1, a
jr nz, .asm_4ab6d
ld a, [wPartyCount]
inc a
ld b, a
ld a, [wMenuCursorY]
ld [wPartyMenuCursor], a
cp b
jr z, .asm_4ab7e
ld a, [wMenuCursorY]
dec a
ld [wCurPartyMon], a
ld c, a
ld b, 0
ld hl, wPartySpecies
add hl, bc
ld a, [hl]
ld [wCurPartySpecies], a
ld de, SFX_READ_TEXT_2
call PlaySFX
call WaitSFX
ld a, $1
and a
ret
.asm_4ab6d
ld a, [wMenuCursorY]
ld [wPartyMenuCursor], a
.asm_4ab73
ld de, SFX_READ_TEXT_2
call PlaySFX
call WaitSFX
scf
ret
.asm_4ab7e
ld a, $1
ld [wd018], a
ld a, [wMenuCursorX]
cp $2
jr z, .asm_4ab73
ld de, SFX_READ_TEXT_2
call PlaySFX
call WaitSFX
xor a
ld [wd018], a
and a
ret
Function4ab99:
bit 1, a
jr z, .asm_4aba6
ld a, [wd002]
cp $ff
jr z, .asm_4aba6
scf
ret
.asm_4aba6
and a
ret
Function4aba8:
ld hl, wd004
ld a, [hl]
cp $ff
jr nz, .asm_4abbe
dec hl
ld a, [hl]
cp $ff
jr nz, .asm_4abbe
dec hl
ld a, [hl]
cp $ff
jr nz, .asm_4abbe
and a
ret
.asm_4abbe
ld a, $ff
ld [hl], a
scf
ret
Function4abc3:
bit 3, a
jr z, .asm_4abd5
ld a, [wPartyCount]
inc a
ld [wMenuCursorY], a
ld a, $1
ld [wMenuCursorX], a
jr .asm_4ac29
.asm_4abd5
bit 6, a
jr z, .asm_4abeb
ld a, [wMenuCursorY]
ld [wMenuCursorY], a
and a
jr nz, .asm_4ac29
ld a, [wPartyCount]
inc a
ld [wMenuCursorY], a
jr .asm_4ac29
.asm_4abeb
bit 7, a
jr z, .asm_4ac08
ld a, [wMenuCursorY]
ld [wMenuCursorY], a
ld a, [wPartyCount]
inc a
inc a
ld b, a
ld a, [wMenuCursorY]
cp b
jr nz, .asm_4ac29
ld a, $1
ld [wMenuCursorY], a
jr .asm_4ac29
.asm_4ac08
bit 4, a
jr nz, .asm_4ac10
bit 5, a
jr z, .asm_4ac56
.asm_4ac10
ld a, [wMenuCursorY]
ld b, a
ld a, [wPartyCount]
inc a
cp b
jr nz, .asm_4ac29
ld a, [wMenuCursorX]
cp $1
jr z, .asm_4ac26
ld a, $1
jr .asm_4ac29
.asm_4ac26
ld [wMenuCursorX], a
.asm_4ac29
hlcoord 0, 1
lb bc, 13, 1
call ClearBox
call Function4aab6
ld a, [wPartyCount]
hlcoord 6, 1
.asm_4ac3b
ld bc, $28
add hl, bc
dec a
jr nz, .asm_4ac3b
ld [hl], $7f
ld a, [wMenuCursorY]
ld b, a
ld a, [wPartyCount]
inc a
cp b
jr z, .asm_4ac54
ld a, $1
ld [wMenuCursorX], a
.asm_4ac54
scf
ret
.asm_4ac56
and a
ret
Function4ac58:
lb bc, 2, 18
hlcoord 1, 15
call ClearBox
farcall FreezeMonIcons
ld hl, MenuHeader_0x4aca2
call LoadMenuHeader
ld hl, wd019
bit 1, [hl]
jr z, .asm_4ac89
hlcoord 11, 13
ld b, $3
ld c, $7
call Textbox
hlcoord 13, 14
ld de, String_4ada7
call PlaceString
jr .asm_4ac96
.asm_4ac89
hlcoord 11, 9
ld b, $7
ld c, $7
call Textbox
call Function4ad68
.asm_4ac96
ld a, $1
ldh [hBGMapMode], a
call Function4acaa
call ExitMenu
and a
ret
MenuHeader_0x4aca2:
db MENU_BACKUP_TILES ; flags
menu_coords 11, 9, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw NULL
db 1 ; default option
Function4acaa:
.asm_4acaa
ld a, $a0
ld [wMenuDataFlags], a
ld a, [wd019]
bit 1, a
jr z, .asm_4acc2
ld a, $2
ld [wMenuDataItems], a
ld a, $c
ld [wMenuBorderTopCoord], a
jr .asm_4accc
.asm_4acc2
ld a, $4
ld [wMenuDataItems], a
ld a, $8
ld [wMenuBorderTopCoord], a
.asm_4accc
ld a, $b
ld [wMenuBorderLeftCoord], a
ld a, $1
ld [wMenuCursorPosition], a
call InitVerticalMenuCursor
ld hl, w2DMenuFlags1
set 6, [hl]
call StaticMenuJoypad
ld de, SFX_READ_TEXT_2
call PlaySFX
ldh a, [hJoyPressed]
bit 0, a
jr nz, .asm_4acf4
bit 1, a
jr nz, .asm_4acf3
jr .asm_4acaa
.asm_4acf3
ret
.asm_4acf4
ld a, [wd019]
bit 1, a
jr nz, .asm_4ad0e
ld a, [wMenuCursorY]
cp $1
jr z, Function4ad17
cp $2
jp z, Function4ad56
cp $3
jp z, Function4ad60
jr .asm_4acf3
.asm_4ad0e
ld a, [wMenuCursorY]
cp $1
jr z, Function4ad56
jr .asm_4acf3
Function4ad17:
call Function4adb2
jr z, .asm_4ad4a
ld hl, wd002
ld a, $ff
cp [hl]
jr z, .asm_4ad39
inc hl
cp [hl]
jr z, .asm_4ad39
inc hl
cp [hl]
jr z, .asm_4ad39
ld de, SFX_WRONG
call WaitPlaySFX
ld hl, MobileOnlyThreeMonMayEnterText
call PrintText
ret
.asm_4ad39
ld a, [wCurPartyMon]
ld [hl], a
call Function4a9c3
ret c
ld a, [wd019]
set 0, a
ld [wd019], a
ret
.asm_4ad4a
ld a, $ff
ld [hl], a
call Function4adc2
ret
MobileOnlyThreeMonMayEnterText:
text_far _MobileOnlyThreeMonMayEnterText
text_end
Function4ad56:
farcall OpenPartyStats
call WaitBGMap2
ret
Function4ad60:
farcall ManagePokemonMoves
ret
Function4ad67: ; unreferenced
ret
Function4ad68:
hlcoord 13, 12
ld de, String_4ad88
call PlaceString
call Function4adb2
jr c, .asm_4ad7e
hlcoord 13, 10
ld de, String_4ada0
jr .asm_4ad84
.asm_4ad7e
hlcoord 13, 10
ld de, String_4ad9a
.asm_4ad84
call PlaceString
ret
String_4ad88:
db "つよさをみる"
next "つかえるわざ"
next "もどる@"
String_4ad9a:
db "さんかする@"
String_4ada0:
db "さんかしない@"
String_4ada7:
db "つよさをみる"
next "もどる@" ; BACK
Function4adb2:
ld hl, wd002
ld a, [wCurPartyMon]
cp [hl]
ret z
inc hl
cp [hl]
ret z
inc hl
cp [hl]
ret z
scf
ret
Function4adc2:
ld a, [wd002]
cp $ff
jr nz, .skip
ld a, [wd003]
cp $ff
jr nz, .skip2
ld a, [wd004]
ld [wd002], a
ld a, $ff
ld [wd004], a
jr .skip
.skip2
ld [wd002], a
ld a, $ff
ld [wd003], a
.skip
ld a, [wd003]
cp $ff
ret nz
ld b, a
ld a, [wd004]
ld [wd003], a
ld a, b
ld [wd004], a
ret
Function4adf7:
ld a, [wd019]
bit 0, a
ret z
ld a, [wPartyCount]
inc a
ld [wMenuCursorY], a
ld a, $1
ld [wMenuCursorX], a
ld a, [wd019]
res 0, a
ld [wd019], a
ret