pokecrystal/mobile/mobile_12_2.asm

942 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
dba sBox1
dba sBox2
dba sBox3
dba sBox4
dba sBox5
dba sBox6
dba sBox7
dba sBox8
dba sBox9
dba sBox10
dba sBox11
dba sBox12
dba sBox13
dba sBox14
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