summaryrefslogtreecommitdiff
path: root/engine/menu
diff options
context:
space:
mode:
Diffstat (limited to 'engine/menu')
-rw-r--r--engine/menu/bills_pc.asm598
-rw-r--r--engine/menu/diploma.asm17
-rw-r--r--engine/menu/draw_badges.asm120
-rw-r--r--engine/menu/draw_start_menu.asm87
-rwxr-xr-xengine/menu/league_pc.asm119
-rw-r--r--engine/menu/link_menu.asm910
-rwxr-xr-xengine/menu/main_menu.asm297
-rwxr-xr-xengine/menu/naming_screen.asm526
-rwxr-xr-xengine/menu/oaks_pc.asm28
-rw-r--r--engine/menu/options.asm443
-rwxr-xr-xengine/menu/party_menu.asm333
-rwxr-xr-xengine/menu/pc.asm141
-rwxr-xr-xengine/menu/players_pc.asm302
-rwxr-xr-xengine/menu/pokedex.asm747
-rwxr-xr-xengine/menu/prize_menu.asm307
-rwxr-xr-xengine/menu/start_menu.asm84
-rwxr-xr-xengine/menu/start_sub_menus.asm871
-rwxr-xr-xengine/menu/status_screen.asm495
-rw-r--r--engine/menu/swap_items.asm149
-rw-r--r--engine/menu/text_box.asm739
-rwxr-xr-xengine/menu/vending_machine.asm138
21 files changed, 0 insertions, 7451 deletions
diff --git a/engine/menu/bills_pc.asm b/engine/menu/bills_pc.asm
deleted file mode 100644
index 41626310..00000000
--- a/engine/menu/bills_pc.asm
+++ /dev/null
@@ -1,598 +0,0 @@
-DisplayPCMainMenu::
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- call SaveScreenTilesToBuffer2
- ld a, [wNumHoFTeams]
- and a
- jr nz, .leaguePCAvailable
- CheckEvent EVENT_GOT_POKEDEX
- jr z, .noOaksPC
- ld a, [wNumHoFTeams]
- and a
- jr nz, .leaguePCAvailable
- coord hl, 0, 0
- lb bc, 8, 14
- jr .next
-.noOaksPC
- coord hl, 0, 0
- lb bc, 6, 14
- jr .next
-.leaguePCAvailable
- coord hl, 0, 0
- lb bc, 10, 14
-.next
- call TextBoxBorder
- call UpdateSprites
- ld a, 3
- ld [wMaxMenuItem], a
- CheckEvent EVENT_MET_BILL
- jr nz, .metBill
- coord hl, 2, 2
- ld de, SomeonesPCText
- jr .next2
-.metBill
- coord hl, 2, 2
- ld de, BillsPCText
-.next2
- call PlaceString
- coord hl, 2, 4
- ld de, wPlayerName
- call PlaceString
- ld l, c
- ld h, b
- ld de, PlayersPCText
- call PlaceString
- CheckEvent EVENT_GOT_POKEDEX
- jr z, .noOaksPC2
- coord hl, 2, 6
- ld de, OaksPCText
- call PlaceString
- ld a, [wNumHoFTeams]
- and a
- jr z, .noLeaguePC
- ld a, 4
- ld [wMaxMenuItem], a
- coord hl, 2, 8
- ld de, PKMNLeaguePCText
- call PlaceString
- coord hl, 2, 10
- ld de, LogOffPCText
- jr .next3
-.noLeaguePC
- coord hl, 2, 8
- ld de, LogOffPCText
- jr .next3
-.noOaksPC2
- ld a, $2
- ld [wMaxMenuItem], a
- coord hl, 2, 6
- ld de, LogOffPCText
-.next3
- call PlaceString
- ld a, A_BUTTON | B_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, 2
- ld [wTopMenuItemY], a
- ld a, 1
- ld [wTopMenuItemX], a
- xor a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld a, 1
- ld [H_AUTOBGTRANSFERENABLED], a
- ret
-
-SomeonesPCText: db "SOMEONE's PC@"
-BillsPCText: db "BILL's PC@"
-PlayersPCText: db "'s PC@"
-OaksPCText: db "PROF.OAK's PC@"
-PKMNLeaguePCText: db $4a, "LEAGUE@"
-LogOffPCText: db "LOG OFF@"
-
-BillsPC_::
- ld hl, wd730
- set 6, [hl]
- xor a
- ld [wParentMenuItem], a
- inc a ; MONSTER_NAME
- ld [wNameListType], a
- call LoadHpBarAndStatusTilePatterns
- ld a, [wListScrollOffset]
- push af
- ld a, [wFlags_0xcd60]
- bit 3, a ; accessing Bill's PC through another PC?
- jr nz, BillsPCMenu
-; accessing it directly
- ld a, SFX_TURN_ON_PC
- call PlaySound
- ld hl, SwitchOnText
- call PrintText
-
-BillsPCMenu:
- ld a, [wParentMenuItem]
- ld [wCurrentMenuItem], a
- ld hl, vChars2 + $780
- ld de, PokeballTileGraphics
- lb bc, BANK(PokeballTileGraphics), $01
- call CopyVideoData
- call LoadScreenTilesFromBuffer2DisableBGTransfer
- coord hl, 0, 12
- lb bc, 4, 18
- call TextBoxBorder
- coord hl, 0, 0
- lb bc, 12, 12
- call TextBoxBorder
- call UpdateSprites
- coord hl, 2, 2
- ld de, BillsPCMenuText
- call PlaceString
- ld hl, wTopMenuItemY
- ld a, 2
- ld [hli], a ; wTopMenuItemY
- dec a
- ld [hli], a ; wTopMenuItemX
- inc hl
- inc hl
- ld a, 5
- ld [hli], a ; wMaxMenuItem
- ld a, A_BUTTON | B_BUTTON
- ld [hli], a ; wMenuWatchedKeys
- xor a
- ld [hli], a ; wLastMenuItem
- ld [hli], a ; wPartyAndBillsPCSavedMenuItem
- ld hl, wListScrollOffset
- ld [hli], a ; wListScrollOffset
- ld [hl], a ; wMenuWatchMovingOutOfBounds
- ld [wPlayerMonNumber], a
- coord hl, 9, 14
- lb bc, 2, 9
- call TextBoxBorder
- ld a, [wCurrentBoxNum]
- and $7f
- cp 9
- jr c, .singleDigitBoxNum
-; two digit box num
- sub 9
- coord hl, 17, 16
- ld [hl], "1"
- add "0"
- jr .next
-.singleDigitBoxNum
- add "1"
-.next
- Coorda 18, 16
- coord hl, 10, 16
- ld de, BoxNoPCText
- call PlaceString
- ld a, 1
- ld [H_AUTOBGTRANSFERENABLED], a
- call Delay3
- call HandleMenuInput
- bit 1, a
- jp nz, ExitBillsPC ; b button
- call PlaceUnfilledArrowMenuCursor
- ld a, [wCurrentMenuItem]
- ld [wParentMenuItem], a
- and a
- jp z, BillsPCWithdraw ; withdraw
- cp $1
- jp z, BillsPCDeposit ; deposit
- cp $2
- jp z, BillsPCRelease ; release
- cp $3
- jp z, BillsPCChangeBox ; change box
- cp $4
- jp z, BillsPCPrintBox
-
-ExitBillsPC:
- ld a, [wFlags_0xcd60]
- bit 3, a ; accessing Bill's PC through another PC?
- jr nz, .next
-; accessing it directly
- call LoadTextBoxTilePatterns
- ld a, SFX_TURN_OFF_PC
- call PlaySound
- call WaitForSoundToFinish
-.next
- ld hl, wFlags_0xcd60
- res 5, [hl]
- call LoadScreenTilesFromBuffer2
- pop af
- ld [wListScrollOffset], a
- ld hl, wd730
- res 6, [hl]
- ret
-
-BillsPCPrintBox:
- callab PrintPCBox
- jp BillsPCMenu
-
-BillsPCDeposit:
- ld a, [wPartyCount]
- dec a
- jr nz, .partyLargeEnough
- ld hl, CantDepositLastMonText
- call PrintText
- jp BillsPCMenu
-.partyLargeEnough
- ld a, [wNumInBox]
- cp MONS_PER_BOX
- jr nz, .boxNotFull
- ld hl, BoxFullText
- call PrintText
- jp BillsPCMenu
-.boxNotFull
- ld hl, wPartyCount
- call DisplayMonListMenu
- jp c, BillsPCMenu
- callab IsThisPartymonStarterPikachu_Party
- jr nc, .asm_215ad
- call CheckPikachuFollowingPlayer
- jr z, .asm_215ad
- ld hl, SleepingPikachuText2
- call PrintText
- jp BillsPCMenu
-.asm_215ad
- call DisplayDepositWithdrawMenu
- jp nc, BillsPCMenu
- callab IsThisPartymonStarterPikachu_Party
- jr nc, .asm_215c9
- ld e, $1b
- callab PlayPikachuSoundClip
- jr .asm_215cf
-.asm_215c9
- ld a, [wcf91]
- call PlayCry
-.asm_215cf
- callabd_ModifyPikachuHappiness PIKAHAPPY_DEPOSITED
- ld a, PARTY_TO_BOX
- ld [wMoveMonType], a
- call MoveMon
- xor a
- ld [wRemoveMonFromBox], a
- call RemovePokemon
- call WaitForSoundToFinish
- ld hl, wBoxNumString
- ld a, [wCurrentBoxNum]
- and $7f
- cp 9
- jr c, .singleDigitBoxNum
- sub 9
- ld [hl], "1"
- inc hl
- add "0"
- jr .next
-.singleDigitBoxNum
- add "1"
-.next
- ld [hli], a
- ld [hl], "@"
- ld hl, MonWasStoredText
- call PrintText
- jp BillsPCMenu
-
-SleepingPikachuText2:
- TX_FAR _SleepingPikachuText2
- db "@"
-
-BillsPCWithdraw:
- ld a, [wNumInBox]
- and a
- jr nz, .boxNotEmpty
- ld hl, NoMonText
- call PrintText
- jp BillsPCMenu
-.boxNotEmpty
- ld a, [wPartyCount]
- cp PARTY_LENGTH
- jr nz, .partyNotFull
- ld hl, CantTakeMonText
- call PrintText
- jp BillsPCMenu
-.partyNotFull
- ld hl, wNumInBox
- call DisplayMonListMenu
- jp c, BillsPCMenu
- call DisplayDepositWithdrawMenu
- jp nc, BillsPCMenu
- ld a, [wWhichPokemon]
- ld hl, wBoxMonNicks
- call GetPartyMonName
- callab IsThisPartymonStarterPikachu_Box
- jr nc, .asm_21660
- ld e, $22
- callab PlayPikachuSoundClip
- jr .asm_21666
-.asm_21660
- ld a, [wcf91]
- call PlayCry
-.asm_21666
- xor a ; BOX_TO_PARTY
- ld [wMoveMonType], a
- call MoveMon
- ld a, 1
- ld [wRemoveMonFromBox], a
- call RemovePokemon
- call WaitForSoundToFinish
- ld hl, MonIsTakenOutText
- call PrintText
- jp BillsPCMenu
-
-BillsPCRelease:
- ld a, [wNumInBox]
- and a
- jr nz, .loop
- ld hl, NoMonText
- call PrintText
- jp BillsPCMenu
-.loop
- ld hl, wNumInBox
- call DisplayMonListMenu
- jp c, BillsPCMenu
- callab IsThisPartymonStarterPikachu_Box
- jr c, .asm_216cb
- ld hl, OnceReleasedText
- call PrintText
- call YesNoChoice
- ld a, [wCurrentMenuItem]
- and a
- jr nz, .loop
- inc a
- ld [wRemoveMonFromBox], a
- call RemovePokemon
- call WaitForSoundToFinish
- ld a, [wcf91]
- call PlayCry
- ld hl, MonWasReleasedText
- call PrintText
- jp BillsPCMenu
-
-.asm_216cb
- ld a, [wWhichPokemon]
- ld hl, wBoxMonNicks
- call GetPartyMonName
- ld e, $27
- callab PlayPikachuSoundClip
- ld hl, PikachuUnhappyText
- call PrintText
- jp BillsPCMenu
-
-BillsPCChangeBox:
- callba ChangeBox
- jp BillsPCMenu
-
-DisplayMonListMenu:
- ld a, l
- ld [wListPointer], a
- ld a, h
- ld [wListPointer + 1], a
- xor a
- ld [wPrintItemPrices], a
- ld [wListMenuID], a
- inc a ; MONSTER_NAME
- ld [wNameListType], a
- ld a, [wPartyAndBillsPCSavedMenuItem]
- ld [wCurrentMenuItem], a
- call DisplayListMenuID
- ld a, [wCurrentMenuItem]
- ld [wPartyAndBillsPCSavedMenuItem], a
- ret
-
-BillsPCMenuText:
- db "WITHDRAW ", $4a
- next "DEPOSIT ", $4a
- next "RELEASE ", $4a
- next "CHANGE BOX"
- next "PRINT BOX"
- next "SEE YA!"
- db "@"
-
-BoxNoPCText:
- db "BOX No.@"
-
-KnowsHMMove::
-; returns whether mon with party index [wWhichPokemon] knows an HM move
- ld hl, wPartyMon1Moves
- ld bc, wPartyMon2 - wPartyMon1
- jr .next
-; unreachable
- ld hl, wBoxMon1Moves
- ld bc, wBoxMon2 - wBoxMon1
-.next
- ld a, [wWhichPokemon]
- call AddNTimes
- ld b, NUM_MOVES
-.loop
- ld a, [hli]
- push hl
- push bc
- ld hl, HMMoveArray
- ld de, 1
- call IsInArray
- pop bc
- pop hl
- ret c
- dec b
- jr nz, .loop
- and a
- ret
-
-HMMoveArray:
- db CUT
- db FLY
- db SURF
- db STRENGTH
- db FLASH
- db -1
-
-DisplayDepositWithdrawMenu:
- coord hl, 9, 10
- lb bc, 6, 9
- call TextBoxBorder
- ld a, [wParentMenuItem]
- and a ; was the Deposit or Withdraw item selected in the parent menu?
- ld de, DepositPCText
- jr nz, .next
- ld de, WithdrawPCText
-.next
- coord hl, 11, 12
- call PlaceString
- coord hl, 11, 14
- ld de, StatsCancelPCText
- call PlaceString
- ld hl, wTopMenuItemY
- ld a, 12
- ld [hli], a ; wTopMenuItemY
- ld a, 10
- ld [hli], a ; wTopMenuItemX
- xor a
- ld [hli], a ; wCurrentMenuItem
- inc hl
- ld a, 2
- ld [hli], a ; wMaxMenuItem
- ld a, A_BUTTON | B_BUTTON
- ld [hli], a ; wMenuWatchedKeys
- xor a
- ld [hl], a ; wLastMenuItem
- ld hl, wListScrollOffset
- ld [hli], a ; wListScrollOffset
- ld [hl], a ; wMenuWatchMovingOutOfBounds
- ld [wPlayerMonNumber], a
- ld [wPartyAndBillsPCSavedMenuItem], a
-.loop
- call HandleMenuInput
- bit 1, a ; pressed B?
- jr nz, .exit
- ld a, [wCurrentMenuItem]
- and a
- jr z, .choseDepositWithdraw
- dec a
- jr z, .viewStats
-.exit
- and a
- ret
-.choseDepositWithdraw
- scf
- ret
-.viewStats
- call SaveScreenTilesToBuffer1
- ld a, [wParentMenuItem]
- and a
- ld a, PLAYER_PARTY_DATA
- jr nz, .next2
- ld a, BOX_DATA
-.next2
- ld [wMonDataLocation], a
- predef StatusScreen
- predef StatusScreen2
- call LoadScreenTilesFromBuffer1
- call ReloadTilesetTilePatterns
- call RunDefaultPaletteCommand
- call LoadGBPal
- jr .loop
-
-DepositPCText: db "DEPOSIT@"
-WithdrawPCText: db "WITHDRAW@"
-StatsCancelPCText:
- db "STATS"
- next "CANCEL@"
-
-SwitchOnText:
- TX_FAR _SwitchOnText
- db "@"
-
-WhatText:
- TX_FAR _WhatText
- db "@"
-
-DepositWhichMonText:
- TX_FAR _DepositWhichMonText
- db "@"
-
-MonWasStoredText:
- TX_FAR _MonWasStoredText
- db "@"
-
-CantDepositLastMonText:
- TX_FAR _CantDepositLastMonText
- db "@"
-
-BoxFullText:
- TX_FAR _BoxFullText
- db "@"
-
-MonIsTakenOutText:
- TX_FAR _MonIsTakenOutText
- db "@"
-
-NoMonText:
- TX_FAR _NoMonText
- db "@"
-
-CantTakeMonText:
- TX_FAR _CantTakeMonText
- db "@"
-
-PikachuUnhappyText:
- TX_FAR _PikachuUnhappyText
- db "@"
-
-ReleaseWhichMonText:
- TX_FAR _ReleaseWhichMonText
- db "@"
-
-OnceReleasedText:
- TX_FAR _OnceReleasedText
- db "@"
-
-MonWasReleasedText:
- TX_FAR _MonWasReleasedText
- db "@"
-
-CableClubLeftGameboy::
- ld a, [hSerialConnectionStatus]
- cp USING_EXTERNAL_CLOCK
- ret z
- ld a, [wSpritePlayerStateData1FacingDirection] ; player's sprite facing direction
- cp SPRITE_FACING_RIGHT
- ret nz
- ld a, [wCurMap]
- cp TRADE_CENTER
- ld a, LINK_STATE_START_TRADE
- jr z, .next
- inc a ; LINK_STATE_START_BATTLE
-.next
- ld [wLinkState], a
- call EnableAutoTextBoxDrawing
- tx_pre_jump JustAMomentText
-
-CableClubRightGameboy::
- ld a, [hSerialConnectionStatus]
- cp USING_INTERNAL_CLOCK
- ret z
- ld a, [wSpritePlayerStateData1FacingDirection] ; player's sprite facing direction
- cp SPRITE_FACING_LEFT
- ret nz
- ld a, [wCurMap]
- cp TRADE_CENTER
- ld a, LINK_STATE_START_TRADE
- jr z, .next
- inc a ; LINK_STATE_START_BATTLE
-.next
- ld [wLinkState], a
- call EnableAutoTextBoxDrawing
- tx_pre_jump JustAMomentText
-
-JustAMomentText::
- TX_FAR _JustAMomentText
- db "@"
-
- ld a, [wSpritePlayerStateData1FacingDirection] ; player's sprite facing direction
- cp SPRITE_FACING_UP
- ret nz
- call EnableAutoTextBoxDrawing
- tx_pre_jump OpenBillsPCText
-
-OpenBillsPCText::
- TX_BILLS_PC
-
diff --git a/engine/menu/diploma.asm b/engine/menu/diploma.asm
deleted file mode 100644
index 3f309bd2..00000000
--- a/engine/menu/diploma.asm
+++ /dev/null
@@ -1,17 +0,0 @@
-DisplayDiploma:
- call SaveScreenTilesToBuffer2
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- xor a
- ld [wUpdateSpritesEnabled], a
- ld hl, wd730
- set 6, [hl]
- callab _DisplayDiploma
- call WaitForTextScrollButtonPress
- ld hl, wd730
- res 6, [hl]
- call GBPalWhiteOutWithDelay3
- call ReloadTilesetTilePatterns
- call RestoreScreenTilesAndReloadTilePatterns
- call Delay3
- jp GBPalNormal
diff --git a/engine/menu/draw_badges.asm b/engine/menu/draw_badges.asm
deleted file mode 100644
index 9e6262a0..00000000
--- a/engine/menu/draw_badges.asm
+++ /dev/null
@@ -1,120 +0,0 @@
-DrawBadges:
-; Draw 4x2 gym leader faces, with the faces replaced by
-; badges if they are owned. Used in the player status screen.
-
-; In Japanese versions, names are displayed above faces.
-; Instead of removing relevant code, the name graphics were erased.
-
-; Tile ids for face/badge graphics.
- ld de, wBadgeOrFaceTiles
- ld hl, .FaceBadgeTiles
- ld bc, 8
- call CopyData
-
-; Booleans for each badge.
- ld hl, wTempObtainedBadgesBooleans
- ld bc, 8
- xor a
- call FillMemory
-
-; Alter these based on owned badges.
- ld de, wTempObtainedBadgesBooleans
- ld hl, wBadgeOrFaceTiles
- ld a, [wObtainedBadges]
- ld b, a
- ld c, 8
-.CheckBadge
- srl b
- jr nc, .NextBadge
- ld a, [hl]
- add 4 ; Badge graphics are after each face
- ld [hl], a
- ld a, 1
- ld [de], a
-.NextBadge
- inc hl
- inc de
- dec c
- jr nz, .CheckBadge
-
-; Draw two rows of badges.
- ld hl, wBadgeNumberTile
- ld a, $d8 ; [1]
- ld [hli], a
- ld [hl], $60 ; First name
-
- coord hl, 2, 11
- ld de, wTempObtainedBadgesBooleans
- call .DrawBadgeRow
-
- coord hl, 2, 14
- ld de, wTempObtainedBadgesBooleans + 4
-; call .DrawBadgeRow
-; ret
-
-.DrawBadgeRow
-; Draw 4 badges.
-
- ld c, 4
-.DrawBadge
- push de
- push hl
-
-; Badge no.
- ld a, [wBadgeNumberTile]
- ld [hli], a
- inc a
- ld [wBadgeNumberTile], a
-
-; Names aren't printed if the badge is owned.
- ld a, [de]
- and a
- ld a, [wBadgeNameTile]
- jr nz, .SkipName
- call .PlaceTiles
- jr .PlaceBadge
-
-.SkipName
- inc a
- inc a
- inc hl
-
-.PlaceBadge
- ld [wBadgeNameTile], a
- ld de, SCREEN_WIDTH - 1
- add hl, de
- ld a, [wBadgeOrFaceTiles]
- call .PlaceTiles
- add hl, de
- call .PlaceTiles
-
-; Shift badge array back one byte.
- push bc
- ld hl, wBadgeOrFaceTiles + 1
- ld de, wBadgeOrFaceTiles
- ld bc, 8
- call CopyData
- pop bc
-
- pop hl
- ld de, 4
- add hl, de
-
- pop de
- inc de
- dec c
- jr nz, .DrawBadge
- ret
-
-.PlaceTiles
- ld [hli], a
- inc a
- ld [hl], a
- inc a
- ret
-
-.FaceBadgeTiles
- db $20, $28, $30, $38, $40, $48, $50, $58
-
-GymLeaderFaceAndBadgeTileGraphics:
- INCBIN "gfx/badges.2bpp"
diff --git a/engine/menu/draw_start_menu.asm b/engine/menu/draw_start_menu.asm
deleted file mode 100644
index 632b8c3a..00000000
--- a/engine/menu/draw_start_menu.asm
+++ /dev/null
@@ -1,87 +0,0 @@
-; function that displays the start menu
-DrawStartMenu:
- CheckEvent EVENT_GOT_POKEDEX
-; menu with pokedex
- coord hl, 10, 0
- lb bc, 14, 8
- jr nz,.drawTextBoxBorder
-; shorter menu if the player doesn't have the pokedex
- coord hl, 10, 0
- lb bc, 12, 8
-.drawTextBoxBorder
- call TextBoxBorder
- ld a, D_DOWN | D_UP | START | B_BUTTON | A_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, $02
- ld [wTopMenuItemY], a ; Y position of first menu choice
- ld a, $0b
- ld [wTopMenuItemX], a ; X position of first menu choice
- ld a, [wBattleAndStartSavedMenuItem] ; remembered menu selection from last time
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- xor a
- ld [wMenuWatchMovingOutOfBounds], a
- ld hl, wd730
- set 6, [hl] ; no pauses between printing each letter
- coord hl, 12, 2
- CheckEvent EVENT_GOT_POKEDEX
-; case for not having pokedex
- ld a, $06
- jr z, .storeMenuItemCount
-; case for having pokedex
- ld de, StartMenuPokedexText
- call PrintStartMenuItem
- ld a, $07
-.storeMenuItemCount
- ld [wMaxMenuItem], a ; number of menu items
- ld de, StartMenuPokemonText
- call PrintStartMenuItem
- ld de, StartMenuItemText
- call PrintStartMenuItem
- ld de, wPlayerName ; player's name
- call PrintStartMenuItem
- ld a, [wd72e]
- bit 6, a ; is the player using the link feature?
-; case for not using link feature
- ld de, StartMenuSaveText
- jr z, .printSaveOrResetText
-; case for using link feature
- ld de, StartMenuResetText
-.printSaveOrResetText
- call PrintStartMenuItem
- ld de, StartMenuOptionText
- call PrintStartMenuItem
- ld de, StartMenuExitText
- call PlaceString
- ld hl, wd730
- res 6, [hl] ; turn pauses between printing letters back on
- ret
-
-StartMenuPokedexText:
- db "POKéDEX@"
-
-StartMenuPokemonText:
- db "#MON@"
-
-StartMenuItemText:
- db "ITEM@"
-
-StartMenuSaveText:
- db "SAVE@"
-
-StartMenuResetText:
- db "RESET@"
-
-StartMenuExitText:
- db "EXIT@"
-
-StartMenuOptionText:
- db "OPTION@"
-
-PrintStartMenuItem:
- push hl
- call PlaceString
- pop hl
- ld de, SCREEN_WIDTH * 2
- add hl, de
- ret
diff --git a/engine/menu/league_pc.asm b/engine/menu/league_pc.asm
deleted file mode 100755
index 9946b90d..00000000
--- a/engine/menu/league_pc.asm
+++ /dev/null
@@ -1,119 +0,0 @@
-PKMNLeaguePC:
- ld hl, AccessedHoFPCText
- call PrintText
- ld hl, wd730
- set 6, [hl]
- push hl
- ld a, [wUpdateSpritesEnabled]
- push af
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- ld [wSpriteFlipped], a
- ld [wUpdateSpritesEnabled], a
- ld [wHoFTeamIndex2], a
- ld [wHoFTeamNo], a
- ld a, [wNumHoFTeams]
- ld b, a
- cp HOF_TEAM_CAPACITY + 1
- jr c, .loop
-; If the total number of hall of fame teams is greater than the storage
-; capacity, then calculate the number of the first team that is still recorded.
- ld b, HOF_TEAM_CAPACITY
- sub b
- ld [wHoFTeamNo], a
-.loop
- ld hl, wHoFTeamNo
- inc [hl]
- push bc
- ld a, [wHoFTeamIndex2]
- ld [wHoFTeamIndex], a
- callba LoadHallOfFameTeams
- call LeaguePCShowTeam
- pop bc
- jr c, .doneShowingTeams
- ld hl, wHoFTeamIndex2
- inc [hl]
- ld a, [hl]
- cp b
- jr nz, .loop
-.doneShowingTeams
- pop af
- ld [hTilesetType], a
- pop af
- ld [wUpdateSpritesEnabled], a
- pop hl
- res 6, [hl]
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- call RunDefaultPaletteCommand
- jp GBPalNormal
-
-LeaguePCShowTeam:
- ld c, PARTY_LENGTH
-.loop
- push bc
- call LeaguePCShowMon
- call WaitForTextScrollButtonPress
- ld a, [hJoyHeld]
- bit 1, a
- jr nz, .exit
- ld hl, wHallOfFame + HOF_MON
- ld de, wHallOfFame
- ld bc, HOF_TEAM - HOF_MON
- call CopyData
- pop bc
- ld a, [wHallOfFame + 0]
- cp $ff
- jr z, .done
- dec c
- jr nz, .loop
-.done
- and a
- ret
-.exit
- pop bc
- scf
- ret
-
-LeaguePCShowMon:
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- ld hl, wHallOfFame
- ld a, [hli]
- ld [wHoFMonSpecies], a
- ld [wcf91], a
- ld [wd0b5], a
- ld [wBattleMonSpecies2], a
- ld [wWholeScreenPaletteMonSpecies], a
- ld a, [hli]
- ld [wHoFMonLevel], a
- ld de, wcd6d
- ld bc, NAME_LENGTH
- call CopyData
- ld b, SET_PAL_POKEMON_WHOLE_SCREEN
- ld c, 0
- call RunPaletteCommand
- coord hl, 12, 5
- call GetMonHeader
- call LoadFrontSpriteByMonIndex
- call GBPalNormal
- coord hl, 0, 13
- lb bc, 2, 18
- call TextBoxBorder
- coord hl, 1, 15
- ld de, HallOfFameNoText
- call PlaceString
- coord hl, 16, 15
- ld de, wHoFTeamNo
- lb bc, 1, 3
- call PrintNumber
- jpba Func_7033f
-
-HallOfFameNoText:
- db "HALL OF FAME No @"
-
-AccessedHoFPCText:
- TX_FAR _AccessedHoFPCText
- db "@"
diff --git a/engine/menu/link_menu.asm b/engine/menu/link_menu.asm
deleted file mode 100644
index 9bc28b31..00000000
--- a/engine/menu/link_menu.asm
+++ /dev/null
@@ -1,910 +0,0 @@
-Func_f531b::
- ld c,$14
- call DelayFrames
- ld a,$1
- ld [wBuffer],a
- xor a
- ld [wUnknownSerialFlag_d499],a
- coord hl, 0,0
- lb bc, 4, 5
- call TextBoxBorder
- ld de,Text_f5791
- coord hl, 1,2
- call PlaceString
- coord hl, 8,0
- lb bc, 8, 10
- call TextBoxBorder
- coord hl, 10,2
- ld de,Text_f579c
- call PlaceString
- coord hl, 0,10
- lb bc, 6, 18
- call TextBoxBorder
- call UpdateSprites
- xor a
- ld [wUnusedCD37],a
- ld [wd72d],a
- ld [wd11e],a
- ld hl,wTopMenuItemY
- ld a,$2
- ld [hli],a
- ld a,$9
- ld [hli],a
- xor a
- ld [hli],a
- inc hl
- ld a,$3
- ld [hli],a
- ld a,$3
- ld [hli],a
- xor a
- ld [hl],a
-.asm_f5377
- call Func_f56bd
- call HandleMenuInput
- and $3
- add a
- add a
- ld b,a
- ld a,[wCurrentMenuItem]
- cp $3
- jr nz,.asm_f5390
- bit 2,b
- jr z,.asm_f5390
- dec a
- ld b,$8
-.asm_f5390
- add b
- add $c0
- ld [wLinkMenuSelectionSendBuffer],a
- ld [wLinkMenuSelectionSendBuffer+1],a
-.asm_f5399
- ld hl,wLinkMenuSelectionSendBuffer
- ld a,[hl]
- ld [hSerialSendData],a
- call Serial_ExchangeByte
- push af
- ld hl,wLinkMenuSelectionSendBuffer
- ld a,[hl]
- ld [hSerialSendData],a
- call Serial_ExchangeByte
- pop bc
- cp b
- jr nz,.asm_f5399
- and $f0
- cp $c0
- jr nz,.asm_f5399
- ld a,b
- and $c
- jr nz,.asm_f53c4
- ld a,[wLinkMenuSelectionSendBuffer]
- and $c
- jr z,.asm_f5377
- jr .asm_f53df
-.asm_f53c4
- ld a,[wLinkMenuSelectionSendBuffer]
- and $c
- jr z,.asm_f53d1
- ld a,[hSerialConnectionStatus]
- cp $2
- jr z,.asm_f53df
-.asm_f53d1
- ld a,$1
- ld [wd11e],a
- ld a,b
- ld [wLinkMenuSelectionSendBuffer],a
- and $3
- ld [wCurrentMenuItem],a
-.asm_f53df
- call DelayFrame
- call DelayFrame
- ld hl,wLinkMenuSelectionSendBuffer
- ld a,[hl]
- ld [hSerialSendData],a
- call Serial_ExchangeByte
- call Serial_ExchangeByte
- ld b,$14
-.loop
- call DelayFrame
- call Serial_SendZeroByte
- dec b
- jr nz,.loop
- ld b,$7f
- ld c,$7f
- ld d,$7f
- ld e,$ec
- ld a,[wLinkMenuSelectionSendBuffer]
- bit 3,a
- jr nz,.asm_f541a
- ld b,e
- ld e,c
- ld a,[wCurrentMenuItem]
- and a
- jr z,.asm_f541a
- ld c,b
- ld b,d
- dec a
- jr z,.asm_f541a
- ld d,c
- ld c,b
-.asm_f541a
- ld a,b
- Coorda 9,2
- ld a,c
- Coorda 9,4
- ld a,d
- Coorda 9,6
- ld a,e
- Coorda 9,8
- ld c,40
- call DelayFrames
- ld a,[wLinkMenuSelectionSendBuffer]
- bit 3,a
- jr nz,asm_f547f
- ld a,[wCurrentMenuItem]
- cp $3
- jr z,asm_f547f
- inc a
- ld [wUnknownSerialFlag_d499],a
- ld a,[wCurrentMenuItem]
- ld hl,PointerTable_f5488
- ld c,a
- ld b,$0
- add hl,bc
- add hl,bc
- ld a,[hli]
- ld h,[hl]
- ld l,a
- ld de,.returnaddress
- push de
- jp hl
-.returnaddress
- ld [wLinkMenuSelectionSendBuffer],a
- xor a
- ld [wUnknownSerialCounter],a
- ld [wUnknownSerialCounter+1],a
- call Serial_SyncAndExchangeNybble
- ld a,[wLinkMenuSelectionSendBuffer]
- and a
- jr nz,asm_f547c
- ld a, [wLinkMenuSelectionReceiveBuffer]
- and a
- jr nz, Func_f5476
- xor a
- ld [wUnknownSerialCounter],a
- ld [wUnknownSerialCounter+1],a
- and a
- ret
-
-Func_f5476::
- ld hl,ColosseumIneligibleText
- call PrintText
-asm_f547c::
- jp Func_f531b
-
-asm_f547f::
- xor a
- ld [wUnknownSerialCounter],a
- ld [wUnknownSerialCounter+1],a
- scf
- ret
-
-PointerTable_f5488::
- dw PokeCup
- dw PikaCup
- dw PetitCup
-
-PokeCup::
- ld hl,wPartyCount
- ld a,[hli]
- cp $3
- jp nz,NotThreeMonsInParty
- ld b,$3
-.loop
- ld a,[hli]
- cp MEW
- jp z,MewInParty
- dec b
- jr nz,.loop
- dec hl
- dec hl
- cp [hl] ; is third mon second mon?
- jp z,DuplicateSpecies
- dec hl ; wPartySpecies
- cp [hl] ; is third mon first mon?
- jp z,DuplicateSpecies
- ld a,[hli]
- cp [hl] ; is first mon second mon?
- jp z,DuplicateSpecies
- ld a,[wPartyMon1Level]
- cp 56
- jp nc,LevelAbove55
- cp 50
- jp c,LevelUnder50
- ld b,a
- ld a,[wPartyMon2Level]
- cp 56
- jp nc,LevelAbove55
- cp 50
- jp c,LevelUnder50
- ld c,a
- ld a,[wPartyMon3Level]
- cp 56
- jp nc,LevelAbove55
- cp 50
- jp c,LevelUnder50
- add b
- add c
- cp 156
- jp nc,CombinedLevelsGreaterThan155
- xor a
- ret
-
-PikaCup::
- ld hl,wPartyCount
- ld a,[hli]
- cp $3
- jp nz,NotThreeMonsInParty
- ld b,$3
-.loop
- ld a,[hli] ; wPartySpecies
- cp MEW
- jp z,MewInParty
- dec b
- jr nz,.loop
- dec hl
- dec hl
- cp [hl] ; is third mon second mon?
- jp z,DuplicateSpecies
- dec hl ; wPartySpecies
- cp [hl] ; is third mon first mon?
- jp z,DuplicateSpecies
- ld a,[hli]
- cp [hl] ; is first mon second mon?
- jp z,DuplicateSpecies
- ld a,[wPartyMon1Level]
- cp 21
- jp nc,LevelAbove20
- cp 15
- jp c,LevelUnder15
- ld b,a
- ld a,[wPartyMon2Level]
- cp 21
- jp nc,LevelAbove20
- cp 15
- jp c,LevelUnder15
- ld c,a
- ld a,[wPartyMon3Level]
- cp 21
- jp nc,LevelAbove20
- cp 15
- jp c,LevelUnder15
- add b
- add c
- cp 51
- jp nc,CombinedLevelsAbove50
- xor a
- ret
-
-PetitCup::
- ld hl,wPartyCount
- ld a,[hli]
- cp $3
- jp nz,NotThreeMonsInParty
- ld b,$3
-.loop
- ld a,[hli]
- cp MEW
- jp z,MewInParty
- dec b
- jr nz,.loop
- dec hl
- dec hl
- cp [hl] ; is third mon second mon?
- jp z,DuplicateSpecies
- dec hl ; wPartySpecies
- cp [hl] ; is third mon first mon?
- jp z,DuplicateSpecies
- ld a,[hli]
- cp [hl] ; is first mon second mon?
- jp z,DuplicateSpecies
- dec hl
- ld a,[hl]
- ld [wcf91],a
- push hl
- callab Func_3b10f
- pop hl
- jp c,asm_f56ad
- inc hl
- ld a,[hl]
- ld [wcf91],a
- push hl
- callab Func_3b10f
- pop hl
- jp c,asm_f56ad
- inc hl
- ld a,[hl]
- ld [wcf91],a
- push hl
- callab Func_3b10f
- pop hl
- jp c,asm_f56ad
- dec hl
- dec hl
- ld b,$3
-.bigloop
- ld a,[hli]
- push hl
- push bc
- push af
- dec a
- ld c,a
- ld b,$0
- ld hl,PokedexEntryPointers
- add hl,bc
- add hl,bc
- ld de,wcd6d
- ld bc,$2
- ld a,BANK(PokedexEntryPointers)
- call FarCopyData
- ld hl,wcd6d
- ld a,[hli]
- ld h,[hl]
- ld l,a
- ld de,wcd6d
- ld bc,$14
- ld a,BANK(PokedexEntryPointers)
- call FarCopyData
- ld hl,wcd6d
-.loop2
- ld a,[hli]
- cp "@"
- jr nz,.loop2
- ld a,[hli]
- cp $7
- jp nc,asm_f5689
- add a
- add a
- ld b,a
- add a
- add b
- ld b,a
- ld a,[hli]
- add b
- cp $51
- jp nc,asm_f5689
- ld a,[hli]
- sub $b9
- ld a,[hl]
- sbc $1
- jp nc,asm_f569b
- pop af
- pop bc
- pop hl
- dec b
- jr nz,.bigloop
- ld a,[wPartyMon1Level]
- cp 31
- jp nc,LevelAbove30
- cp 25
- jp c,LevelUnder25
- ld b,a
- ld a,[wPartyMon2Level]
- cp 31
- jp nc,LevelAbove30
- cp 25
- jp c,LevelUnder25
- ld c,a
- ld a,[wPartyMon3Level]
- cp 31
- jp nc,LevelAbove30
- cp 25
- jp c,LevelUnder25
- add b
- add c
- cp 81
- jp nc,CombinedLevelsAbove80
- xor a
- ret
-
-NotThreeMonsInParty::
- ld hl,Colosseum3MonsText
- call PrintText
- ld a,$1
- ret
-
-MewInParty::
- ld hl,ColosseumMewText
- call PrintText
- ld a,$2
- ret
-
-DuplicateSpecies::
- ld hl,ColosseumDifferentMonsText
- call PrintText
- ld a,$3
- ret
-
-LevelAbove55::
- ld hl,ColosseumMaxL55Text
- call PrintText
- ld a,$4
- ret
-
-LevelUnder50::
- ld hl,ColosseumMinL50Text
- call PrintText
- ld a,$5
- ret
-
-CombinedLevelsGreaterThan155::
- ld hl,ColosseumTotalL155Text
- call PrintText
- ld a,$6
- ret
-
-LevelAbove30::
- ld hl,ColosseumMaxL30Text
- call PrintText
- ld a,$7
- ret
-
-LevelUnder25::
- ld hl,ColosseumMinL25Text
- call PrintText
- ld a,$8
- ret
-
-CombinedLevelsAbove80::
- ld hl,ColosseumTotalL80Text
- call PrintText
- ld a,$9
- ret
-
-LevelAbove20::
- ld hl,ColosseumMaxL20Text
- call PrintText
- ld a,$a
- ret
-
-LevelUnder15::
- ld hl,ColosseumMinL15Text
- call PrintText
- ld a,$b
- ret
-
-CombinedLevelsAbove50::
- ld hl,ColosseumTotalL50Text
- call PrintText
- ld a,$c
- ret
-
-asm_f5689::
- pop af
- pop bc
- pop hl
- ld [wd11e],a
- call GetMonName
- ld hl,ColosseumHeightText
- call PrintText
- ld a,$d
- ret
-
-asm_f569b::
- pop af
- pop bc
- pop hl
- ld [wd11e],a
- call GetMonName
- ld hl,ColosseumWeightText
- call PrintText
- ld a,$e
- ret
-
-asm_f56ad::
- ld a,[hl]
- ld [wd11e],a
- call GetMonName
- ld hl,ColosseumEvolvedText
- call PrintText
- ld a,$f
- ret
-
-Func_f56bd::
- xor a
- ld [H_AUTOBGTRANSFERENABLED],a
- coord hl, 1,11
- lb bc, 6, 18
- call ClearScreenArea
- ld a,[wCurrentMenuItem]
- cp $3
- jr nc,.asm_f56e6
- ld hl,PointerTable_f56ee
- ld a,[wCurrentMenuItem]
- ld c,a
- ld b,$0
- add hl,bc
- add hl,bc
- ld a,[hli]
- ld h,[hl]
- ld l,a
- ld d,h
- ld e,l
- coord hl, 1,12
- call PlaceString
-.asm_f56e6
- call Delay3
- ld a,$1
- ld [H_AUTOBGTRANSFERENABLED],a
- ret
-
-PointerTable_f56ee::
- dw Text_f56f4
- dw Text_f5728
- dw Text_f575b
-
-Text_f56f4::
- db "LVs of 3<pkmn>:50-55"
- next "Sum of LVs:155 MAX"
- next "MEW can't attend.@"
-
-Text_f5728::
- db "LVs of 3<pkmn>:15-20"
- next "Sum of LVs:50 MAX"
- next "MEW can't attend.@"
-
-Text_f575b::
- db "3 Basic <pkmn>.LV25-30"
- next "Sum of LVs:80 MAX"
- next "6′8″ and 44lb MAX@"
-
-Text_f5791::
- db "View"
- next "Rules@"
-
-Text_f579c::
- db "# Cup"
- next "Pika Cup"
- next "Petit Cup"
- next "CANCEL@"
-
-Colosseum3MonsText::
- TX_FAR _Colosseum3MonsText
- db "@"
-
-ColosseumMewText::
- TX_FAR _ColosseumMewText
- db "@"
-
-ColosseumDifferentMonsText::
- TX_FAR _ColosseumDifferentMonsText
- db "@"
-
-ColosseumMaxL55Text::
- TX_FAR _ColosseumMaxL55Text
- db "@"
-
-ColosseumMinL50Text::
- TX_FAR _ColosseumMinL50Text
- db "@"
-
-ColosseumTotalL155Text::
- TX_FAR _ColosseumTotalL155Text
- db "@"
-
-ColosseumMaxL30Text::
- TX_FAR _ColosseumMaxL30Text
- db "@"
-
-ColosseumMinL25Text::
- TX_FAR _ColosseumMinL25Text
- db "@"
-
-ColosseumTotalL80Text::
- TX_FAR _ColosseumTotalL80Text
- db "@"
-
-ColosseumMaxL20Text::
- TX_FAR _ColosseumMaxL20Text
- db "@"
-
-ColosseumMinL15Text::
- TX_FAR _ColosseumMinL15Text
- db "@"
-
-ColosseumTotalL50Text::
- TX_FAR _ColosseumTotalL50Text
- db "@"
-
-ColosseumHeightText::
- TX_FAR _ColosseumHeightText
- db "@"
-
-ColosseumWeightText::
- TX_FAR _ColosseumWeightText
- db "@"
-
-ColosseumEvolvedText::
- TX_FAR _ColosseumEvolvedText
- db "@"
-
-ColosseumIneligibleText::
- TX_FAR _ColosseumIneligibleText
- db "@"
-
-LinkMenu:
- xor a
- ld [wLetterPrintingDelayFlags], a
- ld hl, wd72e
- set 6, [hl]
- ld hl, TextTerminator_f5a16
- call PrintText
- call SaveScreenTilesToBuffer1
- ld hl, ColosseumWhereToText
- call PrintText
- coord hl, 5, 3
- lb bc, 8, 13
- call TextBoxBorder
- call UpdateSprites
- coord hl, 7, 5
- ld de, TradeCenterText
- call PlaceString
- xor a
- ld [wUnusedCD37], a
- ld [wd72d], a
- ld [wd11e], a
- ld hl, wTopMenuItemY
- ld a, $5
- ld [hli], a
- ld a, $6
- ld [hli], a
- xor a
- ld [hli], a
- inc hl
- ld a, $3
- ld [hli], a
- ld [hli], a
- xor a
- ld [hl], a
-.waitForInputLoop
- call HandleMenuInput
- and A_BUTTON | B_BUTTON
- add a
- add a
- ld b, a
- ld a, [wCurrentMenuItem]
- cp $3
- jr nz,.asm_f586b
- bit 2,b
- jr z,.asm_f586b
- dec a
- ld b,$8
-.asm_f586b
- add b
- add $d0
- ld [wLinkMenuSelectionSendBuffer], a
- ld [wLinkMenuSelectionSendBuffer + 1], a
-.exchangeMenuSelectionLoop
- call Serial_ExchangeLinkMenuSelection
- ld a, [wLinkMenuSelectionReceiveBuffer]
- ld b, a
- and $f0
- cp $d0
- jr z, .asm_f5c7d
- ld a, [wLinkMenuSelectionReceiveBuffer + 1]
- ld b, a
- and $f0
- cp $d0
- jr nz, .exchangeMenuSelectionLoop
-.asm_f5c7d
- ld a, b
- and $c ; did the enemy press A or B?
- jr nz, .enemyPressedAOrB
-; the enemy didn't press A or B
- ld a, [wLinkMenuSelectionSendBuffer]
- and $c ; did the player press A or B?
- jr z, .waitForInputLoop ; if neither the player nor the enemy pressed A or B, try again
- jr .doneChoosingMenuSelection ; if the player pressed A or B but the enemy didn't, use the player's selection
-.enemyPressedAOrB
- ld a, [wLinkMenuSelectionSendBuffer]
- and $c ; did the player press A or B?
- jr z, .useEnemyMenuSelection ; if the enemy pressed A or B but the player didn't, use the enemy's selection
-; the enemy and the player both pressed A or B
-; The gameboy that is clocking the connection wins.
- ld a, [hSerialConnectionStatus]
- cp USING_INTERNAL_CLOCK
- jr z, .doneChoosingMenuSelection
-.useEnemyMenuSelection
- ld a, $1
- ld [wd11e], a
- ld a, b
- ld [wLinkMenuSelectionSendBuffer], a
- and $3
- ld [wCurrentMenuItem], a ; wCurrentMenuItem
-.doneChoosingMenuSelection
- ld a, [hSerialConnectionStatus]
- cp USING_INTERNAL_CLOCK
- jr nz, .skipStartingTransfer
- call DelayFrame
- call DelayFrame
- ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
-.skipStartingTransfer
- ld b, " "
- ld c, " "
- ld d, " "
- ld e, "▷"
- ld a, [wLinkMenuSelectionSendBuffer]
- and (B_BUTTON << 2) ; was B button pressed?
- jr nz, .updateCursorPosition
-; A button was pressed
- ld a, [wCurrentMenuItem]
- cp $2
- jp z, .asm_f5963
- ld b, e
- ld e, c
- ld a, [wCurrentMenuItem]
- and a
- jr z, .updateCursorPosition
- ld c, b
- ld b, d
- dec a
- jr z, .updateCursorPosition
- ld d, c
- ld c, b
-.updateCursorPosition
- call Func_f59ec
- call LoadScreenTilesFromBuffer1
- ld a, [wLinkMenuSelectionSendBuffer]
- and (B_BUTTON << 2) ; was B button pressed?
- jr nz, .choseCancel ; cancel if B pressed
- ld a, [wCurrentMenuItem]
- cp $2
- jr z, .choseCancel
- xor a
- ld [wWalkBikeSurfState], a ; start walking
- ld a, [wCurrentMenuItem]
- and a
- ld a, COLOSSEUM
- jr nz, .next
- ld a, TRADE_CENTER
-.next
- ld [wd72d], a
- ld hl, ColosseumPleaseWaitText
- call PrintText
- ld c, 50
- call DelayFrames
- ld hl, wd732
- res 1, [hl]
- ld a, [wDefaultMap]
- ld [wDestinationMap], a
- callab SpecialWarpIn
- ld c, 20
- call DelayFrames
- xor a
- ld [wMenuJoypadPollCount], a
- ld [wSerialExchangeNybbleSendData], a
- inc a ; LINK_STATE_IN_CABLE_CLUB
- ld [wLinkState], a
- ld [wEnteringCableClub], a
- jpab SpecialEnterMap
-.choseCancel
- xor a
- ld [wMenuJoypadPollCount], a
- call Delay3
- callab CloseLinkConnection
- ld hl, ColosseumCanceledText
- call PrintText
- ld hl, wd72e
- res 6, [hl]
- ret
-
-.asm_f5963
- ld a,[wd11e]
- and a
- jr nz,.asm_f5974
- ld b," "
- ld c," "
- ld d,"▷"
- ld e," "
- call Func_f59ec
-.asm_f5974
- xor a
- ld [wBuffer], a
- ld a,$ff
- ld [wSerialExchangeNybbleReceiveData],a
- ld a, $b
- ld [wLinkMenuSelectionSendBuffer], a
- ld b,$78
-.loop
- ld a,[hSerialConnectionStatus]
- cp $2
- call z,DelayFrame
- dec b
- jr z,.asm_f59b2
- call Serial_ExchangeNybble
- call DelayFrame
- ld a,[wSerialExchangeNybbleReceiveData]
- inc a
- jr z,.loop
- ld b,$f
-.loop2
- call DelayFrame
- call Serial_ExchangeNybble
- dec b
- jr nz,.loop2
- ld b,$f
-.loop3
- call DelayFrame
- call Serial_SendZeroByte
- dec b
- jr nz,.loop3
- jr .asm_f59d6
-
-.asm_f59b2
- xor a
- ld [wUnknownSerialCounter],a
- ld [wUnknownSerialCounter+1],a
- ld a,[wd11e]
- and a
- jr z,.asm_f59cd
- ld b," "
- ld c," "
- ld d," "
- ld e,"▷"
- call Func_f59ec
- jp .choseCancel
-
-.asm_f59cd
- ld hl,ColosseumVersionText
- call PrintText
- jp .choseCancel
-
-.asm_f59d6
- ld b," "
- ld c," "
- ld d,"▷"
- ld e," "
- call Func_f59ec
- call Func_f531b
- jp c,.choseCancel
- ld a,$f0
- jp .next
-
-Func_f59ec::
- ld a, b
- Coorda 6, 5
- ld a, c
- Coorda 6, 7
- ld a, d
- Coorda 6, 9
- ld a, e
- Coorda 6, 11
- ld c, 40
- call DelayFrames
- ret
-
-ColosseumWhereToText:
- TX_FAR _ColosseumWhereToText
- db "@"
-
-ColosseumPleaseWaitText:
- TX_FAR _ColosseumPleaseWaitText
- db "@"
-
-ColosseumCanceledText:
- TX_FAR _ColosseumCanceledText
- db "@"
-
-ColosseumVersionText:
- TX_FAR _ColosseumVersionText
- db "@"
-
-TextTerminator_f5a16:
- db "@"
-
-TradeCenterText:
- db "TRADE CENTER"
- next "COLOSSEUM"
- next "COLOSSEUM2"
- next "CANCEL@"
diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm
deleted file mode 100755
index ce27ebba..00000000
--- a/engine/menu/main_menu.asm
+++ /dev/null
@@ -1,297 +0,0 @@
-MainMenu:
-; Check save file
- call InitOptions
- xor a
- ld [wOptionsInitialized], a
- inc a
- ld [wSaveFileStatus], a
- call CheckForPlayerNameInSRAM
- jr nc, .mainMenuLoop
-
- predef LoadSAV
-
-.mainMenuLoop
- ld c, 20
- call DelayFrames
- xor a ; LINK_STATE_NONE
- ld [wLinkState], a
- ld hl, wPartyAndBillsPCSavedMenuItem
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld [wDefaultMap], a
- ld hl, wd72e
- res 6, [hl]
- call ClearScreen
- call RunDefaultPaletteCommand
- call LoadTextBoxTilePatterns
- call LoadFontTilePatterns
- ld hl, wd730
- set 6, [hl]
- ld a, [wSaveFileStatus]
- cp 1
- jr z, .noSaveFile
-; there's a save file
- coord hl, 0, 0
- lb bc, 6, 13
- call TextBoxBorder
- coord hl, 2, 2
- ld de, ContinueText
- call PlaceString
- jr .next2
-.noSaveFile
- coord hl, 0, 0
- lb bc, 4, 13
- call TextBoxBorder
- coord hl, 2, 2
- ld de, NewGameText
- call PlaceString
-.next2
- ld hl, wd730
- res 6, [hl]
- call UpdateSprites
- xor a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld [wMenuJoypadPollCount], a
- inc a
- ld [wTopMenuItemX], a
- inc a
- ld [wTopMenuItemY], a
- ld a, A_BUTTON | B_BUTTON | START
- ld [wMenuWatchedKeys], a
- ld a, [wSaveFileStatus]
- ld [wMaxMenuItem], a
- call HandleMenuInput
- bit 1, a ; pressed B?
- jp nz, DisplayTitleScreen ; if so, go back to the title screen
- ld c, 20
- call DelayFrames
- ld a, [wCurrentMenuItem]
- ld b, a
- ld a, [wSaveFileStatus]
- cp 2
- jp z, .skipInc
-; If there's no save file, increment the current menu item so that the numbers
-; are the same whether or not there's a save file.
- inc b
-.skipInc
- ld a, b
- and a
- jr z, .choseContinue
- cp 1
- jp z, StartNewGame
- call DisplayOptionMenu
- ld a, 1
- ld [wOptionsInitialized], a
- jp .mainMenuLoop
-.choseContinue
- call DisplayContinueGameInfo
- ld hl, wCurrentMapScriptFlags
- set 5, [hl]
-.inputLoop
- xor a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
- ld [hJoyHeld], a
- call Joypad
- ld a, [hJoyHeld]
- bit 0, a
- jr nz, .pressedA
- bit 1, a
- jp nz, .mainMenuLoop ; pressed B
- jr .inputLoop
-.pressedA
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- ld a, PLAYER_DIR_DOWN
- ld [wPlayerDirection], a
- ld c, 10
- call DelayFrames
- ld a, [wNumHoFTeams]
- and a
- jp z, SpecialEnterMap
- ld a, [wCurMap] ; map ID
- cp HALL_OF_FAME
- jp nz, SpecialEnterMap
- xor a
- ld [wDestinationMap], a
- ld hl, wd732
- set 2, [hl] ; fly warp or dungeon warp
- call SpecialWarpIn
- jp SpecialEnterMap
-
-InitOptions:
- ld a, 1 ; no delay
- ld [wLetterPrintingDelayFlags], a
- ld a, 3 ; medium speed
- ld [wOptions], a
- ld a, 64 ; audio?
- ld [wPrinterSettings], a
- ret
-
-Func_5cc1:
-; unused?
- ld a, $6d
- cp $80
- ret c ; will always be executed
- ld hl, NotEnoughMemoryText
- call PrintText
- ret
-
-NotEnoughMemoryText:
- TX_FAR _NotEnoughMemoryText
- db "@"
-
-StartNewGame:
- ld hl, wd732
- res 1, [hl]
- call OakSpeech
- ld a, $8
- ld [wPlayerMovingDirection], a
- ld c, 20
- call DelayFrames
-
-; enter map after using a special warp or loading the game from the main menu
-SpecialEnterMap:
- xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
- ld [hJoy5], a
- ld [wd72d], a
- ld hl, wd732
- set 0, [hl] ; count play time
- call ResetPlayerSpriteData
- ld c, 20
- call DelayFrames
- call Func_5cc1
- ld a, [wEnteringCableClub]
- and a
- ret nz
- jp EnterMap
-
-ContinueText:
- db "CONTINUE", $4e
-
-NewGameText:
- db "NEW GAME"
- next "OPTION@"
-
-DisplayContinueGameInfo:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- coord hl, 4, 7
- lb bc, 8, 14
- call TextBoxBorder
- coord hl, 5, 9
- ld de, SaveScreenInfoText
- call PlaceString
- coord hl, 12, 9
- ld de, wPlayerName
- call PlaceString
- coord hl, 17, 11
- call PrintNumBadges
- coord hl, 16, 13
- call PrintNumOwnedMons
- coord hl, 13, 15
- call PrintPlayTime
- ld a, 1
- ld [H_AUTOBGTRANSFERENABLED], a
- ld c, 30
- jp DelayFrames
-
-PrintSaveScreenText:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- coord hl, 4, 0
- lb bc, 8, 14
- call TextBoxBorder
- call LoadTextBoxTilePatterns
- call UpdateSprites
- coord hl, 5, 2
- ld de, SaveScreenInfoText
- call PlaceString
- coord hl, 12, 2
- ld de, wPlayerName
- call PlaceString
- coord hl, 17, 4
- call PrintNumBadges
- coord hl, 16, 6
- call PrintNumOwnedMons
- coord hl, 13, 8
- call PrintPlayTime
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- ld c, 30
- jp DelayFrames
-
-PrintNumBadges:
- push hl
- ld hl, wObtainedBadges
- ld b, $1
- call CountSetBits
- pop hl
- ld de, wNumSetBits
- lb bc, 1, 2
- jp PrintNumber
-
-PrintNumOwnedMons:
- push hl
- ld hl, wPokedexOwned
- ld b, wPokedexOwnedEnd - wPokedexOwned
- call CountSetBits
- pop hl
- ld de, wNumSetBits
- lb bc, 1, 3
- jp PrintNumber
-
-PrintPlayTime:
- ld de, wPlayTimeHours
- lb bc, 1, 3
- call PrintNumber
- ld [hl], $6d
- inc hl
- ld de, wPlayTimeMinutes
- lb bc, LEADING_ZEROES | 1, 2
- jp PrintNumber
-
-SaveScreenInfoText:
- db "PLAYER"
- next "BADGES "
- next "#DEX "
- next "TIME@"
-
-DisplayOptionMenu:
- callab DisplayOptionMenu_
- ret
-
-CheckForPlayerNameInSRAM:
-; Check if the player name data in SRAM has a string terminator character
-; (indicating that a name may have been saved there) and return whether it does
-; in carry.
- ld a, SRAM_ENABLE
- ld [MBC1SRamEnable], a
- ld a, $1
- ld [MBC1SRamBankingMode], a
- ld [MBC1SRamBank], a
- ld b, NAME_LENGTH
- ld hl, sPlayerName
-.loop
- ld a, [hli]
- cp "@"
- jr z, .found
- dec b
- jr nz, .loop
-; not found
- xor a
- ld [MBC1SRamEnable], a
- ld [MBC1SRamBankingMode], a
- and a
- ret
-.found
- xor a
- ld [MBC1SRamEnable], a
- ld [MBC1SRamBankingMode], a
- scf
- ret
diff --git a/engine/menu/naming_screen.asm b/engine/menu/naming_screen.asm
deleted file mode 100755
index 2560677a..00000000
--- a/engine/menu/naming_screen.asm
+++ /dev/null
@@ -1,526 +0,0 @@
-AskName:
- call SaveScreenTilesToBuffer1
- call GetPredefRegisters
- push hl
- ld a, [wIsInBattle]
- dec a
- coord hl, 0, 0
- lb bc, 4, 11
- call z, ClearScreenArea ; only if in wild battle
- ld a, [wcf91]
- ld [wd11e], a
- call GetMonName
- ld hl, DoYouWantToNicknameText
- call PrintText
- coord hl, 14, 7
- lb bc, 8, 15
- ld a, TWO_OPTION_MENU
- ld [wTextBoxID], a
- call DisplayTextBoxID
- pop hl
- ld a, [wCurrentMenuItem]
- and a
- jr nz, .declinedNickname
- ld a, [wUpdateSpritesEnabled]
- push af
- xor a
- ld [wUpdateSpritesEnabled], a
- push hl
- ld a, NAME_MON_SCREEN
- ld [wNamingScreenType], a
- call DisplayNamingScreen
- ld a, [wIsInBattle]
- and a
- jr nz, .inBattle
- call ReloadMapSpriteTilePatterns
-.inBattle
- call LoadScreenTilesFromBuffer1
- pop hl
- pop af
- ld [wUpdateSpritesEnabled], a
- ld a, [wcf4b]
- cp "@"
- ret nz
-.declinedNickname
- ld d, h
- ld e, l
- ld hl, wcd6d
- ld bc, NAME_LENGTH
- jp CopyData
-
-DoYouWantToNicknameText:
- TX_FAR _DoYouWantToNicknameText
- db "@"
-
-DisplayNameRaterScreen:
- ld hl, wBuffer
- xor a
- ld [wUpdateSpritesEnabled], a
- ld a, NAME_MON_SCREEN
- ld [wNamingScreenType], a
- call DisplayNamingScreen
- call GBPalWhiteOutWithDelay3
- call RestoreScreenTilesAndReloadTilePatterns
- call LoadGBPal
- ld a, [wcf4b]
- cp "@"
- jr z, .playerCancelled
- ld hl, wPartyMonNicks
- ld bc, NAME_LENGTH
- ld a, [wWhichPokemon]
- call AddNTimes
- ld e, l
- ld d, h
- ld hl, wBuffer
- ld bc, NAME_LENGTH
- call CopyData
- and a
- ret
-.playerCancelled
- scf
- ret
-
-DisplayNamingScreen:
- push hl
- ld hl, wd730
- set 6, [hl]
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- call UpdateSprites
- ld b, SET_PAL_GENERIC
- call RunPaletteCommand
- call LoadHpBarAndStatusTilePatterns
- call LoadEDTile
- callba LoadMonPartySpriteGfx
- coord hl, 0, 4
- lb bc, 9, 18
- call TextBoxBorder
- call PrintNamingText
- ld a, 3
- ld [wTopMenuItemY], a
- ld a, 1
- ld [wTopMenuItemX], a
- ld [wLastMenuItem], a
- ld [wCurrentMenuItem], a
- ld a, $ff
- ld [wMenuWatchedKeys], a
- ld a, 7
- ld [wMaxMenuItem], a
- ld a, "@"
- ld [wcf4b], a
- xor a
- ld hl, wNamingScreenSubmitName
- ld [hli], a
- ld [hli], a
- ld [wAnimCounter], a
-.selectReturnPoint
- call PrintAlphabet
- call GBPalNormal
-.ABStartReturnPoint
- ld a, [wNamingScreenSubmitName]
- and a
- jr nz, .submitNickname
- call PrintNicknameAndUnderscores
-.dPadReturnPoint
- call PlaceMenuCursor
-.inputLoop
- ld a, [wCurrentMenuItem]
- push af
- callba AnimatePartyMon_ForceSpeed1
- pop af
- ld [wCurrentMenuItem], a
- call JoypadLowSensitivity
- ld a, [hJoyPressed]
- and a
- jr z, .inputLoop
- ld hl, .namingScreenButtonFunctions
-.checkForPressedButton
- sla a
- jr c, .foundPressedButton
- inc hl
- inc hl
- inc hl
- inc hl
- jr .checkForPressedButton
-.foundPressedButton
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- ld a, [hli]
- ld h, [hl]
- ld l, a
- push de
- jp hl
-
-.submitNickname
- pop de
- ld hl, wcf4b
- ld bc, NAME_LENGTH
- call CopyData
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- call ClearSprites
- call RunDefaultPaletteCommand
- call GBPalNormal
- xor a
- ld [wAnimCounter], a
- ld hl, wd730
- res 6, [hl]
- ld a, [wIsInBattle]
- and a
- jp z, LoadTextBoxTilePatterns
- jpab LoadHudTilePatterns
-
-.namingScreenButtonFunctions
- dw .dPadReturnPoint
- dw .pressedDown
- dw .dPadReturnPoint
- dw .pressedUp
- dw .dPadReturnPoint
- dw .pressedLeft
- dw .dPadReturnPoint
- dw .pressedRight
- dw .ABStartReturnPoint
- dw .pressedStart
- dw .selectReturnPoint
- dw .pressedSelect
- dw .ABStartReturnPoint
- dw .pressedB
- dw .ABStartReturnPoint
- dw .pressedA
-
-.pressedA_changedCase
- pop de
- ld de, .selectReturnPoint
- push de
-.pressedSelect
- ld a, [wAlphabetCase]
- xor $1
- ld [wAlphabetCase], a
- ret
-
-.pressedStart
- ld a, 1
- ld [wNamingScreenSubmitName], a
- ret
-
-.pressedA
- ld a, [wCurrentMenuItem]
- cp $5 ; "ED" row
- jr nz, .didNotPressED
- ld a, [wTopMenuItemX]
- cp $11 ; "ED" column
- jr z, .pressedStart
-.didNotPressED
- ld a, [wCurrentMenuItem]
- cp $6 ; case switch row
- jr nz, .didNotPressCaseSwtich
- ld a, [wTopMenuItemX]
- cp $1 ; case switch column
- jr z, .pressedA_changedCase
-.didNotPressCaseSwtich
- ld hl, wMenuCursorLocation
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl
- ld a, [hl]
- ld [wNamingScreenLetter], a
- call CalcStringLength
- ld a, [wNamingScreenLetter]
- cp $e5
- ld de, Dakutens
- jr z, .dakutensAndHandakutens
- cp $e4
- ld de, Handakutens
- jr z, .dakutensAndHandakutens
- ld a, [wNamingScreenType]
- cp NAME_MON_SCREEN
- jr nc, .checkMonNameLength
- ld a, [wNamingScreenNameLength]
- cp $7 ; max length of player/rival names
- jr .checkNameLength
-.checkMonNameLength
- ld a, [wNamingScreenNameLength]
- cp $a ; max length of pokemon nicknames
-.checkNameLength
- jr c, .addLetter
- ret
-
-.dakutensAndHandakutens
- push hl
- call DakutensAndHandakutens
- pop hl
- ret nc
- dec hl
-.addLetter
- ld a, [wNamingScreenLetter]
- ld [hli], a
- ld [hl], "@"
- ld a, SFX_PRESS_AB
- call PlaySound
- ret
-.pressedB
- ld a, [wNamingScreenNameLength]
- and a
- ret z
- call CalcStringLength
- dec hl
- ld [hl], "@"
- ret
-.pressedRight
- ld a, [wCurrentMenuItem]
- cp $6
- ret z ; can't scroll right on bottom row
- ld a, [wTopMenuItemX]
- cp $11 ; max
- jp z, .wrapToFirstColumn
- inc a
- inc a
- jr .done
-.wrapToFirstColumn
- ld a, $1
- jr .done
-.pressedLeft
- ld a, [wCurrentMenuItem]
- cp $6
- ret z ; can't scroll right on bottom row
- ld a, [wTopMenuItemX]
- dec a
- jp z, .wrapToLastColumn
- dec a
- jr .done
-.wrapToLastColumn
- ld a, $11 ; max
- jr .done
-.pressedUp
- ld a, [wCurrentMenuItem]
- dec a
- ld [wCurrentMenuItem], a
- and a
- ret nz
- ld a, $6 ; wrap to bottom row
- ld [wCurrentMenuItem], a
- ld a, $1 ; force left column
- jr .done
-.pressedDown
- ld a, [wCurrentMenuItem]
- inc a
- ld [wCurrentMenuItem], a
- cp $7
- jr nz, .wrapToTopRow
- ld a, $1
- ld [wCurrentMenuItem], a
- jr .done
-.wrapToTopRow
- cp $6
- ret nz
- ld a, $1
-.done
- ld [wTopMenuItemX], a
- jp EraseMenuCursor
-
-LoadEDTile:
-; In Red/Blue, the bank for the ED_tile was defined incorrectly as bank0
-; Luckily, the MBC3 treats loading $0 into $2000-$2fff range as loading bank1 into $4000-$7fff range
-; Because Yellow uses the MBC5, loading $0 into $2000 - $2fff range will load bank0 instead of bank1 and thus incorrectly load the tile
-; Instead of defining the correct bank, GameFreak decided to simply copy the ED_Tile in the function during HBlank
- ld de, ED_Tile
- ld hl, vFont + $700
- ld c, $4 ; number of copies needed
-.waitForHBlankLoop
- ld a, [rSTAT]
- and %10 ; in HBlank?
- jr nz, .waitForHBlankLoop
- ld a, [de]
- ld [hli], a
- ld [hli], a
- inc de
- ld a, [de]
- ld [hli], a
- ld [hli], a
- inc de
- dec c
- jr nz, .waitForHBlankLoop
- ret
-
-ED_Tile:
- INCBIN "gfx/ED_tile.1bpp"
-ED_TileEnd:
-
-PrintAlphabet:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- ld a, [wAlphabetCase]
- and a
- ld de, LowerCaseAlphabet
- jr nz, .lowercase
- ld de, UpperCaseAlphabet
-.lowercase
- coord hl, 2, 5
- lb bc, 5, 9 ; 5 rows, 9 columns
-.outerLoop
- push bc
-.innerLoop
- ld a, [de]
- ld [hli], a
- inc hl
- inc de
- dec c
- jr nz, .innerLoop
- ld bc, SCREEN_WIDTH + 2
- add hl, bc
- pop bc
- dec b
- jr nz, .outerLoop
- call PlaceString
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- jp Delay3
-
-LowerCaseAlphabet:
- db "abcdefghijklmnopqrstuvwxyz ×():;[]",$e1,$e2,"-?!♂♀/⠄,¥UPPER CASE@"
-
-UpperCaseAlphabet:
- db "ABCDEFGHIJKLMNOPQRSTUVWXYZ ×():;[]",$e1,$e2,"-?!♂♀/⠄,¥lower case@"
-
-PrintNicknameAndUnderscores:
- call CalcStringLength
- ld a, c
- ld [wNamingScreenNameLength], a
- coord hl, 10, 2
- lb bc, 1, 10
- call ClearScreenArea
- coord hl, 10, 2
- ld de, wcf4b
- call PlaceString
- coord hl, 10, 3
- ld a, [wNamingScreenType]
- cp NAME_MON_SCREEN
- jr nc, .pokemon1
- ld b, 7 ; player or rival max name length
- jr .playerOrRival1
-.pokemon1
- ld b, 10 ; pokemon max name length
-.playerOrRival1
- ld a, $76 ; underscore tile id
-.placeUnderscoreLoop
- ld [hli], a
- dec b
- jr nz, .placeUnderscoreLoop
- ld a, [wNamingScreenType]
- cp NAME_MON_SCREEN
- ld a, [wNamingScreenNameLength]
- jr nc, .pokemon2
- cp 7 ; player or rival max name length
- jr .playerOrRival2
-.pokemon2
- cp 10 ; pokemon max name length
-.playerOrRival2
- jr nz, .emptySpacesRemaining
- ; when all spaces are filled, force the cursor onto the ED tile
- call EraseMenuCursor
- ld a, $11 ; "ED" x coord
- ld [wTopMenuItemX], a
- ld a, $5 ; "ED" y coord
- ld [wCurrentMenuItem], a
- ld a, [wNamingScreenType]
- cp NAME_MON_SCREEN
- ld a, 9 ; keep the last underscore raised
- jr nc, .pokemon3
- ld a, 6 ; keep the last underscore raised
-.pokemon3
-.emptySpacesRemaining
- ld c, a
- ld b, $0
- coord hl, 10, 3
- add hl, bc
- ld [hl], $77 ; raised underscore tile id
- ret
-
-DakutensAndHandakutens:
- push de
- call CalcStringLength
- dec hl
- ld a, [hl]
- pop hl
- ld de, $2
- call IsInArray
- ret nc
- inc hl
- ld a, [hl]
- ld [wNamingScreenLetter], a
- ret
-
-Dakutens:
- db "かが", "きぎ", "くぐ", "けげ", "こご"
- db "さざ", "しじ", "すず", "せぜ", "そぞ"
- db "ただ", "ちぢ", "つづ", "てで", "とど"
- db "はば", "ひび", "ふぶ", "へべ", "ほぼ"
- db "カガ", "キギ", "クグ", "ケゲ", "コゴ"
- db "サザ", "シジ", "スズ", "セゼ", "ソゾ"
- db "タダ", "チヂ", "ツヅ", "テデ", "トド"
- db "ハバ", "ヒビ", "フブ", "へべ", "ホボ"
- db $ff
-
-Handakutens:
- db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ"
- db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ"
- db $ff
-
-; calculates the length of the string at wcf4b and stores it in c
-CalcStringLength:
- ld hl, wcf4b
- ld c, $0
-.loop
- ld a, [hl]
- cp "@"
- ret z
- inc hl
- inc c
- jr .loop
-
-PrintNamingText:
- coord hl, 0, 1
- ld a, [wNamingScreenType]
- ld de, YourTextString
- and a
- jr z, .notNickname
- ld de, RivalsTextString
- dec a
- jr z, .notNickname
- ld a, [wcf91]
- ld [wMonPartySpriteSpecies], a
- push af
- callba WriteMonPartySpriteOAMBySpecies
- pop af
- ld [wd11e], a
- call GetMonName
- coord hl, 4, 1
- call PlaceString
- ld hl, $1
- add hl, bc
- ld [hl], $c9
- coord hl, 1, 3
- ld de, NicknameTextString
- jr .placeString
-.notNickname
- call PlaceString
- ld l, c
- ld h, b
- ld de, NameTextString
-.placeString
- jp PlaceString
-
-YourTextString:
- db "YOUR @"
-
-RivalsTextString:
- db "RIVAL's @"
-
-NameTextString:
- db "NAME?@"
-
-NicknameTextString:
- db "NICKNAME?@"
diff --git a/engine/menu/oaks_pc.asm b/engine/menu/oaks_pc.asm
deleted file mode 100755
index 03c9b8f1..00000000
--- a/engine/menu/oaks_pc.asm
+++ /dev/null
@@ -1,28 +0,0 @@
-OpenOaksPC:
- call SaveScreenTilesToBuffer2
- ld hl, AccessedOaksPCText
- call PrintText
- ld hl, GetDexRatedText
- call PrintText
- call YesNoChoice
- ld a, [wCurrentMenuItem]
- and a
- jr nz, .closePC
- predef DisplayDexRating
-.closePC
- ld hl, ClosedOaksPCText
- call PrintText
- jp LoadScreenTilesFromBuffer2
-
-GetDexRatedText:
- TX_FAR _GetDexRatedText
- db "@"
-
-ClosedOaksPCText:
- TX_FAR _ClosedOaksPCText
- TX_WAIT
- db "@"
-
-AccessedOaksPCText:
- TX_FAR _AccessedOaksPCText
- db "@"
diff --git a/engine/menu/options.asm b/engine/menu/options.asm
deleted file mode 100644
index da89ad82..00000000
--- a/engine/menu/options.asm
+++ /dev/null
@@ -1,443 +0,0 @@
-DisplayOptionMenu_:
- call InitOptionsMenu
-.optionMenuLoop
- call JoypadLowSensitivity
- ld a, [hJoy5]
- and START | B_BUTTON
- jr nz, .exitOptionMenu
- call OptionsControl
- jr c, .dpadDelay
- call GetOptionPointer
- jr c, .exitOptionMenu
-.dpadDelay
- call OptionsMenu_UpdateCursorPosition
- call DelayFrame
- call DelayFrame
- call DelayFrame
- jr .optionMenuLoop
-.exitOptionMenu
- ret
-
-GetOptionPointer:
- ld a, [wOptionsCursorLocation]
- ld e, a
- ld d, $0
- ld hl, OptionMenuJumpTable
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl ; jump to the function for the current highlighted option
-
-OptionMenuJumpTable:
- dw OptionsMenu_TextSpeed
- dw OptionsMenu_BattleAnimations
- dw OptionsMenu_BattleStyle
- dw OptionsMenu_SpeakerSettings
- dw OptionsMenu_GBPrinterBrightness
- dw OptionsMenu_Dummy
- dw OptionsMenu_Dummy
- dw OptionsMenu_Cancel
-
-OptionsMenu_TextSpeed:
- call GetTextSpeed
- ld a, [hJoy5]
- bit 4, a ; right
- jr nz, .pressedRight
- bit 5, a
- jr nz, .pressedLeft
- jr .asm_41ce0
-.pressedRight
- ld a, c
- cp $2
- jr c, .asm_41cca
- ld c, $ff
-.asm_41cca
- inc c
- ld a, e
- jr .asm_41cd6
-.pressedLeft
- ld a, c
- and a
- jr nz, .asm_41cd4
- ld c, $3
-.asm_41cd4
- dec c
- ld a, d
-.asm_41cd6
- ld b, a
- ld a, [wOptions]
- and $f0
- or b
- ld [wOptions], a
-.asm_41ce0
- ld b, $0
- ld hl, TextSpeedStringsPointerTable
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- coord hl, 14, 2
- call PlaceString
- and a
- ret
-
-TextSpeedStringsPointerTable:
- dw FastText
- dw MidText
- dw SlowText
-
-FastText:
- db "FAST@"
-MidText:
- db "MID @"
-SlowText:
- db "SLOW@"
-
-GetTextSpeed:
- ld a, [wOptions]
- and $f
- cp $5
- jr z, .slowTextOption
- cp $1
- jr z, .fastTextOption
-; mid text option
- ld c, $1
- lb de, 1, 5
- ret
-.slowTextOption
- ld c, $2
- lb de, 3, 1
- ret
-.fastTextOption
- ld c, $0
- lb de, 5, 3
- ret
-
-OptionsMenu_BattleAnimations:
- ld a, [hJoy5]
- and D_RIGHT | D_LEFT
- jr nz, .asm_41d33
- ld a, [wOptions]
- and $80 ; mask other bits
- jr .asm_41d3b
-.asm_41d33
- ld a, [wOptions]
- xor $80
- ld [wOptions], a
-.asm_41d3b
- ld bc, $0
- sla a
- rl c
- ld hl, AnimationOptionStringsPointerTable
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- coord hl, 14, 4
- call PlaceString
- and a
- ret
-
-AnimationOptionStringsPointerTable:
- dw AnimationOnText
- dw AnimationOffText
-
-AnimationOnText:
- db "ON @"
-AnimationOffText:
- db "OFF@"
-
-OptionsMenu_BattleStyle:
- ld a, [hJoy5]
- and D_LEFT | D_RIGHT
- jr nz, .asm_41d6b
- ld a, [wOptions]
- and $40 ; mask other bits
- jr .asm_41d73
-.asm_41d6b
- ld a, [wOptions]
- xor $40
- ld [wOptions], a
-.asm_41d73
- ld bc, $0
- sla a
- sla a
- rl c
- ld hl, BattleStyleOptionStringsPointerTable
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- coord hl, 14, 6
- call PlaceString
- and a
- ret
-
-BattleStyleOptionStringsPointerTable:
- dw BattleStyleShiftText
- dw BattleStyleSetText
-
-BattleStyleShiftText:
- db "SHIFT@"
-BattleStyleSetText:
- db "SET @"
-
-OptionsMenu_SpeakerSettings:
- ld a, [wOptions]
- and $30
- swap a
- ld c, a
- ld a, [hJoy5]
- bit 4, a
- jr nz, .pressedRight
- bit 5, a
- jr nz, .pressedLeft
- jr .asm_41dca
-.pressedRight
- ld a, c
- inc a
- and $3
- jr .asm_41dba
-.pressedLeft
- ld a, c
- dec a
- and $3
-.asm_41dba
- ld c, a
- swap a
- ld b, a
- xor a
- ld [rNR51], a
- ld a, [wOptions]
- and $cf
- or b
- ld [wOptions], a
-.asm_41dca
- ld b, $0
- ld hl, SpeakerOptionStringsPointerTable
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- coord hl, 8, 8
- call PlaceString
- and a
- ret
-
-SpeakerOptionStringsPointerTable:
- dw MonoSoundText
- dw Earphone1SoundText
- dw Earphone2SoundText
- dw Earphone3SoundText
-
-MonoSoundText:
- db "MONO @"
-Earphone1SoundText:
- db "EARPHONE1@"
-Earphone2SoundText:
- db "EARPHONE2@"
-Earphone3SoundText:
- db "EARPHONE3@"
-
-OptionsMenu_GBPrinterBrightness:
- call Func_41e7b
- ld a, [hJoy5]
- bit 4, a
- jr nz, .pressedRight
- bit 5, a
- jr nz, .pressedLeft
- jr .asm_41e32
-.pressedRight
- ld a, c
- cp $4
- jr c, .asm_41e22
- ld c, $ff
-.asm_41e22
- inc c
- ld a, e
- jr .asm_41e2e
-.pressedLeft
- ld a, c
- and a
- jr nz, .asm_41e2c
- ld c, $5
-.asm_41e2c
- dec c
- ld a, d
-.asm_41e2e
- ld b, a
- ld [wPrinterSettings], a
-.asm_41e32
- ld b, $0
- ld hl, GBPrinterOptionStringsPointerTable
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- coord hl, 8, 10
- call PlaceString
- and a
- ret
-
-GBPrinterOptionStringsPointerTable:
- dw LightestPrintText
- dw LighterPrintText
- dw NormalPrintText
- dw DarkerPrintText
- dw DarkestPrintText
-
-LightestPrintText:
- db "LIGHTEST@"
-LighterPrintText:
- db "LIGHTER @"
-NormalPrintText:
- db "NORMAL @"
-DarkerPrintText:
- db "DARKER @"
-DarkestPrintText:
- db "DARKEST @"
-
-Func_41e7b:
- ld a, [wPrinterSettings]
- and a
- jr z, .asm_41e93
- cp $20
- jr z, .asm_41e99
- cp $60
- jr z, .asm_41e9f
- cp $7f
- jr z, .asm_41ea5
- ld c, $2
- lb de, $20, $60
- ret
-.asm_41e93
- ld c, $0
- lb de, $7f, $20
- ret
-.asm_41e99
- ld c, $1
- lb de, $0, $40
- ret
-.asm_41e9f
- ld c, $3
- lb de, $40, $7f
- ret
-.asm_41ea5
- ld c, $4
- lb de, $60, $0
- ret
-
-OptionsMenu_Dummy:
- and a
- ret
-
-OptionsMenu_Cancel:
- ld a, [hJoy5]
- and A_BUTTON
- jr nz, .pressedCancel
- and a
- ret
-.pressedCancel
- scf
- ret
-
-OptionsControl:
- ld hl, wOptionsCursorLocation
- ld a, [hJoy5]
- cp D_DOWN
- jr z, .pressedDown
- cp D_UP
- jr z, .pressedUp
- and a
- ret
-.pressedDown
- ld a, [hl]
- cp $7
- jr nz, .doNotWrapAround
- ld [hl], $0
- scf
- ret
-.doNotWrapAround
- cp $4
- jr c, .regularIncrement
- ld [hl], $6
-.regularIncrement
- inc [hl]
- scf
- ret
-.pressedUp
- ld a, [hl]
- cp $7
- jr nz, .doNotMoveCursorToPrintOption
- ld [hl], $4
- scf
- ret
-.doNotMoveCursorToPrintOption
- and a
- jr nz, .regularDecrement
- ld [hl], $8
-.regularDecrement
- dec [hl]
- scf
- ret
-
-OptionsMenu_UpdateCursorPosition:
- coord hl, 1, 1
- ld de, SCREEN_WIDTH
- ld c, 16
-.loop
- ld [hl], " "
- add hl, de
- dec c
- jr nz, .loop
- coord hl, 1, 2
- ld bc, SCREEN_WIDTH * 2
- ld a, [wOptionsCursorLocation]
- call AddNTimes
- ld [hl], "▶"
- ret
-
-InitOptionsMenu:
- coord hl, 0, 0
- lb bc, SCREEN_HEIGHT - 2, SCREEN_WIDTH - 2
- call TextBoxBorder
- coord hl, 2, 2
- ld de, AllOptionsText
- call PlaceString
- coord hl, 2, 16
- ld de, OptionMenuCancelText
- call PlaceString
- xor a
- ld [wOptionsCursorLocation], a
- ld c, 5 ; the number of options to loop through
-.loop
- push bc
- call GetOptionPointer ; updates the next option
- pop bc
- ld hl, wOptionsCursorLocation
- inc [hl] ; moves the cursor for the highlighted option
- dec c
- jr nz, .loop
- xor a
- ld [wOptionsCursorLocation], a
- inc a
- ld [H_AUTOBGTRANSFERENABLED], a
- call Delay3
- ret
-
-AllOptionsText:
- db "TEXT SPEED :"
- next "ANIMATION :"
- next "BATTLESTYLE:"
- next "SOUND:"
- next "PRINT:@"
-
-OptionMenuCancelText:
- db "CANCEL@"
diff --git a/engine/menu/party_menu.asm b/engine/menu/party_menu.asm
deleted file mode 100755
index 00c757be..00000000
--- a/engine/menu/party_menu.asm
+++ /dev/null
@@ -1,333 +0,0 @@
-; [wPartyMenuTypeOrMessageID] = menu type / message ID
-; if less than $F0, it is a menu type
-; menu types:
-; 00: normal pokemon menu (e.g. Start menu)
-; 01: use healing item on pokemon menu
-; 02: in-battle switch pokemon menu
-; 03: learn TM/HM menu
-; 04: swap pokemon positions menu
-; 05: use evolution stone on pokemon menu
-; otherwise, it is a message ID
-; f0: poison healed
-; f1: burn healed
-; f2: freeze healed
-; f3: sleep healed
-; f4: paralysis healed
-; f5: HP healed
-; f6: health returned
-; f7: revitalized
-; f8: leveled up
-DrawPartyMenu_:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- call ClearScreen
- call UpdateSprites
- callba LoadMonPartySpriteGfxWithLCDDisabled ; load pokemon icon graphics
-
-RedrawPartyMenu_:
- ld a, [wPartyMenuTypeOrMessageID]
- cp SWAP_MONS_PARTY_MENU
- jp z, .printMessage
- call ErasePartyMenuCursors
- callba InitPartyMenuBlkPacket
- coord hl, 3, 0
- ld de, wPartySpecies
- xor a
- ld c, a
- ld [hPartyMonIndex], a
- ld [wWhichPartyMenuHPBar], a
-.loop
- ld a, [de]
- cp $FF ; reached the terminator?
- jp z, .afterDrawingMonEntries
- push bc
- push de
- push hl
- ld a, c
- push hl
- ld hl, wPartyMonNicks
- call GetPartyMonName
- pop hl
- call PlaceString ; print the pokemon's name
- ld a, [hPartyMonIndex]
- ld [wWhichPokemon], a
- callab IsThisPartymonStarterPikachu_Party
- jr nc, .regularMon
- call CheckPikachuFollowingPlayer
- jr z, .regularMon
- ld a, $ff
- ld [hPartyMonIndex], a
-.regularMon
- callba WriteMonPartySpriteOAMByPartyIndex ; place the appropriate pokemon icon
- ld a, [wWhichPokemon]
- inc a
- ld [hPartyMonIndex], a
- call LoadMonData
- pop hl
- push hl
- ld a, [wMenuItemToSwap]
- and a ; is the player swapping pokemon positions?
- jr z, .skipUnfilledRightArrow
-; if the player is swapping pokemon positions
- dec a
- ld b, a
- ld a, [wWhichPokemon]
- cp b ; is the player swapping the current pokemon in the list?
- jr nz, .skipUnfilledRightArrow
-; the player is swapping the current pokemon in the list
- dec hl
- dec hl
- dec hl
- ld a, "▷" ; unfilled right arrow menu cursor
- ld [hli], a ; place the cursor
- inc hl
- inc hl
-.skipUnfilledRightArrow
- ld a, [wPartyMenuTypeOrMessageID] ; menu type
- cp TMHM_PARTY_MENU
- jr z, .teachMoveMenu
- cp EVO_STONE_PARTY_MENU
- jr z, .evolutionStoneMenu
- push hl
- ld bc, 14 ; 14 columns to the right
- add hl, bc
- ld de, wLoadedMonStatus
- call PrintStatusCondition
- pop hl
- push hl
- ld bc, SCREEN_WIDTH + 1 ; down 1 row and right 1 column
- ld a, [hFlags_0xFFFA]
- set 0, a
- ld [hFlags_0xFFFA], a
- add hl, bc
- predef DrawHP2 ; draw HP bar and prints current / max HP
- ld a, [hFlags_0xFFFA]
- res 0, a
- ld [hFlags_0xFFFA], a
- call SetPartyMenuHPBarColor ; color the HP bar (on SGB)
- pop hl
- jr .printLevel
-.teachMoveMenu
- push hl
- predef CanLearnTM ; check if the pokemon can learn the move
- pop hl
- ld de, .ableToLearnMoveText
- ld a, c
- and a
- jr nz, .placeMoveLearnabilityString
- ld de, .notAbleToLearnMoveText
-.placeMoveLearnabilityString
- push hl
- ld bc, 20 + 9 ; down 1 row and right 9 columns
- add hl, bc
- call PlaceString
- pop hl
-.printLevel
- ld bc, 10 ; move 10 columns to the right
- add hl, bc
- call PrintLevel
- pop hl
- pop de
- inc de
- ld bc, 2 * 20
- add hl, bc
- pop bc
- inc c
- jp .loop
-.ableToLearnMoveText
- db "ABLE@"
-.notAbleToLearnMoveText
- db "NOT ABLE@"
-.evolutionStoneMenu
- push hl
- ld hl, EvosMovesPointerTable
- ld b, 0
- ld a, [wLoadedMonSpecies]
- dec a
- add a
- rl b
- ld c, a
- add hl, bc
- ld de, wEvosMoves
- ld a, BANK(EvosMovesPointerTable)
- ld bc, 2
- call FarCopyData
- ld hl, wEvosMoves
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wEvosMoves
- ld a, BANK(EvosMovesPointerTable)
- ld bc, wEvosMoves.end - wEvosMoves
- call FarCopyData
- ld hl, wEvosMoves
- ld de, .notAbleToEvolveText
-; loop through the pokemon's evolution entries
-.checkEvolutionsLoop
- ld a, [hli]
- and a ; reached terminator?
- jr z, .placeEvolutionStoneString ; if so, place the "NOT ABLE" string
- inc hl
- inc hl
- cp EV_ITEM
- jr nz, .checkEvolutionsLoop
-; if it's a stone evolution entry
- dec hl
- dec hl
- ld b, [hl]
- ld a, [wEvoStoneItemID] ; the stone the player used
- inc hl
- inc hl
- inc hl
- cp b ; does the player's stone match this evolution entry's stone?
- jr nz, .checkEvolutionsLoop
-; if it does match
- ld de, .ableToEvolveText
-.placeEvolutionStoneString
- pop hl
- push hl
- ld bc, 20 + 9 ; down 1 row and right 9 columns
- add hl, bc
- call PlaceString
- pop hl
- jr .printLevel
-.ableToEvolveText
- db "ABLE@"
-.notAbleToEvolveText
- db "NOT ABLE@"
-.afterDrawingMonEntries
- ld b, SET_PAL_PARTY_MENU
- call RunPaletteCommand
-.printMessage
- ld hl, wd730
- ld a, [hl]
- push af
- push hl
- set 6, [hl] ; turn off letter printing delay
- ld a, [wPartyMenuTypeOrMessageID] ; message ID
- cp $F0
- jr nc, .printItemUseMessage
- add a
- ld hl, PartyMenuMessagePointers
- ld b, 0
- ld c, a
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- call PrintText
-.done
- pop hl
- pop af
- ld [hl], a
- ld a, 1
- ld [H_AUTOBGTRANSFERENABLED], a
- call Delay3
- jp GBPalNormal
-.printItemUseMessage
- and $0F
- ld hl, PartyMenuItemUseMessagePointers
- add a
- ld c, a
- ld b, 0
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- push hl
- ld a, [wUsedItemOnWhichPokemon]
- ld hl, wPartyMonNicks
- call GetPartyMonName
- pop hl
- call PrintText
- jr .done
-
-PartyMenuItemUseMessagePointers:
- dw AntidoteText
- dw BurnHealText
- dw IceHealText
- dw AwakeningText
- dw ParlyzHealText
- dw PotionText
- dw FullHealText
- dw ReviveText
- dw RareCandyText
-
-PartyMenuMessagePointers:
- dw PartyMenuNormalText
- dw PartyMenuItemUseText
- dw PartyMenuBattleText
- dw PartyMenuUseTMText
- dw PartyMenuSwapMonText
- dw PartyMenuItemUseText
-
-PartyMenuNormalText:
- TX_FAR _PartyMenuNormalText
- db "@"
-
-PartyMenuItemUseText:
- TX_FAR _PartyMenuItemUseText
- db "@"
-
-PartyMenuBattleText:
- TX_FAR _PartyMenuBattleText
- db "@"
-
-PartyMenuUseTMText:
- TX_FAR _PartyMenuUseTMText
- db "@"
-
-PartyMenuSwapMonText:
- TX_FAR _PartyMenuSwapMonText
- db "@"
-
-PotionText:
- TX_FAR _PotionText
- db "@"
-
-AntidoteText:
- TX_FAR _AntidoteText
- db "@"
-
-ParlyzHealText:
- TX_FAR _ParlyzHealText
- db "@"
-
-BurnHealText:
- TX_FAR _BurnHealText
- db "@"
-
-IceHealText:
- TX_FAR _IceHealText
- db "@"
-
-AwakeningText:
- TX_FAR _AwakeningText
- db "@"
-
-FullHealText:
- TX_FAR _FullHealText
- db "@"
-
-ReviveText:
- TX_FAR _ReviveText
- db "@"
-
-RareCandyText:
- TX_FAR _RareCandyText
- TX_SFX_ITEM_1 ; probably supposed to play SFX_LEVEL_UP but the wrong music bank is loaded
- TX_BLINK
- db "@"
-
-SetPartyMenuHPBarColor:
- ld hl, wPartyMenuHPBarColors
- ld a, [wWhichPartyMenuHPBar]
- ld c, a
- ld b, 0
- add hl, bc
- call GetHealthBarColor
- ld b, UPDATE_PARTY_MENU_BLK_PACKET
- call RunPaletteCommand
- ld hl, wWhichPartyMenuHPBar
- inc [hl]
- ret
diff --git a/engine/menu/pc.asm b/engine/menu/pc.asm
deleted file mode 100755
index 5639bd99..00000000
--- a/engine/menu/pc.asm
+++ /dev/null
@@ -1,141 +0,0 @@
-ActivatePC:
- call SaveScreenTilesToBuffer2
- ld a, SFX_TURN_ON_PC
- call PlaySound
- ld hl, TurnedOnPC1Text
- call PrintText
- call WaitForSoundToFinish
- ld hl, wFlags_0xcd60
- set 3, [hl]
- call LoadScreenTilesFromBuffer2
- call Delay3
-PCMainMenu:
- callba DisplayPCMainMenu
- ld hl, wFlags_0xcd60
- set 5, [hl]
- call HandleMenuInput
- bit 1, a ;if player pressed B
- jp nz, LogOff
- ld a, [wMaxMenuItem]
- cp 2
- jr nz, .next ;if not 2 menu items (not counting log off) (2 occurs before you get the pokedex)
- ld a, [wCurrentMenuItem]
- and a
- jp z, BillsPC ;if current menu item id is 0, it's bills pc
- cp 1
- jr z, .playersPC ;if current menu item id is 1, it's players pc
- jp LogOff ;otherwise, it's 2, and you're logging off
-.next
- cp 3
- jr nz, .next2 ;if not 3 menu items (not counting log off) (3 occurs after you get the pokedex, before you beat the pokemon league)
- ld a, [wCurrentMenuItem]
- and a
- jp z, BillsPC ;if current menu item id is 0, it's bills pc
- cp 1
- jr z, .playersPC ;if current menu item id is 1, it's players pc
- cp 2
- jp z, OaksPC ;if current menu item id is 2, it's oaks pc
- jp LogOff ;otherwise, it's 3, and you're logging off
-.next2
- ld a, [wCurrentMenuItem]
- and a
- jp z, BillsPC ;if current menu item id is 0, it's bills pc
- cp 1
- jr z, .playersPC ;if current menu item id is 1, it's players pc
- cp 2
- jp z, OaksPC ;if current menu item id is 2, it's oaks pc
- cp 3
- jp z, PKMNLeague ;if current menu item id is 3, it's pkmnleague
- jp LogOff ;otherwise, it's 4, and you're logging off
-.playersPC
- ld hl, wFlags_0xcd60
- res 5, [hl]
- set 3, [hl]
- ld a, SFX_ENTER_PC
- call PlaySound
- call WaitForSoundToFinish
- ld hl, AccessedMyPCText
- call PrintText
- callba PlayerPC
- jr ReloadMainMenu
-OaksPC:
- ld a, SFX_ENTER_PC
- call PlaySound
- call WaitForSoundToFinish
- callba OpenOaksPC
- jr ReloadMainMenu
-PKMNLeague:
- ld a, SFX_ENTER_PC
- call PlaySound
- call WaitForSoundToFinish
- callba PKMNLeaguePC
- jr ReloadMainMenu
-BillsPC:
- ld a, SFX_ENTER_PC
- call PlaySound
- call WaitForSoundToFinish
- CheckEvent EVENT_MET_BILL
- jr nz, .billsPC ;if you've met bill, use that bill's instead of someone's
- ld hl, AccessedSomeonesPCText
- jr .printText
-.billsPC
- ld hl, AccessedBillsPCText
-.printText
- call PrintText
- callba BillsPC_
-ReloadMainMenu:
- xor a
- ld [wDoNotWaitForButtonPressAfterDisplayingText], a
- call ReloadMapData
- call UpdateSprites
- jp PCMainMenu
-LogOff:
- ld a, SFX_TURN_OFF_PC
- call PlaySound
- call WaitForSoundToFinish
- ld hl, wFlags_0xcd60
- res 3, [hl]
- res 5, [hl]
- ret
-
-TurnedOnPC1Text:
- TX_FAR _TurnedOnPC1Text
- db "@"
-
-AccessedBillsPCText:
- TX_FAR _AccessedBillsPCText
- db "@"
-
-AccessedSomeonesPCText:
- TX_FAR _AccessedSomeonesPCText
- db "@"
-
-AccessedMyPCText:
- TX_FAR _AccessedMyPCText
- db "@"
-
-; removes one of the specified item ID [hItemToRemoveID] from bag (if existent)
-RemoveItemByID:
- ld hl, wBagItems
- ld a, [hItemToRemoveID]
- ld b, a
- xor a
- ld [hItemToRemoveIndex], a
-.loop
- ld a, [hli]
- cp -1 ; reached terminator?
- ret z
- cp b
- jr z, .foundItem
- inc hl
- ld a, [hItemToRemoveIndex]
- inc a
- ld [hItemToRemoveIndex], a
- jr .loop
-.foundItem
- ld a, $1
- ld [wItemQuantity], a
- ld a, [hItemToRemoveIndex]
- ld [wWhichPokemon], a
- ld hl, wNumBagItems
- jp RemoveItemFromInventory
diff --git a/engine/menu/players_pc.asm b/engine/menu/players_pc.asm
deleted file mode 100755
index 1cc02cbf..00000000
--- a/engine/menu/players_pc.asm
+++ /dev/null
@@ -1,302 +0,0 @@
-PlayerPC:
- ld a, ITEM_NAME
- ld [wNameListType], a
- call SaveScreenTilesToBuffer1
- xor a
- ld [wBagSavedMenuItem], a
- ld [wParentMenuItem], a
- ld a, [wFlags_0xcd60]
- bit 3, a ; accessing player's PC through another PC?
- jr nz, PlayerPCMenu
-; accessing it directly
- ld a, SFX_TURN_ON_PC
- call PlaySound
- ld hl, TurnedOnPC2Text
- call PrintText
-
-PlayerPCMenu:
- ld hl, wd730
- set 6, [hl]
- ld a, [wParentMenuItem]
- ld [wCurrentMenuItem], a
- ld hl, wFlags_0xcd60
- set 5, [hl]
- call LoadScreenTilesFromBuffer2
- coord hl, 0, 0
- lb bc, 8, 14
- call TextBoxBorder
- call UpdateSprites
- coord hl, 2, 2
- ld de, PlayersPCMenuEntries
- call PlaceString
- ld hl, wTopMenuItemY
- ld a, 2
- ld [hli], a ; wTopMenuItemY
- dec a
- ld [hli], a ; wTopMenuItemX
- inc hl
- inc hl
- ld a, 3
- ld [hli], a ; wMaxMenuItem
- ld a, A_BUTTON | B_BUTTON
- ld [hli], a ; wMenuWatchedKeys
- xor a
- ld [hl], a
- ld hl, wListScrollOffset
- ld [hli], a ; wListScrollOffset
- ld [hl], a ; wMenuWatchMovingOutOfBounds
- ld [wPlayerMonNumber], a
- ld hl, WhatDoYouWantText
- call PrintText
- call HandleMenuInput
- bit 1, a
- jp nz, ExitPlayerPC
- call PlaceUnfilledArrowMenuCursor
- ld a, [wCurrentMenuItem]
- ld [wParentMenuItem], a
- and a
- jp z, PlayerPCWithdraw
- dec a
- jp z, PlayerPCDeposit
- dec a
- jp z, PlayerPCToss
-
-ExitPlayerPC:
- ld a, [wFlags_0xcd60]
- bit 3, a ; accessing player's PC through another PC?
- jr nz, .next
-; accessing it directly
- ld a, SFX_TURN_OFF_PC
- call PlaySound
- call WaitForSoundToFinish
-.next
- ld hl, wFlags_0xcd60
- res 5, [hl]
- call LoadScreenTilesFromBuffer2
- xor a
- ld [wListScrollOffset], a
- ld [wBagSavedMenuItem], a
- ld hl, wd730
- res 6, [hl]
- xor a
- ld [wDoNotWaitForButtonPressAfterDisplayingText], a
- ret
-
-PlayerPCDeposit:
- xor a
- ld [wCurrentMenuItem], a
- ld [wListScrollOffset], a
- ld a, [wNumBagItems]
- and a
- jr nz, .loop
- ld hl, NothingToDepositText
- call PrintText
- jp PlayerPCMenu
-.loop
- ld hl, WhatToDepositText
- call PrintText
- ld hl, wNumBagItems
- ld a, l
- ld [wListPointer], a
- ld a, h
- ld [wListPointer + 1], a
- xor a
- ld [wPrintItemPrices], a
- ld a, ITEMLISTMENU
- ld [wListMenuID], a
- call DisplayListMenuID
- jp c, PlayerPCMenu
- call IsKeyItem
- ld a, 1
- ld [wItemQuantity], a
- ld a, [wIsKeyItem]
- and a
- jr nz, .next
-; if it's not a key item, there can be more than one of the item
- ld hl, DepositHowManyText
- call PrintText
- call DisplayChooseQuantityMenu
- cp $ff
- jp z, .loop
-.next
- ld hl, wNumBoxItems
- call AddItemToInventory
- jr c, .roomAvailable
- ld hl, NoRoomToStoreText
- call PrintText
- jp .loop
-.roomAvailable
- ld hl, wNumBagItems
- call RemoveItemFromInventory
- call WaitForSoundToFinish
- ld a, SFX_WITHDRAW_DEPOSIT
- call PlaySound
- call WaitForSoundToFinish
- ld hl, ItemWasStoredText
- call PrintText
- jp .loop
-
-PlayerPCWithdraw:
- xor a
- ld [wCurrentMenuItem], a
- ld [wListScrollOffset], a
- ld a, [wNumBoxItems]
- and a
- jr nz, .loop
- ld hl, NothingStoredText
- call PrintText
- jp PlayerPCMenu
-.loop
- ld hl, WhatToWithdrawText
- call PrintText
- ld hl, wNumBoxItems
- ld a, l
- ld [wListPointer], a
- ld a, h
- ld [wListPointer + 1], a
- xor a
- ld [wPrintItemPrices], a
- ld a, ITEMLISTMENU
- ld [wListMenuID], a
- call DisplayListMenuID
- jp c, PlayerPCMenu
- call IsKeyItem
- ld a, 1
- ld [wItemQuantity], a
- ld a, [wIsKeyItem]
- and a
- jr nz, .next
-; if it's not a key item, there can be more than one of the item
- ld hl, WithdrawHowManyText
- call PrintText
- call DisplayChooseQuantityMenu
- cp $ff
- jp z, .loop
-.next
- ld hl, wNumBagItems
- call AddItemToInventory
- jr c, .roomAvailable
- ld hl, CantCarryMoreText
- call PrintText
- jp .loop
-.roomAvailable
- ld hl, wNumBoxItems
- call RemoveItemFromInventory
- call WaitForSoundToFinish
- ld a, SFX_WITHDRAW_DEPOSIT
- call PlaySound
- call WaitForSoundToFinish
- ld hl, WithdrewItemText
- call PrintText
- jp .loop
-
-PlayerPCToss:
- xor a
- ld [wCurrentMenuItem], a
- ld [wListScrollOffset], a
- ld a, [wNumBoxItems]
- and a
- jr nz, .loop
- ld hl, NothingStoredText
- call PrintText
- jp PlayerPCMenu
-.loop
- ld hl, WhatToTossText
- call PrintText
- ld hl, wNumBoxItems
- ld a, l
- ld [wListPointer], a
- ld a, h
- ld [wListPointer + 1], a
- xor a
- ld [wPrintItemPrices], a
- ld a, ITEMLISTMENU
- ld [wListMenuID], a
- push hl
- call DisplayListMenuID
- pop hl
- jp c, PlayerPCMenu
- push hl
- call IsKeyItem
- pop hl
- ld a, 1
- ld [wItemQuantity], a
- ld a, [wIsKeyItem]
- and a
- jr nz, .next
- ld a, [wcf91]
- call IsItemHM
- jr c, .next
-; if it's not a key item, there can be more than one of the item
- push hl
- ld hl, TossHowManyText
- call PrintText
- call DisplayChooseQuantityMenu
- pop hl
- cp $ff
- jp z, .loop
-.next
- call TossItem ; disallows tossing key items
- jp .loop
-
-PlayersPCMenuEntries:
- db "WITHDRAW ITEM"
- next "DEPOSIT ITEM"
- next "TOSS ITEM"
- next "LOG OFF@"
-
-TurnedOnPC2Text:
- TX_FAR _TurnedOnPC2Text
- db "@"
-
-WhatDoYouWantText:
- TX_FAR _WhatDoYouWantText
- db "@"
-
-WhatToDepositText:
- TX_FAR _WhatToDepositText
- db "@"
-
-DepositHowManyText:
- TX_FAR _DepositHowManyText
- db "@"
-
-ItemWasStoredText:
- TX_FAR _ItemWasStoredText
- db "@"
-
-NothingToDepositText:
- TX_FAR _NothingToDepositText
- db "@"
-
-NoRoomToStoreText:
- TX_FAR _NoRoomToStoreText
- db "@"
-
-WhatToWithdrawText:
- TX_FAR _WhatToWithdrawText
- db "@"
-
-WithdrawHowManyText:
- TX_FAR _WithdrawHowManyText
- db "@"
-
-WithdrewItemText:
- TX_FAR _WithdrewItemText
- db "@"
-
-NothingStoredText:
- TX_FAR _NothingStoredText
- db "@"
-
-CantCarryMoreText:
- TX_FAR _CantCarryMoreText
- db "@"
-
-WhatToTossText:
- TX_FAR _WhatToTossText
- db "@"
-
-TossHowManyText:
- TX_FAR _TossHowManyText
- db "@"
diff --git a/engine/menu/pokedex.asm b/engine/menu/pokedex.asm
deleted file mode 100755
index bc2a7e9b..00000000
--- a/engine/menu/pokedex.asm
+++ /dev/null
@@ -1,747 +0,0 @@
-ShowPokedexMenu:
- call GBPalWhiteOut
- call ClearScreen
- call UpdateSprites
- ld a, [wListScrollOffset]
- push af
- xor a
- ld [wCurrentMenuItem], a
- ld [wListScrollOffset], a
- ld [wLastMenuItem], a
- inc a
- ld [wd11e], a
- ld [hJoy7], a
-.setUpGraphics
- callab LoadPokedexTilePatterns
-.loop
- ld b, SET_PAL_GENERIC
- call RunPaletteCommand
-.doPokemonListMenu
- ld hl, wTopMenuItemY
- ld a, 3
- ld [hli], a ; top menu item Y
- xor a
- ld [hli], a ; top menu item X
- inc a
- ld [wMenuWatchMovingOutOfBounds], a
- inc hl
- inc hl
- ld a, 6
- ld [hli], a ; max menu item ID
- ld [hl], D_LEFT | D_RIGHT | B_BUTTON | A_BUTTON
- call HandlePokedexListMenu
- jr c, .goToSideMenu ; if the player chose a pokemon from the list
-.exitPokedex
- xor a
- ld [wMenuWatchMovingOutOfBounds], a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld [hJoy7], a
- ld [wWastedByteCD3A], a
- ld [wOverrideSimulatedJoypadStatesMask], a
- pop af
- ld [wListScrollOffset], a
- call GBPalWhiteOutWithDelay3
- call RunDefaultPaletteCommand
- jp ReloadMapData
-
-.goToSideMenu
- call HandlePokedexSideMenu
- dec b
- jr z, .exitPokedex ; if the player chose Quit
- dec b
- jr z, .doPokemonListMenu ; if pokemon not seen or player pressed B button
- dec b
- jr z, .loop
- jp .setUpGraphics ; if pokemon data or area was shown
-
-; handles the menu on the lower right in the pokedex screen
-; OUTPUT:
-; b = reason for exiting menu
-; 00: showed pokemon data or area
-; 01: the player chose Quit
-; 02: the pokemon has not been seen yet or the player pressed the B button
-HandlePokedexSideMenu:
- call PlaceUnfilledArrowMenuCursor
- ld a, [wCurrentMenuItem]
- push af
- ld b, a
- ld a, [wLastMenuItem]
- push af
- ld a, [wListScrollOffset]
- push af
- add b
- inc a
- ld [wd11e], a
- ld a, [wd11e]
- push af
- ld a, [wDexMaxSeenMon]
- push af ; this doesn't need to be preserved
- ld hl, wPokedexSeen
- call IsPokemonBitSet
- ld b, 2
- jr z, .exitSideMenu
- call PokedexToIndex
- ld hl, wTopMenuItemY
- ld a, 8
- ld [hli], a ; top menu item Y
- ld a, 15
- ld [hli], a ; top menu item X
- xor a
- ld [hli], a ; current menu item ID
- inc hl
- ld a, 4
- ld [hli], a ; max menu item ID
- ld a, A_BUTTON | B_BUTTON
- ld [hli], a ; menu watched keys (A button and B button)
- xor a
- ld [hli], a ; old menu item ID
- ld [wMenuWatchMovingOutOfBounds], a
- ld [hJoy7], a
-.handleMenuInput
- call HandleMenuInput
- bit 1, a ; was the B button pressed?
- ld b, 2
- jr nz, .buttonBPressed
- ld a, [wCurrentMenuItem]
- and a
- jr z, .choseData
- dec a
- jr z, .choseCry
- dec a
- jr z, .choseArea
- dec a
- jr z, .chosePrint
-.choseQuit
- ld b, 1
-.exitSideMenu
- pop af
- ld [wDexMaxSeenMon], a
- pop af
- ld [wd11e], a
- pop af
- ld [wListScrollOffset], a
- pop af
- ld [wLastMenuItem], a
- pop af
- ld [wCurrentMenuItem], a
- ld a, $1
- ld [hJoy7], a
- push bc
- coord hl, 0, 3
- ld de, 20
- lb bc, " ", 13
- call DrawTileLine ; cover up the menu cursor in the pokemon list
- pop bc
- ret
-
-.buttonBPressed
- push bc
- coord hl, 15, 8
- ld de, 20
- lb bc, " ", 9
- call DrawTileLine ; cover up the menu cursor in the side menu
- pop bc
- jr .exitSideMenu
-
-.choseData
- call ShowPokedexDataInternal
- ld b, 0
- jr .exitSideMenu
-
-; play pokemon cry
-.choseCry
- ld a, [wd11e]
- call GetCryData
- call PlaySound
- jr .handleMenuInput
-
-.choseArea
- predef LoadTownMap_Nest ; display pokemon areas
- ld b, 0
- jr .exitSideMenu
-
-.chosePrint
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- ld a, [wd11e]
- ld [wcf91], a
- callab PrintPokedexEntry
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- call ClearScreen
- pop af
- ld [hTilesetType], a
- ld b, $3
- jr .exitSideMenu
-
-; handles the list of pokemon on the left of the pokedex screen
-; sets carry flag if player presses A, unsets carry flag if player presses B
-HandlePokedexListMenu:
- call Pokedex_DrawInterface
-.loop
- call Pokedex_PlacePokemonList
- call GBPalNormal
- call HandleMenuInput
- bit BIT_B_BUTTON, a ; was the B button pressed?
- jp nz, .buttonBPressed
- bit BIT_A_BUTTON, a ; was the A button pressed?
- jp nz, .buttonAPressed
-.checkIfUpPressed
- bit BIT_D_UP, a ; was Up pressed?
- jr z, .checkIfDownPressed
-.upPressed ; scroll up one row
- ld a, [wListScrollOffset]
- and a
- jp z, .loop
- dec a
- ld [wListScrollOffset], a
- jp .loop
-
-.checkIfDownPressed
- bit BIT_D_DOWN, a ; was Down pressed?
- jr z, .checkIfRightPressed
-.downPressed ; scroll down one row
- ld a, [wDexMaxSeenMon]
- cp a, 7
- jp c, .loop ; can't if the list is shorter than 7
- sub a, 7
- ld b, a
- ld a, [wListScrollOffset]
- cp b
- jp z, .loop
- inc a
- ld [wListScrollOffset], a
- jp .loop
-
-.checkIfRightPressed
- bit BIT_D_RIGHT, a ; was Right pressed?
- jr z, .checkIfLeftPressed
-.rightPressed ; scroll down 7 rows
- ld a, [wDexMaxSeenMon]
- cp a, 7
- jp c, .loop ; can't if the list is shorter than 7
- sub a, 6
- ld b, a
- ld a, [wListScrollOffset]
- add a, 7
- ld [wListScrollOffset], a
- cp b
- jp c, .loop
- dec b
- ld a, b
- ld [wListScrollOffset], a
- jp .loop
-
-.checkIfLeftPressed ; scroll up 7 rows
- bit BIT_D_LEFT, a ; was Left pressed?
- jr z, .buttonAPressed
-.leftPressed
- ld a, [wListScrollOffset]
- sub a, 7
- ld [wListScrollOffset], a
- jp nc, .loop
- xor a
- ld [wListScrollOffset], a
- jp .loop
-
-.buttonAPressed
- scf
- ret
-
-.buttonBPressed
- and a
- ret
-
-Pokedex_DrawInterface:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
-; draw the horizontal line separating the seen and owned amounts from the menu
- coord hl, 15, 6
- ld a, "─"
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- coord hl, 14, 0
- ld [hl], $71 ; vertical line tile
- coord hl, 14, 1
- call DrawPokedexVerticalLine
- coord hl, 14, 9
- call DrawPokedexVerticalLine
- ld hl, wPokedexSeen
- ld b, wPokedexSeenEnd - wPokedexSeen
- call CountSetBits
- ld de, wNumSetBits
- coord hl, 16, 2
- lb bc, 1, 3
- call PrintNumber ; print number of seen pokemon
- ld hl, wPokedexOwned
- ld b, wPokedexOwnedEnd - wPokedexOwned
- call CountSetBits
- ld de, wNumSetBits
- coord hl, 16, 5
- lb bc, 1, 3
- call PrintNumber ; print number of owned pokemon
- coord hl, 16, 1
- ld de, PokedexSeenText
- call PlaceString
- coord hl, 16, 4
- ld de, PokedexOwnText
- call PlaceString
- coord hl, 1, 1
- ld de, PokedexContentsText
- call PlaceString
- coord hl, 16, 8
- ld de, PokedexMenuItemsText
- call PlaceString
-; find the highest pokedex number among the pokemon the player has seen
- ld hl, wPokedexSeenEnd - 1
- ld b, (wPokedexSeenEnd - wPokedexSeen) * 8 + 1
-.maxSeenPokemonLoop
- ld a, [hld]
- ld c, 8
-.maxSeenPokemonInnerLoop
- dec b
- sla a
- jr c, .storeMaxSeenPokemon
- dec c
- jr nz, .maxSeenPokemonInnerLoop
- jr .maxSeenPokemonLoop
-
-.storeMaxSeenPokemon
- ld a, b
- ld [wDexMaxSeenMon], a
- ret
-
-DrawPokedexVerticalLine:
- ld c, 9 ; height of line
- ld de, SCREEN_WIDTH ; width of screen
- ld a, $71 ; vertical line tile
-.loop
- ld [hl], a
- add hl, de
- xor a, 1 ; toggle between vertical line tile and box tile
- dec c
- jr nz, .loop
- ret
-
-PokedexSeenText:
- db "SEEN@"
-
-PokedexOwnText:
- db "OWN@"
-
-PokedexContentsText:
- db "CONTENTS@"
-
-PokedexMenuItemsText:
- db "DATA"
- next "CRY"
- next "AREA"
- next "PRNT"
- next "QUIT@"
-
-Pokedex_PlacePokemonList:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- coord hl, 4, 2
- lb bc, 14, 10
- call ClearScreenArea
- coord hl, 1, 3
- ld a, [wListScrollOffset]
- ld [wd11e], a
- ld d, 7
- ld a, [wDexMaxSeenMon]
- cp 7
- jr nc, .printPokemonLoop
- ld d, a
- dec a
- ld [wMaxMenuItem], a
-; loop to print pokemon pokedex numbers and names
-; if the player has owned the pokemon, it puts a pokeball beside the name
-.printPokemonLoop
- ld a, [wd11e]
- inc a
- ld [wd11e], a
- push af
- push de
- push hl
- ld de, -SCREEN_WIDTH
- add hl, de
- ld de, wd11e
- lb bc, LEADING_ZEROES | 1, 3
- call PrintNumber ; print the pokedex number
- ld de, SCREEN_WIDTH
- add hl, de
- dec hl
- push hl
- ld hl, wPokedexOwned
- call IsPokemonBitSet
- pop hl
- ld a, " "
- jr z, .writeTile
- ld a, $72 ; pokeball tile
-.writeTile
- ld [hl], a ; put a pokeball next to pokemon that the player has owned
- push hl
- ld hl, wPokedexSeen
- call IsPokemonBitSet
- jr nz, .getPokemonName ; if the player has seen the pokemon
- ld de, .dashedLine ; print a dashed line in place of the name if the player hasn't seen the pokemon
- jr .skipGettingName
-.dashedLine ; for unseen pokemon in the list
- db "----------@"
-.getPokemonName
- call PokedexToIndex
- call GetMonName
-.skipGettingName
- pop hl
- inc hl
- call PlaceString
- pop hl
- ld bc, 2 * SCREEN_WIDTH
- add hl, bc
- pop de
- pop af
- ld [wd11e], a
- dec d
- jr nz, .printPokemonLoop
- ld a, 01
- ld [H_AUTOBGTRANSFERENABLED], a
- call Delay3
- ret
-
-; tests if a pokemon's bit is set in the seen or owned pokemon bit fields
-; INPUT:
-; [wd11e] = pokedex number
-; hl = address of bit field
-IsPokemonBitSet:
- ld a, [wd11e]
- dec a
- ld c, a
- ld b, FLAG_TEST
- predef FlagActionPredef
- ld a, c
- and a
- ret
-
-; function to display pokedex data from outside the pokedex
-ShowPokedexData:
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- call UpdateSprites
- callab LoadPokedexTilePatterns ; load pokedex tiles
-
-; function to display pokedex data from inside the pokedex
-ShowPokedexDataInternal:
- ld hl, wd72c
- set 1, [hl]
- ld a, $33 ; 3/7 volume
- ld [rNR50], a
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- call GBPalWhiteOut ; zero all palettes
- ld a, [wd11e] ; pokemon ID
- ld [wcf91], a
- push af
- ld b, SET_PAL_POKEDEX
- call RunPaletteCommand
- pop af
- ld [wd11e], a
- call DrawDexEntryOnScreen
- call c, Pokedex_PrintFlavorTextAtRow11
-.waitForButtonPress
- call JoypadLowSensitivity
- ld a, [hJoy5]
- and a, A_BUTTON | B_BUTTON
- jr z, .waitForButtonPress
- pop af
- ld [hTilesetType], a
- call GBPalWhiteOut
- call ClearScreen
- call RunDefaultPaletteCommand
- call LoadTextBoxTilePatterns
- call GBPalNormal
- ld hl, wd72c
- res 1, [hl]
- ld a, $77 ; max volume
- ld [rNR50], a
- ret
-
-HeightWeightText:
- db "HT ?", $60, "??", $61
- next "WT ???lb@"
-
-; XXX does anything point to this?
-PokeText:
- db "#@"
-
-; horizontal line that divides the pokedex text description from the rest of the data
-PokedexDataDividerLine:
- db $68, $69, $6B, $69, $6B
- db $69, $6B, $69, $6B, $6B
- db $6B, $6B, $69, $6B, $69
- db $6B, $69, $6B, $69, $6A
- db "@"
-
-DrawDexEntryOnScreen:
- call ClearScreen
-
- coord hl, 0, 0
- ld de, 1
- lb bc, $64, SCREEN_WIDTH
- call DrawTileLine ; draw top border
-
- coord hl, 0, 17
- ld b, $6f
- call DrawTileLine ; draw bottom border
-
- coord hl, 0, 1
- ld de, 20
- lb bc, $66, $10
- call DrawTileLine ; draw left border
-
- coord hl, 19, 1
- ld b, $67
- call DrawTileLine ; draw right border
-
- ld a, $63 ; upper left corner tile
- Coorda 0, 0
- ld a, $65 ; upper right corner tile
- Coorda 19, 0
- ld a, $6c ; lower left corner tile
- Coorda 0, 17
- ld a, $6e ; lower right corner tile
- Coorda 19, 17
-
- coord hl, 0, 9
- ld de, PokedexDataDividerLine
- call PlaceString ; draw horizontal divider line
-
- coord hl, 9, 6
- ld de, HeightWeightText
- call PlaceString
-
- call GetMonName
- coord hl, 9, 2
- call PlaceString
-
- ld hl, PokedexEntryPointers
- ld a, [wd11e]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, [hli]
- ld e, a
- ld d, [hl] ; de = address of pokedex entry
-
- coord hl, 9, 4
- call PlaceString ; print species name
-
- ld h, b
- ld l, c
- push de
- ld a, [wd11e]
- push af
- call IndexToPokedex
-
- coord hl, 2, 8
- ld a, "№"
- ld [hli], a
- ld a, "⠄"
- ld [hli], a
- ld de, wd11e
- lb bc, LEADING_ZEROES | 1, 3
- call PrintNumber ; print pokedex number
-
- ld hl, wPokedexOwned
- call IsPokemonBitSet
- pop af
- ld [wd11e], a
- ld a, [wcf91]
- ld [wd0b5], a
- pop de
-
- push af
- push bc
- push de
- push hl
-
- call Delay3
- call GBPalNormal
- call GetMonHeader ; load pokemon picture location
- coord hl, 1, 1
- call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture
- ld a, [wcf91]
- call PlayCry ; play pokemon cry
-
- pop hl
- pop de
- pop bc
- pop af
-
- ld a, c
- and a
- ret z ; if the pokemon has not been owned, don't print the height, weight, or description
-
- inc de ; de = address of feet (height)
- ld a, [de] ; reads feet, but a is overwritten without being used
- coord hl, 12, 6
- lb bc, 1, 2
- call PrintNumber ; print feet (height)
- ld a, $60 ; feet symbol tile (one tick)
- ld [hl], a
- inc de
- inc de ; de = address of inches (height)
- coord hl, 15, 6
- lb bc, LEADING_ZEROES | 1, 2
- call PrintNumber ; print inches (height)
- ld a, $61 ; inches symbol tile (two ticks)
- ld [hl], a
-; now print the weight (note that weight is stored in tenths of pounds internally)
- inc de
- inc de
- inc de ; de = address of upper byte of weight
- push de
-; put weight in big-endian order at hDexWeight
- ld hl, hDexWeight
- ld a, [hl] ; save existing value of [hDexWeight]
- push af
- ld a, [de] ; a = upper byte of weight
- ld [hli], a ; store upper byte of weight in [hDexWeight]
- ld a, [hl] ; save existing value of [hDexWeight + 1]
- push af
- dec de
- ld a, [de] ; a = lower byte of weight
- ld [hl], a ; store lower byte of weight in [hDexWeight + 1]
- ld de, hDexWeight
- coord hl, 11, 8
- lb bc, 2, 5 ; 2 bytes, 5 digits
- call PrintNumber ; print weight
- coord hl, 14, 8
- ld a, [hDexWeight + 1]
- sub 10
- ld a, [hDexWeight]
- sbc 0
- jr nc, .next
- ld [hl], "0" ; if the weight is less than 10, put a 0 before the decimal point
-.next
- inc hl
- ld a, [hli]
- ld [hld], a ; make space for the decimal point by moving the last digit forward one tile
- ld [hl], "⠄" ; decimal point tile
- pop af
- ld [hDexWeight + 1], a ; restore original value of [hDexWeight + 1]
- pop af
- ld [hDexWeight], a ; restore original value of [hDexWeight]
- pop hl
- inc hl ; hl = address of pokedex description text
- scf
- ret
-
-Pokedex_PrintFlavorTextAtRow11:
- coord bc, 1, 11
-Pokedex_PrintFlavorTextAtBC:
- ld a, 2
- ld [$fff9], a
- call TextCommandProcessor ; print pokedex description text
- xor a
- ld [$fff9], a
- ret
-
-Pokedex_PrepareDexEntryForPrinting:
- coord hl, 0, 0
- ld de, SCREEN_WIDTH
- lb bc, $66, $d
- call DrawTileLine
- coord hl, 19, 0
- ld b, $67
- call DrawTileLine
- coord hl, 0, 13
- ld de, $1
- lb bc, $6f, SCREEN_WIDTH
- call DrawTileLine
- ld a, $6c
- Coorda 0, 13
- ld a, $6e
- Coorda 19, 13
- ld a, [wPrinterPokedexEntryTextPointer]
- ld l, a
- ld a, [wPrinterPokedexEntryTextPointer + 1]
- ld h, a
- coord bc, 1, 1
- ld a, [hFlags_0xFFFA]
- set 3, a
- ld [hFlags_0xFFFA], a
- call Pokedex_PrintFlavorTextAtBC
- ld a, [hFlags_0xFFFA]
- res 3, a
- ld [hFlags_0xFFFA], a
- ret
-
-; draws a line of tiles
-; INPUT:
-; b = tile ID
-; c = number of tile ID's to write
-; de = amount to destination address after each tile (1 for horizontal, 20 for vertical)
-; hl = destination address
-DrawTileLine:
- push bc
- push de
-.loop
- ld [hl], b
- add hl, de
- dec c
- jr nz, .loop
- pop de
- pop bc
- ret
-
-INCLUDE "data/pokedex_entries.asm"
-
-PokedexToIndex:
- ; converts the Pokédex number at wd11e to an index
- push bc
- push hl
- ld a, [wd11e]
- ld b, a
- ld c, 0
- ld hl, PokedexOrder
-
-.loop ; go through the list until we find an entry with a matching dex number
- inc c
- ld a, [hli]
- cp b
- jr nz, .loop
-
- ld a, c
- ld [wd11e], a
- pop hl
- pop bc
- ret
-
-IndexToPokedex:
- ; converts the index number at wd11e to a Pokédex number
- push bc
- push hl
- ld a, [wd11e]
- dec a
- ld hl, PokedexOrder
- ld b, 0
- ld c, a
- add hl, bc
- ld a, [hl]
- ld [wd11e], a
- pop hl
- pop bc
- ret
-
-INCLUDE "data/pokedex_order.asm"
diff --git a/engine/menu/prize_menu.asm b/engine/menu/prize_menu.asm
deleted file mode 100755
index 405441c8..00000000
--- a/engine/menu/prize_menu.asm
+++ /dev/null
@@ -1,307 +0,0 @@
-CeladonPrizeMenu:
- ld b, COIN_CASE
- call IsItemInBag
- jr nz, .havingCoinCase
- ld hl, RequireCoinCaseTextPtr
- jp PrintText
-.havingCoinCase
- ld hl, wd730
- set 6, [hl] ; disable letter-printing delay
- ld hl, ExchangeCoinsForPrizesTextPtr
- call PrintText
-; the following are the menu settings
- xor a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld a, A_BUTTON | B_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, $03
- ld [wMaxMenuItem], a
- ld a, $04
- ld [wTopMenuItemY], a
- ld a, $01
- ld [wTopMenuItemX], a
- call PrintPrizePrice
- coord hl, 0, 2
- lb bc, 8, 16
- call TextBoxBorder
- call GetPrizeMenuId
- call UpdateSprites
- ld hl, WhichPrizeTextPtr
- call PrintText
- call HandleMenuInput ; menu choice handler
- bit 1, a ; keypress = B (Cancel)
- jr nz, .noChoice
- ld a, [wCurrentMenuItem]
- cp 3 ; "NO,THANKS" choice
- jr z, .noChoice
- call HandlePrizeChoice
-.noChoice
- ld hl, wd730
- res 6, [hl]
- ret
-
-RequireCoinCaseTextPtr:
- TX_FAR _RequireCoinCaseText
- TX_WAIT
- db "@"
-
-ExchangeCoinsForPrizesTextPtr:
- TX_FAR _ExchangeCoinsForPrizesText
- db "@"
-
-WhichPrizeTextPtr:
- TX_FAR _WhichPrizeText
- db "@"
-
-GetPrizeMenuId:
-; determine which one among the three
-; prize-texts has been selected
-; using the text ID (stored in [hSpriteIndexOrTextID])
-; load the three prizes at wd13d-wd13f
-; load the three prices at wd141-wd146
-; display the three prizes' names
-; (distinguishing between Pokemon names
-; and Items (specifically TMs) names)
- ld a, [hSpriteIndexOrTextID]
- sub 3 ; prize-texts' id are 3, 4 and 5
- ld [wWhichPrizeWindow], a ; prize-texts' id (relative, i.e. 0, 1 or 2)
- add a
- add a
- ld d, 0
- ld e, a
- ld hl, PrizeDifferentMenuPtrs
- add hl, de
- ld a, [hli]
- ld d, [hl]
- ld e, a
- inc hl
- push hl
- ld hl, wPrize1
- call CopyString
- pop hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wPrize1Price
- ld bc, 6
- call CopyData
- ld a, [wWhichPrizeWindow]
- cp 2 ;is TM_menu?
- jr nz, .putMonName
- ld a, [wPrize1]
- ld [wd11e], a
- call GetItemName
- coord hl, 2, 4
- call PlaceString
- ld a, [wPrize2]
- ld [wd11e], a
- call GetItemName
- coord hl, 2, 6
- call PlaceString
- ld a, [wPrize3]
- ld [wd11e], a
- call GetItemName
- coord hl, 2, 8
- call PlaceString
- jr .putNoThanksText
-.putMonName
- ld a, [wPrize1]
- ld [wd11e], a
- call GetMonName
- coord hl, 2, 4
- call PlaceString
- ld a, [wPrize2]
- ld [wd11e], a
- call GetMonName
- coord hl, 2, 6
- call PlaceString
- ld a, [wPrize3]
- ld [wd11e], a
- call GetMonName
- coord hl, 2, 8
- call PlaceString
-.putNoThanksText
- coord hl, 2, 10
- ld de, NoThanksText
- call PlaceString
-; put prices on the right side of the textbox
- ld de, wPrize1Price
- coord hl, 13, 5
-; reg. c:
-; [low nybble] number of bytes
-; [bit 765 = %100] space-padding (not zero-padding)
- ld c, (1 << 7 | 2)
-; Function $15CD displays BCD value (same routine
-; used by text-command $02)
- call PrintBCDNumber
- ld de, wPrize2Price
- coord hl, 13, 7
- ld c, (1 << 7 | 2)
- call PrintBCDNumber
- ld de, wPrize3Price
- coord hl, 13, 9
- ld c, (1 << 7 | 2)
- jp PrintBCDNumber
-
-NoThanksText:
- db "NO THANKS@"
-
-INCLUDE "data/prizes.asm"
-
-PrintPrizePrice:
- coord hl, 11, 0
- lb bc, 1, 7
- call TextBoxBorder
- call UpdateSprites
- coord hl, 12, 0
- ld de, .CoinString
- call PlaceString
- coord hl, 13, 1
- ld de, .SixSpacesString
- call PlaceString
- coord hl, 13, 1
- ld de, wPlayerCoins
- ld c, %10000010
- call PrintBCDNumber
- ret
-
-.CoinString:
- db "COIN@"
-
-.SixSpacesString:
- db " @"
-
-LoadCoinsToSubtract:
- ld a, [wWhichPrize]
- add a
- ld d, 0
- ld e, a
- ld hl, wPrize1Price
- add hl, de ; get selected prize's price
- xor a
- ld [hUnusedCoinsByte], a
- ld a, [hli]
- ld [hCoins], a
- ld a, [hl]
- ld [hCoins + 1], a
- ret
-
-HandlePrizeChoice:
- ld a, [wCurrentMenuItem]
- ld [wWhichPrize], a
- ld d, 0
- ld e, a
- ld hl, wPrize1
- add hl, de
- ld a, [hl]
- ld [wd11e], a
- ld a, [wWhichPrizeWindow]
- cp 2 ; is prize a TM?
- jr nz, .getMonName
- call GetItemName
- jr .givePrize
-.getMonName
- call GetMonName
-.givePrize
- ld hl, SoYouWantPrizeTextPtr
- call PrintText
- call YesNoChoice
- ld a, [wCurrentMenuItem] ; yes/no answer (Y=0, N=1)
- and a
- jr nz, .printOhFineThen
- call LoadCoinsToSubtract
- call HasEnoughCoins
- jr c, .notEnoughCoins
- ld a, [wWhichPrizeWindow]
- cp $02
- jr nz, .giveMon
- ld a, [wd11e]
- ld b, a
- ld a, 1
- ld c, a
- call GiveItem
- jr nc, .bagFull
- jr .subtractCoins
-.giveMon
- ld a, [wd11e]
- ld [wcf91], a
- push af
- call GetPrizeMonLevel
- ld c, a
- pop af
- ld b, a
- call GivePokemon
-
-; If either the party or box was full, wait after displaying message.
- push af
- ld a, [wAddedToParty]
- and a
- call z, WaitForTextScrollButtonPress
- pop af
-
-; If the mon couldn't be given to the player (because both the party and box
-; were full), return without subtracting coins.
- ret nc
-
-.subtractCoins
- call LoadCoinsToSubtract
- ld hl, hCoins + 1
- ld de, wPlayerCoins + 1
- ld c, $02 ; how many bytes
- predef SubBCDPredef
- jp PrintPrizePrice
-.bagFull
- ld hl, PrizeRoomBagIsFullTextPtr
- jp PrintText
-.notEnoughCoins
- ld hl, SorryNeedMoreCoinsText
- jp PrintText
-.printOhFineThen
- ld hl, OhFineThenTextPtr
- jp PrintText
-
-UnknownPrizeData:
-; XXX what's this?
- db $00,$01,$00,$01,$00,$01,$00,$00,$01
-
-HereYouGoTextPtr:
- TX_FAR _HereYouGoText
- TX_WAIT
- db "@"
-
-SoYouWantPrizeTextPtr:
- TX_FAR _SoYouWantPrizeText
- db "@"
-
-SorryNeedMoreCoinsText:
- TX_FAR _SorryNeedMoreCoinsText
- TX_WAIT
- db "@"
-
-PrizeRoomBagIsFullTextPtr:
- TX_FAR _OopsYouDontHaveEnoughRoomText
- TX_WAIT
- db "@"
-
-OhFineThenTextPtr:
- TX_FAR _OhFineThenText
- TX_WAIT
- db "@"
-
-GetPrizeMonLevel:
- ld a, [wcf91]
- ld b, a
- ld hl, PrizeMonLevelDictionary
-.loop
- ld a, [hli]
- cp b
- jr z, .matchFound
- inc hl
- jr .loop
-.matchFound
- ld a, [hl]
- ld [wCurEnemyLVL], a
- ret
-
-INCLUDE "data/prize_mon_levels.asm"
diff --git a/engine/menu/start_menu.asm b/engine/menu/start_menu.asm
deleted file mode 100755
index 498d1467..00000000
--- a/engine/menu/start_menu.asm
+++ /dev/null
@@ -1,84 +0,0 @@
-DisplayStartMenu::
- switchbank StartMenu_Pokedex ; also bank for other functions
- ld a, [wWalkBikeSurfState] ; walking/biking/surfing
- ld [wWalkBikeSurfStateCopy], a
- ld a, SFX_START_MENU
- call PlaySound
-
-RedisplayStartMenu::
- callba DrawStartMenu
-RedisplayStartMenu_DoNotDrawStartMenu:
- callba PrintSafariZoneSteps ; print Safari Zone info, if in Safari Zone
- call UpdateSprites
-.loop
- call HandleMenuInput
- ld b, a
-.checkIfUpPressed
- bit 6, a ; was Up pressed?
- jr z, .checkIfDownPressed
- ld a, [wCurrentMenuItem] ; menu selection
- and a
- jr nz, .loop
- ld a, [wLastMenuItem]
- and a
- jr nz, .loop
-; if the player pressed tried to go past the top item, wrap around to the bottom
- CheckEvent EVENT_GOT_POKEDEX
- ld a, 6 ; there are 7 menu items with the pokedex, so the max index is 6
- jr nz, .wrapMenuItemId
- dec a ; there are only 6 menu items without the pokedex
-.wrapMenuItemId
- ld [wCurrentMenuItem], a
- call EraseMenuCursor
- jr .loop
-.checkIfDownPressed
- bit 7, a
- jr z, .buttonPressed
-; if the player pressed tried to go past the bottom item, wrap around to the top
- CheckEvent EVENT_GOT_POKEDEX
- ld a, [wCurrentMenuItem]
- ld c, 7 ; there are 7 menu items with the pokedex
- jr nz, .checkIfPastBottom
- dec c ; there are only 6 menu items without the pokedex
-.checkIfPastBottom
- cp c
- jr nz, .loop
-; the player went past the bottom, so wrap to the top
- xor a
- ld [wCurrentMenuItem], a
- call EraseMenuCursor
- jr .loop
-.buttonPressed ; A, B, or Start button pressed
- call PlaceUnfilledArrowMenuCursor
- ld a, [wCurrentMenuItem]
- ld [wBattleAndStartSavedMenuItem], a ; save current menu selection
- ld a, b
- and %00001010 ; was the Start button or B button pressed?
- jp nz, CloseStartMenu
- call SaveScreenTilesToBuffer2 ; copy background from wTileMap to wTileMapBackup2
- CheckEvent EVENT_GOT_POKEDEX
- ld a, [wCurrentMenuItem]
- jr nz, .displayMenuItem
- inc a ; adjust position to account for missing pokedex menu item
-.displayMenuItem
- cp 0
- jp z, StartMenu_Pokedex
- cp 1
- jp z, StartMenu_Pokemon
- cp 2
- jp z, StartMenu_Item
- cp 3
- jp z, StartMenu_TrainerInfo
- cp 4
- jp z, StartMenu_SaveReset
- cp 5
- jp z, StartMenu_Option
-
-; EXIT falls through to here
-CloseStartMenu::
- call Joypad
- ld a, [hJoyPressed]
- bit 0, a ; was A button newly pressed?
- jr nz, CloseStartMenu
- call LoadTextBoxTilePatterns
- jp CloseTextDisplay
diff --git a/engine/menu/start_sub_menus.asm b/engine/menu/start_sub_menus.asm
deleted file mode 100755
index abc8f000..00000000
--- a/engine/menu/start_sub_menus.asm
+++ /dev/null
@@ -1,871 +0,0 @@
-StartMenu_Pokedex:
- predef ShowPokedexMenu
- call LoadScreenTilesFromBuffer2 ; restore saved screen
- call Delay3
- call LoadGBPal
- call UpdateSprites
- jp RedisplayStartMenu
-
-StartMenu_Pokemon:
- ld a, [wPartyCount]
- and a
- jp z, RedisplayStartMenu
- xor a
- ld [wMenuItemToSwap], a
- ld [wPartyMenuTypeOrMessageID], a
- ld [wUpdateSpritesEnabled], a
- call DisplayPartyMenu
- jr .checkIfPokemonChosen
-.loop
- xor a
- ld [wMenuItemToSwap], a
- ld [wPartyMenuTypeOrMessageID], a
- call GoBackToPartyMenu
-.checkIfPokemonChosen
- jr nc, .chosePokemon
-.exitMenu
- call GBPalWhiteOutWithDelay3
- call RestoreScreenTilesAndReloadTilePatterns
- call LoadGBPal
- jp RedisplayStartMenu
-.chosePokemon
- call SaveScreenTilesToBuffer1
- ld a, FIELD_MOVE_MON_MENU
- ld [wTextBoxID], a
- call DisplayTextBoxID ; display pokemon menu options
- ld hl, wFieldMoves
- lb bc, 2, 12 ; max menu item ID, top menu item Y
- ld e, 5
-.adjustMenuVariablesLoop
- dec e
- jr z, .storeMenuVariables
- ld a, [hli]
- and a ; end of field moves?
- jr z, .storeMenuVariables
- inc b
- dec c
- dec c
- jr .adjustMenuVariablesLoop
-.storeMenuVariables
- ld hl, wTopMenuItemY
- ld a, c
- ld [hli], a ; top menu item Y
- ld a, [hFieldMoveMonMenuTopMenuItemX]
- ld [hli], a ; top menu item X
- xor a
- ld [hli], a ; current menu item ID
- inc hl
- ld a, b
- ld [hli], a ; max menu item ID
- ld a, A_BUTTON | B_BUTTON
- ld [hli], a ; menu watched keys
- xor a
- ld [hl], a
- call HandleMenuInput
- push af
- call LoadScreenTilesFromBuffer1 ; restore saved screen
- pop af
- bit 1, a ; was the B button pressed?
- jp nz, .loop
-; if the B button wasn't pressed
- ld a, [wMaxMenuItem]
- ld b, a
- ld a, [wCurrentMenuItem] ; menu selection
- cp b
- jp z, .exitMenu ; if the player chose Cancel
- dec b
- cp b
- jr z, .choseSwitch
- dec b
- cp b
- jp z, .choseStats
- ld c, a
- ld b, 0
- ld hl, wFieldMoves
- add hl, bc
- jp .choseOutOfBattleMove
-.choseSwitch
- ld a, [wPartyCount]
- cp 2 ; is there more than one pokemon in the party?
- jp c, StartMenu_Pokemon ; if not, no switching
- call SwitchPartyMon_InitVarOrSwapData ; init [wMenuItemToSwap]
- ld a, SWAP_MONS_PARTY_MENU
- ld [wPartyMenuTypeOrMessageID], a
- call GoBackToPartyMenu
- jp .checkIfPokemonChosen
-.choseStats
- call ClearSprites
- xor a ; PLAYER_PARTY_DATA
- ld [wMonDataLocation], a
- predef StatusScreen
- predef StatusScreen2
- call ReloadMapData
- jp StartMenu_Pokemon
-.choseOutOfBattleMove
- push hl
- ld a, [wWhichPokemon]
- ld hl, wPartyMonNicks
- call GetPartyMonName
- pop hl
- ld a, [hl]
- dec a
- add a
- ld b, 0
- ld c, a
- ld hl, .outOfBattleMovePointers
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wObtainedBadges] ; badges obtained
- jp hl
-.outOfBattleMovePointers
- dw .cut
- dw .fly
- dw .surf
- dw .surf
- dw .strength
- dw .flash
- dw .dig
- dw .teleport
- dw .softboiled
-.fly
- bit 2, a ; does the player have the Thunder Badge?
- jp z, .newBadgeRequired
- call CheckIfInOutsideMap
- jr z, .canFly
- ld a, [wWhichPokemon]
- ld hl, wPartyMonNicks
- call GetPartyMonName
- ld hl, .cannotFlyHereText
- call PrintText
- jp .loop
-.canFly
- call ChooseFlyDestination
- ld a, [wd732]
- bit 3, a ; did the player decide to fly?
- jr nz, .asm_5d4c
- call LoadFontTilePatterns
- ld hl, wd72e
- set 1, [hl]
- jp StartMenu_Pokemon
-.asm_5d4c
- call Func_1510
- jp .goBackToMap
-.cut
- bit 1, a ; does the player have the Cascade Badge?
- jp z, .newBadgeRequired
- predef UsedCut
- ld a, [wActionResultOrTookBattleTurn]
- and a
- jp z, .loop
- jp CloseTextDisplay
-.surf
- bit 4, a ; does the player have the Soul Badge?
- jp z, .newBadgeRequired
- callba IsSurfingAllowed
- ld hl, wd728
- bit 1, [hl]
- res 1, [hl]
- jp z, .loop
- ld a, [wcf91]
- cp PIKACHU ; is this surfing pikachu?
- jr z, .surfingPikachu
- ld a, $1
- jr .continue
-.surfingPikachu
- ld a, $2
-.continue
- ld [wd473], a
- ld a,SURFBOARD
- ld [wcf91], a
- ld [wPseudoItemID], a
- call UseItem
- ld a, [wActionResultOrTookBattleTurn]
- and a
- jr z, .reloadNormalSprite
- call GBPalWhiteOutWithDelay3
- jp .goBackToMap
-.reloadNormalSprite
- xor a
- ld [wd473], a
- jp .loop
-.strength
- bit 3, a ; does the player have the Rainbow Badge?
- jp z, .newBadgeRequired
- predef PrintStrengthTxt
- call GBPalWhiteOutWithDelay3
- jp .goBackToMap
-.flash
- bit 0, a ; does the player have the Boulder Badge?
- jp z, .newBadgeRequired
- xor a
- ld [wMapPalOffset], a
- ld hl, .flashLightsAreaText
- call PrintText
- call GBPalWhiteOutWithDelay3
- jp .goBackToMap
-.flashLightsAreaText
- TX_FAR _FlashLightsAreaText
- db "@"
-.dig
- ld a, ESCAPE_ROPE
- ld [wcf91], a
- ld [wPseudoItemID], a
- call UseItem
- ld a, [wActionResultOrTookBattleTurn]
- and a
- jp z, .loop
- call GBPalWhiteOutWithDelay3
- jp .goBackToMap
-.teleport
- call CheckIfInOutsideMap
- jr z, .canTeleport
- ld a, [wWhichPokemon]
- ld hl, wPartyMonNicks
- call GetPartyMonName
- ld hl, .cannotUseTeleportNowText
- call PrintText
- jp .loop
-.canTeleport
- ld hl, .warpToLastPokemonCenterText
- call PrintText
- ld hl, wd732
- set 3, [hl]
- set 6, [hl]
- call Func_1510
- ld hl, wd72e
- set 1, [hl]
- res 4, [hl]
- ld c, 60
- call DelayFrames
- call GBPalWhiteOutWithDelay3
- jp .goBackToMap
-.warpToLastPokemonCenterText
- TX_FAR _WarpToLastPokemonCenterText
- db "@"
-.cannotUseTeleportNowText
- TX_FAR _CannotUseTeleportNowText
- db "@"
-.cannotFlyHereText
- TX_FAR _CannotFlyHereText
- db "@"
-.softboiled
- ld hl, wPartyMon1MaxHP
- ld a, [wWhichPokemon]
- ld bc, wPartyMon2 - wPartyMon1
- call AddNTimes
- ld a, [hli]
- ld [H_DIVIDEND], a
- ld a, [hl]
- ld [H_DIVIDEND + 1], a
- ld a, 5
- ld [H_DIVISOR], a
- ld b, 2 ; number of bytes
- call Divide
- ld bc, wPartyMon1HP - wPartyMon1MaxHP
- add hl, bc
- ld a, [hld]
- ld b, a
- ld a, [H_QUOTIENT + 3]
- sub b
- ld b, [hl]
- ld a, [H_QUOTIENT + 2]
- sbc b
- jp nc, .notHealthyEnough
- ld a, [wPartyAndBillsPCSavedMenuItem]
- push af
- ld a, POTION
- ld [wcf91], a
- ld [wPseudoItemID], a
- call UseItem
- pop af
- ld [wPartyAndBillsPCSavedMenuItem], a
- jp .loop
-.notHealthyEnough ; if current HP is less than 1/5 of max HP
- ld hl, .notHealthyEnoughText
- call PrintText
- jp .loop
-.notHealthyEnoughText
- TX_FAR _NotHealthyEnoughText
- db "@"
-.goBackToMap
- call RestoreScreenTilesAndReloadTilePatterns
- jp CloseTextDisplay
-.newBadgeRequired
- ld hl, .newBadgeRequiredText
- call PrintText
- jp .loop
-.newBadgeRequiredText
- TX_FAR _NewBadgeRequiredText
- db "@"
-
-; writes a blank tile to all possible menu cursor positions on the party menu
-ErasePartyMenuCursors:
- coord hl, 0, 1
- ld bc, 2 * 20 ; menu cursor positions are 2 rows apart
- ld a, 6 ; 6 menu cursor positions
-.loop
- ld [hl], " "
- add hl, bc
- dec a
- jr nz, .loop
- ret
-
-ItemMenuLoop:
- call LoadScreenTilesFromBuffer2DisableBGTransfer ; restore saved screen
- call RunDefaultPaletteCommand
-
-StartMenu_Item:
- ld a, [wLinkState]
- dec a ; is the player in the Colosseum or Trade Centre?
- jr nz, .notInCableClubRoom
- ld hl, CannotUseItemsHereText
- call PrintText
- jr .exitMenu
-.notInCableClubRoom
- ld hl, wListPointer
- ld [hl], wNumBagItems & $ff
- inc hl
- ld [hl], wNumBagItems / $100 ; store item bag pointer in wListPointer (for DisplayListMenuID)
- xor a
- ld [wPrintItemPrices], a
- ld a, ITEMLISTMENU
- ld [wListMenuID], a
- ld a, [wBagSavedMenuItem]
- ld [wCurrentMenuItem], a
- call DisplayListMenuID
- ld a, [wCurrentMenuItem]
- ld [wBagSavedMenuItem], a
- jr nc, .choseItem
-.exitMenu
- call LoadScreenTilesFromBuffer2 ; restore saved screen
- call LoadTextBoxTilePatterns
- call UpdateSprites
- jp RedisplayStartMenu
-.choseItem
-; erase menu cursor (blank each tile in front of an item name)
- ld a, " "
- Coorda 5, 4
- Coorda 5, 6
- Coorda 5, 8
- Coorda 5, 10
- call PlaceUnfilledArrowMenuCursor
- xor a
- ld [wMenuItemToSwap], a
- ld a, [wcf91]
- cp BICYCLE
- jp z, .useOrTossItem
-.notBicycle1
- ld a, USE_TOSS_MENU_TEMPLATE
- ld [wTextBoxID], a
- call DisplayTextBoxID
- ld hl, wTopMenuItemY
- ld a, 11
- ld [hli], a ; top menu item Y
- ld a, 14
- ld [hli], a ; top menu item X
- xor a
- ld [hli], a ; current menu item ID
- inc hl
- inc a ; a = 1
- ld [hli], a ; max menu item ID
- ld a, A_BUTTON | B_BUTTON
- ld [hli], a ; menu watched keys
- xor a
- ld [hl], a ; old menu item id
- call HandleMenuInput
- call PlaceUnfilledArrowMenuCursor
- bit 1, a ; was the B button pressed?
- jr z, .useOrTossItem
- jp ItemMenuLoop
-.useOrTossItem ; if the player made the choice to use or toss the item
- ld a, [wcf91]
- ld [wd11e], a
- call GetItemName
- call CopyStringToCF4B ; copy name to wcf4b
- ld a, [wcf91]
- cp BICYCLE
- jr nz, .notBicycle2
- ld a, [wd732]
- bit 5, a
- jr z, .useItem_closeMenu
- ld hl, CannotGetOffHereText
- call PrintText
- jp ItemMenuLoop
-.notBicycle2
- ld a, [wCurrentMenuItem]
- and a
- jr nz, .tossItem
-; use item
- ld [wPseudoItemID], a ; a must be 0 due to above conditional jump
- ld a, [wcf91]
- cp HM_01
- jr nc, .useItem_partyMenu
- ld hl, UsableItems_CloseMenu
- ld de, 1
- call IsInArray
- jr c, .useItem_closeMenu
- ld a, [wcf91]
- ld hl, UsableItems_PartyMenu
- ld de, 1
- call IsInArray
- jr c, .useItem_partyMenu
- call UseItem
- jp ItemMenuLoop
-.useItem_closeMenu
- xor a
- ld [wPseudoItemID], a
- call UseItem
- ld a, [wActionResultOrTookBattleTurn]
- and a
- jp z, ItemMenuLoop
- jp CloseStartMenu
-.useItem_partyMenu
- ld a, [wUpdateSpritesEnabled]
- push af
- call UseItem
- ld a, [wActionResultOrTookBattleTurn]
- cp $02
- jp z, .partyMenuNotDisplayed
- call GBPalWhiteOutWithDelay3
- call RestoreScreenTilesAndReloadTilePatterns
- pop af
- ld [wUpdateSpritesEnabled], a
- jp StartMenu_Item
-.partyMenuNotDisplayed
- pop af
- ld [wUpdateSpritesEnabled], a
- jp ItemMenuLoop
-.tossItem
- call IsKeyItem
- ld a, [wIsKeyItem]
- and a
- jr nz, .skipAskingQuantity
- ld a, [wcf91]
- call IsItemHM
- jr c, .skipAskingQuantity
- call DisplayChooseQuantityMenu
- inc a
- jr z, .tossZeroItems
-.skipAskingQuantity
- ld hl, wNumBagItems
- call TossItem
-.tossZeroItems
- jp ItemMenuLoop
-
-CannotUseItemsHereText:
- TX_FAR _CannotUseItemsHereText
- db "@"
-
-CannotGetOffHereText:
- TX_FAR _CannotGetOffHereText
- db "@"
-
-; items which bring up the party menu when used
-UsableItems_PartyMenu:
- db MOON_STONE
- db ANTIDOTE
- db BURN_HEAL
- db ICE_HEAL
- db AWAKENING
- db PARLYZ_HEAL
- db FULL_RESTORE
- db MAX_POTION
- db HYPER_POTION
- db SUPER_POTION
- db POTION
- db FIRE_STONE
- db THUNDER_STONE
- db WATER_STONE
- db HP_UP
- db PROTEIN
- db IRON
- db CARBOS
- db CALCIUM
- db RARE_CANDY
- db LEAF_STONE
- db FULL_HEAL
- db REVIVE
- db MAX_REVIVE
- db FRESH_WATER
- db SODA_POP
- db LEMONADE
- db X_ATTACK
- db X_DEFEND
- db X_SPEED
- db X_SPECIAL
- db PP_UP
- db ETHER
- db MAX_ETHER
- db ELIXER
- db MAX_ELIXER
- db $ff
-
-; items which close the item menu when used
-UsableItems_CloseMenu:
- db ESCAPE_ROPE
- db ITEMFINDER
- db POKE_FLUTE
- db OLD_ROD
- db GOOD_ROD
- db SUPER_ROD
- db $ff
-
-StartMenu_TrainerInfo:
- call GBPalWhiteOut
- call ClearScreen
- call UpdateSprites
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- call DrawTrainerInfo
- predef DrawBadges ; draw badges
- ld b, SET_PAL_TRAINER_CARD
- call RunPaletteCommand
- call GBPalNormal
- call WaitForTextScrollButtonPress ; wait for button press
- call GBPalWhiteOut
- call LoadFontTilePatterns
- call LoadScreenTilesFromBuffer2 ; restore saved screen
- call RunDefaultPaletteCommand
- call ReloadMapData
- callba DrawStartMenu ; XXX what difference does this make?
- call LoadGBPal
- pop af
- ld [hTilesetType], a
- jp RedisplayStartMenu_DoNotDrawStartMenu
-
-; loads tile patterns and draws everything except for gym leader faces / badges
-DrawTrainerInfo:
- ld de, RedPicFront
- lb bc, BANK(RedPicFront), $01
- predef DisplayPicCenteredOrUpperRight
- call DisableLCD
- coord hl, 0, 2
- ld a, " "
- call TrainerInfo_DrawVerticalLine
- coord hl, 1, 2
- call TrainerInfo_DrawVerticalLine
- ld hl, vChars2 + $70
- ld de, vChars2
- ld bc, $70 * 4
- call CopyData
- ld hl, TrainerInfoTextBoxTileGraphics ; trainer info text box tile patterns
- ld de, vChars2 + $770
- ld bc, $0080
- push bc
- call TrainerInfo_FarCopyData
- ld hl, BlankLeaderNames
- ld de, vChars2 + $600
- ld bc, $0170
- call TrainerInfo_FarCopyData
- pop bc
- ld hl, BadgeNumbersTileGraphics ; badge number tile patterns
- ld de, vChars1 + $580
- call TrainerInfo_FarCopyData
- ld hl, GymLeaderFaceAndBadgeTileGraphics ; gym leader face and badge tile patterns
- ld de, vChars2 + $200
- ld bc, $0400
- ld a, $03
- call FarCopyData
- ld hl, TextBoxGraphics
- ld de, $00d0
- add hl, de ; hl = colon tile pattern
- ld de, vChars1 + $560
- ld bc, $0010
- ld a, $04
- push bc
- call FarCopyData
- pop bc
- ld hl, TrainerInfoTextBoxTileGraphics + $80 ; background tile pattern
- ld de, vChars1 + $570
- call TrainerInfo_FarCopyData
- call EnableLCD
- ld hl, wTrainerInfoTextBoxWidthPlus1
- ld a, 18 + 1
- ld [hli], a
- dec a
- ld [hli], a
- ld [hl], 1
- coord hl, 0, 0
- call TrainerInfo_DrawTextBox
- ld hl, wTrainerInfoTextBoxWidthPlus1
- ld a, 16 + 1
- ld [hli], a
- dec a
- ld [hli], a
- ld [hl], 3
- coord hl, 1, 10
- call TrainerInfo_DrawTextBox
- coord hl, 0, 10
- ld a, $d7
- call TrainerInfo_DrawVerticalLine
- coord hl, 19, 10
- call TrainerInfo_DrawVerticalLine
- coord hl, 6, 9
- ld de, TrainerInfo_BadgesText
- call PlaceString
- coord hl, 2, 2
- ld de, TrainerInfo_NameMoneyTimeText
- call PlaceString
- coord hl, 7, 2
- ld de, wPlayerName
- call PlaceString
- coord hl, 8, 4
- ld de, wPlayerMoney
- ld c, $e3
- call PrintBCDNumber
- coord hl, 9, 6
- ld de, wPlayTimeHours ; hours
- lb bc, LEFT_ALIGN | 1, 3
- call PrintNumber
- ld [hl], $d6 ; colon tile ID
- inc hl
- ld de, wPlayTimeMinutes ; minutes
- lb bc, LEADING_ZEROES | 1, 2
- jp PrintNumber
-
-TrainerInfo_FarCopyData:
- ld a, BANK(TrainerInfoTextBoxTileGraphics)
- jp FarCopyData
-
-TrainerInfo_NameMoneyTimeText:
- db "NAME/"
- next "MONEY/"
- next "TIME/@"
-
-; $76 is a circle tile
-TrainerInfo_BadgesText:
- db $76,"BADGES",$76,"@"
-
-; draws a text box on the trainer info screen
-; height is always 6
-; INPUT:
-; hl = destination address
-; [wTrainerInfoTextBoxWidthPlus1] = width
-; [wTrainerInfoTextBoxWidth] = width - 1
-; [wTrainerInfoTextBoxNextRowOffset] = distance from the end of a text box row to the start of the next
-TrainerInfo_DrawTextBox:
- ld a, $79 ; upper left corner tile ID
- lb de, $7a, $7b ; top edge and upper right corner tile ID's
- call TrainerInfo_DrawHorizontalEdge ; draw top edge
- call TrainerInfo_NextTextBoxRow
- ld a, [wTrainerInfoTextBoxWidthPlus1]
- ld e, a
- ld d, 0
- ld c, 6 ; height of the text box
-.loop
- ld [hl], $7c ; left edge tile ID
- add hl, de
- ld [hl], $78 ; right edge tile ID
- call TrainerInfo_NextTextBoxRow
- dec c
- jr nz, .loop
- ld a, $7d ; lower left corner tile ID
- lb de, $77, $7e ; bottom edge and lower right corner tile ID's
-
-TrainerInfo_DrawHorizontalEdge:
- ld [hli], a ; place left corner tile
- ld a, [wTrainerInfoTextBoxWidth]
- ld c, a
- ld a, d
-.loop
- ld [hli], a ; place edge tile
- dec c
- jr nz, .loop
- ld a, e
- ld [hl], a ; place right corner tile
- ret
-
-TrainerInfo_NextTextBoxRow:
- ld a, [wTrainerInfoTextBoxNextRowOffset] ; distance to the start of the next row
-.loop
- inc hl
- dec a
- jr nz, .loop
- ret
-
-; draws a vertical line
-; INPUT:
-; hl = address of top tile in the line
-; a = tile ID
-TrainerInfo_DrawVerticalLine:
- ld de, SCREEN_WIDTH
- ld c, 8
-.loop
- ld [hl], a
- add hl, de
- dec c
- jr nz, .loop
- ret
-
-StartMenu_SaveReset:
- ld a, [wd72e]
- bit 6, a ; is the player using the link feature?
- jp nz, Init
- predef SaveSAV ; save the game
- call LoadScreenTilesFromBuffer2 ; restore saved screen
- jp HoldTextDisplayOpen
-
-StartMenu_Option:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- call ClearScreen
- call UpdateSprites
- callab DisplayOptionMenu
- call LoadScreenTilesFromBuffer2 ; restore saved screen
- call LoadTextBoxTilePatterns
- call UpdateSprites
- jp RedisplayStartMenu
-
-SwitchPartyMon:
- call SwitchPartyMon_InitVarOrSwapData ; swap data
- ld a, [wSwappedMenuItem]
- call SwitchPartyMon_ClearGfx
- ld a, [wCurrentMenuItem]
- call SwitchPartyMon_ClearGfx
- jp RedrawPartyMenu_
-
-SwitchPartyMon_ClearGfx:
- push af
- coord hl, 0, 0
- ld bc, SCREEN_WIDTH * 2
- call AddNTimes
- ld c, SCREEN_WIDTH * 2
- ld a, " "
-.clearMonBGLoop ; clear the mon's row in the party menu
- ld [hli], a
- dec c
- jr nz, .clearMonBGLoop
- pop af
- ld hl, wOAMBuffer
- ld bc, $10
- call AddNTimes
- ld de, $4
- ld c, e
-.clearMonOAMLoop
- ld [hl], $a0
- add hl, de
- dec c
- jr nz, .clearMonOAMLoop
- call WaitForSoundToFinish
- ld a, SFX_SWAP
- jp PlaySound
-
-SwitchPartyMon_InitVarOrSwapData:
-; This is used to initialise [wMenuItemToSwap] and to actually swap the data.
- ld a, [wMenuItemToSwap]
- and a ; has [wMenuItemToSwap] been initialised yet?
- jr nz, .pickedMonsToSwap
-; If not, initialise [wMenuItemToSwap] so that it matches the current mon.
- ld a, [wWhichPokemon]
- inc a ; [wMenuItemToSwap] counts from 1
- ld [wMenuItemToSwap], a
- ret
-.pickedMonsToSwap
- xor a
- ld [wPartyMenuTypeOrMessageID], a
- ld a, [wMenuItemToSwap]
- dec a
- ld b, a
- ld a, [wCurrentMenuItem]
- ld [wSwappedMenuItem], a
- cp b ; swapping a mon with itself?
- jr nz, .swappingDifferentMons
-; can't swap a mon with itself
- xor a
- ld [wMenuItemToSwap], a
- ld [wPartyMenuTypeOrMessageID], a
- ret
-.swappingDifferentMons
- ld a, b
- ld [wMenuItemToSwap], a
- push hl
- push de
- ld hl, wPartySpecies
- ld d, h
- ld e, l
- ld a, [wCurrentMenuItem]
- add l
- ld l, a
- jr nc, .noCarry
- inc h
-.noCarry
- ld a, [wMenuItemToSwap]
- add e
- ld e, a
- jr nc, .noCarry2
- inc d
-.noCarry2
- ld a, [hl]
- ld [hSwapTemp], a
- ld a, [de]
- ld [hl], a
- ld a, [hSwapTemp]
- ld [de], a
- ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1
- ld a, [wCurrentMenuItem]
- call AddNTimes
- push hl
- ld de, wSwitchPartyMonTempBuffer
- ld bc, wPartyMon2 - wPartyMon1
- call CopyData
- ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1
- ld a, [wMenuItemToSwap]
- call AddNTimes
- pop de
- push hl
- ld bc, wPartyMon2 - wPartyMon1
- call CopyData
- pop de
- ld hl, wSwitchPartyMonTempBuffer
- ld bc, wPartyMon2 - wPartyMon1
- call CopyData
- ld hl, wPartyMonOT
- ld a, [wCurrentMenuItem]
- call SkipFixedLengthTextEntries
- push hl
- ld de, wSwitchPartyMonTempBuffer
- ld bc, NAME_LENGTH
- call CopyData
- ld hl, wPartyMonOT
- ld a, [wMenuItemToSwap]
- call SkipFixedLengthTextEntries
- pop de
- push hl
- ld bc, NAME_LENGTH
- call CopyData
- pop de
- ld hl, wSwitchPartyMonTempBuffer
- ld bc, NAME_LENGTH
- call CopyData
- ld hl, wPartyMonNicks
- ld a, [wCurrentMenuItem]
- call SkipFixedLengthTextEntries
- push hl
- ld de, wSwitchPartyMonTempBuffer
- ld bc, NAME_LENGTH
- call CopyData
- ld hl, wPartyMonNicks
- ld a, [wMenuItemToSwap]
- call SkipFixedLengthTextEntries
- pop de
- push hl
- ld bc, NAME_LENGTH
- call CopyData
- pop de
- ld hl, wSwitchPartyMonTempBuffer
- ld bc, NAME_LENGTH
- call CopyData
- ld a, [wMenuItemToSwap]
- ld [wSwappedMenuItem], a
- xor a
- ld [wMenuItemToSwap], a
- ld [wPartyMenuTypeOrMessageID], a
- pop de
- pop hl
- ret
diff --git a/engine/menu/status_screen.asm b/engine/menu/status_screen.asm
deleted file mode 100755
index 1e2ba889..00000000
--- a/engine/menu/status_screen.asm
+++ /dev/null
@@ -1,495 +0,0 @@
-DrawHP:
-; Draws the HP bar in the stats screen
- call GetPredefRegisters
- ld a, $1
- jr DrawHP_
-
-DrawHP2:
-; Draws the HP bar in the party screen
- call GetPredefRegisters
- ld a, $2
-
-DrawHP_:
- ld [wHPBarType], a
- push hl
- ld a, [wLoadedMonHP]
- ld b, a
- ld a, [wLoadedMonHP + 1]
- ld c, a
- or b
- jr nz, .nonzeroHP
- xor a
- ld c, a
- ld e, a
- ld a, $6
- ld d, a
- jp .drawHPBarAndPrintFraction
-.nonzeroHP
- ld a, [wLoadedMonMaxHP]
- ld d, a
- ld a, [wLoadedMonMaxHP + 1]
- ld e, a
- predef HPBarLength
- ld a, $6
- ld d, a
- ld c, a
-.drawHPBarAndPrintFraction
- pop hl
- push de
- push hl
- push hl
- call DrawHPBar
- pop hl
- ld a, [hFlags_0xFFFA]
- bit 0, a
- jr z, .printFractionBelowBar
- ld bc, $9 ; right of bar
- jr .printFraction
-.printFractionBelowBar
- ld bc, SCREEN_WIDTH + 1 ; below bar
-.printFraction
- add hl, bc
- ld de, wLoadedMonHP
- lb bc, 2, 3
- call PrintNumber
- ld a, "/"
- ld [hli], a
- ld de, wLoadedMonMaxHP
- lb bc, 2, 3
- call PrintNumber
- pop hl
- pop de
- ret
-
-
-; Predef 0x37
-StatusScreen:
- call LoadMonData
- ld a, [wMonDataLocation]
- cp BOX_DATA
- jr c, .DontRecalculate
-; mon is in a box or daycare
- ld a, [wLoadedMonBoxLevel]
- ld [wLoadedMonLevel], a
- ld [wCurEnemyLVL], a
- ld hl, wLoadedMonHPExp - 1
- ld de, wLoadedMonStats
- ld b, $1
- call CalcStats ; Recalculate stats
-.DontRecalculate
- ld hl, wd72c
- set 1, [hl]
- ld a, $33
- ld [rNR50], a ; Reduce the volume
- call GBPalWhiteOutWithDelay3
- call ClearScreen
- call UpdateSprites
- call LoadHpBarAndStatusTilePatterns
- ld de, BattleHudTiles1 ; source
- ld hl, vChars2 + $6d0 ; dest
- lb bc, BANK(BattleHudTiles1), $03
- call CopyVideoDataDouble ; ·│ :L and halfarrow line end
- ld de, BattleHudTiles2
- ld hl, vChars2 + $780
- lb bc, BANK(BattleHudTiles2), $01
- call CopyVideoDataDouble ; │
- ld de, BattleHudTiles3
- ld hl, vChars2 + $760
- lb bc, BANK(BattleHudTiles3), $02
- call CopyVideoDataDouble ; ─┘
- ld de, PTile
- ld hl, vChars2 + $720
- lb bc, BANK(PTile), (PTileEnd - PTile) / $8
- call CopyVideoDataDouble ; P (for PP), inline
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- coord hl, 19, 1
- lb bc, 6, 10
- call DrawLineBox ; Draws the box around name, HP and status
- ld de, -6
- add hl, de
- ld [hl], "⠄" ; . after No ("." is a different one)
- dec hl
- ld [hl], "№"
- coord hl, 19, 9
- lb bc, 8, 6
- call DrawLineBox ; Draws the box around types, ID No. and OT
- coord hl, 10, 9
- ld de, Type1Text
- call PlaceString ; "TYPE1/"
- coord hl, 11, 3
- predef DrawHP
- ld hl, wStatusScreenHPBarColor
- call GetHealthBarColor
- ld b, SET_PAL_STATUS_SCREEN
- call RunPaletteCommand
- coord hl, 16, 6
- ld de, wLoadedMonStatus
- call PrintStatusCondition
- jr nz, .StatusWritten
- coord hl, 16, 6
- ld de, OKText
- call PlaceString ; "OK"
-.StatusWritten
- coord hl, 9, 6
- ld de, StatusText
- call PlaceString ; "STATUS/"
- coord hl, 14, 2
- call PrintLevel ; Pokémon level
- ld a, [wMonHIndex]
- ld [wd11e], a
- ld [wd0b5], a
- predef IndexToPokedex
- coord hl, 3, 7
- ld de, wd11e
- lb bc, LEADING_ZEROES | 1, 3
- call PrintNumber ; Pokémon no.
- coord hl, 11, 10
- predef PrintMonType
- ld hl, NamePointers2
- call .GetStringPointer
- ld d, h
- ld e, l
- coord hl, 9, 1
- call PlaceString ; Pokémon name
- ld hl, OTPointers
- call .GetStringPointer
- ld d, h
- ld e, l
- coord hl, 12, 16
- call PlaceString ; OT
- coord hl, 12, 14
- ld de, wLoadedMonOTID
- lb bc, LEADING_ZEROES | 2, 5
- call PrintNumber ; ID Number
- ld d, $0
- call PrintStatsBox
- call Delay3
- call GBPalNormal
- coord hl, 1, 0
- call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture
- ld a, [wMonDataLocation]
- cp ENEMY_PARTY_DATA
- jr z, .playRegularCry
- cp BOX_DATA
- jr z, .checkBoxData
- callab IsThisPartymonStarterPikachu_Party
- jr nc, .playRegularCry
- jr .playPikachuSoundClip
-.checkBoxData
- callab IsThisPartymonStarterPikachu_Box
- jr nc, .playRegularCry
-.playPikachuSoundClip
- ld e, 16
- callab PlayPikachuSoundClip
- jr .continue
-.playRegularCry
- ld a, [wcf91]
- call PlayCry ; play Pokémon cry
-.continue
- call WaitForTextScrollButtonPress ; wait for button
- pop af
- ld [hTilesetType], a
- ret
-
-.GetStringPointer
- ld a, [wMonDataLocation]
- add a
- ld c, a
- ld b, 0
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wMonDataLocation]
- cp DAYCARE_DATA
- ret z
- ld a, [wWhichPokemon]
- jp SkipFixedLengthTextEntries
-
-OTPointers:
- dw wPartyMonOT
- dw wEnemyMonOT
- dw wBoxMonOT
- dw wDayCareMonOT
-
-NamePointers2:
- dw wPartyMonNicks
- dw wEnemyMonNicks
- dw wBoxMonNicks
- dw wDayCareMonName
-
-Type1Text:
- db "TYPE1/", $4e
-
-Type2Text:
- db "TYPE2/", $4e
-
-IDNoText:
- db $73, "№/", $4e
-
-OTText:
- db "OT/"
- next "@"
-
-StatusText:
- db "STATUS/@"
-
-OKText:
- db "OK@"
-
-; Draws a line starting from hl high b and wide c
-DrawLineBox:
- ld de, SCREEN_WIDTH ; New line
-.PrintVerticalLine
- ld [hl], $78 ; │
- add hl, de
- dec b
- jr nz, .PrintVerticalLine
- ld [hl], $77 ; ┘
- dec hl
-.PrintHorizLine
- ld [hl], $76 ; ─
- dec hl
- dec c
- jr nz, .PrintHorizLine
- ld [hl], $6f ; ← (halfarrow ending)
- ret
-
-PTile: ; This is a single 1bpp "P" tile
- INCBIN "gfx/p_tile.1bpp"
-PTileEnd:
-
-PrintStatsBox:
- ld a, d
- and a ; a is 0 from the status screen
- jr nz, .DifferentBox
- coord hl, 0, 8
- lb bc, 8, 8
- call TextBoxBorder ; Draws the box
- coord hl, 1, 9 ; Start printing stats from here
- ld bc, $0019 ; Number offset
- jr .PrintStats
-.DifferentBox
- coord hl, 9, 2
- lb bc, 8, 9
- call TextBoxBorder
- coord hl, 11, 3
- ld bc, $0018
-.PrintStats
- push bc
- push hl
- ld de, StatsText
- call PlaceString
- pop hl
- pop bc
- add hl, bc
- ld de, wLoadedMonAttack
- lb bc, 2, 3
- call PrintStat
- ld de, wLoadedMonDefense
- call PrintStat
- ld de, wLoadedMonSpeed
- call PrintStat
- ld de, wLoadedMonSpecial
- jp PrintNumber
-PrintStat:
- push hl
- call PrintNumber
- pop hl
- ld de, SCREEN_WIDTH * 2
- add hl, de
- ret
-
-StatsText:
- db "ATTACK"
- next "DEFENSE"
- next "SPEED"
- next "SPECIAL@"
-
-StatusScreen2:
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- ld [H_AUTOBGTRANSFERENABLED], a
- ld bc, NUM_MOVES + 1
- ld hl, wMoves
- call FillMemory
- ld hl, wLoadedMonMoves
- ld de, wMoves
- ld bc, NUM_MOVES
- call CopyData
- callab FormatMovesString
- coord hl, 9, 2
- lb bc, 5, 10
- call ClearScreenArea ; Clear under name
- coord hl, 19, 3
- ld [hl], $78
- coord hl, 0, 8
- lb bc, 8, 18
- call TextBoxBorder ; Draw move container
- coord hl, 2, 9
- ld de, wMovesString
- call PlaceString ; Print moves
- ld a, [wNumMovesMinusOne]
- inc a
- ld c, a
- ld a, $4
- sub c
- ld b, a ; Number of moves ?
- coord hl, 11, 10
- ld de, SCREEN_WIDTH * 2
- ld a, $72 ; special P tile id
- call StatusScreen_PrintPP ; Print "PP"
- ld a, b
- and a
- jr z, .InitPP
- ld c, a
- ld a, "-"
- call StatusScreen_PrintPP ; Fill the rest with --
-.InitPP
- ld hl, wLoadedMonMoves
- coord de, 14, 10
- ld b, 0
-.PrintPP
- ld a, [hli]
- and a
- jr z, .PPDone
- push bc
- push hl
- push de
- ld hl, wCurrentMenuItem
- ld a, [hl]
- push af
- ld a, b
- ld [hl], a
- push hl
- callab GetMaxPP
- pop hl
- pop af
- ld [hl], a
- pop de
- pop hl
- push hl
- ld bc, wPartyMon1PP - wPartyMon1Moves - 1
- add hl, bc
- ld a, [hl]
- and $3f
- ld [wStatusScreenCurrentPP], a
- ld h, d
- ld l, e
- push hl
- ld de, wStatusScreenCurrentPP
- lb bc, 1, 2
- call PrintNumber
- ld a, "/"
- ld [hli], a
- ld de, wMaxPP
- lb bc, 1, 2
- call PrintNumber
- pop hl
- ld de, SCREEN_WIDTH * 2
- add hl, de
- ld d, h
- ld e, l
- pop hl
- pop bc
- inc b
- ld a, b
- cp $4
- jr nz, .PrintPP
-.PPDone
- coord hl, 9, 3
- ld de, StatusScreenExpText
- call PlaceString
- ld a, [wLoadedMonLevel]
- push af
- cp MAX_LEVEL
- jr z, .Level100
- inc a
- ld [wLoadedMonLevel], a ; Increase temporarily if not 100
-.Level100
- coord hl, 14, 6
- ld [hl], $70 ; 1-tile "to"
- inc hl
- inc hl
- call PrintLevel
- pop af
- ld [wLoadedMonLevel], a
- ld de, wLoadedMonExp
- coord hl, 12, 4
- lb bc, 3, 7
- call PrintNumber ; exp
- call CalcExpToLevelUp
- ld de, wLoadedMonExp
- coord hl, 7, 6
- lb bc, 3, 7
- call PrintNumber ; exp needed to level up
- coord hl, 9, 0
- call StatusScreen_ClearName
- coord hl, 9, 1
- call StatusScreen_ClearName
- ld a, [wMonHIndex]
- ld [wd11e], a
- call GetMonName
- coord hl, 9, 1
- call PlaceString
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- call Delay3
- call WaitForTextScrollButtonPress ; wait for button
- pop af
- ld [hTilesetType], a
- ld hl, wd72c
- res 1, [hl]
- ld a, $77
- ld [rNR50], a
- call GBPalWhiteOut
- jp ClearScreen
-
-CalcExpToLevelUp:
- ld a, [wLoadedMonLevel]
- cp MAX_LEVEL
- jr z, .atMaxLevel
- inc a
- ld d, a
- callab CalcExperience
- ld hl, wLoadedMonExp + 2
- ld a, [hExperience + 2]
- sub [hl]
- ld [hld], a
- ld a, [hExperience + 1]
- sbc [hl]
- ld [hld], a
- ld a, [hExperience]
- sbc [hl]
- ld [hld], a
- ret
-.atMaxLevel
- ld hl, wLoadedMonExp
- xor a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ret
-
-StatusScreenExpText:
- db "EXP POINTS"
- next "LEVEL UP@"
-
-StatusScreen_ClearName:
- ld bc, 10
- ld a, " "
- jp FillMemory
-
-StatusScreen_PrintPP:
-; print PP or -- c times, going down two rows each time
- ld [hli], a
- ld [hld], a
- add hl, de
- dec c
- jr nz, StatusScreen_PrintPP
- ret
diff --git a/engine/menu/swap_items.asm b/engine/menu/swap_items.asm
deleted file mode 100644
index 563fc7d5..00000000
--- a/engine/menu/swap_items.asm
+++ /dev/null
@@ -1,149 +0,0 @@
-HandleItemListSwapping:
- ld a, [wListMenuID]
- cp ITEMLISTMENU
- jp nz, DisplayListMenuIDLoop ; only rearrange item list menus
- push hl
- ld hl, wListPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl ; hl = beginning of list entries
- ld a, [wCurrentMenuItem]
- ld b, a
- ld a, [wListScrollOffset]
- add b
- add a
- ld c, a
- ld b, 0
- add hl, bc ; hl = address of currently selected item entry
- ld a, [hl]
- pop hl
- inc a
- jp z, DisplayListMenuIDLoop ; ignore attempts to swap the Cancel menu item
- ld a, [wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1)
- and a ; has the first item to swap already been chosen?
- jr nz, .swapItems
-; if not, set the currently selected item as the first item
- ld a, [wCurrentMenuItem]
- inc a
- ld b, a
- ld a, [wListScrollOffset] ; index of top (visible) menu item within the list
- add b
- ld [wMenuItemToSwap], a ; ID of item chosen for swapping (counts from 1)
- ld c, 20
- call DelayFrames
- jp DisplayListMenuIDLoop
-.swapItems
- ld a, [wCurrentMenuItem]
- inc a
- ld b, a
- ld a, [wListScrollOffset]
- add b
- ld b, a
- ld a, [wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1)
- cp b ; is the currently selected item the same as the first item to swap?
- jp z, DisplayListMenuIDLoop ; ignore attempts to swap an item with itself
- dec a
- ld [wMenuItemToSwap], a ; ID of item chosen for swapping (counts from 1)
- ld c, 20
- call DelayFrames
- push hl
- push de
- ld hl, wListPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl ; hl = beginning of list entries
- ld d, h
- ld e, l ; de = beginning of list entries
- ld a, [wCurrentMenuItem]
- ld b, a
- ld a, [wListScrollOffset]
- add b
- add a
- ld c, a
- ld b, 0
- add hl, bc ; hl = address of currently selected item entry
- ld a, [wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1)
- add a
- add e
- ld e, a
- jr nc, .noCarry
- inc d
-.noCarry ; de = address of first item to swap
- ld a, [de]
- ld b, a
- ld a, [hli]
- cp b
- jr z, .swapSameItemType
-.swapDifferentItems
- ld [$ff95], a ; [$ff95] = second item ID
- ld a, [hld]
- ld [$ff96], a ; [$ff96] = second item quantity
- ld a, [de]
- ld [hli], a ; put first item ID in second item slot
- inc de
- ld a, [de]
- ld [hl], a ; put first item quantity in second item slot
- ld a, [$ff96]
- ld [de], a ; put second item quantity in first item slot
- dec de
- ld a, [$ff95]
- ld [de], a ; put second item ID in first item slot
- xor a
- ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped
- pop de
- pop hl
- jp DisplayListMenuIDLoop
-.swapSameItemType
- inc de
- ld a, [hl]
- ld b, a
- ld a, [de]
- add b ; a = sum of both item quantities
- cp 100 ; is the sum too big for one item slot?
- jr c, .combineItemSlots
-; swap enough items from the first slot to max out the second slot if they can't be combined
- sub 99
- ld [de], a
- ld a, 99
- ld [hl], a
- jr .done
-.combineItemSlots
- ld [hl], a ; put the sum in the second item slot
- ld hl, wListPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- dec [hl] ; decrease the number of items
- ld a, [hl]
- ld [wListCount], a ; update number of items variable
- cp 1
- jr nz, .skipSettingMaxMenuItemID
- ld [wMaxMenuItem], a ; if the number of items is only one now, update the max menu item ID
-.skipSettingMaxMenuItemID
- dec de
- ld h, d
- ld l, e
- inc hl
- inc hl ; hl = address of item after first item to swap
-.moveItemsUpLoop ; erase the first item slot and move up all the following item slots to fill the gap
- ld a, [hli]
- ld [de], a
- inc de
- inc a ; reached the $ff terminator?
- jr z, .afterMovingItemsUp
- ld a, [hli]
- ld [de], a
- inc de
- jr .moveItemsUpLoop
-.afterMovingItemsUp
- xor a
- ld [wListScrollOffset], a
- ld [wCurrentMenuItem], a
-.done
- xor a
- ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped
- pop de
- pop hl
- jp DisplayListMenuIDLoop
diff --git a/engine/menu/text_box.asm b/engine/menu/text_box.asm
deleted file mode 100644
index a109bff2..00000000
--- a/engine/menu/text_box.asm
+++ /dev/null
@@ -1,739 +0,0 @@
-; function to draw various text boxes
-DisplayTextBoxID_:
- ld a, [wTextBoxID]
- cp TWO_OPTION_MENU
- jp z, DisplayTwoOptionMenu
- ld c, a
- ld hl, TextBoxFunctionTable
- ld de, 3
- call SearchTextBoxTable
- jr c, .functionTableMatch
- ld hl, TextBoxCoordTable
- ld de, 5
- call SearchTextBoxTable
- jr c, .coordTableMatch
- ld hl, TextBoxTextAndCoordTable
- ld de, 9
- call SearchTextBoxTable
- jr c, .textAndCoordTableMatch
-.done
- ret
-.functionTableMatch
- ld a, [hli]
- ld h, [hl]
- ld l, a ; hl = address of function
- ld de, .done
- push de
- jp hl ; jump to the function
-.coordTableMatch
- call GetTextBoxIDCoords
- call GetAddressOfScreenCoords
- call TextBoxBorder
- ret
-.textAndCoordTableMatch
- call GetTextBoxIDCoords
- push hl
- call GetAddressOfScreenCoords
- call TextBoxBorder
- pop hl
- call GetTextBoxIDText
- ld a, [wd730]
- push af
- ld a, [wd730]
- set 6, a ; no pauses between printing each letter
- ld [wd730], a
- call PlaceString
- pop af
- ld [wd730], a
- call UpdateSprites
- ret
-
-; function to search a table terminated with $ff for a byte matching c in increments of de
-; sets carry flag if a match is found and clears carry flag if not
-SearchTextBoxTable:
- dec de
-.loop
- ld a, [hli]
- cp $ff
- jr z, .notFound
- cp c
- jr z, .found
- add hl, de
- jr .loop
-.found
- scf
-.notFound
- ret
-
-; function to load coordinates from the TextBoxCoordTable or the TextBoxTextAndCoordTable
-; INPUT:
-; hl = address of coordinates
-; OUTPUT:
-; b = height
-; c = width
-; d = row of upper left corner
-; e = column of upper left corner
-GetTextBoxIDCoords:
- ld a, [hli] ; column of upper left corner
- ld e, a
- ld a, [hli] ; row of upper left corner
- ld d, a
- ld a, [hli] ; column of lower right corner
- sub e
- dec a
- ld c, a ; c = width
- ld a, [hli] ; row of lower right corner
- sub d
- dec a
- ld b, a ; b = height
- ret
-
-; function to load a text address and text coordinates from the TextBoxTextAndCoordTable
-GetTextBoxIDText:
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a ; de = address of text
- push de ; save text address
- ld a, [hli]
- ld e, a ; column of upper left corner of text
- ld a, [hl]
- ld d, a ; row of upper left corner of text
- call GetAddressOfScreenCoords
- pop de ; restore text address
- ret
-
-; function to point hl to the screen coordinates
-; INPUT:
-; d = row
-; e = column
-; OUTPUT:
-; hl = address of upper left corner of text box
-GetAddressOfScreenCoords:
- push bc
- coord hl, 0, 0
- ld bc, 20
-.loop ; loop to add d rows to the base address
- ld a, d
- and a
- jr z, .addedRows
- add hl, bc
- dec d
- jr .loop
-.addedRows
- pop bc
- add hl, de
- ret
-
-; Format:
-; 00: text box ID
-; 01-02: function address
-TextBoxFunctionTable:
- dbw MONEY_BOX, DisplayMoneyBox
- dbw BUY_SELL_QUIT_MENU, DoBuySellQuitMenu
- dbw FIELD_MOVE_MON_MENU, DisplayFieldMoveMonMenu
- db $ff ; terminator
-
-; Format:
-; 00: text box ID
-; 01: column of upper left corner
-; 02: row of upper left corner
-; 03: column of lower right corner
-; 04: row of lower right corner
-TextBoxCoordTable:
- db MESSAGE_BOX, 0, 12, 19, 17
- db $03, 0, 0, 19, 14
- db $07, 0, 0, 11, 6
- db LIST_MENU_BOX, 4, 2, 19, 12
- db $10, 7, 0, 19, 17
- db MON_SPRITE_POPUP, 6, 4, 14, 13
- db $ff ; terminator
-
-; Format:
-; 00: text box ID
-; 01: column of upper left corner
-; 02: row of upper left corner
-; 03: column of lower right corner
-; 04: row of lower right corner
-; 05-06: address of text
-; 07: column of beginning of text
-; 08: row of beginning of text
-; table of window positions and corresponding text [key, start column, start row, end column, end row, text pointer [2 bytes], text column, text row]
-TextBoxTextAndCoordTable:
- db JP_MOCHIMONO_MENU_TEMPLATE
- db 0,0,14,17 ; text box coordinates
- dw JapaneseMochimonoText
- db 3,0 ; text coordinates
-
- db USE_TOSS_MENU_TEMPLATE
- db 13,10,19,14 ; text box coordinates
- dw UseTossText
- db 15,11 ; text coordinates
-
- db JP_SAVE_MESSAGE_MENU_TEMPLATE
- db 0,0,7,5 ; text box coordinates
- dw JapaneseSaveMessageText
- db 2,2 ; text coordinates
-
- db JP_SPEED_OPTIONS_MENU_TEMPLATE
- db 0,6,5,10 ; text box coordinates
- dw JapaneseSpeedOptionsText
- db 2,7 ; text coordinates
-
- db BATTLE_MENU_TEMPLATE
- db 8,12,19,17 ; text box coordinates
- dw BattleMenuText
- db 10,14 ; text coordinates
-
- db SAFARI_BATTLE_MENU_TEMPLATE
- db 0,12,19,17 ; text box coordinates
- dw SafariZoneBattleMenuText
- db 2,14 ; text coordinates
-
- db SWITCH_STATS_CANCEL_MENU_TEMPLATE
- db 11,11,19,17 ; text box coordinates
- dw SwitchStatsCancelText
- db 13,12 ; text coordinates
-
- db BUY_SELL_QUIT_MENU_TEMPLATE
- db 0,0,10,6 ; text box coordinates
- dw BuySellQuitText
- db 2,1 ; text coordinates
-
- db MONEY_BOX_TEMPLATE
- db 11,0,19,2 ; text box coordinates
- dw MoneyText
- db 13,0 ; text coordinates
-
- db JP_AH_MENU_TEMPLATE
- db 7,6,11,10 ; text box coordinates
- dw JapaneseAhText
- db 8,8 ; text coordinates
-
- db JP_POKEDEX_MENU_TEMPLATE
- db 11,8,19,17 ; text box coordinates
- dw JapanesePokedexMenu
- db 12,10 ; text coordinates
-
-; note that there is no terminator
-
-BuySellQuitText:
- db "BUY"
- next "SELL"
- next "QUIT@@"
-
-UseTossText:
- db "USE"
- next "TOSS@"
-
-JapaneseSaveMessageText:
- db "きろく"
- next "メッセージ@"
-
-JapaneseSpeedOptionsText:
- db "はやい"
- next "おそい@"
-
-MoneyText:
- db "MONEY@"
-
-JapaneseMochimonoText:
- db "もちもの@"
-
-JapaneseMainMenuText:
- db "つづきから"
- next "さいしょから@"
-
-BattleMenuText:
- db "FIGHT ",$E1,$E2
- next "ITEM RUN@"
-
-SafariZoneBattleMenuText:
- db "BALL× BAIT"
- next "THROW ROCK RUN@"
-
-SwitchStatsCancelText:
- db "SWITCH"
- next "STATS"
- next "CANCEL@"
-
-JapaneseAhText:
- db "アッ!@"
-
-JapanesePokedexMenu:
- db "データをみる"
- next "なきごえ"
- next "ぶんぷをみる"
- next "キャンセル@"
-
-DisplayMoneyBox:
- ld hl, wd730
- set 6, [hl]
- ld a, MONEY_BOX_TEMPLATE
- ld [wTextBoxID], a
- call DisplayTextBoxID
- coord hl, 13, 1
- lb bc, 1, 6
- call ClearScreenArea
- coord hl, 12, 1
- ld de, wPlayerMoney
- ld c, $a3
- call PrintBCDNumber
- ld hl, wd730
- res 6, [hl]
- ret
-
-CurrencyString:
- db " ¥@"
-
-DoBuySellQuitMenu:
- ld a, [wd730]
- set 6, a ; no printing delay
- ld [wd730], a
- xor a
- ld [wChosenMenuItem], a
- ld a, BUY_SELL_QUIT_MENU_TEMPLATE
- ld [wTextBoxID], a
- call DisplayTextBoxID
- ld a, A_BUTTON | B_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, $2
- ld [wMaxMenuItem], a
- ld a, $1
- ld [wTopMenuItemY], a
- ld a, $1
- ld [wTopMenuItemX], a
- xor a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld [wMenuWatchMovingOutOfBounds], a
- ld a, [wd730]
- res 6, a ; turn on the printing delay
- ld [wd730], a
- call HandleMenuInput
- call PlaceUnfilledArrowMenuCursor
- bit 0, a ; was A pressed?
- jr nz, .pressedA
- bit 1, a ; was B pressed? (always true since only A/B are watched)
- jr z, .pressedA
- ld a, CANCELLED_MENU
- ld [wMenuExitMethod], a
- jr .quit
-.pressedA
- ld a, CHOSE_MENU_ITEM
- ld [wMenuExitMethod], a
- ld a, [wCurrentMenuItem]
- ld [wChosenMenuItem], a
- ld b, a
- ld a, [wMaxMenuItem]
- cp b
- jr z, .quit
- ret
-.quit
- ld a, CANCELLED_MENU
- ld [wMenuExitMethod], a
- ld a, [wCurrentMenuItem]
- ld [wChosenMenuItem], a
- scf
- ret
-
-; displays a menu with two options to choose from
-; b = Y of upper left corner of text region
-; c = X of upper left corner of text region
-; hl = address where the text box border should be drawn
-DisplayTwoOptionMenu:
- push hl
- ld a, [wd730]
- set 6, a ; no printing delay
- ld [wd730], a
-
-; pointless because both values are overwritten before they are read
- xor a
- ld [wChosenMenuItem], a
- ld [wMenuExitMethod], a
-
- ld a, A_BUTTON | B_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, $1
- ld [wMaxMenuItem], a
- ld a, b
- ld [wTopMenuItemY], a
- ld a, c
- ld [wTopMenuItemX], a
- xor a
- ld [wLastMenuItem], a
- ld [wMenuWatchMovingOutOfBounds], a
- push hl
- ld hl, wTwoOptionMenuID
- bit 7, [hl] ; select second menu item by default?
- res 7, [hl]
- jr z, .storeCurrentMenuItem
- inc a
-.storeCurrentMenuItem
- ld [wCurrentMenuItem], a
- pop hl
- push hl
- push hl
- call TwoOptionMenu_SaveScreenTiles
- ld a, [wTwoOptionMenuID]
- ld hl, TwoOptionMenuStrings
- ld e, a
- ld d, $0
- ld a, $5
-.menuStringLoop
- add hl, de
- dec a
- jr nz, .menuStringLoop
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
- ld e, l
- ld d, h
- pop hl
- push de
- ld a, [wTwoOptionMenuID]
- cp TRADE_CANCEL_MENU
- jr nz, .notTradeCancelMenu
- call CableClub_TextBoxBorder
- jr .afterTextBoxBorder
-.notTradeCancelMenu
- call TextBoxBorder
-.afterTextBoxBorder
- call UpdateSprites
- pop hl
- ld a, [hli]
- and a ; put blank line before first menu item?
- ld bc, 20 + 2
- jr z, .noBlankLine
- ld bc, 2 * 20 + 2
-.noBlankLine
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- pop hl
- add hl, bc
- call PlaceString
- xor a
- ld [wTwoOptionMenuID], a
- ld hl, wd730
- res 6, [hl] ; turn on the printing delay
- call HandleMenuInput
- pop hl
- bit 1, a ; A button pressed?
- jr nz, .choseSecondMenuItem ; automatically choose the second option if B is pressed
-.pressedAButton
- ld a, [wCurrentMenuItem]
- ld [wChosenMenuItem], a
- and a
- jr nz, .choseSecondMenuItem
-; chose first menu item
- ld a, CHOSE_FIRST_ITEM
- ld [wMenuExitMethod], a
- ld c, 15
- call DelayFrames
- call TwoOptionMenu_RestoreScreenTiles
- and a
- ret
-.choseSecondMenuItem
- ld a, 1
- ld [wCurrentMenuItem], a
- ld [wChosenMenuItem], a
- ld a, CHOSE_SECOND_ITEM
- ld [wMenuExitMethod], a
- ld c, 15
- call DelayFrames
- call TwoOptionMenu_RestoreScreenTiles
- scf
- ret
-
-; Some of the wider/taller two option menus will not have the screen areas
-; they cover be fully saved/restored by the two functions below.
-; The bottom and right edges of the menu may remain after the function returns.
-
-TwoOptionMenu_SaveScreenTiles:
- ld de, wBuffer
- lb bc, 5, 6
-.loop
- ld a, [hli]
- ld [de], a
- inc de
- dec c
- jr nz, .loop
- push bc
- ld bc, SCREEN_WIDTH - 6
- add hl, bc
- pop bc
- ld c, $6
- dec b
- jr nz, .loop
- ret
-
-TwoOptionMenu_RestoreScreenTiles:
- ld de, wBuffer
- lb bc, 5, 6
-.loop
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .loop
- push bc
- ld bc, SCREEN_WIDTH - 6
- add hl, bc
- pop bc
- ld c, 6
- dec b
- jr nz, .loop
- call UpdateSprites
- ret
-
-; Format:
-; 00: byte width
-; 01: byte height
-; 02: byte put blank line before first menu item
-; 03: word text pointer
-TwoOptionMenuStrings:
- db 4,3,0
- dw .YesNoMenu
- db 6,3,0
- dw .NorthWestMenu
- db 6,3,0
- dw .SouthEastMenu
- db 6,3,0
- dw .YesNoMenu
- db 6,3,0
- dw .NorthEastMenu
- db 7,3,0
- dw .TradeCancelMenu
- db 7,4,1
- dw .HealCancelMenu
- db 4,3,0
- dw .NoYesMenu
-
-.NoYesMenu
- db "NO"
- next "YES@"
-.YesNoMenu
- db "YES"
- next "NO@"
-.NorthWestMenu
- db "NORTH"
- next "WEST@"
-.SouthEastMenu
- db "SOUTH"
- next "EAST@"
-.NorthEastMenu
- db "NORTH"
- next "EAST@"
-.TradeCancelMenu
- db "TRADE"
- next "CANCEL@"
-.HealCancelMenu
- db "HEAL"
- next "CANCEL@"
-
-DisplayFieldMoveMonMenu:
- xor a
- ld hl, wFieldMoves
- ld [hli], a ; wFieldMoves
- ld [hli], a ; wFieldMoves + 1
- ld [hli], a ; wFieldMoves + 2
- ld [hli], a ; wFieldMoves + 3
- ld [hli], a ; wNumFieldMoves
- ld [hl], 12 ; wFieldMovesLeftmostXCoord
- call GetMonFieldMoves
- ld a, [wNumFieldMoves]
- and a
- jr nz, .fieldMovesExist
-
-; no field moves
- coord hl, 11, 11
- lb bc, 5, 7
- call TextBoxBorder
- call UpdateSprites
- ld a, 12
- ld [hFieldMoveMonMenuTopMenuItemX], a
- coord hl, 13, 12
- ld de, PokemonMenuEntries
- jp PlaceString
-
-.fieldMovesExist
- push af
-
-; Calculate the text box position and dimensions based on the leftmost X coord
-; of the field move names before adjusting for the number of field moves.
- coord hl, 0, 11
- ld a, [wFieldMovesLeftmostXCoord]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- ld b, 5
- ld a, 18
- sub e
- ld c, a
- pop af
-
-; For each field move, move the top of the text box up 2 rows while the leaving
-; the bottom of the text box at the bottom of the screen.
- ld de, -SCREEN_WIDTH * 2
-.textBoxHeightLoop
- add hl, de
- inc b
- inc b
- dec a
- jr nz, .textBoxHeightLoop
-
-; Make space for an extra blank row above the top field move.
- ld de, -SCREEN_WIDTH
- add hl, de
- inc b
-
- call TextBoxBorder
- call UpdateSprites
-
-; Calculate the position of the first field move name to print.
- coord hl, 0, 12
- ld a, [wFieldMovesLeftmostXCoord]
- inc a
- ld e, a
- ld d, 0
- add hl, de
- ld de, -SCREEN_WIDTH * 2
- ld a, [wNumFieldMoves]
-.calcFirstFieldMoveYLoop
- add hl, de
- dec a
- jr nz, .calcFirstFieldMoveYLoop
-
- xor a
- ld [wNumFieldMoves], a
- ld de, wFieldMoves
-.printNamesLoop
- push hl
- ld hl, FieldMoveNames
- ld a, [de]
- and a
- jr z, .donePrintingNames
- inc de
- ld b, a ; index of name
-.skipNamesLoop ; skip past names before the name we want
- dec b
- jr z, .reachedName
-.skipNameLoop ; skip past current name
- ld a, [hli]
- cp "@"
- jr nz, .skipNameLoop
- jr .skipNamesLoop
-.reachedName
- ld b, h
- ld c, l
- pop hl
- push de
- ld d, b
- ld e, c
- call PlaceString
- ld bc, SCREEN_WIDTH * 2
- add hl, bc
- pop de
- jr .printNamesLoop
-
-.donePrintingNames
- pop hl
- ld a, [wFieldMovesLeftmostXCoord]
- ld [hFieldMoveMonMenuTopMenuItemX], a
- coord hl, 0, 12
- ld a, [wFieldMovesLeftmostXCoord]
- inc a
- ld e, a
- ld d, 0
- add hl, de
- ld de, PokemonMenuEntries
- jp PlaceString
-
-FieldMoveNames:
- db "CUT@"
- db "FLY@"
- db "@"
- db "SURF@"
- db "STRENGTH@"
- db "FLASH@"
- db "DIG@"
- db "TELEPORT@"
- db "SOFTBOILED@"
-
-PokemonMenuEntries:
- db "STATS"
- next "SWITCH"
- next "CANCEL@"
-
-GetMonFieldMoves:
- ld a, [wWhichPokemon]
- ld hl, wPartyMon1Moves
- ld bc, wPartyMon2 - wPartyMon1
- call AddNTimes
- ld d, h
- ld e, l
- ld c, NUM_MOVES + 1
- ld hl, wFieldMoves
-.loop
- push hl
-.nextMove
- dec c
- jr z, .done
- ld a, [de] ; move ID
- and a
- jr z, .done
- ld b, a
- inc de
- ld hl, FieldMoveDisplayData
-.fieldMoveLoop
- ld a, [hli]
- cp $ff
- jr z, .nextMove ; if the move is not a field move
- cp b
- jr z, .foundFieldMove
- inc hl
- inc hl
- jr .fieldMoveLoop
-.foundFieldMove
- ld a, b
- ld [wLastFieldMoveID], a
- ld a, [hli] ; field move name index
- ld b, [hl] ; field move leftmost X coordinate
- pop hl
- ld [hli], a ; store name index in wFieldMoves
- ld a, [wNumFieldMoves]
- inc a
- ld [wNumFieldMoves], a
- ld a, [wFieldMovesLeftmostXCoord]
- cp b
- jr c, .skipUpdatingLeftmostXCoord
- ld a, b
- ld [wFieldMovesLeftmostXCoord], a
-.skipUpdatingLeftmostXCoord
- ld a, [wLastFieldMoveID]
- ld b, a
- jr .loop
-.done
- pop hl
- ret
-
-; Format: [Move id], [name index], [leftmost tile]
-; Move id = id of move
-; Name index = index of name in FieldMoveNames
-; Leftmost tile = -1 + tile column in which the first letter of the move's name should be displayed
-; "SOFTBOILED" is $08 because it has 4 more letters than "SURF", for example, whose value is $0C
-FieldMoveDisplayData:
- db CUT, $01, $0C
- db FLY, $02, $0C
- db $B4, $03, $0C ; unused field move
- db SURF, $04, $0C
- db STRENGTH, $05, $0A
- db FLASH, $06, $0C
- db DIG, $07, $0C
- db TELEPORT, $08, $0A
- db SOFTBOILED, $09, $08
- db $ff ; list terminator
diff --git a/engine/menu/vending_machine.asm b/engine/menu/vending_machine.asm
deleted file mode 100755
index 37d9b9e7..00000000
--- a/engine/menu/vending_machine.asm
+++ /dev/null
@@ -1,138 +0,0 @@
-VendingMachineMenu:
- ld hl, VendingMachineText1
- call PrintText
- ld a, MONEY_BOX
- ld [wTextBoxID], a
- call DisplayTextBoxID
- xor a
- ld [wCurrentMenuItem], a
- ld [wLastMenuItem], a
- ld a, A_BUTTON | B_BUTTON
- ld [wMenuWatchedKeys], a
- ld a, 3
- ld [wMaxMenuItem], a
- ld a, 5
- ld [wTopMenuItemY], a
- ld a, 1
- ld [wTopMenuItemX], a
- ld hl, wd730
- set 6, [hl]
- coord hl, 0, 3
- lb bc, 8, 12
- call TextBoxBorder
- call UpdateSprites
- coord hl, 2, 5
- ld de, DrinkText
- call PlaceString
- coord hl, 9, 6
- ld de, DrinkPriceText
- call PlaceString
- ld hl, wd730
- res 6, [hl]
- call HandleMenuInput
- bit 1, a ; pressed B?
- jr nz, .notThirsty
- ld a, [wCurrentMenuItem]
- cp 3 ; chose Cancel?
- jr z, .notThirsty
- xor a
- ld [hMoney], a
- ld [hMoney + 2], a
- ld a, $2
- ld [hMoney + 1], a
- call HasEnoughMoney
- jr nc, .enoughMoney
- ld hl, VendingMachineText4
- jp PrintText
-.enoughMoney
- call LoadVendingMachineItem
- ld a, [hVendingMachineItem]
- ld b, a
- ld c, 1
- call GiveItem
- jr nc, .BagFull
-
- ld b, 60 ; number of times to play the "brrrrr" sound
-.playDeliverySound
- ld c, 2
- call DelayFrames
- push bc
- ld a, SFX_PUSH_BOULDER
- call PlaySound
- pop bc
- dec b
- jr nz, .playDeliverySound
-
- ld hl, VendingMachineText5
- call PrintText
- ld hl, hVendingMachinePrice + 2
- ld de, wPlayerMoney + 2
- ld c, $3
- predef SubBCDPredef
- ld a, MONEY_BOX
- ld [wTextBoxID], a
- jp DisplayTextBoxID
-.BagFull
- ld hl, VendingMachineText6
- jp PrintText
-.notThirsty
- ld hl, VendingMachineText7
- jp PrintText
-
-VendingMachineText1:
- TX_FAR _VendingMachineText1
- db "@"
-
-DrinkText:
- db "FRESH WATER"
- next "SODA POP"
- next "LEMONADE"
- next "CANCEL@"
-
-DrinkPriceText:
- db "¥200"
- next "¥300"
- next "¥350"
- next "@"
-
-VendingMachineText4:
- TX_FAR _VendingMachineText4
- db "@"
-
-VendingMachineText5:
- TX_FAR _VendingMachineText5
- db "@"
-
-VendingMachineText6:
- TX_FAR _VendingMachineText6
- db "@"
-
-VendingMachineText7:
- TX_FAR _VendingMachineText7
- db "@"
-
-LoadVendingMachineItem:
- ld hl, VendingPrices
- ld a, [wCurrentMenuItem]
- add a
- add a
- ld d, 0
- ld e, a
- add hl, de
- ld a, [hli]
- ld [hVendingMachineItem], a
- ld a, [hli]
- ld [hVendingMachinePrice], a
- ld a, [hli]
- ld [hVendingMachinePrice + 1], a
- ld a, [hl]
- ld [hVendingMachinePrice + 2], a
- ret
-
-VendingPrices:
- db FRESH_WATER
- money 200
- db SODA_POP
- money 300
- db LEMONADE
- money 350