diff options
Diffstat (limited to 'engine/pokemon')
-rw-r--r-- | engine/pokemon/bills_pc.asm | 16 | ||||
-rw-r--r-- | engine/pokemon/breeding.asm | 8 | ||||
-rw-r--r-- | engine/pokemon/caught_data.asm | 4 | ||||
-rw-r--r-- | engine/pokemon/correct_party_errors.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/evolve.asm | 20 | ||||
-rw-r--r-- | engine/pokemon/learn.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/mail.asm | 6 | ||||
-rw-r--r-- | engine/pokemon/mail_2.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/mon_menu.asm | 1465 | ||||
-rw-r--r-- | engine/pokemon/mon_stats.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/mon_submenu.asm | 290 | ||||
-rw-r--r-- | engine/pokemon/move_mon.asm | 26 | ||||
-rw-r--r-- | engine/pokemon/move_mon_wo_mail.asm | 22 | ||||
-rw-r--r-- | engine/pokemon/party_menu.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/print_move_description.asm | 14 | ||||
-rw-r--r-- | engine/pokemon/stats_screen.asm | 10 | ||||
-rw-r--r-- | engine/pokemon/switchpartymons.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/types.asm | 4 |
18 files changed, 1608 insertions, 289 deletions
diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm index 65621192d..f0ddc0ba8 100644 --- a/engine/pokemon/bills_pc.asm +++ b/engine/pokemon/bills_pc.asm @@ -1035,7 +1035,7 @@ PCMonInfo: cp -1 ret z - ld [wd265], a + ld [wTempSpecies], a hlcoord 1, 4 xor a ld b, 7 @@ -1057,7 +1057,7 @@ PCMonInfo: jr nz, .row call BillsPC_LoadMonStats - ld a, [wd265] + ld a, [wTempSpecies] ld [wCurPartySpecies], a ld [wCurSpecies], a ld hl, wTempMonDVs @@ -1068,7 +1068,7 @@ PCMonInfo: xor a ld [wBillsPC_MonHasMail], a ld a, [wCurPartySpecies] - ld [wd265], a + ld [wTempSpecies], a cp EGG ret z @@ -1676,9 +1676,9 @@ StatsScreenDPad: and a jr z, .did_nothing call BillsPC_GetSelectedPokemonSpecies - ld [wd265], a + ld [wTempSpecies], a call BillsPC_LoadMonStats - ld a, [wd265] + ld a, [wTempSpecies] ld [wCurPartySpecies], a ld [wCurSpecies], a ld hl, wTempMonDVs @@ -1893,7 +1893,7 @@ ReleasePKMN_ByePKMN: .skip_cry ld a, [wCurPartySpecies] - ld [wd265], a + ld [wTempSpecies], a call GetPokemonName hlcoord 1, 16 ld de, PCString_ReleasedPKMN @@ -2314,9 +2314,9 @@ BillsPC_PrintBoxCountAndCapacity: ld de, .Pokemon call PlaceString call GetBoxCount - ld [wd265], a + ld [wDeciramBuffer], a hlcoord 13, 11 - ld de, wd265 + ld de, wDeciramBuffer lb bc, 1, 2 call PrintNum ld de, .out_of_20 diff --git a/engine/pokemon/breeding.asm b/engine/pokemon/breeding.asm index 7e7f0e097..dfebcd9f9 100644 --- a/engine/pokemon/breeding.asm +++ b/engine/pokemon/breeding.asm @@ -81,7 +81,7 @@ CheckBreedmonCompatibility: .done ld a, c - ld [wd265], a + ld [wBreedingCompatibility], a ret .CheckDVs: @@ -250,7 +250,7 @@ HatchEggs: ld a, [wCurPartySpecies] dec de ld [de], a - ld [wd265], a + ld [wNamedObjectIndexBuffer], a ld [wCurSpecies], a call GetPokemonName xor a @@ -676,7 +676,7 @@ EggHatch_DoAnimFrame: ret EggHatch_AnimationSequence: - ld a, [wd265] + ld a, [wNamedObjectIndexBuffer] ld [wJumptableIndex], a ld a, [wCurSpecies] push af @@ -910,7 +910,7 @@ DayCareMonCompatibilityText: call CopyBytes call CheckBreedmonCompatibility pop bc - ld a, [wd265] + ld a, [wBreedingCompatibility] ld hl, .AllAlone cp -1 jr z, .done diff --git a/engine/pokemon/caught_data.asm b/engine/pokemon/caught_data.asm index 89d22fdf6..31cfe7e75 100644 --- a/engine/pokemon/caught_data.asm +++ b/engine/pokemon/caught_data.asm @@ -38,7 +38,7 @@ CheckPartyFullAfterContest: ld hl, wPlayerName call CopyBytes ld a, [wCurPartySpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, wStringBuffer1 ld de, wMonOrItemNameBuffer @@ -105,7 +105,7 @@ CheckPartyFullAfterContest: call CopyBytes callfar InsertPokemonIntoBox ld a, [wCurPartySpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName call GiveANickname_YesNo ld hl, wStringBuffer1 diff --git a/engine/pokemon/correct_party_errors.asm b/engine/pokemon/correct_party_errors.asm index 50a9f3562..717893b36 100644 --- a/engine/pokemon/correct_party_errors.asm +++ b/engine/pokemon/correct_party_errors.asm @@ -123,7 +123,7 @@ Unreferenced_CorrectPartyErrors: cp EGG ld hl, .TAMAGO jr z, .got_nickname - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, wStringBuffer1 .got_nickname diff --git a/engine/pokemon/evolve.asm b/engine/pokemon/evolve.asm index 571cff0b8..eb2645e00 100644 --- a/engine/pokemon/evolve.asm +++ b/engine/pokemon/evolve.asm @@ -99,7 +99,7 @@ EvolveAfterBattle_MasterLoop: ld de, wTempMonAttack ld hl, wTempMonDefense ld c, 2 - call StringCmp + call CompareBytes ld a, ATK_EQ_DEF jr z, .got_tyrogue_evo ld a, ATK_LT_DEF @@ -236,7 +236,7 @@ EvolveAfterBattle_MasterLoop: ld [wCurSpecies], a ld [wTempMonSpecies], a ld [wEvolutionNewSpecies], a - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName push hl @@ -293,15 +293,15 @@ EvolveAfterBattle_MasterLoop: call CopyBytes ld a, [wCurSpecies] - ld [wd265], a + ld [wTempSpecies], a xor a ld [wMonType], a call LearnLevelMoves - ld a, [wd265] + ld a, [wTempSpecies] dec a call SetSeenAndCaughtMon - ld a, [wd265] + ld a, [wTempSpecies] cp UNOWN jr nz, .skip_unown @@ -348,7 +348,7 @@ UpdateSpeciesNameIfNotNicknamed: ld a, [wCurSpecies] push af ld a, [wBaseDexNo] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName pop af ld [wCurSpecies], a @@ -369,7 +369,7 @@ UpdateSpeciesNameIfNotNicknamed: call AddNTimes push hl ld a, [wCurSpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, wStringBuffer1 pop de @@ -415,7 +415,7 @@ Text_WhatEvolving: db "@" LearnLevelMoves: - ld a, [wd265] + ld a, [wTempSpecies] ld [wCurPartySpecies], a dec a ld b, 0 @@ -466,7 +466,7 @@ LearnLevelMoves: .learn ld a, d ld [wPutativeTMHMMove], a - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetMoveName call CopyName1 predef LearnMove @@ -475,7 +475,7 @@ LearnLevelMoves: .done ld a, [wCurPartySpecies] - ld [wd265], a + ld [wTempSpecies], a ret FillMoves: diff --git a/engine/pokemon/learn.asm b/engine/pokemon/learn.asm index 20294c878..9031c6857 100644 --- a/engine/pokemon/learn.asm +++ b/engine/pokemon/learn.asm @@ -36,7 +36,7 @@ LearnMove: push hl push de - ld [wd265], a + ld [wNamedObjectIndexBuffer], a ld b, a ld a, [wBattleMode] diff --git a/engine/pokemon/mail.asm b/engine/pokemon/mail.asm index 359d2ac8e..2c66ab72a 100644 --- a/engine/pokemon/mail.asm +++ b/engine/pokemon/mail.asm @@ -149,7 +149,7 @@ CheckPokeMail:: ; Compare the mail message, byte for byte, with the expected message. ld a, MAIL_MSG_LENGTH - ld [wd265], a + ld [wTempByteValue], a .loop ld a, [de] ld c, a @@ -162,9 +162,9 @@ CheckPokeMail:: jr nz, .close_sram_return inc hl inc de - ld a, [wd265] + ld a, [wTempByteValue] dec a - ld [wd265], a + ld [wTempByteValue], a jr nz, .loop .done diff --git a/engine/pokemon/mail_2.asm b/engine/pokemon/mail_2.asm index 1cc776706..b5154187a 100644 --- a/engine/pokemon/mail_2.asm +++ b/engine/pokemon/mail_2.asm @@ -59,7 +59,7 @@ ReadAnyMail: .pressed_start ld a, [wJumptableIndex] push af - callfar PrintMail ; printer + callfar PrintMailAndExit ; printer pop af ld [wJumptableIndex], a jr .loop diff --git a/engine/pokemon/mon_menu.asm b/engine/pokemon/mon_menu.asm index 2d14bd603..985546845 100644 --- a/engine/pokemon/mon_menu.asm +++ b/engine/pokemon/mon_menu.asm @@ -1,290 +1,1305 @@ -INCLUDE "data/mon_menu.asm" - -MonSubmenu: - xor a - ld [hBGMapMode], a - call GetMonSubmenuItems - farcall FreezeMonIcons - ld hl, .MenuHeader - call LoadMenuHeader - call .GetTopCoord - call PopulateMonMenu - - ld a, 1 - ld [hBGMapMode], a - call MonMenuLoop - ld [wMenuSelection], a +HasNoItems: + ld a, [wNumItems] + and a + ret nz + ld a, [wNumKeyItems] + and a + ret nz + ld a, [wNumBalls] + and a + ret nz + ld hl, wTMsHMs + ld b, NUM_TMS + NUM_HMS +.loop + ld a, [hli] + and a + jr nz, .done + dec b + jr nz, .loop + scf + ret +.done + and a + ret +TossItemFromPC: + push de + call PartyMonItemName + farcall _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .key_item + ld hl, .TossHowMany + call MenuTextBox + farcall SelectQuantityToToss + push af + call CloseWindow call ExitMenu + pop af + jr c, .quit + ld hl, .ConfirmToss + call MenuTextBox + call YesNoBox + push af + call ExitMenu + pop af + jr c, .quit + pop hl + ld a, [wCurItemQuantity] + call TossItem + call PartyMonItemName + ld hl, .TossedThisMany + call MenuTextBox + call ExitMenu + and a ret -.MenuHeader: - db MENU_BACKUP_TILES ; flags - menu_coords 6, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 - dw 0 - db 1 ; default option +.key_item + call .CantToss +.quit + pop hl + scf + ret -.GetTopCoord: -; TopCoord = 1 + BottomCoord - 2 * (NumSubmenuItems + 1) - ld a, [wBuffer1] - inc a - add a - ld b, a - ld a, [wMenuBorderBottomCoord] - sub b - inc a - ld [wMenuBorderTopCoord], a - call MenuBox +.TossHowMany: + ; Toss out how many @ (S)? + text_jump UnknownText_0x1c1a90 + db "@" + +.ConfirmToss: + ; Throw away @ @ (S)? + text_jump UnknownText_0x1c1aad + db "@" + +.TossedThisMany: + ; Discarded @ (S). + text_jump UnknownText_0x1c1aca + db "@" + +.CantToss: + ld hl, .TooImportantToToss + call MenuTextBoxBackup ret -MonMenuLoop: -.loop - ld a, MENU_UNUSED_3 | MENU_BACKUP_TILES_2 ; flags - ld [wMenuDataFlags], a - ld a, [wBuffer1] ; items - ld [wMenuDataItems], a - call InitVerticalMenuCursor - ld hl, w2DMenuFlags1 - set 6, [hl] - call StaticMenuJoypad - ld de, SFX_READ_TEXT_2 - call PlaySFX - ld a, [hJoyPressed] - bit A_BUTTON_F, a - jr nz, .select - bit B_BUTTON_F, a - jr nz, .cancel - jr .loop +.TooImportantToToss: + ; That's too impor- tant to toss out! + text_jump UnknownText_0x1c1adf + db "@" -.cancel - ld a, MONMENUITEM_CANCEL +CantUseItem: + ld hl, CantUseItemText + call MenuTextBoxWaitButton ret -.select - ld a, [wMenuCursorY] - dec a - ld c, a - ld b, 0 - ld hl, wBuffer2 - add hl, bc - ld a, [hl] +CantUseItemText: + text_jump UnknownText_0x1c1b03 + db "@" + +PartyMonItemName: + ld a, [wCurItem] + ld [wNamedObjectIndexBuffer], a + call GetItemName + call CopyName1 ret -PopulateMonMenu: - call MenuBoxCoord2Tile - ld bc, 2 * SCREEN_WIDTH + 2 - add hl, bc - ld de, wBuffer2 -.loop - ld a, [de] - inc de - cp -1 - ret z - push de - push hl - call GetMonMenuString - pop hl - call PlaceString - ld bc, 2 * SCREEN_WIDTH - add hl, bc - pop de - jr .loop +CancelPokemonAction: + farcall InitPartyMenuWithCancel + farcall UnfreezeMonIcons + ld a, 1 + ret -GetMonMenuString: - ld hl, MonMenuOptions + 1 +PokemonActionSubmenu: + hlcoord 1, 15 + lb bc, 2, 18 + call ClearBox + farcall MonSubmenu + call GetCurNick + ld a, [wMenuSelection] + ld hl, .Actions ld de, 3 call IsInArray - dec hl - ld a, [hli] - cp MONMENU_MENUOPTION - jr z, .NotMove + jr nc, .nothing + inc hl - ld a, [hl] - ld [wd265], a - call GetMoveName + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.nothing + ld a, 0 ret -.NotMove: - inc hl - ld a, [hl] +.Actions: + dbw MONMENUITEM_CUT, MonMenu_Cut + dbw MONMENUITEM_FLY, MonMenu_Fly + dbw MONMENUITEM_SURF, MonMenu_Surf + dbw MONMENUITEM_STRENGTH, MonMenu_Strength + dbw MONMENUITEM_FLASH, MonMenu_Flash + dbw MONMENUITEM_WHIRLPOOL, MonMenu_Whirlpool + dbw MONMENUITEM_DIG, MonMenu_Dig + dbw MONMENUITEM_TELEPORT, MonMenu_Teleport + dbw MONMENUITEM_SOFTBOILED, MonMenu_Softboiled_MilkDrink + dbw MONMENUITEM_MILKDRINK, MonMenu_Softboiled_MilkDrink + dbw MONMENUITEM_HEADBUTT, MonMenu_Headbutt + dbw MONMENUITEM_WATERFALL, MonMenu_Waterfall + dbw MONMENUITEM_ROCKSMASH, MonMenu_RockSmash + dbw MONMENUITEM_SWEETSCENT, MonMenu_SweetScent + dbw MONMENUITEM_STATS, OpenPartyStats + dbw MONMENUITEM_SWITCH, SwitchPartyMons + dbw MONMENUITEM_ITEM, GiveTakePartyMonItem + dbw MONMENUITEM_CANCEL, CancelPokemonAction + dbw MONMENUITEM_MOVE, ManagePokemonMoves + dbw MONMENUITEM_MAIL, MonMailAction + +SwitchPartyMons: +; Don't try if there's nothing to switch! + ld a, [wPartyCount] + cp 2 + jr c, .DontSwitch + + ld a, [wCurPartyMon] + inc a + ld [wSwitchMon], a + + farcall HoldSwitchmonIcon + farcall InitPartyMenuNoCancel + + ld a, PARTYMENUACTION_MOVE + ld [wPartyMenuActionText], a + farcall WritePartyMenuTilemap + farcall PrintPartyMenuText + + hlcoord 0, 1 + ld bc, SCREEN_WIDTH * 2 + ld a, [wSwitchMon] dec a - ld hl, MonMenuOptionStrings - call GetNthString - ld d, h - ld e, l + call AddNTimes + ld [hl], "▷" + call WaitBGMap + call SetPalettes + call DelayFrame + + farcall PartyMenuSelect + bit 1, b + jr c, .DontSwitch + + farcall _SwitchPartyMons + + xor a + ld [wPartyMenuActionText], a + + farcall LoadPartyMenuGFX + farcall InitPartyMenuWithCancel + farcall InitPartyMenuGFX + + ld a, 1 + ret + +.DontSwitch: + xor a + ld [wPartyMenuActionText], a + call CancelPokemonAction ret -GetMonSubmenuItems: - call ResetMonSubmenu +GiveTakePartyMonItem: +; Eggs can't hold items! ld a, [wCurPartySpecies] cp EGG - jr z, .egg - ld a, [wLinkMode] - and a - jr nz, .skip_moves - ld a, MON_MOVES - call GetPartyParamLocation - ld d, h - ld e, l - ld c, NUM_MOVES + jr z, .cancel + + ld hl, GiveTakeItemMenuData + call LoadMenuHeader + call VerticalMenu + call ExitMenu + jr c, .cancel + + call GetCurNick + ld hl, wStringBuffer1 + ld de, wMonOrItemNameBuffer + ld bc, MON_NAME_LENGTH + call CopyBytes + ld a, [wMenuCursorY] + cp 1 + jr nz, .take + + call LoadStandardMenuHeader + call ClearPalettes + call .GiveItem + call ClearPalettes + call LoadFontsBattleExtra + call ExitMenu + ld a, 0 + ret + +.take + call TakePartyItem + ld a, 3 + ret + +.cancel + ld a, 3 + ret + +.GiveItem: + farcall DepositSellInitPackBuffers + .loop - push bc - push de - ld a, [de] + farcall DepositSellPack + + ld a, [wcf66] and a + jr z, .quit + + ld a, [wcf65] + cp 2 jr z, .next - push hl - call IsFieldMove - pop hl - jr nc, .next - call AddMonMenuItem + + call CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .next + + call TryGiveItemToPartymon + jr .quit .next - pop de - inc de - pop bc - dec c - jr nz, .loop + ld hl, CantBeHeldText + call MenuTextBoxBackup + jr .loop -.skip_moves - ld a, MONMENUITEM_STATS - call AddMonMenuItem - ld a, MONMENUITEM_SWITCH - call AddMonMenuItem - ld a, MONMENUITEM_MOVE - call AddMonMenuItem - ld a, [wLinkMode] +.quit + ret + +TryGiveItemToPartymon: + call SpeechTextBox + call PartyMonItemName + call GetPartyItemLocation + ld a, [hl] and a - jr nz, .skip2 + jr z, .give_item_to_mon + push hl - ld a, MON_ITEM - call GetPartyParamLocation - ld d, [hl] + ld d, a farcall ItemIsMail pop hl - ld a, MONMENUITEM_MAIL - jr c, .ok - ld a, MONMENUITEM_ITEM + jr c, .please_remove_mail + ld a, [hl] + jr .already_holding_item + +.give_item_to_mon + call GiveItemToPokemon + ld hl, MadeHoldText + call MenuTextBoxBackup + call GivePartyItem + ret -.ok - call AddMonMenuItem +.please_remove_mail + ld hl, PleaseRemoveMailText + call MenuTextBoxBackup + ret -.skip2 - ld a, [wBuffer1] - cp NUM_MONMENU_ITEMS - jr z, .ok2 - ld a, MONMENUITEM_CANCEL - call AddMonMenuItem +.already_holding_item + ld [wNamedObjectIndexBuffer], a + call GetItemName + ld hl, SwitchAlreadyHoldingText + call StartMenuYesNo + jr c, .abort -.ok2 - call TerminateMonSubmenu + call GiveItemToPokemon + ld a, [wNamedObjectIndexBuffer] + push af + ld a, [wCurItem] + ld [wNamedObjectIndexBuffer], a + pop af + ld [wCurItem], a + call ReceiveItemFromPokemon + jr nc, .bag_full + + ld hl, TookAndMadeHoldText + call MenuTextBoxBackup + ld a, [wNamedObjectIndexBuffer] + ld [wCurItem], a + call GivePartyItem ret -.egg - ld a, MONMENUITEM_STATS - call AddMonMenuItem - ld a, MONMENUITEM_SWITCH - call AddMonMenuItem - ld a, MONMENUITEM_CANCEL - call AddMonMenuItem - call TerminateMonSubmenu +.bag_full + ld a, [wNamedObjectIndexBuffer] + ld [wCurItem], a + call ReceiveItemFromPokemon + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.abort ret -IsFieldMove: +GivePartyItem: + call GetPartyItemLocation + ld a, [wCurItem] + ld [hl], a + ld d, a + farcall ItemIsMail + jr nc, .done + call ComposeMailMessage + +.done + ret + +TakePartyItem: + call SpeechTextBox + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12c8c + + ld [wCurItem], a + call ReceiveItemFromPokemon + jr nc, .asm_12c94 + + farcall ItemIsMail + call GetPartyItemLocation + ld a, [hl] + ld [wNamedObjectIndexBuffer], 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 + +GiveTakeItemMenuData: + db MENU_SPRITE_ANIMS | MENU_BACKUP_TILES ; flags + menu_coords 12, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 + dw .Items + db 1 ; default option + +.Items: + db STATICMENU_CURSOR ; flags + db 2 ; # items + db "GIVE@" + db "TAKE@" + +TookAndMadeHoldText: + text_jump UnknownText_0x1c1b2c + db "@" + +MadeHoldText: + text_jump UnknownText_0x1c1b57 + db "@" + +PleaseRemoveMailText: + text_jump UnknownText_0x1c1b6f + db "@" + +IsntHoldingAnythingText: + text_jump UnknownText_0x1c1b8e + db "@" + +ItemStorageIsFullText: + text_jump UnknownText_0x1c1baa + db "@" + +TookFromText: + text_jump UnknownText_0x1c1bc4 + db "@" + +SwitchAlreadyHoldingText: + text_jump UnknownText_0x1c1bdc + db "@" + +CantBeHeldText: + text_jump UnknownText_0x1c1c09 + db "@" + +GetPartyItemLocation: + push af + ld a, MON_ITEM + call GetPartyParamLocation + pop af + ret + +ReceiveItemFromPokemon: + ld a, 1 + ld [wItemQuantityChangeBuffer], a + ld hl, wNumItems + jp ReceiveItem + +GiveItemToPokemon: + ld a, 1 + ld [wItemQuantityChangeBuffer], a + ld hl, wNumItems + jp TossItem + +StartMenuYesNo: + call MenuTextBox + call YesNoBox + jp ExitMenu + +ComposeMailMessage: + ld de, wTempMailMessage + farcall _ComposeMailMessage + ld hl, wPlayerName + ld de, wTempMailAuthor + ld bc, NAME_LENGTH - 1 + call CopyBytes + ld hl, wPlayerID + ld bc, 2 + call CopyBytes + ld a, [wCurPartySpecies] + ld [de], a + inc de + ld a, [wCurItem] + ld [de], a + ld a, [wCurPartyMon] + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, wTempMail + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) + call GetSRAMBank + call CopyBytes + call CloseSRAM + ret + +MonMailAction: +; 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, .MenuHeader + call LoadMenuHeader + call VerticalMenu + call ExitMenu + +; Interpret the menu. + jp c, .done + ld a, [wMenuCursorY] + cp $1 + jr z, .read + cp $2 + jr z, .take + jp .done + +.read + farcall ReadPartyMonMail + ld a, $0 + ret + +.take + ld hl, .sendmailtopctext + call StartMenuYesNo + jr c, .RemoveMailToBag + ld a, [wCurPartyMon] ld b, a - ld hl, MonMenuOptions -.next - ld a, [hli] - cp -1 - jr z, .nope - cp MONMENU_MENUOPTION - jr z, .nope - ld d, [hl] - inc hl + farcall SendMailToPC + jr c, .MailboxFull + ld hl, .sentmailtopctext + call MenuTextBoxBackup + jr .done + +.MailboxFull: + ld hl, .mailboxfulltext + call MenuTextBoxBackup + jr .done + +.RemoveMailToBag: + ld hl, .mailwilllosemessagetext + call StartMenuYesNo + jr c, .done + call GetPartyItemLocation + ld a, [hl] + ld [wCurItem], a + call ReceiveItemFromPokemon + 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 + +.MenuHeader: + db MENU_BACKUP_TILES ; flags + menu_coords 12, 10, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 + dw .MenuData + db 1 ; default option + +.MenuData: + db STATICMENU_CURSOR ; flags + db 3 ; items + db "READ@" + db "TAKE@" + db "QUIT@" + +.mailwilllosemessagetext +; The MAIL will lose its message. OK? + text_jump UnknownText_0x1c1c22 + db "@" + +.tookmailfrommontext +; MAIL detached from <POKEMON>. + text_jump UnknownText_0x1c1c47 + db "@" + +.bagfulltext +; There's no space for removing MAIL. + text_jump UnknownText_0x1c1c62 + db "@" + +.sendmailtopctext +; Send the removed MAIL to your PC? + text_jump UnknownText_0x1c1c86 + db "@" + +.mailboxfulltext +; Your PC's MAILBOX is full. + text_jump UnknownText_0x1c1ca9 + db "@" + +.sentmailtopctext +; The MAIL was sent to your PC. + text_jump UnknownText_0x1c1cc4 + db "@" + +OpenPartyStats: + call LoadStandardMenuHeader + call ClearSprites +; PartyMon + xor a + ld [wMonType], a + call LowVolume + predef StatsScreenInit + call MaxVolume + call Call_ExitMenu + ld a, 0 + ret + +MonMenu_Cut: + farcall CutFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Fly: + farcall FlyFunction + ld a, [wFieldMoveSucceeded] + cp $2 + jr z, .Fail + cp $0 + jr z, .Error + farcall StubbedTrainerRankings_Fly + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +.Error: + ld a, $0 + ret + +.Unreferenced: + ld a, $1 + ret + +MonMenu_Flash: + farcall OWFlash + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Strength: + farcall StrengthFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Whirlpool: + farcall WhirlpoolFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Waterfall: + farcall WaterfallFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Teleport: + farcall TeleportFunction + ld a, [wFieldMoveSucceeded] + and a + jr z, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Surf: + farcall SurfFunction + ld a, [wFieldMoveSucceeded] + and a + jr z, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Dig: + farcall DigFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_Softboiled_MilkDrink: + call .CheckMonHasEnoughHP + jr nc, .NotEnoughHP + farcall Softboiled_MilkDrinkFunction + jr .finish + +.NotEnoughHP: + ld hl, .Text_NotEnoughHP + call PrintText + +.finish + xor a + ld [wPartyMenuActionText], a + ld a, $3 + ret + +.Text_NotEnoughHP: + ; Not enough HP! + text_jump UnknownText_0x1c1ce3 + db "@" + +.CheckMonHasEnoughHP: +; Need to have at least (MaxHP / 5) HP left. + ld a, MON_MAXHP + call GetPartyParamLocation ld a, [hli] - cp b - jr nz, .next - ld a, d - scf + 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 + +MonMenu_Headbutt: + farcall HeadbuttFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret -.nope +.Fail: + ld a, $3 ret -ResetMonSubmenu: +MonMenu_RockSmash: + farcall RockSmashFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +MonMenu_SweetScent: + farcall SweetScentFromMenu + ld b, $4 + ld a, $2 + ret + +ChooseMoveToDelete: + ld hl, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call LoadFontsBattleExtra + call .ChooseMoveToDelete + pop bc + ld a, b + ld [wOptions], a + push af + call ClearBGPalettes + pop af + ret + +.ChooseMoveToDelete + call SetUpMoveScreenBG + ld de, DeleteMoveScreenAttrs + call SetMenuAttributes + call SetUpMoveList + ld hl, w2DMenuFlags1 + set 6, [hl] + jr .enter_loop + +.loop + call ScrollingMenuJoypad + bit B_BUTTON_F, a + jp nz, .b_button + bit A_BUTTON_F, a + jp nz, .a_button + +.enter_loop + call PrepareToPlaceMoveData + call PlaceMoveData + jp .loop + +.a_button + and a + jr .finish + +.b_button + scf + +.finish + push af xor a - ld [wBuffer1], a - ld hl, wBuffer2 - ld bc, NUM_MONMENU_ITEMS + 1 - call ByteFill + ld [wSwitchMon], a + ld hl, w2DMenuFlags1 + res 6, [hl] + call ClearSprites + call ClearTileMap + pop af ret -TerminateMonSubmenu: - ld a, [wBuffer1] - ld e, a - ld d, 0 - ld hl, wBuffer2 - add hl, de - ld [hl], -1 +DeleteMoveScreenAttrs: + db 3, 1 + db 3, 1 + db $40, $00 + dn 2, 0 + db D_UP | D_DOWN | A_BUTTON | B_BUTTON + +ManagePokemonMoves: + ld a, [wCurPartySpecies] + cp EGG + jr z, .egg + ld hl, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call MoveScreenLoop + pop af + ld [wOptions], a + call ClearBGPalettes + +.egg + ld a, $0 ret -AddMonMenuItem: +MoveScreenLoop: + ld a, [wCurPartyMon] + inc a + ld [wPartyMenuCursor], a + call SetUpMoveScreenBG + call Function132d3 + ld de, MoveScreenAttributes + call SetMenuAttributes +.loop + call SetUpMoveList + ld hl, w2DMenuFlags1 + set 6, [hl] + jr .skip_joy + +.joy_loop + call ScrollingMenuJoypad + 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_MoveWhere + call PlaceString + jp .joy_loop +.b_button + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jp z, .exit + + ld a, [wMoveSwapBuffer] + ld [wMenuCursorY], a + xor a + ld [wMoveSwapBuffer], a + hlcoord 1, 2 + lb bc, 8, SCREEN_WIDTH - 2 + call ClearBox + jp .loop + +.d_right + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + + ld a, [wCurPartyMon] + ld b, a + push bc + call .cycle_right + pop bc + ld a, [wCurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.d_left + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + ld a, [wCurPartyMon] + ld b, a + push bc + call .cycle_left + pop bc + ld a, [wCurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.cycle_right + ld a, [wCurPartyMon] + inc a + ld [wCurPartyMon], a + ld c, a + ld b, 0 + ld hl, wPartySpecies + add hl, bc + ld a, [hl] + cp -1 + jr z, .cycle_left + cp EGG + ret nz + jr .cycle_right + +.cycle_left + ld a, [wCurPartyMon] + and a + ret z +.cycle_left_loop + ld a, [wCurPartyMon] + dec a + ld [wCurPartyMon], a + ld c, a + ld b, 0 + ld hl, wPartySpecies + add hl, bc + ld a, [hl] + cp EGG + ret nz + ld a, [wCurPartyMon] + and a + jr z, .cycle_right + jr .cycle_left_loop + +.a_button + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jr nz, .place_move + ld a, [wMenuCursorY] + ld [wMoveSwapBuffer], a + call PlaceHollowCursor + jp .moving_move + +.place_move + ld hl, wPartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [wCurPartyMon] + call AddNTimes push hl - push de - push af - ld a, [wBuffer1] + call .copy_move + pop hl + ld bc, $15 + add hl, bc + call .copy_move + ld a, [wBattleMode] + jr z, .swap_moves + ld hl, wBattleMonMoves + ld bc, $20 + ld a, [wCurPartyMon] + 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 + +.copy_move + push hl + ld a, [wMenuCursorY] + 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 + +.exit + xor a + ld [wMoveSwapBuffer], a + ld hl, w2DMenuFlags1 + res 6, [hl] + call ClearSprites + jp ClearTileMap + +MoveScreenAttributes: + db 3, 1 + db 3, 1 + db $40, $00 + dn 2, 0 + db D_UP | D_DOWN | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON + +String_MoveWhere: + db "Where?@" + +SetUpMoveScreenBG: + call ClearBGPalettes + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + farcall LoadStatsScreenPageTilesGFX + farcall ClearSpriteAnims2 + ld a, [wCurPartyMon] ld e, a - inc a - ld [wBuffer1], a - ld d, 0 - ld hl, wBuffer2 + ld d, $0 + ld hl, wPartySpecies add hl, de - pop af - ld [hl], a - pop de + ld a, [hl] + ld [wTempIconSpecies], a + ld e, MONICON_MOVES + farcall LoadMenuMonIcon + 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 [wMonType], a + ld hl, wPartyMonNicknames + ld a, [wCurPartyMon] + call GetNick + hlcoord 5, 1 + call PlaceString + push bc + farcall CopyMonToTempMon pop hl - ret + call PrintLevel + ld hl, wPlayerHPPal + call SetHPPal + ld b, SCGB_MOVE_LIST + call GetSGBLayout + hlcoord 16, 0 + lb bc, 1, 3 + jp ClearBox -BattleMonMenu: - ld hl, MenuHeader_0x24ed4 - call CopyMenuHeader +SetUpMoveList: xor a ld [hBGMapMode], a - call MenuBox - call UpdateSprites - call PlaceVerticalMenuItems + ld [wMoveSwapBuffer], a + ld [wMonType], a + predef CopyMonToTempMon + ld hl, wTempMonMoves + ld de, wListMoves_MoveIndicesBuffer + ld bc, NUM_MOVES + call CopyBytes + ld a, SCREEN_WIDTH * 2 + ld [wBuffer1], a + hlcoord 2, 3 + predef ListMoves + hlcoord 10, 4 + predef ListMovePP call WaitBGMap - call CopyMenuData - ld a, [wMenuDataFlags] - bit 7, a - jr z, .set_carry - call InitVerticalMenuCursor - ld hl, w2DMenuFlags1 - set 6, [hl] - call StaticMenuJoypad - ld de, SFX_READ_TEXT_2 - call PlaySFX - ld a, [hJoyPressed] - bit B_BUTTON_F, a - jr z, .clear_carry - ret z + call SetPalettes + ld a, [wNumMoves] + inc a + ld [w2DMenuNumRows], a + hlcoord 0, 11 + ld b, 5 + ld c, 18 + jp TextBox -.set_carry - scf +PrepareToPlaceMoveData: + ld hl, wPartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [wCurPartyMon] + call AddNTimes + ld a, [wMenuCursorY] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [wCurSpecies], a + hlcoord 1, 12 + lb bc, 5, 18 + jp ClearBox + +PlaceMoveData: + xor a + ld [hBGMapMode], a + hlcoord 0, 10 + ld de, String_MoveType_Top + call PlaceString + hlcoord 0, 11 + ld de, String_MoveType_Bottom + call PlaceString + hlcoord 12, 12 + ld de, String_MoveAtk + call PlaceString + ld a, [wCurSpecies] + ld b, a + hlcoord 2, 12 + predef PrintMoveType + ld a, [wCurSpecies] + 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 [wDeciramBuffer], a + ld de, wDeciramBuffer + lb bc, 1, 3 + call PrintNum + jr .description + +.no_power + ld de, String_MoveNoPower + call PlaceString + +.description + hlcoord 1, 14 + predef PrintMoveDesc + ld a, $1 + ld [hBGMapMode], a ret -.clear_carry +String_MoveType_Top: + db "┌─────┐@" +String_MoveType_Bottom: + db "│TYPE/└@" +String_MoveAtk: + db "ATK/@" +String_MoveNoPower: + db "---@" + +Function132d3: + call Function132da + call Function132fe + ret + +Function132da: + ld a, [wCurPartyMon] + and a + ret z + ld c, a + ld e, a + ld d, 0 + ld hl, wPartyCount + 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 -MenuHeader_0x24ed4: - db 0 ; flags - menu_coords 11, 11, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 - dw MenuData_0x24edc - db 1 ; default option +.legal + hlcoord 16, 0 + ld [hl], "◀" + ret -MenuData_0x24edc: - db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags - db 3 ; items - db "SWITCH@" - db "STATS@" - db "CANCEL@" +Function132fe: + ld a, [wCurPartyMon] + inc a + ld c, a + ld a, [wPartyCount] + cp c + ret z + ld e, c + ld d, 0 + ld hl, wPartySpecies + 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 diff --git a/engine/pokemon/mon_stats.asm b/engine/pokemon/mon_stats.asm index 76f09b461..74e3d2a95 100644 --- a/engine/pokemon/mon_stats.asm +++ b/engine/pokemon/mon_stats.asm @@ -295,7 +295,7 @@ ListMovePP: call PrintNum ld a, "/" ld [hli], a - ld de, wd265 + ld de, wTempPP lb bc, 1, 2 call PrintNum pop hl diff --git a/engine/pokemon/mon_submenu.asm b/engine/pokemon/mon_submenu.asm new file mode 100644 index 000000000..926c35f5d --- /dev/null +++ b/engine/pokemon/mon_submenu.asm @@ -0,0 +1,290 @@ +INCLUDE "data/mon_menu.asm" + +MonSubmenu: + xor a + ld [hBGMapMode], a + call GetMonSubmenuItems + farcall FreezeMonIcons + ld hl, .MenuHeader + call LoadMenuHeader + call .GetTopCoord + call PopulateMonMenu + + ld a, 1 + ld [hBGMapMode], a + call MonMenuLoop + ld [wMenuSelection], a + + call ExitMenu + ret + +.MenuHeader: + db MENU_BACKUP_TILES ; flags + menu_coords 6, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 + dw 0 + db 1 ; default option + +.GetTopCoord: +; TopCoord = 1 + BottomCoord - 2 * (NumSubmenuItems + 1) + ld a, [wBuffer1] + inc a + add a + ld b, a + ld a, [wMenuBorderBottomCoord] + sub b + inc a + ld [wMenuBorderTopCoord], a + call MenuBox + ret + +MonMenuLoop: +.loop + ld a, MENU_UNUSED_3 | MENU_BACKUP_TILES_2 ; flags + ld [wMenuDataFlags], a + ld a, [wBuffer1] ; items + ld [wMenuDataItems], a + call InitVerticalMenuCursor + ld hl, w2DMenuFlags1 + set 6, [hl] + call StaticMenuJoypad + ld de, SFX_READ_TEXT_2 + call PlaySFX + ld a, [hJoyPressed] + bit A_BUTTON_F, a + jr nz, .select + bit B_BUTTON_F, a + jr nz, .cancel + jr .loop + +.cancel + ld a, MONMENUITEM_CANCEL + ret + +.select + ld a, [wMenuCursorY] + dec a + ld c, a + ld b, 0 + ld hl, wBuffer2 + add hl, bc + ld a, [hl] + ret + +PopulateMonMenu: + call MenuBoxCoord2Tile + ld bc, 2 * SCREEN_WIDTH + 2 + add hl, bc + ld de, wBuffer2 +.loop + ld a, [de] + inc de + cp -1 + ret z + push de + push hl + call GetMonMenuString + pop hl + call PlaceString + ld bc, 2 * SCREEN_WIDTH + add hl, bc + pop de + jr .loop + +GetMonMenuString: + ld hl, MonMenuOptions + 1 + ld de, 3 + call IsInArray + dec hl + ld a, [hli] + cp MONMENU_MENUOPTION + jr z, .NotMove + inc hl + ld a, [hl] + ld [wNamedObjectIndexBuffer], a + call GetMoveName + ret + +.NotMove: + inc hl + ld a, [hl] + dec a + ld hl, MonMenuOptionStrings + call GetNthString + ld d, h + ld e, l + ret + +GetMonSubmenuItems: + call ResetMonSubmenu + ld a, [wCurPartySpecies] + cp EGG + jr z, .egg + ld a, [wLinkMode] + and a + jr nz, .skip_moves + ld a, MON_MOVES + call GetPartyParamLocation + ld d, h + ld e, l + ld c, NUM_MOVES +.loop + push bc + push de + ld a, [de] + and a + jr z, .next + push hl + call IsFieldMove + pop hl + jr nc, .next + call AddMonMenuItem + +.next + pop de + inc de + pop bc + dec c + jr nz, .loop + +.skip_moves + ld a, MONMENUITEM_STATS + call AddMonMenuItem + ld a, MONMENUITEM_SWITCH + call AddMonMenuItem + ld a, MONMENUITEM_MOVE + call AddMonMenuItem + ld a, [wLinkMode] + and a + jr nz, .skip2 + push hl + ld a, MON_ITEM + call GetPartyParamLocation + ld d, [hl] + farcall ItemIsMail + pop hl + ld a, MONMENUITEM_MAIL + jr c, .ok + ld a, MONMENUITEM_ITEM + +.ok + call AddMonMenuItem + +.skip2 + ld a, [wBuffer1] + cp NUM_MONMENU_ITEMS + jr z, .ok2 + ld a, MONMENUITEM_CANCEL + call AddMonMenuItem + +.ok2 + call TerminateMonSubmenu + ret + +.egg + ld a, MONMENUITEM_STATS + call AddMonMenuItem + ld a, MONMENUITEM_SWITCH + call AddMonMenuItem + ld a, MONMENUITEM_CANCEL + call AddMonMenuItem + call TerminateMonSubmenu + ret + +IsFieldMove: + ld b, a + ld hl, MonMenuOptions +.next + ld a, [hli] + cp -1 + jr z, .nope + cp MONMENU_MENUOPTION + jr z, .nope + ld d, [hl] + inc hl + ld a, [hli] + cp b + jr nz, .next + ld a, d + scf + +.nope + ret + +ResetMonSubmenu: + xor a + ld [wBuffer1], a + ld hl, wBuffer2 + ld bc, NUM_MONMENU_ITEMS + 1 + call ByteFill + ret + +TerminateMonSubmenu: + ld a, [wBuffer1] + ld e, a + ld d, 0 + ld hl, wBuffer2 + add hl, de + ld [hl], -1 + ret + +AddMonMenuItem: + push hl + push de + push af + ld a, [wBuffer1] + ld e, a + inc a + ld [wBuffer1], a + ld d, 0 + ld hl, wBuffer2 + add hl, de + pop af + ld [hl], a + pop de + pop hl + ret + +BattleMonMenu: + ld hl, MenuHeader_0x24ed4 + call CopyMenuHeader + xor a + ld [hBGMapMode], a + call MenuBox + call UpdateSprites + call PlaceVerticalMenuItems + call WaitBGMap + call CopyMenuData + ld a, [wMenuDataFlags] + bit 7, a + jr z, .set_carry + call InitVerticalMenuCursor + ld hl, w2DMenuFlags1 + set 6, [hl] + call StaticMenuJoypad + ld de, SFX_READ_TEXT_2 + call PlaySFX + ld a, [hJoyPressed] + bit B_BUTTON_F, a + jr z, .clear_carry + ret z + +.set_carry + scf + ret + +.clear_carry + and a + ret + +MenuHeader_0x24ed4: + db 0 ; flags + menu_coords 11, 11, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 + dw MenuData_0x24edc + db 1 ; default option + +MenuData_0x24edc: + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 3 ; items + db "SWITCH@" + db "STATS@" + db "CANCEL@" diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm index 7074dafd8..e14a1a03a 100644 --- a/engine/pokemon/move_mon.asm +++ b/engine/pokemon/move_mon.asm @@ -52,7 +52,7 @@ TryAddMonToParty: and a jr nz, .skipnickname ld a, [wCurPartySpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, wPartyMonNicknames ld a, [hMoveMon] @@ -185,11 +185,11 @@ endr .registerpokedex ld a, [wCurPartySpecies] - ld [wd265], a + ld [wTempSpecies], a dec a push de call CheckCaughtMon - ld a, [wd265] + ld a, [wTempSpecies] dec a call SetSeenAndCaughtMon pop de @@ -695,7 +695,7 @@ SendGetMonIntoFromBox: ld a, [sBoxCount] dec a ld b, a - call RestorePPofDepositedPokemon + call RestorePPOfDepositedPokemon .CloseSRAM_And_ClearCarryFlag: call CloseSRAM and a @@ -706,7 +706,7 @@ CloseSRAM_And_SetCarryFlag: scf ret -RestorePPofDepositedPokemon: +RestorePPOfDepositedPokemon: ld a, b ld hl, sBoxMons ld bc, BOXMON_STRUCT_LENGTH @@ -750,7 +750,7 @@ RestorePPofDepositedPokemon: farcall GetMaxPPOfMove pop de pop hl - ld a, [wd265] + ld a, [wTempPP] ld b, a ld a, [de] and %11000000 @@ -970,7 +970,7 @@ SendMonIntoBox: call CopyBytes ld a, [wCurPartySpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld de, sBoxMonNicknames @@ -1057,7 +1057,7 @@ SendMonIntoBox: call CopyBytes ld b, 0 - call RestorePPofDepositedPokemon + call RestorePPOfDepositedPokemon call CloseSRAM scf @@ -1403,7 +1403,7 @@ CalcMonStats: ; hl is the path to the Stat EXP ; de points to where the final stats will be saved - ld c, $0 + ld c, STAT_HP - 1 ; first stat .loop inc c call CalcMonStatC @@ -1414,7 +1414,7 @@ CalcMonStats: ld [de], a inc de ld a, c - cp STAT_SDEF + cp STAT_SDEF ; last stat jr nz, .loop ret @@ -1434,14 +1434,14 @@ CalcMonStatC: push hl ld hl, wBaseStats dec hl ; has to be decreased, because 'c' begins with 1 - ld b, $0 + ld b, 0 add hl, bc ld a, [hl] ld e, a pop hl push hl ld a, c - cp STAT_SDEF + cp STAT_SDEF ; last stat jr nz, .not_spdef dec hl dec hl @@ -1669,7 +1669,7 @@ GivePoke:: .done ld a, [wCurPartySpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a ld [wTempEnemyMonSpecies], a call GetPokemonName ld hl, wStringBuffer1 diff --git a/engine/pokemon/move_mon_wo_mail.asm b/engine/pokemon/move_mon_wo_mail.asm index 1dab879c7..8166d348c 100644 --- a/engine/pokemon/move_mon_wo_mail.asm +++ b/engine/pokemon/move_mon_wo_mail.asm @@ -5,21 +5,21 @@ InsertPokemonIntoBox: call InsertSpeciesIntoBoxOrParty ld a, [sBoxCount] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a ld hl, sBoxMonNicknames ld bc, MON_NAME_LENGTH ld de, wBufferMonNick call InsertDataIntoBoxOrParty ld a, [sBoxCount] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a ld hl, sBoxMonOT ld bc, NAME_LENGTH ld de, wBufferMonOT call InsertDataIntoBoxOrParty ld a, [sBoxCount] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a ld hl, sBoxMons ld bc, BOXMON_STRUCT_LENGTH ld de, wBufferMon @@ -34,7 +34,7 @@ InsertPokemonIntoBox: call CopyBytes ld a, [wCurPartyMon] ld b, a - farcall RestorePPofDepositedPokemon + farcall RestorePPOfDepositedPokemon jp CloseSRAM InsertPokemonIntoParty: @@ -42,21 +42,21 @@ InsertPokemonIntoParty: call InsertSpeciesIntoBoxOrParty ld a, [wPartyCount] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a ld hl, wPartyMonNicknames ld bc, MON_NAME_LENGTH ld de, wBufferMonNick call InsertDataIntoBoxOrParty ld a, [wPartyCount] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a ld hl, wPartyMonOT ld bc, NAME_LENGTH ld de, wBufferMonOT call InsertDataIntoBoxOrParty ld a, [wPartyCount] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a ld hl, wPartyMons ld bc, PARTYMON_STRUCT_LENGTH ld de, wBufferMon @@ -85,7 +85,7 @@ InsertDataIntoBoxOrParty: push de push hl push bc - ld a, [wd265] + ld a, [wNextBoxOrPartyIndex] dec a call AddNTimes push hl @@ -95,7 +95,7 @@ InsertDataIntoBoxOrParty: pop hl .loop push bc - ld a, [wd265] + ld a, [wNextBoxOrPartyIndex] ld b, a ld a, [wCurPartyMon] cp b @@ -116,9 +116,9 @@ InsertDataIntoBoxOrParty: sbc b ld h, a pop de - ld a, [wd265] + ld a, [wNextBoxOrPartyIndex] dec a - ld [wd265], a + ld [wNextBoxOrPartyIndex], a jr .loop .insert diff --git a/engine/pokemon/party_menu.asm b/engine/pokemon/party_menu.asm index c3a70dbdc..814e6be55 100644 --- a/engine/pokemon/party_menu.asm +++ b/engine/pokemon/party_menu.asm @@ -596,7 +596,7 @@ InitPartyMenuGFX: push hl ld hl, LoadMenuMonIcon ld a, BANK(LoadMenuMonIcon) - ld e, $0 + ld e, MONICON_PARTYMENU rst FarCall ld a, [hObjectStructIndexBuffer] inc a diff --git a/engine/pokemon/print_move_description.asm b/engine/pokemon/print_move_description.asm new file mode 100644 index 000000000..c461f2f3d --- /dev/null +++ b/engine/pokemon/print_move_description.asm @@ -0,0 +1,14 @@ +PrintMoveDesc: + push hl + ld hl, MoveDescriptions + ld a, [wCurSpecies] + dec a + ld c, a + ld b, 0 + add hl, bc + add hl, bc + ld a, [hli] + ld e, a + ld d, [hl] + pop hl + jp PlaceString diff --git a/engine/pokemon/stats_screen.asm b/engine/pokemon/stats_screen.asm index dfc704f1a..72f895269 100644 --- a/engine/pokemon/stats_screen.asm +++ b/engine/pokemon/stats_screen.asm @@ -377,7 +377,7 @@ StatsScreen_InitUpperHalf: xor a ld [hBGMapMode], a ld a, [wBaseDexNo] - ld [wd265], a + ld [wDeciramBuffer], a ld [wCurSpecies], a hlcoord 8, 0 ld [hl], "№" @@ -386,7 +386,7 @@ StatsScreen_InitUpperHalf: inc hl hlcoord 10, 0 lb bc, PRINTNUM_LEADINGZEROS | 1, 3 - ld de, wd265 + ld de, wDeciramBuffer call PrintNum hlcoord 14, 0 call PrintLevel @@ -401,7 +401,7 @@ StatsScreen_InitUpperHalf: ld a, "/" ld [hli], a ld a, [wBaseDexNo] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName call PlaceString call StatsScreen_PlaceHorizontalDivider @@ -483,7 +483,7 @@ StatsScreen_PlaceShinyIcon: StatsScreen_LoadGFX: ld a, [wBaseDexNo] - ld [wd265], a + ld [wTempSpecies], a ld [wCurSpecies], a xor a ld [hBGMapMode], a @@ -708,7 +708,7 @@ StatsScreen_LoadGFX: ld b, a farcall TimeCapsule_ReplaceTeruSama ld a, b - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetItemName ret diff --git a/engine/pokemon/switchpartymons.asm b/engine/pokemon/switchpartymons.asm index d612a3472..6d68ec88d 100644 --- a/engine/pokemon/switchpartymons.asm +++ b/engine/pokemon/switchpartymons.asm @@ -1,5 +1,5 @@ _SwitchPartyMons: - ld a, [wd0e3] + ld a, [wSwitchMon] dec a ld [wBuffer3], a ld b, a diff --git a/engine/pokemon/types.asm b/engine/pokemon/types.asm index 4e2ca3e45..abeeda840 100644 --- a/engine/pokemon/types.asm +++ b/engine/pokemon/types.asm @@ -74,9 +74,9 @@ PrintType: jp PlaceString GetTypeName: -; Copy the name of type [wd265] to wStringBuffer1. +; Copy the name of type [wNamedObjectIndexBuffer] to wStringBuffer1. - ld a, [wd265] + ld a, [wNamedObjectIndexBuffer] ld hl, TypeNames ld e, a ld d, 0 |