diff options
-rw-r--r-- | common_syms/help_system.txt | 3 | ||||
-rw-r--r-- | common_syms/help_system_812B1E0.txt | 2 | ||||
-rw-r--r-- | common_syms/help_system_util.txt | 1 | ||||
-rw-r--r-- | graphics/help_system/bg_tiles.png (renamed from graphics/help_system/unk_8464008.png) | bin | 200 -> 200 bytes | |||
-rw-r--r-- | include/strings.h | 8 | ||||
-rw-r--r-- | ld_script.txt | 8 | ||||
-rw-r--r-- | src/help_system.c | 3002 | ||||
-rw-r--r-- | src/help_system_812B1E0.c | 2480 | ||||
-rw-r--r-- | src/help_system_util.c | 856 | ||||
-rw-r--r-- | src/strings.c | 8 | ||||
-rw-r--r-- | sym_common.txt | 4 | ||||
-rw-r--r-- | sym_ewram.txt | 4 |
12 files changed, 3188 insertions, 3188 deletions
diff --git a/common_syms/help_system.txt b/common_syms/help_system.txt index af59733d4..20475eeb9 100644 --- a/common_syms/help_system.txt +++ b/common_syms/help_system.txt @@ -1 +1,2 @@ -gHelpSystemEnabled +gHelpSystemState +gHelpContextIdBackup diff --git a/common_syms/help_system_812B1E0.txt b/common_syms/help_system_812B1E0.txt deleted file mode 100644 index 20475eeb9..000000000 --- a/common_syms/help_system_812B1E0.txt +++ /dev/null @@ -1,2 +0,0 @@ -gHelpSystemState -gHelpContextIdBackup diff --git a/common_syms/help_system_util.txt b/common_syms/help_system_util.txt new file mode 100644 index 000000000..af59733d4 --- /dev/null +++ b/common_syms/help_system_util.txt @@ -0,0 +1 @@ +gHelpSystemEnabled diff --git a/graphics/help_system/unk_8464008.png b/graphics/help_system/bg_tiles.png Binary files differindex 339a685d5..339a685d5 100644 --- a/graphics/help_system/unk_8464008.png +++ b/graphics/help_system/bg_tiles.png diff --git a/include/strings.h b/include/strings.h index b4783c3c4..5ff490fcf 100644 --- a/include/strings.h +++ b/include/strings.h @@ -148,10 +148,10 @@ extern const u8 gTeachyTvText_TMsScript2[]; extern const u8 gTeachyTvText_RegisterScript2[]; // help_system_812B1E0 -extern const u8 gUnknown_841DFA5[]; -extern const u8 gUnknown_841DFAC[]; -extern const u8 gUnknown_841DFBE[]; -extern const u8 gUnknown_841DFC9[]; +extern const u8 gText_HelpSystemControls_A_Next[]; +extern const u8 gText_HelpSystemControls_PickOkEnd[]; +extern const u8 gText_HelpSystemControls_AorBtoCancel[]; +extern const u8 gText_HelpSystemControls_PickOkCancel[]; // help_system extern const u8 gString_Bill[]; diff --git a/ld_script.txt b/ld_script.txt index fc9e5f946..1eafd5e38 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -258,7 +258,7 @@ SECTIONS { src/union_room_chat.o(.text); src/union_room_chat_display.o(.text); src/union_room_chat_objects.o(.text); - src/help_system_812B1E0.o(.text); + src/help_system.o(.text); src/quest_log_battle.o(.text); src/fame_checker.o(.text); src/menu2.o(.text); @@ -267,7 +267,7 @@ SECTIONS { src/menu_indicators.o(.text); src/pokedex_area_markers.o(.text); src/pokemon_summary_screen.o(.text); - src/help_system.o(.text); + src/help_system_util.o(.text); src/wild_pokemon_area.o(.text); src/dynamic_placeholder_text_util.o(.text); src/berry_pouch.o(.text); @@ -562,7 +562,7 @@ SECTIONS { src/union_room_chat.o(.rodata); src/union_room_chat_display.o(.rodata); src/union_room_chat_objects.o(.rodata); - src/help_system_812B1E0.o(.rodata); + src/help_system.o(.rodata); src/fame_checker.o(.rodata); src/menu2.o(.rodata); src/oak_speech.o(.rodata); @@ -570,7 +570,7 @@ SECTIONS { src/menu_indicators.o(.rodata); src/pokedex_area_markers.o(.rodata); src/pokemon_summary_screen.o(.rodata); - src/help_system.o(.rodata); + src/help_system_util.o(.rodata); src/wild_pokemon_area.o(.rodata); src/dynamic_placeholder_text_util.o(.rodata); src/berry_pouch.o(.rodata); diff --git a/src/help_system.c b/src/help_system.c index 45c7492fc..b60eac13c 100644 --- a/src/help_system.c +++ b/src/help_system.c @@ -1,856 +1,2480 @@ #include "global.h" #include "gflib.h" -#include "decompress.h" -#include "m4a.h" #include "event_data.h" +#include "event_scripts.h" +#include "field_player_avatar.h" #include "help_system.h" -#include "list_menu.h" +#include "item.h" +#include "link.h" +#include "overworld.h" +#include "pokedex.h" +#include "quest_log.h" +#include "save.h" +#include "save_location.h" #include "strings.h" +#include "constants/items.h" +#include "constants/maps.h" #include "constants/songs.h" -#define ZERO 0 +#define HELP_NONE 0 +#define HELP_END 0xFF -bool8 gHelpSystemEnabled; +// Help Main Topics +enum HelpSystemTopics +{ + TOPIC_WHAT_TO_DO, + TOPIC_HOW_TO_DO, + TOPIC_TERMS, + TOPIC_ABOUT_GAME, + TOPIC_TYPE_MATCHUP, + TOPIC_EXIT, + TOPIC_COUNT +}; -struct HelpSystemVideoState +static EWRAM_DATA u16 sHelpSystemContextId = 0; +static EWRAM_DATA u8 sSeenHelpSystemIntro = 0; + +struct HelpSystemState { - /*0x00*/ MainCallback savedVblankCb; - /*0x04*/ MainCallback savedHblankCb; - /*0x08*/ u16 savedDispCnt; - /*0x0a*/ u16 savedBg0Cnt; - /*0x0c*/ u16 savedBg0Hofs; - /*0x0e*/ u16 savedBg0Vofs; - /*0x10*/ u16 savedBldCnt; - /*0x12*/ u8 savedTextColor[3]; - /*0x15*/ u8 state; + // 0: Top level + // 1: Submenu + // 2: Help content + u8 level; + + // enum HelpSystemTopics + u8 topic; + + // Where the player's cursor was at top level + u8 scrollMain; + + // Where the player's cursor was at submenu + u8 scrollSub; }; -static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0}; -EWRAM_DATA u8 gDisableHelpSystemVolumeReduce = 0; -EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE; -static EWRAM_DATA u8 sDelayTimer = 0; -static EWRAM_DATA u8 sInHelpSystem = 0; -static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0}; -EWRAM_DATA struct HelpSystemListMenu gHelpSystemListMenu = {0}; -EWRAM_DATA struct ListMenuItem gHelpSystemListMenuItems[52] = {0}; +struct HelpSystemState gHelpSystemState; +u16 gHelpContextIdBackup; + +static bool32 IsCurrentMapInArray(const u16 * mapIdxs); +static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); +static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); +static bool8 HelpSystem_ShouldShowBasicTerms(void); +static bool8 IsHelpSystemSubmenuEnabled(u8); +static bool8 HasGottenAtLeastOneHM(void); -static const u16 sTiles[] = INCBIN_U16("graphics/help_system/unk_8464008.4bpp"); -static const u16 sPals[] = INCBIN_U16("graphics/help_system/unk_8464008.gbapal"); +static void PrintWelcomeMessageOnPanel1(void); +static void PrintTextOnPanel2Row52RightAlign(const u8 *); +static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0); +static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); -u8 RunHelpSystemCallback(void) +static const u8 *const sHelpSystemTopicPtrs[TOPIC_COUNT] = { + [TOPIC_WHAT_TO_DO] = Help_Text_WhatShouldIDo, + [TOPIC_HOW_TO_DO] = Help_Text_HowDoIDoThis, + [TOPIC_TERMS] = Help_Text_WhatDoesThisTermMean, + [TOPIC_ABOUT_GAME] = Help_Text_AboutThisGame, + [TOPIC_TYPE_MATCHUP] = Help_Text_TypeMatchupList, + [TOPIC_EXIT] = Help_Text_Exit +}; + +static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[TOPIC_COUNT] = { + [TOPIC_WHAT_TO_DO] = Help_Text_DescWhatShouldIDo, + [TOPIC_HOW_TO_DO] = Help_Text_DescHowDoIDoThis, + [TOPIC_TERMS] = Help_Text_DescWhatDoesThisTermMean, + [TOPIC_ABOUT_GAME] = Help_Text_DescAboutThisGame, + [TOPIC_TYPE_MATCHUP] = Help_Text_DescTypeMatchupList, + [TOPIC_EXIT] = Help_Text_DescExit +}; + +// Submenu IDs for TOPIC_WHAT_TO_DO +enum { - s32 i; + HELP_PLAYING_FOR_FIRST_TIME = 1, + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_CANT_GET_OUT_OF_ROOM, + HELP_CANT_FIND_PERSON_I_WANT, + HELP_TALKED_TO_EVERYONE_NOW_WHAT, + HELP_SOMEONE_BLOCKING_MY_WAY, + HELP_I_CANT_GO_ON, + HELP_OUT_OF_THINGS_TO_DO, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, + HELP_HOW_ARE_CAVES_DIFFERENT, + HELP_HOW_DO_I_PROGRESS, + HELP_WHEN_CAN_I_USE_ITEM, + HELP_WHATS_A_BATTLE, + HELP_HOW_DO_I_PREPARE_FOR_BATTLE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_MY_MONS_ARE_HURT, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_CANT_CATCH_MONS, + HELP_RAN_OUT_OF_POTIONS, + HELP_CAN_I_BUY_POKEBALLS, + HELP_WHATS_A_TRAINER, + HELP_HOW_DO_I_WIN_AGAINST_TRAINER, + HELP_WHERE_DO_MONS_APPEAR, + HELP_WHAT_ARE_MOVES, + HELP_WHAT_ARE_HIDDEN_MOVES, + HELP_WHAT_MOVES_SHOULD_I_USE, + HELP_WANT_TO_ADD_MORE_MOVES, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_WHAT_DO_I_DO_IN_CAVE, + HELP_NOTHING_I_WANT_TO_KNOW, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WANT_TO_END_GAME, + HELP_WHATS_A_MON, + HELP_WHAT_IS_THAT_PERSON_LIKE, + HELP_WHAT_DOES_HIDDEN_MOVE_DO, + HELP_WHAT_DO_I_DO_IN_SAFARI, + HELP_WHAT_ARE_SAFARI_RULES, + HELP_WANT_TO_END_SAFARI, + HELP_WHAT_IS_A_GYM, +}; - switch (sVideoState.state) - { - case 0: - sInHelpSystem = 0; - if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP) - return 0; - if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE) - return 0; - if (JOY_NEW(L_BUTTON | R_BUTTON)) - { - if (!HelpSystem_IsSinglePlayer() || !gHelpSystemEnabled) - { - PlaySE(SE_HELP_ERROR); - return 0; - } - m4aMPlayStop(&gMPlayInfo_SE1); - m4aMPlayStop(&gMPlayInfo_SE2); - PlaySE(SE_HELP_OPEN); - if (!gDisableHelpSystemVolumeReduce) - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80); - SaveCallbacks(); - sInHelpSystem = 1; - sVideoState.state = 1; - } - break; - case 1: - SaveMapTiles(); - SaveMapGPURegs(); - SaveMapTextColors(); - (*(vu16 *)PLTT) = sPals[15]; - SetGpuReg(REG_OFFSET_DISPCNT, 0); - sVideoState.state = 2; - break; - case 2: - RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT); - RequestDma3Copy(sPals, (void *)PLTT, sizeof(sPals), DMA3_16BIT); - RequestDma3Copy(sTiles, gDecompressionBuffer + 0x3EE0, sizeof(sTiles), DMA3_16BIT); - sVideoState.state = 3; - break; - case 3: - HS_BufferFillMapWithTile1FF(); - HelpSystem_FillPanel3(); - HelpSystem_FillPanel2(); - HelpSystem_PrintText_Row61(gString_Help); - HS_ShowOrHideWordHELPinTopLeft(1); - if (HelpSystem_UpdateHasntSeenIntro() == TRUE) - HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems); - else - HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems); - HS_ShowOrHideHeaderAndFooterLines_Lighter(1); - HS_ShowOrHideVerticalBlackBarsAlongSides(1); - CommitTilemap(); - sVideoState.state = 4; - break; - case 4: - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BG0HOFS, 0); - SetGpuReg(REG_OFFSET_BG0VOFS, 0); - SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31)); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); - sVideoState.state = 5; - break; - case 5: - if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems)) - { - PlaySE(SE_HELP_CLOSE); - sVideoState.state = 6; - } - break; - case 6: - SetGpuReg(REG_OFFSET_DISPCNT, 0); - RestoreMapTiles(); - for (i = 0; i < 0x200; i += 2) - { - *((vu16 *)(PLTT + 0x000 + i)) = sPals[15]; - *((vu16 *)(PLTT + 0x200 + i)) = sPals[15]; - } - sVideoState.state = 7; - break; - case 7: - if (!gDisableHelpSystemVolumeReduce) - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); - RestoreMapTextColors(); - RestoreGPURegs(); - sVideoState.state = 8; - break; - case 8: - RestoreCallbacks(); - sInHelpSystem = 0; - sVideoState.state = 0; - break; - } - return sVideoState.state; -} +static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_PlayingForFirstTime, + [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_WhatShouldIBeDoing, + [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_CantGetOutOfRoom, + [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_CantFindPersonIWant, + [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_TalkedToEveryoneNowWhat, + [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_SomeoneBlockingMyWay, + [HELP_I_CANT_GO_ON] = Help_Text_ICantGoOn, + [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_OutOfThingsToDo, + [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_WhatHappenedToItemIGot, + [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_WhatAreMyAdventureBasics, + [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_HowAreRoadsForestsDifferent, + [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_HowAreCavesDifferent, + [HELP_HOW_DO_I_PROGRESS] = Help_Text_HowDoIProgress, + [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_WhenCanIUseItem, + [HELP_WHATS_A_BATTLE] = Help_Text_WhatsABattle, + [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_HowDoIPrepareForBattle, + [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_WhatIsAMonsVitality, + [HELP_MY_MONS_ARE_HURT] = Help_Text_MyMonsAreHurt, + [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_WhatIsStatusProblem, + [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_WhatHappensIfAllMyMonsFaint, + [HELP_CANT_CATCH_MONS] = Help_Text_CantCatchMons, + [HELP_RAN_OUT_OF_POTIONS] = Help_Text_RanOutOfPotions, + [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_CanIBuyPokeBalls, + [HELP_WHATS_A_TRAINER] = Help_Text_WhatsATrainer, + [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_HowDoIWinAgainstTrainer, + [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_WhereDoMonsAppear, + [HELP_WHAT_ARE_MOVES] = Help_Text_WhatAreMoves, + [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_WhatAreHiddenMoves, + [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_WhatMovesShouldIUse, + [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_WantToAddMoreMoves, + [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_WantToMakeMonStronger, + [HELP_FOE_MONS_TOO_STRONG] = Help_Text_FoeMonsTooStrong, + [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_WhatDoIDoInCave, + [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_NothingIWantToKnow, + [HELP_WHATS_POKEMON_CENTER] = Help_Text_WhatsPokemonCenter, + [HELP_WHATS_POKEMON_MART] = Help_Text_WhatsPokemonMart, + [HELP_WANT_TO_END_GAME] = Help_Text_WantToEndGame, + [HELP_WHATS_A_MON] = Help_Text_WhatsAMon, + [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_WhatIsThatPersonLike, + [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_WhatDoesHiddenMoveDo, + [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_WhatDoIDoInSafari, + [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_WhatAreSafariRules, + [HELP_WANT_TO_END_SAFARI] = Help_Text_WantToEndSafari, + [HELP_WHAT_IS_A_GYM] = Help_Text_WhatIsAGym +}; + +static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_AnswerPlayingForFirstTime, + [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_AnswerWhatShouldIBeDoing, + [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_AnswerCantGetOutOfRoom, + [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_AnswerCantFindPersonIWant, + [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_AnswerTalkedToEveryoneNowWhat, + [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_AnswerSomeoneBlockingMyWay, + [HELP_I_CANT_GO_ON] = Help_Text_AnswerICantGoOn, + [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_AnswerOutOfThingsToDo, + [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_AnswerWhatHappenedToItemIGot, + [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_AnswerWhatAreMyAdventureBasics, + [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_AnswerHowAreRoadsForestsDifferent, + [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_AnswerHowAreCavesDifferent, + [HELP_HOW_DO_I_PROGRESS] = Help_Text_AnswerHowDoIProgress, + [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_AnswerWhenCanIUseItem, + [HELP_WHATS_A_BATTLE] = Help_Text_AnswerWhatsABattle, + [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_AnswerHowDoIPrepareForBattle, + [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_AnswerWhatIsAMonsVitality, + [HELP_MY_MONS_ARE_HURT] = Help_Text_AnswerMyMonsAreHurt, + [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_AnswerWhatIsStatusProblem, + [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_AnswerWhatHappensIfAllMyMonsFaint, + [HELP_CANT_CATCH_MONS] = Help_Text_AnswerCantCatchMons, + [HELP_RAN_OUT_OF_POTIONS] = Help_Text_AnswerRanOutOfPotions, + [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_AnswerCanIBuyPokeBalls, + [HELP_WHATS_A_TRAINER] = Help_Text_AnswerWhatsATrainer, + [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_AnswerHowDoIWinAgainstTrainer, + [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_AnswerWhereDoMonsAppear, + [HELP_WHAT_ARE_MOVES] = Help_Text_AnswerWhatAreMoves, + [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_AnswerWhatAreHiddenMoves, + [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_AnswerWhatMovesShouldIUse, + [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_AnswerWantToAddMoreMoves, + [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_AnswerWantToMakeMonStronger, + [HELP_FOE_MONS_TOO_STRONG] = Help_Text_AnswerFoeMonsTooStrong, + [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_AnswerWhatDoIDoInCave, + [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_AnswerNothingIWantToKnow, + [HELP_WHATS_POKEMON_CENTER] = Help_Text_AnswerWhatsPokemonCenter, + [HELP_WHATS_POKEMON_MART] = Help_Text_AnswerWhatsPokemonMart, + [HELP_WANT_TO_END_GAME] = Help_Text_AnswerWantToEndGame, + [HELP_WHATS_A_MON] = Help_Text_AnswerWhatsAMon, + [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_AnswerWhatIsThatPersonLike, + [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_AnswerWhatDoesHiddenMoveDo, + [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_AnswerWhatDoIDoInSafari, + [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_AnswerWhatAreSafariRules, + [HELP_WANT_TO_END_SAFARI] = Help_Text_AnswerWantToEndSafari, + [HELP_WHAT_IS_A_GYM] = Help_Text_AnswerWhatIsAGym +}; -void SaveCallbacks(void) +// Submenu IDs for TOPIC_HOW_TO_DO +enum { - vu16 * dma; - sVideoState.savedVblankCb = gMain.vblankCallback; - sVideoState.savedHblankCb = gMain.hblankCallback; - gMain.vblankCallback = NULL; - gMain.hblankCallback = NULL; + HELP_USING_POKEDEX = 1, + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_USING_POKEBALL, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_RIDING_BICYCLE, + HELP_ENTERING_NAME, + HELP_USING_PC, + HELP_USING_BILLS_PC, + HELP_USING_WITHDRAW, + HELP_USING_DEPOSIT, + HELP_USING_MOVE, + HELP_MOVING_ITEMS, + HELP_USING_PLAYERS_PC, + HELP_USING_WITHDRAW_ITEM, + HELP_USING_DEPOSIT_ITEM, + HELP_USING_MAILBOX, + HELP_USING_PROF_OAKS_PC, + HELP_OPENING_MENU, + HELP_USING_FIGHT, + HELP_USING_POKEMON2, + HELP_USING_SHIFT, + HELP_USING_SUMMARY2, + HELP_USING_BAG2, + HELP_READING_POKEDEX, + HELP_USING_HOME_PC, + HELP_USING_ITEM_STORAGE, + HELP_USING_WITHDRAW_ITEM2, + HELP_USING_DEPOSIT_ITEM2, + HELP_USING_MAILBOX2, + HELP_USING_RUN, + HELP_REGISTER_KEY_ITEM, + HELP_USING_BALL, + HELP_USING_BAIT, + HELP_USING_ROCK, + HELP_USING_HALL_OF_FAME, +}; - dma = (void *)REG_ADDR_DMA0; - dma[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); - dma[5] &= ~DMA_ENABLE; - dma[5]; -} +static const u8 *const sHelpSystemMenuTopicTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_USING_POKEDEX] = Help_Text_UsingPokedex, + [HELP_USING_POKEMON] = Help_Text_UsingPokemon, + [HELP_USING_SUMMARY] = Help_Text_UsingSummary, + [HELP_USING_SWITCH] = Help_Text_UsingSwitch, + [HELP_USING_ITEM] = Help_Text_UsingItem, + [HELP_USING_BAG] = Help_Text_UsingBag, + [HELP_USING_AN_ITEM] = Help_Text_UsingAnItem, + [HELP_USING_KEYITEM] = Help_Text_UsingKeyItem, + [HELP_USING_POKEBALL] = Help_Text_UsingPokeBall, + [HELP_USING_PLAYER] = Help_Text_UsingPlayer, + [HELP_USING_SAVE] = Help_Text_UsingSave, + [HELP_USING_OPTION] = Help_Text_UsingOption, + [HELP_USING_POTION] = Help_Text_UsingPotion, + [HELP_USING_TOWN_MAP] = Help_Text_UsingTownMap, + [HELP_USING_TM] = Help_Text_UsingTM, + [HELP_USING_HM] = Help_Text_UsingHM, + [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_UsingMoveOutsideOfBattle, + [HELP_RIDING_BICYCLE] = Help_Text_RidingBicycle, + [HELP_ENTERING_NAME] = Help_Text_EnteringName, + [HELP_USING_PC] = Help_Text_UsingPC, + [HELP_USING_BILLS_PC] = Help_Text_UsingBillsPC, + [HELP_USING_WITHDRAW] = Help_Text_UsingWithdraw, + [HELP_USING_DEPOSIT] = Help_Text_UsingDeposit, + [HELP_USING_MOVE] = Help_Text_UsingMove, + [HELP_MOVING_ITEMS] = Help_Text_MovingItems, + [HELP_USING_PLAYERS_PC] = Help_Text_UsingPlayersPC, + [HELP_USING_WITHDRAW_ITEM] = Help_Text_UsingWithdrawItem, + [HELP_USING_DEPOSIT_ITEM] = Help_Text_UsingDepositItem, + [HELP_USING_MAILBOX] = Help_Text_UsingMailbox, + [HELP_USING_PROF_OAKS_PC] = Help_Text_UsingProfOaksPC, + [HELP_OPENING_MENU] = Help_Text_OpeningMenu, + [HELP_USING_FIGHT] = Help_Text_UsingFight, + [HELP_USING_POKEMON2] = Help_Text_UsingPokemon2, + [HELP_USING_SHIFT] = Help_Text_UsingShift, + [HELP_USING_SUMMARY2] = Help_Text_UsingSummary2, + [HELP_USING_BAG2] = Help_Text_UsingBag2, + [HELP_READING_POKEDEX] = Help_Text_ReadingPokedex, + [HELP_USING_HOME_PC] = Help_Text_UsingHomePC, + [HELP_USING_ITEM_STORAGE] = Help_Text_UsingItemStorage, + [HELP_USING_WITHDRAW_ITEM2] = Help_Text_UsingWithdrawItem2, + [HELP_USING_DEPOSIT_ITEM2] = Help_Text_UsingDepositItem2, + [HELP_USING_MAILBOX2] = Help_Text_UsingMailbox2, + [HELP_USING_RUN] = Help_Text_UsingRun, + [HELP_REGISTER_KEY_ITEM] = Help_Text_RegisterKeyItem, + [HELP_USING_BALL] = Help_Text_UsingBall, + [HELP_USING_BAIT] = Help_Text_UsingBait, + [HELP_USING_ROCK] = Help_Text_UsingRock, + [HELP_USING_HALL_OF_FAME] = Help_Text_UsingHallOfFame +}; + +static const u8 *const sHelpSystemHowToUseMenuTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_USING_POKEDEX] = Help_Text_HowToUsePokedex, + [HELP_USING_POKEMON] = Help_Text_HowToUsePokemon, + [HELP_USING_SUMMARY] = Help_Text_HowToUseSummary, + [HELP_USING_SWITCH] = Help_Text_HowToUseSwitch, + [HELP_USING_ITEM] = Help_Text_HowToUseItem, + [HELP_USING_BAG] = Help_Text_HowToUseBag, + [HELP_USING_AN_ITEM] = Help_Text_HowToUseAnItem, + [HELP_USING_KEYITEM] = Help_Text_HowToUseKeyItem, + [HELP_USING_POKEBALL] = Help_Text_HowToUsePokeBall, + [HELP_USING_PLAYER] = Help_Text_HowToUsePlayer, + [HELP_USING_SAVE] = Help_Text_HowToUseSave, + [HELP_USING_OPTION] = Help_Text_HowToUseOption, + [HELP_USING_POTION] = Help_Text_HowToUsePotion, + [HELP_USING_TOWN_MAP] = Help_Text_HowToUseTownMap, + [HELP_USING_TM] = Help_Text_HowToUseTM, + [HELP_USING_HM] = Help_Text_HowToUseHM, + [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_HowToUseMoveOutsideOfBattle, + [HELP_RIDING_BICYCLE] = Help_Text_HowToRideBicycle, + [HELP_ENTERING_NAME] = Help_Text_HowToEnterName, + [HELP_USING_PC] = Help_Text_HowToUsePC, + [HELP_USING_BILLS_PC] = Help_Text_HowToUseBillsPC, + [HELP_USING_WITHDRAW] = Help_Text_HowToUseWithdraw, + [HELP_USING_DEPOSIT] = Help_Text_HowToUseDeposit, + [HELP_USING_MOVE] = Help_Text_HowToUseMove, + [HELP_MOVING_ITEMS] = Help_Text_HowToMoveItems, + [HELP_USING_PLAYERS_PC] = Help_Text_HowToUsePlayersPC, + [HELP_USING_WITHDRAW_ITEM] = Help_Text_HowToUseWithdrawItem, + [HELP_USING_DEPOSIT_ITEM] = Help_Text_HowToUseDepositItem, + [HELP_USING_MAILBOX] = Help_Text_HowToUseMailbox, + [HELP_USING_PROF_OAKS_PC] = Help_Text_HowToUseProfOaksPC, + [HELP_OPENING_MENU] = Help_Text_HowToOpenMenu, + [HELP_USING_FIGHT] = Help_Text_HowToUseFight, + [HELP_USING_POKEMON2] = Help_Text_HowToUsePokemon2, + [HELP_USING_SHIFT] = Help_Text_HowToUseShift, + [HELP_USING_SUMMARY2] = Help_Text_HowToUseSummary2, + [HELP_USING_BAG2] = Help_Text_HowToUseBag2, + [HELP_READING_POKEDEX] = Help_Text_HowToReadPokedex, + [HELP_USING_HOME_PC] = Help_Text_HowToUseHomePC, + [HELP_USING_ITEM_STORAGE] = Help_Text_HowToUseItemStorage, + [HELP_USING_WITHDRAW_ITEM2] = Help_Text_HowToUseWithdrawItem2, + [HELP_USING_DEPOSIT_ITEM2] = Help_Text_HowToUseDepositItem2, + [HELP_USING_MAILBOX2] = Help_Text_HowToUseMailbox2, + [HELP_USING_RUN] = Help_Text_HowToUseRun, + [HELP_REGISTER_KEY_ITEM] = Help_Text_HowToRegisterKeyItem, + [HELP_USING_BALL] = Help_Text_HowToUseBall, + [HELP_USING_BAIT] = Help_Text_HowToUseBait, + [HELP_USING_ROCK] = Help_Text_HowToUseRock, + [HELP_USING_HALL_OF_FAME] = Help_Text_HowToUseHallOfFame +}; + +// Submenu IDs for TOPIC_TERMS +enum +{ + HELP_TERM_HP = 1, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_LEVEL, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ITEM, + HELP_TERM_ABILITY, + HELP_TERM_MONEY, + HELP_TERM_MOVE_TYPE, + HELP_TERM_NATURE, + HELP_TERM_ID_NO, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_TERM_FNT, + HELP_TERM_ITEMS, + HELP_TERM_KEYITEMS, + HELP_TERM_POKEBALLS, + HELP_TERM_POKEDEX, + HELP_TERM_PLAY_TIME, + HELP_TERM_BADGES, + HELP_TERM_TEXT_SPEED, + HELP_TERM_BATTLE_SCENE, + HELP_TERM_BATTLE_STYLE, + HELP_TERM_SOUND, + HELP_TERM_BUTTON_MODE, + HELP_TERM_FRAME, + HELP_TERM_CANCEL, + HELP_TERM_TM, + HELP_TERM_HM, + HELP_TERM_HM_MOVE, + HELP_TERM_EVOLUTION, + HELP_TERM_STATUS_PROBLEM, + HELP_TERM_POKEMON, + HELP_TERM_ID_NO2, + HELP_TERM_MONEY2, + HELP_TERM_BADGES2, +}; + +static const u8 *const sHelpSystemTermTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_TERM_HP] = Help_Text_HP, + [HELP_TERM_EXP] = Help_Text_EXP, + [HELP_TERM_MOVES] = Help_Text_Moves, + [HELP_TERM_ATTACK] = Help_Text_Attack, + [HELP_TERM_DEFENSE] = Help_Text_Defense, + [HELP_TERM_SPATK] = Help_Text_SpAtk, + [HELP_TERM_SPDEF] = Help_Text_SpDef, + [HELP_TERM_SPEED] = Help_Text_Speed, + [HELP_TERM_LEVEL] = Help_Text_Level, + [HELP_TERM_TYPE] = Help_Text_Type, + [HELP_TERM_OT] = Help_Text_OT, + [HELP_TERM_ITEM] = Help_Text_Item, + [HELP_TERM_ABILITY] = Help_Text_Ability, + [HELP_TERM_MONEY] = Help_Text_Money, + [HELP_TERM_MOVE_TYPE] = Help_Text_MoveType, + [HELP_TERM_NATURE] = Help_Text_Nature, + [HELP_TERM_ID_NO] = Help_Text_IDNo, + [HELP_TERM_PP] = Help_Text_PP, + [HELP_TERM_POWER] = Help_Text_Power, + [HELP_TERM_ACCURACY] = Help_Text_Accuracy, + [HELP_TERM_FNT] = Help_Text_FNT, + [HELP_TERM_ITEMS] = Help_Text_Items, + [HELP_TERM_KEYITEMS] = Help_Text_KeyItems, + [HELP_TERM_POKEBALLS] = Help_Text_PokeBalls, + [HELP_TERM_POKEDEX] = Help_Text_Pokedex, + [HELP_TERM_PLAY_TIME] = Help_Text_PlayTime, + [HELP_TERM_BADGES] = Help_Text_Badges, + [HELP_TERM_TEXT_SPEED] = Help_Text_TextSpeed, + [HELP_TERM_BATTLE_SCENE] = Help_Text_BattleScene, + [HELP_TERM_BATTLE_STYLE] = Help_Text_BattleStyle, + [HELP_TERM_SOUND] = Help_Text_Sound, + [HELP_TERM_BUTTON_MODE] = Help_Text_ButtonMode, + [HELP_TERM_FRAME] = Help_Text_Frame, + [HELP_TERM_CANCEL] = Help_Text_Cancel2, + [HELP_TERM_TM] = Help_Text_TM, + [HELP_TERM_HM] = Help_Text_HM, + [HELP_TERM_HM_MOVE] = Help_Text_HMMove, + [HELP_TERM_EVOLUTION] = Help_Text_Evolution, + [HELP_TERM_STATUS_PROBLEM] = Help_Text_StatusProblem, + [HELP_TERM_POKEMON] = Help_Text_Pokemon, + [HELP_TERM_ID_NO2] = Help_Text_IDNo2, + [HELP_TERM_MONEY2] = Help_Text_Money2, + [HELP_TERM_BADGES2] = Help_Text_Badges2 +}; + +static const u8 *const sHelpSystemTermDefinitionsTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_TERM_HP] = Help_Text_DefineHP, + [HELP_TERM_EXP] = Help_Text_DefineEXP, + [HELP_TERM_MOVES] = Help_Text_DefineMoves, + [HELP_TERM_ATTACK] = Help_Text_DefineAttack, + [HELP_TERM_DEFENSE] = Help_Text_DefineDefense, + [HELP_TERM_SPATK] = Help_Text_DefineSpAtk, + [HELP_TERM_SPDEF] = Help_Text_DefineSpDef, + [HELP_TERM_SPEED] = Help_Text_DefineSpeed, + [HELP_TERM_LEVEL] = Help_Text_DefineLevel, + [HELP_TERM_TYPE] = Help_Text_DefineType, + [HELP_TERM_OT] = Help_Text_DefineOT, + [HELP_TERM_ITEM] = Help_Text_DefineItem, + [HELP_TERM_ABILITY] = Help_Text_DefineAbility, + [HELP_TERM_MONEY] = Help_Text_DefineMoney, + [HELP_TERM_MOVE_TYPE] = Help_Text_DefineMoveType, + [HELP_TERM_NATURE] = Help_Text_DefineNature, + [HELP_TERM_ID_NO] = Help_Text_DefineIDNo, + [HELP_TERM_PP] = Help_Text_DefinePP, + [HELP_TERM_POWER] = Help_Text_DefinePower, + [HELP_TERM_ACCURACY] = Help_Text_DefineAccuracy, + [HELP_TERM_FNT] = Help_Text_DefineFNT, + [HELP_TERM_ITEMS] = Help_Text_DefineItems, + [HELP_TERM_KEYITEMS] = Help_Text_DefineKeyItems, + [HELP_TERM_POKEBALLS] = Help_Text_DefinePokeBalls, + [HELP_TERM_POKEDEX] = Help_Text_DefinePokedex, + [HELP_TERM_PLAY_TIME] = Help_Text_DefinePlayTime, + [HELP_TERM_BADGES] = Help_Text_DefineBadges, + [HELP_TERM_TEXT_SPEED] = Help_Text_DefineTextSpeed, + [HELP_TERM_BATTLE_SCENE] = Help_Text_DefineBattleScene, + [HELP_TERM_BATTLE_STYLE] = Help_Text_DefineBattleStyle, + [HELP_TERM_SOUND] = Help_Text_DefineSound, + [HELP_TERM_BUTTON_MODE] = Help_Text_DefineButtonMode, + [HELP_TERM_FRAME] = Help_Text_DefineFrame, + [HELP_TERM_CANCEL] = Help_Text_DefineCancel2, + [HELP_TERM_TM] = Help_Text_DefineTM, + [HELP_TERM_HM] = Help_Text_DefineHM, + [HELP_TERM_HM_MOVE] = Help_Text_DefineHMMove, + [HELP_TERM_EVOLUTION] = Help_Text_DefineEvolution, + [HELP_TERM_STATUS_PROBLEM] = Help_Text_DefineStatusProblem, + [HELP_TERM_POKEMON] = Help_Text_DefinePokemon, + [HELP_TERM_ID_NO2] = Help_Text_DefineIDNo2, + [HELP_TERM_MONEY2] = Help_Text_DefineMoney2, + [HELP_TERM_BADGES2] = Help_Text_DefineBadges2 +}; + +// Submenu IDs for TOPIC_ABOUT_GAME +enum +{ + HELP_THE_HELP_SYSTEM = 1, + HELP_THE_GAME, + HELP_WIRELESS_ADAPTER, + HELP_GAME_FUNDAMENTALS_1, + HELP_GAME_FUNDAMENTALS_2, + HELP_GAME_FUNDAMENTALS_3, + HELP_WHAT_ARE_POKEMON, +}; + +static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_THE_HELP_SYSTEM] = Help_Text_TheHelpSystem, + [HELP_THE_GAME] = Help_Text_TheGame, + [HELP_WIRELESS_ADAPTER] = Help_Text_WirelessAdapter, + [HELP_GAME_FUNDAMENTALS_1] = Help_Text_GameFundamentals1, + [HELP_GAME_FUNDAMENTALS_2] = Help_Text_GameFundamentals2, + [HELP_GAME_FUNDAMENTALS_3] = Help_Text_GameFundamentals3, + [HELP_WHAT_ARE_POKEMON] = Help_Text_WhatArePokemon +}; + +static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = { + [HELP_NONE] = NULL, + [HELP_THE_HELP_SYSTEM] = Help_Text_DescTheHelpSystem, + [HELP_THE_GAME] = Help_Text_DescTheGame, + [HELP_WIRELESS_ADAPTER] = Help_Text_DescWirelessAdapter, + [HELP_GAME_FUNDAMENTALS_1] = Help_Text_DescGameFundamentals1, + [HELP_GAME_FUNDAMENTALS_2] = Help_Text_DescGameFundamentals2, + [HELP_GAME_FUNDAMENTALS_3] = Help_Text_DescGameFundamentals3, + [HELP_WHAT_ARE_POKEMON] = Help_Text_DescWhatArePokemon +}; + +// An enum for the type matchups isn't necessary, when used they're always used in their entirety +// Macro below is used to reference the entire group at once +#define HELP_TYPE_MATCHUPS \ + 1, \ + 2, 3, \ + 4, 5, \ + 6, 7, \ + 8, 9, \ + 10, 11, \ + 12, 13, \ + 14, 15, \ + 16, 17, \ + 18, 19, \ + 20, 21, \ + 22, 23, \ + 24, 25, \ + 26, 27, \ + 28, 29, \ + 30, 31, \ + 32, 33, \ + 34, 35 \ + +static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = { + [HELP_NONE] = NULL, + [1] = Help_Text_UsingTypeMatchupList, + [2] = Help_Text_OwnMoveDark, + [3] = Help_Text_OwnPokemonDark, + [4] = Help_Text_OwnMoveRock, + [5] = Help_Text_OwnPokemonRock, + [6] = Help_Text_OwnMovePsychic, + [7] = Help_Text_OwnPokemonPsychic, + [8] = Help_Text_OwnMoveFighting, + [9] = Help_Text_OwnPokemonFighting, + [10] = Help_Text_OwnMoveGrass, + [11] = Help_Text_OwnPokemonGrass, + [12] = Help_Text_OwnMoveGhost, + [13] = Help_Text_OwnPokemonGhost, + [14] = Help_Text_OwnMoveIce, + [15] = Help_Text_OwnPokemonIce, + [16] = Help_Text_OwnMoveGround, + [17] = Help_Text_OwnPokemonGround, + [18] = Help_Text_OwnMoveElectric, + [19] = Help_Text_OwnPokemonElectric, + [20] = Help_Text_OwnMovePoison, + [21] = Help_Text_OwnPokemonPoison, + [22] = Help_Text_OwnMoveDragon, + [23] = Help_Text_OwnPokemonDragon, + [24] = Help_Text_OwnMoveNormal, + [25] = Help_Text_OwnPokemonNormal, + [26] = Help_Text_OwnMoveSteel, + [27] = Help_Text_OwnPokemonSteel, + [28] = Help_Text_OwnMoveFlying, + [29] = Help_Text_OwnPokemonFlying, + [30] = Help_Text_OwnMoveFire, + [31] = Help_Text_OwnPokemonFire, + [32] = Help_Text_OwnMoveWater, + [33] = Help_Text_OwnPokemonWater, + [34] = Help_Text_OwnMoveBug, + [35] = Help_Text_OwnPokemonBug +}; + +static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = { + [HELP_NONE] = NULL, + [1] = Help_Text_HowToUseTypeMatchupList, + [2] = Help_Text_TypeMatchupOwnMoveDark, + [3] = Help_Text_TypeMatchupOwnPokemonDark, + [4] = Help_Text_TypeMatchupOwnMoveRock, + [5] = Help_Text_TypeMatchupOwnPokemonRock, + [6] = Help_Text_TypeMatchupOwnMovePsychic, + [7] = Help_Text_TypeMatchupOwnPokemonPsychic, + [8] = Help_Text_TypeMatchupOwnMoveFighting, + [9] = Help_Text_TypeMatchupOwnPokemonFighting, + [10] = Help_Text_TypeMatchupOwnMoveGrass, + [11] = Help_Text_TypeMatchupOwnPokemonGrass, + [12] = Help_Text_TypeMatchupOwnMoveGhost, + [13] = Help_Text_TypeMatchupOwnPokemonGhost, + [14] = Help_Text_TypeMatchupOwnMoveIce, + [15] = Help_Text_TypeMatchupOwnPokemonIce, + [16] = Help_Text_TypeMatchupOwnMoveGround, + [17] = Help_Text_TypeMatchupOwnPokemonGround, + [18] = Help_Text_TypeMatchupOwnMoveElectric, + [19] = Help_Text_TypeMatchupOwnPokemonElectric, + [20] = Help_Text_TypeMatchupOwnMovePoison, + [21] = Help_Text_TypeMatchupOwnPokemonPoison, + [22] = Help_Text_TypeMatchupOwnMoveDragon, + [23] = Help_Text_TypeMatchupOwnPokemonDragon, + [24] = Help_Text_TypeMatchupOwnMoveNormal, + [25] = Help_Text_TypeMatchupOwnPokemonNormal, + [26] = Help_Text_TypeMatchupOwnMoveSteel, + [27] = Help_Text_TypeMatchupOwnPokemonSteel, + [28] = Help_Text_TypeMatchupOwnMoveFlying, + [29] = Help_Text_TypeMatchupOwnPokemonFlying, + [30] = Help_Text_TypeMatchupOwnMoveFire, + [31] = Help_Text_TypeMatchupOwnPokemonFire, + [32] = Help_Text_TypeMatchupOwnMoveWater, + [33] = Help_Text_TypeMatchupOwnPokemonWater, + [34] = Help_Text_TypeMatchupOwnMoveBug, + [35] = Help_Text_TypeMatchupOwnPokemonBug +}; + +static const u8 sAboutGame_TitleScreen[] = { + HELP_THE_HELP_SYSTEM, + HELP_THE_GAME, + HELP_WIRELESS_ADAPTER, + HELP_END +}; + +static const u8 sAboutGame_NewGame[] = { + HELP_THE_HELP_SYSTEM, + HELP_THE_GAME, + HELP_WIRELESS_ADAPTER, + HELP_END +}; + +static const u8 sHowTo_NamingScreen[] = { + HELP_ENTERING_NAME, + HELP_END +}; + +static const u8 sAboutGame_NamingScreen[] = { + HELP_THE_HELP_SYSTEM, + HELP_THE_GAME, + HELP_WIRELESS_ADAPTER, + HELP_END +}; + +static const u8 sHowTo_Pokedex[] = { + HELP_USING_POKEDEX, + HELP_READING_POKEDEX, + HELP_END +}; + +static const u8 sHowTo_PartyMenu[] = { + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_PartyMenu[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_END +}; + +static const u8 sHowTo_PokemonInfo[] = { + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_END +}; + +static const u8 sTerms_PokemonInfo[] = { + HELP_TERM_LEVEL, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ID_NO, + HELP_TERM_ITEM, + HELP_TERM_NATURE, + HELP_END +}; + +static const u8 sTerms_PokemonSkills[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_EXP, + HELP_TERM_ABILITY, + HELP_END +}; + +static const u8 sTerms_PokemonMoves[] = { + HELP_TERM_LEVEL, + HELP_TERM_MOVES, + HELP_TERM_TYPE, + HELP_TERM_MOVE_TYPE, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_END +}; + +static const u8 sHowTo_Bag[] = { + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_REGISTER_KEY_ITEM, + HELP_USING_POKEBALL, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_RIDING_BICYCLE, + HELP_END +}; + +static const u8 sTerms_Bag[] = { + HELP_TERM_ITEMS, + HELP_TERM_KEYITEMS, + HELP_TERM_POKEBALLS, + HELP_END +}; + +static const u8 sHowTo_TrainerCardFront[] = { + HELP_USING_PLAYER, + HELP_END +}; + +static const u8 sTerms_TrainerCardFront[] = { + HELP_TERM_ID_NO, + HELP_TERM_MONEY, + HELP_TERM_POKEDEX, + HELP_TERM_PLAY_TIME, + HELP_TERM_BADGES, + HELP_END +}; + +static const u8 sHowTo_TrainerCardBack[] = { + HELP_USING_PLAYER, + HELP_END +}; + +static const u8 sHowTo_Save[] = { + HELP_USING_SAVE, + HELP_END +}; + +static const u8 sTerms_Save[] = { + HELP_TERM_BADGES2, + HELP_TERM_POKEDEX, + HELP_TERM_PLAY_TIME, + HELP_END +}; + +static const u8 sHowTo_Options[] = { + HELP_USING_OPTION, + HELP_END +}; + +static const u8 sTerms_Options[] = { + HELP_TERM_TEXT_SPEED, + HELP_TERM_BATTLE_SCENE, + HELP_TERM_BATTLE_STYLE, + HELP_TERM_SOUND, + HELP_TERM_BUTTON_MODE, + HELP_TERM_FRAME, + HELP_TERM_CANCEL, + HELP_END +}; + +static const u8 sWhatToDo_PlayersHouse[] = { + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_CANT_GET_OUT_OF_ROOM, + HELP_CANT_FIND_PERSON_I_WANT, + HELP_END +}; + +static const u8 sAboutGame_PlayersHouse[] = { + HELP_THE_HELP_SYSTEM, + HELP_THE_GAME, + HELP_WIRELESS_ADAPTER, + HELP_WHAT_ARE_POKEMON, + HELP_END +}; + +static const u8 sWhatToDo_OaksLab[] = { + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_CANT_FIND_PERSON_I_WANT, + HELP_TALKED_TO_EVERYONE_NOW_WHAT, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_OaksLab[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_REGISTER_KEY_ITEM, + HELP_USING_POKEBALL, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_OaksLab[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_TYPE, + HELP_TERM_POKEMON, + HELP_END +}; + +static const u8 sWhatToDo_PokeCenter[] = { + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_TALKED_TO_EVERYONE_NOW_WHAT, + HELP_SOMEONE_BLOCKING_MY_WAY, + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_PokeCenter[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_REGISTER_KEY_ITEM, + HELP_USING_POKEBALL, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_USING_PC, + HELP_END +}; + +static const u8 sTerms_PokeCenter[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_TYPE, + HELP_TERM_POKEMON, + HELP_END +}; + +static const u8 sAboutGame_PokeCenter[] = { + HELP_WIRELESS_ADAPTER, + HELP_WHAT_ARE_POKEMON, + HELP_GAME_FUNDAMENTALS_1, + HELP_GAME_FUNDAMENTALS_2, + HELP_GAME_FUNDAMENTALS_3, + HELP_END +}; + +static const u8 sWhatToDo_Mart[] = { + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_TALKED_TO_EVERYONE_NOW_WHAT, + HELP_SOMEONE_BLOCKING_MY_WAY, + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_Mart[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_REGISTER_KEY_ITEM, + HELP_USING_POKEBALL, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_Mart[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_TYPE, + HELP_TERM_ITEM, + HELP_TERM_MONEY, + HELP_TERM_ITEMS, + HELP_TERM_KEYITEMS, + HELP_TERM_POKEBALLS, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sWhatToDo_Gym[] = { + HELP_SOMEONE_BLOCKING_MY_WAY, + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_Gym[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_REGISTER_KEY_ITEM, + HELP_USING_POKEBALL, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_Gym[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_TYPE, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sTypeMatchups_Gym[] = { + HELP_TYPE_MATCHUPS, + HELP_END +}; + +static const u8 sWhatToDo_Indoors[] = { + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_CANT_FIND_PERSON_I_WANT, + HELP_TALKED_TO_EVERYONE_NOW_WHAT, + HELP_SOMEONE_BLOCKING_MY_WAY, + HELP_I_CANT_GO_ON, + HELP_HOW_DO_I_PROGRESS, + HELP_WHAT_IS_THAT_PERSON_LIKE, + HELP_OUT_OF_THINGS_TO_DO, + HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, + HELP_WHAT_DO_I_DO_IN_CAVE, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WHAT_IS_A_GYM, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WHEN_CAN_I_USE_ITEM, + HELP_RAN_OUT_OF_POTIONS, + HELP_CAN_I_BUY_POKEBALLS, + HELP_WHATS_A_BATTLE, + HELP_HOW_DO_I_PREPARE_FOR_BATTLE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_WHERE_DO_MONS_APPEAR, + HELP_CANT_CATCH_MONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_MY_MONS_ARE_HURT, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_WHATS_A_TRAINER, + HELP_HOW_DO_I_WIN_AGAINST_TRAINER, + HELP_WHAT_ARE_MOVES, + HELP_WANT_TO_ADD_MORE_MOVES, + HELP_WHAT_ARE_HIDDEN_MOVES, + HELP_WHAT_DOES_HIDDEN_MOVE_DO, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_Indoors[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_SUMMARY, + HELP_USING_SWITCH, + HELP_USING_ITEM, + HELP_USING_BAG, + HELP_USING_AN_ITEM, + HELP_USING_KEYITEM, + HELP_REGISTER_KEY_ITEM, + HELP_USING_POKEBALL, + HELP_USING_POTION, + HELP_USING_TOWN_MAP, + HELP_USING_TM, + HELP_USING_HM, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_Indoors[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ITEM, + HELP_TERM_ABILITY, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sWhatToDo_Overworld[] = { + HELP_WHAT_SHOULD_I_BE_DOING, + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_CANT_FIND_PERSON_I_WANT, + HELP_TALKED_TO_EVERYONE_NOW_WHAT, + HELP_SOMEONE_BLOCKING_MY_WAY, + HELP_I_CANT_GO_ON, + HELP_HOW_DO_I_PROGRESS, + HELP_WHAT_IS_THAT_PERSON_LIKE, + HELP_OUT_OF_THINGS_TO_DO, + HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, + HELP_WHAT_DO_I_DO_IN_CAVE, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WHAT_IS_A_GYM, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WHEN_CAN_I_USE_ITEM, + HELP_RAN_OUT_OF_POTIONS, + HELP_CAN_I_BUY_POKEBALLS, + HELP_WHATS_A_BATTLE, + HELP_HOW_DO_I_PREPARE_FOR_BATTLE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_WHERE_DO_MONS_APPEAR, + HELP_CANT_CATCH_MONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_MY_MONS_ARE_HURT, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_WHATS_A_TRAINER, + HELP_HOW_DO_I_WIN_AGAINST_TRAINER, + HELP_WHAT_ARE_MOVES, + HELP_WANT_TO_ADD_MORE_MOVES, + HELP_WHAT_ARE_HIDDEN_MOVES, + HELP_WHAT_DOES_HIDDEN_MOVE_DO, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_Overworld[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_BAG, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_Overworld[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ITEM, + HELP_TERM_ABILITY, + HELP_TERM_FNT, + HELP_TERM_POKEMON, + HELP_END +}; + +static const u8 sWhatToDo_Dungeon[] = { + HELP_WHAT_ARE_MY_ADVENTURE_BASICS, + HELP_I_CANT_GO_ON, + HELP_HOW_DO_I_PROGRESS, + HELP_WHAT_IS_THAT_PERSON_LIKE, + HELP_OUT_OF_THINGS_TO_DO, + HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, + HELP_WHAT_DO_I_DO_IN_CAVE, + HELP_WHATS_POKEMON_CENTER, + HELP_WHATS_POKEMON_MART, + HELP_WHAT_IS_A_GYM, + HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, + HELP_WHEN_CAN_I_USE_ITEM, + HELP_RAN_OUT_OF_POTIONS, + HELP_WHATS_A_BATTLE, + HELP_HOW_DO_I_PREPARE_FOR_BATTLE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_WHERE_DO_MONS_APPEAR, + HELP_CANT_CATCH_MONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_MY_MONS_ARE_HURT, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_WHATS_A_TRAINER, + HELP_HOW_DO_I_WIN_AGAINST_TRAINER, + HELP_WHAT_ARE_MOVES, + HELP_WANT_TO_ADD_MORE_MOVES, + HELP_WHAT_ARE_HIDDEN_MOVES, + HELP_WHAT_DOES_HIDDEN_MOVE_DO, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_Dungeon[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_BAG, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_Dungeon[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ITEM, + HELP_TERM_ABILITY, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sWhatToDo_Surfing[] = { + HELP_I_CANT_GO_ON, + HELP_WHAT_IS_THAT_PERSON_LIKE, + HELP_OUT_OF_THINGS_TO_DO, + HELP_WHAT_IS_A_GYM, + HELP_CANT_CATCH_MONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_MY_MONS_ARE_HURT, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_WHATS_A_TRAINER, + HELP_HOW_DO_I_WIN_AGAINST_TRAINER, + HELP_WHAT_ARE_MOVES, + HELP_WANT_TO_ADD_MORE_MOVES, + HELP_WHAT_ARE_HIDDEN_MOVES, + HELP_WHAT_DOES_HIDDEN_MOVE_DO, + HELP_WANT_TO_END_GAME, + HELP_END +}; + +static const u8 sHowTo_Surfing[] = { + HELP_OPENING_MENU, + HELP_USING_POKEDEX, + HELP_USING_POKEMON, + HELP_USING_BAG, + HELP_USING_PLAYER, + HELP_USING_SAVE, + HELP_USING_OPTION, + HELP_USING_MOVE_OUTSIDE_OF_BATTLE, + HELP_END +}; + +static const u8 sTerms_Surfing[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ITEM, + HELP_TERM_ABILITY, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sWhatToDo_WildBattle[] = { + HELP_WHATS_A_BATTLE, + HELP_WHAT_ARE_MOVES, + HELP_WHAT_MOVES_SHOULD_I_USE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_MY_MONS_ARE_HURT, + HELP_CANT_CATCH_MONS, + HELP_CAN_I_BUY_POKEBALLS, + HELP_RAN_OUT_OF_POTIONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_END +}; + +static const u8 sHowTo_WildBattle[] = { + HELP_USING_FIGHT, + HELP_USING_POKEMON2, + HELP_USING_SHIFT, + HELP_USING_SUMMARY2, + HELP_USING_BAG2, + HELP_USING_AN_ITEM, + HELP_USING_POKEBALL, + HELP_USING_RUN, + HELP_END +}; + +static const u8 sTerms_WildBattle[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_TYPE, + HELP_TERM_ABILITY, + HELP_TERM_MOVE_TYPE, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_TERM_STATUS_PROBLEM, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sTypeMatchups_WildBattle[] = { + HELP_TYPE_MATCHUPS, + HELP_END +}; + +static const u8 sWhatToDo_TrainerBattleSingle[] = { + HELP_WHATS_A_BATTLE, + HELP_WHAT_ARE_MOVES, + HELP_WHAT_MOVES_SHOULD_I_USE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_MY_MONS_ARE_HURT, + HELP_RAN_OUT_OF_POTIONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_END +}; + +static const u8 sHowTo_TrainerBattleSingle[] = { + HELP_USING_FIGHT, + HELP_USING_POKEMON2, + HELP_USING_SHIFT, + HELP_USING_SUMMARY2, + HELP_USING_BAG2, + HELP_USING_AN_ITEM, + HELP_USING_RUN, + HELP_END +}; + +static const u8 sTerms_TrainerBattleSingle[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_TYPE, + HELP_TERM_ABILITY, + HELP_TERM_MOVE_TYPE, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_TERM_STATUS_PROBLEM, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sTypeMatchups_TrainerBattleSingle[] = { + HELP_TYPE_MATCHUPS, + HELP_END +}; + +static const u8 sWhatToDo_TrainerBattleDouble[] = { + HELP_WHATS_A_BATTLE, + HELP_WHAT_ARE_MOVES, + HELP_WHAT_MOVES_SHOULD_I_USE, + HELP_WHAT_IS_A_MONS_VITALITY, + HELP_MY_MONS_ARE_HURT, + HELP_RAN_OUT_OF_POTIONS, + HELP_WANT_TO_MAKE_MON_STRONGER, + HELP_FOE_MONS_TOO_STRONG, + HELP_WHAT_IS_STATUS_PROBLEM, + HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, + HELP_END +}; + +static const u8 sHowTo_TrainerBattleDouble[] = { + HELP_USING_FIGHT, + HELP_USING_POKEMON2, + HELP_USING_SHIFT, + HELP_USING_SUMMARY2, + HELP_USING_BAG2, + HELP_USING_AN_ITEM, + HELP_USING_RUN, + HELP_END +}; + +static const u8 sTerms_TrainerBattleDouble[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_TYPE, + HELP_TERM_ABILITY, + HELP_TERM_MOVE_TYPE, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_TERM_STATUS_PROBLEM, + HELP_TERM_FNT, + HELP_END +}; + +static const u8 sTypeMatchups_TrainerBattleDouble[] = { + HELP_TYPE_MATCHUPS, + HELP_END +}; + +static const u8 sWhatToDo_SafariBattle[] = { + HELP_WHAT_DO_I_DO_IN_SAFARI, + HELP_WHAT_ARE_SAFARI_RULES, + HELP_WANT_TO_END_SAFARI, + HELP_END +}; + +static const u8 sHowTo_SafariBattle[] = { + HELP_USING_BALL, + HELP_USING_BAIT, + HELP_USING_ROCK, + HELP_USING_RUN, + HELP_END +}; + +static const u8 sTerms_SafariBattle[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_TYPE, + HELP_TERM_ABILITY, + HELP_TERM_MOVE_TYPE, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_END +}; + +static const u8 sTypeMatchups_SafariBattle[] = { + HELP_TYPE_MATCHUPS, + HELP_END +}; + +static const u8 sHowTo_PC[] = { + HELP_USING_PC, + HELP_USING_BILLS_PC, + HELP_USING_WITHDRAW, + HELP_USING_DEPOSIT, + HELP_USING_MOVE, + HELP_MOVING_ITEMS, + HELP_USING_PLAYERS_PC, + HELP_USING_WITHDRAW_ITEM, + HELP_USING_DEPOSIT_ITEM, + HELP_USING_MAILBOX, + HELP_USING_PROF_OAKS_PC, + HELP_USING_HALL_OF_FAME, + HELP_END +}; + +static const u8 sHowTo_BillsPC[] = { + HELP_USING_PC, + HELP_USING_BILLS_PC, + HELP_USING_WITHDRAW, + HELP_USING_DEPOSIT, + HELP_USING_MOVE, + HELP_MOVING_ITEMS, + HELP_USING_PLAYERS_PC, + HELP_USING_WITHDRAW_ITEM, + HELP_USING_DEPOSIT_ITEM, + HELP_USING_MAILBOX, + HELP_USING_PROF_OAKS_PC, + HELP_USING_HALL_OF_FAME, + HELP_END +}; + +static const u8 sHowTo_PlayersPCItems[] = { + HELP_USING_PC, + HELP_USING_BILLS_PC, + HELP_USING_WITHDRAW, + HELP_USING_DEPOSIT, + HELP_USING_MOVE, + HELP_MOVING_ITEMS, + HELP_USING_PLAYERS_PC, + HELP_USING_WITHDRAW_ITEM, + HELP_USING_DEPOSIT_ITEM, + HELP_USING_MAILBOX, + HELP_USING_PROF_OAKS_PC, + HELP_USING_HALL_OF_FAME, + HELP_END +}; + +static const u8 sHowTo_PlayersPCMailbox[] = { + HELP_USING_PC, + HELP_USING_BILLS_PC, + HELP_USING_WITHDRAW, + HELP_USING_DEPOSIT, + HELP_USING_MOVE, + HELP_MOVING_ITEMS, + HELP_USING_PLAYERS_PC, + HELP_USING_WITHDRAW_ITEM, + HELP_USING_DEPOSIT_ITEM, + HELP_USING_MAILBOX, + HELP_USING_PROF_OAKS_PC, + HELP_USING_HALL_OF_FAME, + HELP_END +}; + +static const u8 sHowTo_PCMisc[] = { + HELP_USING_PC, + HELP_USING_BILLS_PC, + HELP_USING_WITHDRAW, + HELP_USING_DEPOSIT, + HELP_USING_MOVE, + HELP_MOVING_ITEMS, + HELP_USING_PLAYERS_PC, + HELP_USING_WITHDRAW_ITEM, + HELP_USING_DEPOSIT_ITEM, + HELP_USING_MAILBOX, + HELP_USING_PROF_OAKS_PC, + HELP_USING_HALL_OF_FAME, + HELP_END +}; + +static const u8 sHowTo_BedroomPC[] = { + HELP_USING_HOME_PC, + HELP_USING_ITEM_STORAGE, + HELP_USING_WITHDRAW_ITEM2, + HELP_USING_DEPOSIT_ITEM2, + HELP_USING_MAILBOX2, + HELP_END +}; + +static const u8 sHowTo_BedroomPCItems[] = { + HELP_USING_HOME_PC, + HELP_USING_ITEM_STORAGE, + HELP_USING_WITHDRAW_ITEM2, + HELP_USING_DEPOSIT_ITEM2, + HELP_USING_MAILBOX2, + HELP_END +}; + +static const u8 sHowTo_BedroomPCMailbox[] = { + HELP_USING_HOME_PC, + HELP_USING_ITEM_STORAGE, + HELP_USING_WITHDRAW_ITEM2, + HELP_USING_DEPOSIT_ITEM2, + HELP_USING_MAILBOX2, + HELP_END +}; + +static const u8 sTerms_Basic[] = { + HELP_TERM_LEVEL, + HELP_TERM_HP, + HELP_TERM_EXP, + HELP_TERM_MOVES, + HELP_TERM_TM, + HELP_TERM_HM_MOVE, + HELP_TERM_HM, + HELP_TERM_ATTACK, + HELP_TERM_DEFENSE, + HELP_TERM_SPATK, + HELP_TERM_SPDEF, + HELP_TERM_SPEED, + HELP_TERM_TYPE, + HELP_TERM_OT, + HELP_TERM_ITEM, + HELP_TERM_ABILITY, + HELP_TERM_MOVE_TYPE, + HELP_TERM_NATURE, + HELP_TERM_ID_NO, + HELP_TERM_PP, + HELP_TERM_POWER, + HELP_TERM_ACCURACY, + HELP_TERM_STATUS_PROBLEM, + HELP_TERM_FNT, + HELP_TERM_EVOLUTION, + HELP_TERM_ITEMS, + HELP_TERM_KEYITEMS, + HELP_TERM_POKEBALLS, + HELP_TERM_PLAY_TIME, + HELP_TERM_MONEY, + HELP_TERM_BADGES, + HELP_END +}; + + +// Cant get this to match as a 2D array but it probably should be one, [HELPCONTEXT_COUNT][TOPIC_COUNT - 1] (Excludes TOPIC_EXIT) +static const u8 *const sHelpSystemSubmenuItemLists[HELPCONTEXT_COUNT * (TOPIC_COUNT - 1)] = { + NULL, NULL, NULL, NULL, NULL, // HELPCONTEXT_NONE + NULL, NULL, NULL, sAboutGame_TitleScreen, NULL, // HELPCONTEXT_TITLE_SCREEN + NULL, NULL, NULL, sAboutGame_NewGame, NULL, // HELPCONTEXT_NEW_GAME + NULL, sHowTo_NamingScreen, NULL, sAboutGame_NamingScreen, NULL, // HELPCONTEXT_NAMING_SCREEN + NULL, sHowTo_Pokedex, NULL, NULL, NULL, // HELPCONTEXT_POKEDEX + NULL, sHowTo_PartyMenu, sTerms_PartyMenu, NULL, NULL, // HELPCONTEXT_PARTY_MENU + NULL, sHowTo_PokemonInfo, sTerms_PokemonInfo, NULL, NULL, // HELPCONTEXT_POKEMON_INFO + NULL, NULL, sTerms_PokemonSkills, NULL, NULL, // HELPCONTEXT_POKEMON_SKILLS + NULL, NULL, sTerms_PokemonMoves, NULL, NULL, // HELPCONTEXT_POKEMON_MOVES + NULL, sHowTo_Bag, sTerms_Bag, NULL, NULL, // HELPCONTEXT_BAG + NULL, sHowTo_TrainerCardFront, sTerms_TrainerCardFront, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_FRONT + NULL, sHowTo_TrainerCardBack, NULL, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_BACK + NULL, sHowTo_Save, sTerms_Save, NULL, NULL, // HELPCONTEXT_SAVE + NULL, sHowTo_Options, sTerms_Options, NULL, NULL, // HELPCONTEXT_OPTIONS + sWhatToDo_PlayersHouse, NULL, NULL, sAboutGame_PlayersHouse, NULL, // HELPCONTEXT_PLAYERS_HOUSE + sWhatToDo_OaksLab, sHowTo_OaksLab, sTerms_OaksLab, NULL, NULL, // HELPCONTEXT_OAKS_LAB + sWhatToDo_PokeCenter, sHowTo_PokeCenter, sTerms_PokeCenter, sAboutGame_PokeCenter, NULL, // HELPCONTEXT_POKECENTER + sWhatToDo_Mart, sHowTo_Mart, sTerms_Mart, NULL, NULL, // HELPCONTEXT_MART + sWhatToDo_Gym, sHowTo_Gym, sTerms_Gym, NULL, sTypeMatchups_Gym, // HELPCONTEXT_GYM + sWhatToDo_Indoors, sHowTo_Indoors, sTerms_Indoors, NULL, NULL, // HELPCONTEXT_INDOORS + sWhatToDo_Overworld, sHowTo_Overworld, sTerms_Overworld, NULL, NULL, // HELPCONTEXT_OVERWORLD + sWhatToDo_Dungeon, sHowTo_Dungeon, sTerms_Dungeon, NULL, NULL, // HELPCONTEXT_DUNGEON + sWhatToDo_Surfing, sHowTo_Surfing, sTerms_Surfing, NULL, NULL, // HELPCONTEXT_SURFING + sWhatToDo_WildBattle, sHowTo_WildBattle, sTerms_WildBattle, NULL, sTypeMatchups_WildBattle, // HELPCONTEXT_WILD_BATTLE + sWhatToDo_TrainerBattleSingle, sHowTo_TrainerBattleSingle, sTerms_TrainerBattleSingle, NULL, sTypeMatchups_TrainerBattleSingle, // HELPCONTEXT_TRAINER_BATTLE_SINGLE + sWhatToDo_TrainerBattleDouble, sHowTo_TrainerBattleDouble, sTerms_TrainerBattleDouble, NULL, sTypeMatchups_TrainerBattleDouble, // HELPCONTEXT_TRAINER_BATTLE_DOUBLE + sWhatToDo_SafariBattle, sHowTo_SafariBattle, sTerms_SafariBattle, NULL, sTypeMatchups_SafariBattle, // HELPCONTEXT_SAFARI_BATTLE + NULL, sHowTo_PC, NULL, NULL, NULL, // HELPCONTEXT_PC + NULL, sHowTo_BillsPC, NULL, NULL, NULL, // HELPCONTEXT_BILLS_PC + NULL, sHowTo_PlayersPCItems, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_ITEMS + NULL, sHowTo_PlayersPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_MAILBOX + NULL, sHowTo_PCMisc, NULL, NULL, NULL, // HELPCONTEXT_PC_MISC + NULL, sHowTo_BedroomPC, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC + NULL, sHowTo_BedroomPCItems, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_ITEMS + NULL, sHowTo_BedroomPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_MAILBOX + NULL, NULL, NULL, NULL, NULL // HELPCONTEXT_UNUSED +}; -void SaveMapGPURegs(void) +static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin"); + +static const u8 sHelpSystemContextTopicOrder[TOPIC_COUNT] = { + TOPIC_ABOUT_GAME, + TOPIC_WHAT_TO_DO, + TOPIC_HOW_TO_DO, + TOPIC_TERMS, + TOPIC_TYPE_MATCHUP, + TOPIC_EXIT +}; + +#define CONTEXT_TOPIC_FLAGS(whatToDo, howToDo, terms, aboutGame, typeMatchup, exit) \ + { \ + [TOPIC_WHAT_TO_DO] = whatToDo, \ + [TOPIC_HOW_TO_DO] = howToDo, \ + [TOPIC_TERMS] = terms, \ + [TOPIC_ABOUT_GAME] = aboutGame, \ + [TOPIC_TYPE_MATCHUP] = typeMatchup, \ + [TOPIC_EXIT] = exit \ + } \ + +static const bool8 sHelpSystemContextTopicFlags[HELPCONTEXT_COUNT + 1][TOPIC_COUNT] = { + [HELPCONTEXT_NONE] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_TITLE_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE), + [HELPCONTEXT_NEW_GAME] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE), + [HELPCONTEXT_NAMING_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE), + [HELPCONTEXT_POKEDEX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_PARTY_MENU] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_POKEMON_INFO] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_POKEMON_SKILLS] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_POKEMON_MOVES] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_BAG] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_TRAINER_CARD_FRONT] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_TRAINER_CARD_BACK] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_SAVE] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_OPTIONS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_PLAYERS_HOUSE] = CONTEXT_TOPIC_FLAGS( TRUE, FALSE, FALSE, TRUE, FALSE, TRUE), + [HELPCONTEXT_OAKS_LAB] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_POKECENTER] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, TRUE, FALSE, TRUE), + [HELPCONTEXT_MART] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_GYM] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), + [HELPCONTEXT_INDOORS] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_OVERWORLD] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_DUNGEON] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_SURFING] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), + [HELPCONTEXT_WILD_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), + [HELPCONTEXT_TRAINER_BATTLE_SINGLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), + [HELPCONTEXT_TRAINER_BATTLE_DOUBLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), + [HELPCONTEXT_SAFARI_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), + [HELPCONTEXT_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_BILLS_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_PLAYERS_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_PLAYERS_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_PC_MISC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_BEDROOM_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_BEDROOM_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_BEDROOM_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), + [HELPCONTEXT_UNUSED] = {}, + [HELPCONTEXT_COUNT] = {} +}; + +static const u16 sMartMaps[] = { + MAP_VIRIDIAN_CITY_MART, + MAP_PEWTER_CITY_MART, + MAP_CERULEAN_CITY_MART, + MAP_LAVENDER_TOWN_MART, + MAP_VERMILION_CITY_MART, + MAP_CELADON_CITY_DEPARTMENT_STORE_1F, + MAP_CELADON_CITY_DEPARTMENT_STORE_2F, + MAP_CELADON_CITY_DEPARTMENT_STORE_3F, + MAP_CELADON_CITY_DEPARTMENT_STORE_4F, + MAP_CELADON_CITY_DEPARTMENT_STORE_5F, + MAP_CELADON_CITY_DEPARTMENT_STORE_ROOF, + MAP_CELADON_CITY_DEPARTMENT_STORE_ELEVATOR, + MAP_FUCHSIA_CITY_MART, + MAP_CINNABAR_ISLAND_MART, + MAP_SAFFRON_CITY_MART, + MAP_THREE_ISLAND_MART, + MAP_FOUR_ISLAND_MART, + MAP_SEVEN_ISLAND_MART, + MAP_SIX_ISLAND_MART, + MAP_UNDEFINED +}; + +static const u16 sGymMaps[] = { + MAP_PEWTER_CITY_GYM, + MAP_CERULEAN_CITY_GYM, + MAP_VERMILION_CITY_GYM, + MAP_CELADON_CITY_GYM, + MAP_FUCHSIA_CITY_GYM, + MAP_SAFFRON_CITY_GYM, + MAP_CINNABAR_ISLAND_GYM, + MAP_VIRIDIAN_CITY_GYM, + MAP_UNDEFINED +}; + +static const u8 sDungeonMaps[][3] = { + { MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), 1 }, + { MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), 3 }, + { MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), 2 }, + { MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), 3 }, + { MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), 5 }, + { MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), 3 }, + { MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), 3 }, + { MAP_GROUP(MT_EMBER_RUBY_PATH_B4F), MAP_NUM(MT_EMBER_RUBY_PATH_B4F), 1 }, + { MAP_GROUP(MT_EMBER_SUMMIT_PATH_1F), MAP_NUM(MT_EMBER_SUMMIT_PATH_1F), 3 }, + { MAP_GROUP(MT_EMBER_RUBY_PATH_B5F), MAP_NUM(MT_EMBER_RUBY_PATH_B5F), 7 }, + { MAP_GROUP(THREE_ISLAND_BERRY_FOREST), MAP_NUM(THREE_ISLAND_BERRY_FOREST), 1 }, + { MAP_GROUP(SIX_ISLAND_PATTERN_BUSH), MAP_NUM(SIX_ISLAND_PATTERN_BUSH), 1 }, + { MAP_GROUP(FIVE_ISLAND_LOST_CAVE_ENTRANCE), MAP_NUM(FIVE_ISLAND_LOST_CAVE_ENTRANCE), 15 }, + { MAP_GROUP(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), MAP_NUM(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), 4 }, + { MAP_GROUP(SIX_ISLAND_ALTERING_CAVE), MAP_NUM(SIX_ISLAND_ALTERING_CAVE), 1 }, + { MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), 7 } +}; + +void SetHelpContextDontCheckBattle(u8 contextId) { - sVideoState.savedDispCnt = GetGpuReg(REG_OFFSET_DISPCNT); - sVideoState.savedBg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT); - sVideoState.savedBg0Hofs = GetGpuReg(REG_OFFSET_BG0HOFS); - sVideoState.savedBg0Vofs = GetGpuReg(REG_OFFSET_BG0VOFS); - sVideoState.savedBldCnt = GetGpuReg(REG_OFFSET_BLDCNT); + sHelpSystemContextId = contextId; } -void SaveMapTiles(void) +void SetHelpContext(u8 contextId) { - RequestDma3Copy((void *)BG_CHAR_ADDR(3), sMapTilesBackup, BG_CHAR_SIZE, DMA3_16BIT); + switch (sHelpSystemContextId) + { + case HELPCONTEXT_WILD_BATTLE: + case HELPCONTEXT_TRAINER_BATTLE_SINGLE: + case HELPCONTEXT_TRAINER_BATTLE_DOUBLE: + case HELPCONTEXT_SAFARI_BATTLE: + if (contextId == HELPCONTEXT_BAG + || contextId == HELPCONTEXT_PARTY_MENU + || contextId == HELPCONTEXT_POKEMON_INFO + || contextId == HELPCONTEXT_POKEMON_SKILLS + || contextId == HELPCONTEXT_POKEMON_MOVES) + break; + // fallthrough + default: + sHelpSystemContextId = contextId; + break; + } } -void SaveMapTextColors(void) +void Script_SetHelpContext(void) { - SaveTextColors( - &sVideoState.savedTextColor[0], - &sVideoState.savedTextColor[1], - &sVideoState.savedTextColor[2] - ); + sHelpSystemContextId = gSpecialVar_0x8004; } -void RestoreCallbacks(void) +void BackupHelpContext(void) { - gMain.vblankCallback = sVideoState.savedVblankCb; - gMain.hblankCallback = sVideoState.savedHblankCb; + gHelpContextIdBackup = sHelpSystemContextId; } -void RestoreGPURegs(void) +void RestoreHelpContext(void) { - SetGpuReg(REG_OFFSET_BLDCNT, sVideoState.savedBldCnt); - SetGpuReg(REG_OFFSET_BG0HOFS, sVideoState.savedBg0Hofs); - SetGpuReg(REG_OFFSET_BG0VOFS, sVideoState.savedBg0Vofs); - SetGpuReg(REG_OFFSET_BG0CNT, sVideoState.savedBg0Cnt); - SetGpuReg(REG_OFFSET_DISPCNT, sVideoState.savedDispCnt); + sHelpSystemContextId = gHelpContextIdBackup; } -void RestoreMapTiles(void) +static bool32 IsInMartMap(void) { - RequestDma3Copy(sMapTilesBackup, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT); + return IsCurrentMapInArray(sMartMaps); } -void RestoreMapTextColors(void) +static bool32 IsInGymMap(void) { - RestoreTextColors( - &sVideoState.savedTextColor[0], - &sVideoState.savedTextColor[1], - &sVideoState.savedTextColor[2] - ); + return IsCurrentMapInArray(sGymMaps); } -void CommitTilemap(void) +static bool32 IsCurrentMapInArray(const u16 * mapIdxs) { - RequestDma3Copy(gDecompressionBuffer, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT); + u16 mapIdx = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; + s32 i; + + for (i = 0; mapIdxs[i] != MAP_UNDEFINED; i++) + { + if (mapIdxs[i] == mapIdx) + return TRUE; + } + + return FALSE; } -void HS_DrawBgTilemapRect(u16 baseTile, u8 left, u8 top, u8 width, u8 height, u16 increment) +static bool8 IsInDungeonMap(void) { - u16 i, j; + u8 i, j; - for (i = top; i < top + height; i++) + for (i = 0; i < NELEMS(sDungeonMaps); i++) { - for (j = left; j < left + width; j++) + for (j = 0; j < sDungeonMaps[i][2]; j++) { - *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseTile; - baseTile += increment; + if ( + sDungeonMaps[i][0] == gSaveBlock1Ptr->location.mapGroup + && sDungeonMaps[i][1] + j == gSaveBlock1Ptr->location.mapNum + && (i != 15 /* TANOBY */ || FlagGet(FLAG_SYS_UNLOCKED_TANOBY_RUINS) == TRUE) + ) + return TRUE; } } - CommitTilemap(); + return FALSE; } -void HS_BufferFillMapWithTile1FF(void) -{ - HS_DrawBgTilemapRect(0x1FF, 0, 0, 30, 20, 0); -} +#define IN_PLAYERS_HOUSE \ + ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) \ + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) \ + || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) \ + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F))) \ + + #define IN_OAKS_LAB \ + (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB) \ + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB)) \ -void HS_ShowOrHideWordHELPinTopLeft(u8 mode) +void SetHelpContextForMap(void) { - switch (mode) + HelpSystem_EnableToggleWithRButton(); + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + SetHelpContext(HELPCONTEXT_SURFING); + else if (IsInDungeonMap()) + SetHelpContext(HELPCONTEXT_DUNGEON); + else if (IsMapTypeIndoors(gMapHeader.mapType)) { - case 0: - HS_DrawBgTilemapRect(0x1FF, 1, 0, 7, 2, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x1E8, 1, 0, 7, 2, 1); - break; + if (IN_PLAYERS_HOUSE) + SetHelpContext(HELPCONTEXT_PLAYERS_HOUSE); + else if (IN_OAKS_LAB) + SetHelpContext(HELPCONTEXT_OAKS_LAB); + else if (IsCurMapPokeCenter() == TRUE) + SetHelpContext(HELPCONTEXT_POKECENTER); + else if (IsInMartMap() == TRUE) + SetHelpContext(HELPCONTEXT_MART); + else if (IsInGymMap() == TRUE) + SetHelpContext(HELPCONTEXT_GYM); + else + SetHelpContext(HELPCONTEXT_INDOORS); } + else + SetHelpContext(HELPCONTEXT_OVERWORLD); } -void HS_ShowOrHideControlsGuideInTopRight(u8 mode) +bool8 HelpSystem_UpdateHasntSeenIntro(void) { - switch (mode) - { - case 0: - HS_DrawBgTilemapRect(0x1FF, 13, 0, 16, 2, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x1A0, 13, 0, 16, 2, 1); - break; - } + if (sSeenHelpSystemIntro == TRUE) + return FALSE; + + if (gSaveFileStatus != SAVE_STATUS_EMPTY && gSaveFileStatus != SAVE_STATUS_INVALID && FlagGet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO)) + return FALSE; + + FlagSet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO); + sSeenHelpSystemIntro = TRUE; + return TRUE; } -void HS_ShowOrHideMainWindowText(u8 mode) +bool8 HelpSystem_IsSinglePlayer(void) { - switch (mode) - { - case 0: - HS_DrawBgTilemapRect(0x1FF, 2, 3, 26, 16, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x000, 2, 3, 26, 16, 1); - break; - } + if (gReceivedRemoteLinkPlayers == TRUE) + return FALSE; + return TRUE; } -void HS_SetMainWindowBgBrightness(u8 mode) +void HelpSystem_Disable(void) { - switch (mode) - { - case 0: - // Brighter - HS_DrawBgTilemapRect(0x1FF, 1, 3, 28, 16, 0); - break; - case 1: - // Darker - HS_DrawBgTilemapRect(0x1FA, 1, 3, 28, 17, 0); - break; - } + gHelpSystemEnabled = FALSE; } -void HS_ShowOrHideToplevelTooltipWindow(u8 mode) +void HelpSystem_Enable(void) { - switch (mode) + if (!QL_IS_PLAYBACK_STATE) { - case 0: - HS_DrawBgTilemapRect(0x1FF, 2, 14, 26, 5, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x11E, 2, 14, 26, 5, 1); - break; + gHelpSystemEnabled = TRUE; + HelpSystem_EnableToggleWithRButton(); } } -void HS_ShowOrHideHeaderAndFooterLines_Lighter(u8 mode) +void HelpSystem_DisableToggleWithRButton(void) { - switch (mode) - { - case 0: - HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0); - HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x1F7, 1, 2, 28, 1, 0); - HS_DrawBgTilemapRect(0x1F8, 1, 19, 28, 1, 0); - break; - } + gHelpSystemToggleWithRButtonDisabled = TRUE; } -void HS_ShowOrHideHeaderAndFooterLines_Darker(u8 mode) +void HelpSystem_EnableToggleWithRButton(void) { - switch (mode) - { - case 0: - HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0); - HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x1FB, 1, 2, 28, 1, 0); - HS_DrawBgTilemapRect(0x1FC, 1, 19, 28, 1, 0); - break; - } + gHelpSystemToggleWithRButtonDisabled = FALSE; } -void HS_ShowOrHideVerticalBlackBarsAlongSides(u8 mode) +static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - switch (mode) - { - case 0: - HS_DrawBgTilemapRect(0x1FF, 0, 0, 1, 20, 0); - HS_DrawBgTilemapRect(0x1FF, 29, 0, 1, 20, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x1F9, 0, 0, 1, 20, 0); - HS_DrawBgTilemapRect(0x1F9, 29, 0, 1, 20, 0); - break; - } + helpListMenu->sub.items = listMenuItemsBuffer; + helpListMenu->sub.totalItems = 1; + helpListMenu->sub.maxShowed = 1; + helpListMenu->sub.left = 1; + helpListMenu->sub.top = 4; } -void HS_ShowOrHideHeaderLine_Darker_FooterStyle(u8 mode) +static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - switch (mode) + ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer); + BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer); + PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_PickOkEnd); + HelpSystem_InitListMenuController(helpListMenu, 0, gHelpSystemState.scrollMain); + PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer); + HS_ShowOrHideMainWindowText(1); + HS_ShowOrHideControlsGuideInTopRight(1); +} + +static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) +{ + u8 i; + u8 totalItems = 0; + for (i = 0; i < TOPIC_COUNT; i++) { - case 0: - HS_DrawBgTilemapRect(0x1FF, 1, 5, 28, 1, 0); - break; - case 1: - HS_DrawBgTilemapRect(0x1FC, 1, 5, 28, 1, 0); - break; + if (sHelpSystemContextTopicFlags[sHelpSystemContextId][sHelpSystemContextTopicOrder[i]] == TRUE) + { + listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]]; + listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i]; + totalItems++; + } } + listMenuItemsBuffer[totalItems - 1].index = -2; + helpListMenu->sub.totalItems = totalItems; + helpListMenu->sub.maxShowed = totalItems; + helpListMenu->sub.left = 0; } -void HS_ShowOrHideScrollArrows(u8 which, u8 mode) +static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - switch (mode) + HS_SetMainWindowBgBrightness(0); + HS_ShowOrHideHeaderLine_Darker_FooterStyle(0); + HS_ShowOrHideHeaderAndFooterLines_Lighter(1); + ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer); + SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer); + PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_PickOkCancel); + HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos); + HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState.topic], 0, 0); + HS_ShowOrHideMainWindowText(1); + HS_ShowOrHideControlsGuideInTopRight(1); +} + +static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) +{ + u8 totalItems = 0; + const u8 * submenuItems = sHelpSystemSubmenuItemLists[sHelpSystemContextId * 5 + gHelpSystemState.topic]; // accessing as 2D array + u8 i; + for (i = 0; submenuItems[i] != HELP_END; i++) { - case 0: - HS_DrawBgTilemapRect(0x1FF, 28, 3, 1, 1, 0); - HS_DrawBgTilemapRect(0x1FF, 28, 18, 1, 1, 0); - break; - case 1: - if (which == 0) // top - HS_DrawBgTilemapRect(0x1FE, 28, 3, 1, 1, 0); - else // bottom - HS_DrawBgTilemapRect(0x1FD, 28, 18, 1, 1, 0); - break; + if (IsHelpSystemSubmenuEnabled(submenuItems[i]) == TRUE) + { + if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO) + listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[submenuItems[i]]; + else if (gHelpSystemState.topic == TOPIC_HOW_TO_DO) + listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[submenuItems[i]]; + else if (gHelpSystemState.topic == TOPIC_TERMS) + listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]]; + else if (gHelpSystemState.topic == TOPIC_ABOUT_GAME) + listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[submenuItems[i]]; + else // TOPIC_TYPE_MATCHUP + listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[submenuItems[i]]; + listMenuItemsBuffer[totalItems].index = submenuItems[i]; + totalItems++; + } } + if (HelpSystem_ShouldShowBasicTerms() == TRUE) + { + for (i = 0, submenuItems = sTerms_Basic; submenuItems[i] != HELP_END; i++) + { + listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]]; + listMenuItemsBuffer[totalItems].index = submenuItems[i]; + totalItems++; + } + } + listMenuItemsBuffer[totalItems].label = Help_Text_Cancel; + listMenuItemsBuffer[totalItems].index = -2; + totalItems++; + helpListMenu->sub.totalItems = totalItems; + helpListMenu->sub.maxShowed = 7; + helpListMenu->sub.left = 0; + helpListMenu->sub.top = 21; +} + +static bool8 HelpSystem_ShouldShowBasicTerms(void) +{ + if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gHelpSystemState.topic == TOPIC_TERMS) + return TRUE; + return FALSE; } -void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height) +static bool8 IsHelpSystemSubmenuEnabled(u8 id) { - // font -> sp+24 - // dest -> sp+28 - // src -> r9 - // x -> sp+34 - // y -> r10 - // width -> sp+2C - // height -> sp+30 - struct Bitmap srcBlit; - struct Bitmap destBlit; - u8 orig_x = x; u8 i = 0; - s32 clearPixels = 0; - while (1) + if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO) { - u16 curChar = *src; - src++; - switch (curChar) + switch (id) { - case EOS: - return; - case CHAR_NEWLINE: - x = orig_x; - y += gGlyphInfo.height + 1; - break; - case PLACEHOLDER_BEGIN: - curChar = *src; - src++; - if (curChar == PLACEHOLDER_ID_PLAYER) { - for (i = 0; i < 10; i++) - { - if (gSaveBlock2Ptr->playerName[i] == EOS) - { - break; - } - DecompressAndRenderGlyph(font, gSaveBlock2Ptr->playerName[i], &srcBlit, &destBlit, dest, x, y, width, height); - // This is required to match a dummy [sp+#0x24] read here - if (font == 0) - { - x += gGlyphInfo.width; - } - else - { - x += gGlyphInfo.width + ZERO; - } - } - } - else if (curChar == PLACEHOLDER_ID_STRING_VAR_1) - { - for (i = 0; ; i++) - { - if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC) == TRUE) - { - if (gString_Bill[i] == EOS) - { - break; - } - DecompressAndRenderGlyph(font, gString_Bill[i], &srcBlit, &destBlit, dest, x, y, width, height); - } - else - { - if (gString_Someone[i] == EOS) - { - break; - } - DecompressAndRenderGlyph(font, gString_Someone[i], &srcBlit, &destBlit, dest, x, y, width, height); - } - if (font == 0) - { - x += gGlyphInfo.width; - } - else - { - x += gGlyphInfo.width + ZERO; - } - } - } - break; - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - x = orig_x; - y += gGlyphInfo.height + 1; - break; - case EXT_CTRL_CODE_BEGIN: - curChar = *src; - src++; - switch (curChar) - { - case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: - src++; - //fallthrough - case EXT_CTRL_CODE_PLAY_BGM: - case EXT_CTRL_CODE_PLAY_SE: - src++; - //fallthrough - case EXT_CTRL_CODE_COLOR: - case EXT_CTRL_CODE_HIGHLIGHT: - case EXT_CTRL_CODE_SHADOW: - case EXT_CTRL_CODE_PALETTE: - case EXT_CTRL_CODE_FONT: - case EXT_CTRL_CODE_PAUSE: - case EXT_CTRL_CODE_ESCAPE: - case EXT_CTRL_CODE_SHIFT_RIGHT: - case EXT_CTRL_CODE_SHIFT_DOWN: - src++; - break; - case EXT_CTRL_CODE_CLEAR_TO: - { -#ifdef NONMATCHING - curChar = *src; - clearPixels = curChar + orig_x - x; -#else // dumb fakematch - s32 r0; - register const u8 * _src asm("r2") = src; - asm("":::"r1"); - r0 = *_src; - r0 += orig_x; - clearPixels = r0 - x; -#endif - if (clearPixels > 0) - { - destBlit.pixels = dest; - destBlit.width = width * 8; - destBlit.height = height * 8; - FillBitmapRect4Bit(&destBlit, x, y, clearPixels, GetFontAttribute(font, FONTATTR_MAX_LETTER_HEIGHT), - 0); - x += clearPixels; - } - src++; - break; - } - case EXT_CTRL_CODE_CLEAR: - case EXT_CTRL_CODE_SKIP: - case EXT_CTRL_CODE_MIN_LETTER_SPACING: - src++; - break; - case EXT_CTRL_CODE_RESET_FONT: - case EXT_CTRL_CODE_WAIT_BUTTON: - case EXT_CTRL_CODE_WAIT_SE: - case EXT_CTRL_CODE_FILL_WINDOW: - break; - case EXT_CTRL_CODE_JPN: - case EXT_CTRL_CODE_ENG: - break; - } - break; - case CHAR_KEYPAD_ICON: - curChar = *src; - src++; - srcBlit.pixels = (u8 *)gKeypadIconTiles + 0x20 * GetKeypadIconTileOffset(curChar); - srcBlit.width = 0x80; - srcBlit.height = 0x80; - destBlit.pixels = dest; - destBlit.width = width * 8; - destBlit.height = height * 8; - BlitBitmapRect4Bit(&srcBlit, &destBlit, 0, 0, x, y, GetKeypadIconWidth(curChar), GetKeypadIconHeight(curChar), 0); - x += GetKeypadIconWidth(curChar); - break; - case CHAR_EXTRA_EMOJI: - curChar = *src + 0x100; - src++; - //fallthrough - default: - if (curChar == CHAR_SPACE) - { - if (font == 0) - { - x += 5; - } - else - { - x += 4; - } - } - else + case HELP_PLAYING_FOR_FIRST_TIME: + case HELP_WHAT_SHOULD_I_BE_DOING: + case HELP_CANT_GET_OUT_OF_ROOM: + case HELP_TALKED_TO_EVERYONE_NOW_WHAT: + case HELP_OUT_OF_THINGS_TO_DO: + case HELP_NOTHING_I_WANT_TO_KNOW: + case HELP_WHATS_A_MON: + case HELP_WHAT_DO_I_DO_IN_SAFARI: + case HELP_WHAT_ARE_SAFARI_RULES: + case HELP_WANT_TO_END_SAFARI: + return TRUE; + case HELP_CANT_FIND_PERSON_I_WANT: + return FlagGet(FLAG_VISITED_OAKS_LAB); + case HELP_SOMEONE_BLOCKING_MY_WAY: + case HELP_WHAT_ARE_MY_ADVENTURE_BASICS: + case HELP_HOW_DO_I_PREPARE_FOR_BATTLE: + case HELP_WHAT_IS_STATUS_PROBLEM: + case HELP_RAN_OUT_OF_POTIONS: + case HELP_WHATS_POKEMON_CENTER: + case HELP_WHATS_POKEMON_MART: + return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_CITY); + case HELP_I_CANT_GO_ON: + return FlagGet(FLAG_WORLD_MAP_VERMILION_CITY); + case HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT: + case HELP_WHATS_A_TRAINER: + return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST); + case HELP_WHAT_HAPPENED_TO_ITEM_I_GOT: + case HELP_WHEN_CAN_I_USE_ITEM: + case HELP_HOW_DO_I_PROGRESS: + case HELP_WHATS_A_BATTLE: + case HELP_WHAT_IS_A_MONS_VITALITY: + case HELP_MY_MONS_ARE_HURT: + case HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT: + case HELP_WHERE_DO_MONS_APPEAR: + case HELP_WHAT_MOVES_SHOULD_I_USE: + case HELP_WANT_TO_MAKE_MON_STRONGER: + case HELP_WANT_TO_END_GAME: + return FlagGet(FLAG_SYS_POKEMON_GET); + case HELP_CANT_CATCH_MONS: + case HELP_CAN_I_BUY_POKEBALLS: + return FlagGet(FLAG_SYS_POKEDEX_GET); + case HELP_HOW_ARE_CAVES_DIFFERENT: + case HELP_WHAT_DO_I_DO_IN_CAVE: + case HELP_HOW_DO_I_WIN_AGAINST_TRAINER: + case HELP_FOE_MONS_TOO_STRONG: + case HELP_WHAT_ARE_MOVES: + case HELP_WANT_TO_ADD_MORE_MOVES: + return FlagGet(FLAG_BADGE01_GET); + case HELP_WHAT_ARE_HIDDEN_MOVES: + case HELP_WHAT_DOES_HIDDEN_MOVE_DO: + return HasGottenAtLeastOneHM(); + case HELP_WHAT_IS_THAT_PERSON_LIKE: + return FlagGet(FLAG_GOT_FAME_CHECKER); + case HELP_WHAT_IS_A_GYM: + return FlagGet(FLAG_WORLD_MAP_PEWTER_CITY); + } + return FALSE; + } + if (gHelpSystemState.topic == TOPIC_HOW_TO_DO) + { + switch (id) + { + case HELP_USING_BAG: + case HELP_USING_PLAYER: + case HELP_USING_SAVE: + case HELP_USING_OPTION: + case HELP_ENTERING_NAME: + case HELP_USING_PC: + case HELP_USING_BILLS_PC: + case HELP_USING_WITHDRAW: + case HELP_USING_DEPOSIT: + case HELP_USING_MOVE: + case HELP_MOVING_ITEMS: + case HELP_USING_PLAYERS_PC: + case HELP_USING_WITHDRAW_ITEM: + case HELP_USING_DEPOSIT_ITEM: + case HELP_USING_MAILBOX: + case HELP_OPENING_MENU: + case HELP_USING_BAG2: + case HELP_USING_HOME_PC: + case HELP_USING_ITEM_STORAGE: + case HELP_USING_WITHDRAW_ITEM2: + case HELP_USING_DEPOSIT_ITEM2: + case HELP_USING_MAILBOX2: + case HELP_USING_BALL: + case HELP_USING_BAIT: + case HELP_USING_ROCK: + return TRUE; + case HELP_USING_POKEDEX: + case HELP_USING_PROF_OAKS_PC: + case HELP_READING_POKEDEX: + return FlagGet(FLAG_SYS_POKEDEX_GET); + case HELP_USING_TOWN_MAP: + return CheckBagHasItem(ITEM_TOWN_MAP, 1); + case HELP_USING_POKEMON: + case HELP_USING_SUMMARY: + case HELP_USING_ITEM: + case HELP_USING_AN_ITEM: + case HELP_USING_KEYITEM: + case HELP_USING_POKEBALL: + case HELP_USING_POTION: + case HELP_USING_FIGHT: + case HELP_USING_POKEMON2: + case HELP_USING_SUMMARY2: + case HELP_USING_RUN: + case HELP_REGISTER_KEY_ITEM: + return FlagGet(FLAG_SYS_POKEMON_GET); + case HELP_USING_SWITCH: + case HELP_USING_SHIFT: + // Only show if player has caught mon after starter + if (GetKantoPokedexCount(1) > 1) + return TRUE; + return FALSE; + case HELP_USING_TM: + return FlagGet(FLAG_BADGE01_GET); + case HELP_USING_HM: + case HELP_USING_MOVE_OUTSIDE_OF_BATTLE: + return HasGottenAtLeastOneHM(); + case HELP_RIDING_BICYCLE: + return FlagGet(FLAG_GOT_BICYCLE); + case HELP_USING_HALL_OF_FAME: + return FlagGet(FLAG_SYS_GAME_CLEAR); + } + return FALSE; + } + if (gHelpSystemState.topic == TOPIC_TERMS) + { + if (HelpSystem_ShouldShowBasicTerms() == TRUE) + { + // After defeating Brock, all basic terms are added + // This checks to make sure they arent added twice + for (i = 0; sTerms_Basic[i] != HELP_END; i++) { - DecompressAndRenderGlyph(font, curChar, &srcBlit, &destBlit, dest, x, y, width, height); - if (font == 0) - { - x += gGlyphInfo.width; - } - else - { - x += gGlyphInfo.width + ZERO; - } + if (sTerms_Basic[i] == id) + return FALSE; } - break; } + switch (id) + { + case HELP_TERM_MONEY: + case HELP_TERM_ID_NO: + case HELP_TERM_ITEMS: + case HELP_TERM_KEYITEMS: + case HELP_TERM_POKEBALLS: + case HELP_TERM_POKEDEX: + case HELP_TERM_PLAY_TIME: + case HELP_TERM_BADGES: + case HELP_TERM_TEXT_SPEED: + case HELP_TERM_BATTLE_SCENE: + case HELP_TERM_BATTLE_STYLE: + case HELP_TERM_SOUND: + case HELP_TERM_BUTTON_MODE: + case HELP_TERM_FRAME: + case HELP_TERM_CANCEL: + case HELP_TERM_TM: + case HELP_TERM_EVOLUTION: + return TRUE; + case HELP_TERM_HP: + case HELP_TERM_EXP: + case HELP_TERM_ATTACK: + case HELP_TERM_DEFENSE: + case HELP_TERM_SPATK: + case HELP_TERM_SPDEF: + case HELP_TERM_SPEED: + case HELP_TERM_LEVEL: + case HELP_TERM_TYPE: + case HELP_TERM_OT: + case HELP_TERM_ITEM: + case HELP_TERM_ABILITY: + case HELP_TERM_NATURE: + case HELP_TERM_POWER: + case HELP_TERM_ACCURACY: + case HELP_TERM_FNT: + return FlagGet(FLAG_SYS_POKEMON_GET); + case HELP_TERM_HM: + case HELP_TERM_HM_MOVE: + return HasGottenAtLeastOneHM(); + case HELP_TERM_MOVES: + case HELP_TERM_MOVE_TYPE: + case HELP_TERM_PP: + case HELP_TERM_STATUS_PROBLEM: + return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST); + } + return TRUE; + } + if (gHelpSystemState.topic == TOPIC_ABOUT_GAME) + { + switch (id) + { + case HELP_GAME_FUNDAMENTALS_2: + return FlagGet(FLAG_BADGE01_GET); + case HELP_GAME_FUNDAMENTALS_3: + return FlagGet(FLAG_BADGE02_GET); + } + return TRUE; + } + if (gHelpSystemState.topic == TOPIC_TYPE_MATCHUP) + { + return TRUE; } -} -void DecompressAndRenderGlyph(u8 font, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height) -{ - if (font == 0) - DecompressGlyphFont0(glyph, FALSE); - else if (font == 5) - DecompressGlyphFont5(glyph, FALSE); - else - DecompressGlyphFont2(glyph, FALSE); - srcBlit->pixels = gGlyphInfo.pixels; - srcBlit->width = 16; - srcBlit->height = 16; - destBlit->pixels = destBuffer; - destBlit->width = width * 8; - destBlit->height = height * 8; - BlitBitmapRect4Bit(srcBlit, destBlit, 0, 0, x, y, gGlyphInfo.width, gGlyphInfo.height, 0); + return FALSE; } -void HelpSystem_PrintText_Row61(const u8 * str) +static bool8 HasGottenAtLeastOneHM(void) { - GenerateFontHalfRowLookupTable(1, 15, 2); - HelpSystemRenderText(5, gDecompressionBuffer + 0x3D00, str, 6, 2, 7, 2); + if (FlagGet(FLAG_GOT_HM01) == TRUE) + return TRUE; + if (FlagGet(FLAG_GOT_HM02) == TRUE) + return TRUE; + if (FlagGet(FLAG_GOT_HM03) == TRUE) + return TRUE; + if (FlagGet(FLAG_GOT_HM04) == TRUE) + return TRUE; + if (FlagGet(FLAG_GOT_HM05) == TRUE) + return TRUE; + if (FlagGet(FLAG_GOT_HM06) == TRUE) + return TRUE; + if (FlagGet(FLAG_HIDE_FOUR_ISLAND_ICEFALL_CAVE_1F_HM07) == TRUE) + return TRUE; + return FALSE; } -void HelpSystem_PrintTextRightAlign_Row52(const u8 * str) +bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - s32 left = 0x7C - GetStringWidth(0, str, 0); - GenerateFontHalfRowLookupTable(1, 15, 2); - HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2); + switch (helpListMenu->state) + { + case 8: + return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer); + case 9: + return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer); + case 10: + return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer); + case 0: + return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer); + case 1: + return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer); + case 2: + return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer); + case 3: + return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer); + case 4: + return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer); + case 5: + return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer); + case 6: + return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer); + } + return FALSE; } -void HelpSystem_PrintTextAt(const u8 * str, u8 x, u8 y) +bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - GenerateFontHalfRowLookupTable(1, 15, 2); - HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str, x, y, 26, 16); + PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_A_Next); + PrintWelcomeMessageOnPanel1(); + HS_ShowOrHideMainWindowText(1); + HS_ShowOrHideControlsGuideInTopRight(1); + helpListMenu->state = 9; + return TRUE; } -void HelpSystem_PrintTwoStrings(const u8 * str1, const u8 * str2) +bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - CpuFill16(0xEEEE, gDecompressionBuffer + 0x0000, 0x3400); - GenerateFontHalfRowLookupTable(1, 14, 2); - HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str1, 0, 0, 26, 16); - HelpSystemRenderText(2, gDecompressionBuffer + 0x09C0, str2, 0, 0, 26, 13); + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + helpListMenu->state = 10; + } + return TRUE; } -void HelpSystem_PrintText_813C584(const u8 * str) +bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - CpuFill16(0x1111, gDecompressionBuffer + 0x23C0, 0x1040); - GenerateFontHalfRowLookupTable(2, 1, 3); - HelpSystemRenderText(2, gDecompressionBuffer + 0x23C0, str, 2, 6, 26, 5); + gHelpSystemState.scrollMain = 0; + ResetHelpSystemCursor(helpListMenu); + BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer); + helpListMenu->state = 0; + return TRUE; } -void HelpSystem_FillPanel3(void) +bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - CpuFill16(0xFFFF, gDecompressionBuffer + 0x3D00, 0x1C0); + s32 input = HelpSystem_GetMenuInput(); + switch (input) + { + case -6: + case -2: + return FALSE; + case -5: + case -4: + PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer); + break; + case -3: + case -1: + break; + default: + gHelpSystemState.topic = input; + helpListMenu->state = 1; + break; + } + return TRUE; } -void HelpSystem_FillPanel2(void) +bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - CpuFill16(0xFFFF, gDecompressionBuffer + 0x3400, 0x400); + gHelpSystemState.level = 1; + gHelpSystemState.scrollMain = helpListMenu->cursorPos; + ResetHelpSystemCursor(helpListMenu); + BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer); + HS_UpdateMenuScrollArrows(); + HelpSystem_SetInputDelay(2); + helpListMenu->state = 3; + return TRUE; } -void HelpSystem_FillPanel1(void) +bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - CpuFill16(0xFFFF, gDecompressionBuffer + 0x0000, 0x3400); + HS_ShowOrHideScrollArrows(0, 0); + HS_ShowOrHideScrollArrows(1, 0); + gHelpSystemState.level = 0; + BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer); + helpListMenu->state = 0; + return TRUE; } -void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2) +bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - gHelpSystemListMenu.sub = a0->sub; - gHelpSystemListMenu.itemsAbove = a1; - gHelpSystemListMenu.cursorPos = a2; - gHelpSystemListMenu.state = 0; - if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed) - gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems; - HS_ShowOrHideMainWindowText(0); - HelpSystem_FillPanel1(); - PrintListMenuItems(); - PlaceListMenuCursor(); + s32 input = HelpSystem_GetMenuInput(); + switch (input) + { + case -6: + return FALSE; + case -2: + helpListMenu->state = 2; + break; + case -5: + case -4: + case -3: + case -1: + break; + default: + gHelpSystemState.scrollSub = input; + helpListMenu->state = 4; + break; + } + return TRUE; } -void HelpSystem_SetInputDelay(u8 a0) +void HelpSystem_PrintTopicLabel(void) { - sDelayTimer = a0; + HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState.topic], 0, 0); } -s32 HelpSystem_GetMenuInput(void) +bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - if (sDelayTimer != 0) - { - sDelayTimer--; - return -1; - } - else if (JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index; - } - else if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - return -2; - } - else if (JOY_NEW(L_BUTTON | R_BUTTON)) + gHelpSystemState.level = 2; + HS_ShowOrHideMainWindowText(0); + HelpSystem_FillPanel1(); + PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_AorBtoCancel); + HS_SetMainWindowBgBrightness(1); + HS_ShowOrHideHeaderAndFooterLines_Darker(1); + + if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO) { - return -6; + HelpSystem_PrintTwoStrings(sHelpSystemSpecializedQuestionTextPtrs[gHelpSystemState.scrollSub], sHelpSystemSpecializedAnswerTextPtrs[gHelpSystemState.scrollSub]); } - else if (JOY_REPT(DPAD_UP)) + else if (gHelpSystemState.topic == TOPIC_HOW_TO_DO) { - if (!MoveCursor(1, 0)) - PlaySE(SE_SELECT); - return -4; + HelpSystem_PrintTwoStrings(sHelpSystemMenuTopicTextPtrs[gHelpSystemState.scrollSub], sHelpSystemHowToUseMenuTextPtrs[gHelpSystemState.scrollSub]); } - else if (JOY_REPT(DPAD_DOWN)) + else if (gHelpSystemState.topic == TOPIC_TERMS) { - if (!MoveCursor(1, 1)) - PlaySE(SE_SELECT); - return -5; + HelpSystem_PrintTwoStrings(sHelpSystemTermTextPtrs[gHelpSystemState.scrollSub], sHelpSystemTermDefinitionsTextPtrs[gHelpSystemState.scrollSub]); } - else if (JOY_REPT(DPAD_LEFT)) + else if (gHelpSystemState.topic == TOPIC_ABOUT_GAME) { - if (!MoveCursor(7, 0)) - PlaySE(SE_SELECT); - return -4; + HelpSystem_PrintTwoStrings(sHelpSystemGeneralTopicTextPtrs[gHelpSystemState.scrollSub], sHelpSystemGeneralTopicDescriptionTextPtrs[gHelpSystemState.scrollSub]); } - else if (JOY_REPT(DPAD_RIGHT)) + else // TOPIC_TYPE_MATCHUP { - if (!MoveCursor(7, 1)) - PlaySE(SE_SELECT); - return -5; + HelpSystem_PrintTwoStrings(sHelpSystemTypeMatchupTextPtrs[gHelpSystemState.scrollSub], sHelpSystemTypeMatchupDescriptionTextPtrs[gHelpSystemState.scrollSub]); } - else - return -1; + HS_ShowOrHideMainWindowText(1); + HS_ShowOrHideControlsGuideInTopRight(1); + helpListMenu->state = 6; + return TRUE; } -void HS_UpdateMenuScrollArrows(void) +bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - u8 topItemIdx = gHelpSystemListMenu.sub.totalItems - 7; - if (gHelpSystemListMenu.sub.totalItems > 7) - { - s32 cursorPos = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos; - HS_ShowOrHideScrollArrows(0, 0); // Hide both - if (cursorPos == 0) - HS_ShowOrHideScrollArrows(1, 1); // Show bottom - else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0) - HS_ShowOrHideScrollArrows(1, 1); // Show bottom - else if (gHelpSystemListMenu.itemsAbove == topItemIdx) - HS_ShowOrHideScrollArrows(0, 1); // Show top - else if (gHelpSystemListMenu.itemsAbove != 0) - { - // Show both - HS_ShowOrHideScrollArrows(0, 1); - HS_ShowOrHideScrollArrows(1, 1); - } - } + gHelpSystemState.level = 1; + BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer); + HS_UpdateMenuScrollArrows(); + HelpSystem_SetInputDelay(2); + helpListMenu->state = 3; + return TRUE; } -void PrintListMenuItems(void) +bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) { - u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1; - s32 i; - s32 r5 = gHelpSystemListMenu.itemsAbove; - - for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++) + if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON)) { - u8 x = gHelpSystemListMenu.sub.left + 8; - u8 y = gHelpSystemListMenu.sub.top + glyphHeight * i; - HelpSystem_PrintTextAt(gHelpSystemListMenu.sub.items[r5].label, x, y); - r5++; + PlaySE(SE_SELECT); + helpListMenu->state = 5; + return TRUE; } + if (JOY_NEW(L_BUTTON | R_BUTTON)) + return FALSE; + return TRUE; } -void PlaceListMenuCursor(void) +static void PrintWelcomeMessageOnPanel1(void) { - u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1; - u8 x = gHelpSystemListMenu.sub.left; - u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos; - HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y); + HelpSystem_FillPanel1(); + HelpSystem_PrintTextAt(Help_Text_Greetings, 0, 0); } -void HS_RemoveSelectionCursorAt(u8 i) +static void PrintTextOnPanel2Row52RightAlign(const u8 * str) { - u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1; - u8 x = gHelpSystemListMenu.sub.left; - u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight; - HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y); + HelpSystem_FillPanel2(); + HelpSystem_PrintTextRightAlign_Row52(str); } -u8 TryMoveCursor1(u8 dirn) +u8 GetHelpSystemMenuLevel(void) { - u16 midPoint; - if (dirn == 0) - { - if (gHelpSystemListMenu.sub.maxShowed == 1) - midPoint = 0; - else - midPoint = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1; - if (gHelpSystemListMenu.itemsAbove == 0) - { - if (gHelpSystemListMenu.cursorPos != 0) - { - gHelpSystemListMenu.cursorPos--; - return 1; - } - else - return 0; - } - if (gHelpSystemListMenu.cursorPos > midPoint) - { - gHelpSystemListMenu.cursorPos--; - return 1; - } - else - { - gHelpSystemListMenu.itemsAbove--; - return 2; - } - } - else - { - if (gHelpSystemListMenu.sub.maxShowed == 1) - midPoint = 0; - else - midPoint = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1); - if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed) - { - if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1) - { - gHelpSystemListMenu.cursorPos++; - return 1; - } - else - return 0; - } - else if (gHelpSystemListMenu.cursorPos < midPoint) - { - gHelpSystemListMenu.cursorPos++; - return 1; - } - else - { - gHelpSystemListMenu.itemsAbove++; - return 2; - } - } + return gHelpSystemState.level; } -bool8 MoveCursor(u8 by, u8 dirn) +static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu) { - u8 r7 = gHelpSystemListMenu.cursorPos; - u8 flags = 0; - s32 i; - for (i = 0; i < by; i++) - flags |= TryMoveCursor1(dirn); + helpListMenu->itemsAbove = 0; + helpListMenu->cursorPos = 0; +} - switch (flags) - { - case 0: - default: - // neither changed - return TRUE; - case 1: - // changed cursorPos only - HS_RemoveSelectionCursorAt(r7); - PlaceListMenuCursor(); - CommitTilemap(); - break; - case 2: - case 3: - // changed itemsAbove - if (GetHelpSystemMenuLevel() == 1) - { - HelpSystem_SetInputDelay(2); - HelpSystem_FillPanel1(); - PrintListMenuItems(); - PlaceListMenuCursor(); - HelpSystem_PrintTopicLabel(); - HS_UpdateMenuScrollArrows(); - } - else - { - HS_ShowOrHideMainWindowText(0); - HelpSystem_FillPanel1(); - PrintListMenuItems(); - PlaceListMenuCursor(); - HS_ShowOrHideMainWindowText(1); - } - CommitTilemap(); - break; - } - return FALSE; +static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) +{ + s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index; + if (index == -2) + HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[5]); + else + HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[index]); + HS_ShowOrHideToplevelTooltipWindow(1); } diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c deleted file mode 100644 index a8be66b66..000000000 --- a/src/help_system_812B1E0.c +++ /dev/null @@ -1,2480 +0,0 @@ -#include "global.h" -#include "gflib.h" -#include "event_data.h" -#include "event_scripts.h" -#include "field_player_avatar.h" -#include "help_system.h" -#include "item.h" -#include "link.h" -#include "overworld.h" -#include "pokedex.h" -#include "quest_log.h" -#include "save.h" -#include "save_location.h" -#include "strings.h" -#include "constants/items.h" -#include "constants/maps.h" -#include "constants/songs.h" - -#define HELP_NONE 0 -#define HELP_END 0xFF - -// Help Main Topics -enum HelpSystemTopics -{ - TOPIC_WHAT_TO_DO, - TOPIC_HOW_TO_DO, - TOPIC_TERMS, - TOPIC_ABOUT_GAME, - TOPIC_TYPE_MATCHUP, - TOPIC_EXIT, - TOPIC_COUNT -}; - -static EWRAM_DATA u16 sHelpSystemContextId = 0; -static EWRAM_DATA u8 sSeenHelpSystemIntro = 0; - -struct HelpSystemState -{ - // 0: Top level - // 1: Submenu - // 2: Help content - u8 level; - - // enum HelpSystemTopics - u8 topic; - - // Where the player's cursor was at top level - u8 scrollMain; - - // Where the player's cursor was at submenu - u8 scrollSub; -}; - -struct HelpSystemState gHelpSystemState; -u16 gHelpContextIdBackup; - -static bool32 IsCurrentMapInArray(const u16 * mapIdxs); -static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); -static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); -static bool8 HelpSystem_ShouldShowBasicTerms(void); -static bool8 IsHelpSystemSubmenuEnabled(u8); -static bool8 HasGottenAtLeastOneHM(void); - -static void PrintWelcomeMessageOnPanel1(void); -static void PrintTextOnPanel2Row52RightAlign(const u8 *); -static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0); -static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); - -static const u8 *const sHelpSystemTopicPtrs[TOPIC_COUNT] = { - [TOPIC_WHAT_TO_DO] = Help_Text_WhatShouldIDo, - [TOPIC_HOW_TO_DO] = Help_Text_HowDoIDoThis, - [TOPIC_TERMS] = Help_Text_WhatDoesThisTermMean, - [TOPIC_ABOUT_GAME] = Help_Text_AboutThisGame, - [TOPIC_TYPE_MATCHUP] = Help_Text_TypeMatchupList, - [TOPIC_EXIT] = Help_Text_Exit -}; - -static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[TOPIC_COUNT] = { - [TOPIC_WHAT_TO_DO] = Help_Text_DescWhatShouldIDo, - [TOPIC_HOW_TO_DO] = Help_Text_DescHowDoIDoThis, - [TOPIC_TERMS] = Help_Text_DescWhatDoesThisTermMean, - [TOPIC_ABOUT_GAME] = Help_Text_DescAboutThisGame, - [TOPIC_TYPE_MATCHUP] = Help_Text_DescTypeMatchupList, - [TOPIC_EXIT] = Help_Text_DescExit -}; - -// Submenu IDs for TOPIC_WHAT_TO_DO -enum -{ - HELP_PLAYING_FOR_FIRST_TIME = 1, - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_CANT_GET_OUT_OF_ROOM, - HELP_CANT_FIND_PERSON_I_WANT, - HELP_TALKED_TO_EVERYONE_NOW_WHAT, - HELP_SOMEONE_BLOCKING_MY_WAY, - HELP_I_CANT_GO_ON, - HELP_OUT_OF_THINGS_TO_DO, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, - HELP_HOW_ARE_CAVES_DIFFERENT, - HELP_HOW_DO_I_PROGRESS, - HELP_WHEN_CAN_I_USE_ITEM, - HELP_WHATS_A_BATTLE, - HELP_HOW_DO_I_PREPARE_FOR_BATTLE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_MY_MONS_ARE_HURT, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_CANT_CATCH_MONS, - HELP_RAN_OUT_OF_POTIONS, - HELP_CAN_I_BUY_POKEBALLS, - HELP_WHATS_A_TRAINER, - HELP_HOW_DO_I_WIN_AGAINST_TRAINER, - HELP_WHERE_DO_MONS_APPEAR, - HELP_WHAT_ARE_MOVES, - HELP_WHAT_ARE_HIDDEN_MOVES, - HELP_WHAT_MOVES_SHOULD_I_USE, - HELP_WANT_TO_ADD_MORE_MOVES, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_WHAT_DO_I_DO_IN_CAVE, - HELP_NOTHING_I_WANT_TO_KNOW, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WANT_TO_END_GAME, - HELP_WHATS_A_MON, - HELP_WHAT_IS_THAT_PERSON_LIKE, - HELP_WHAT_DOES_HIDDEN_MOVE_DO, - HELP_WHAT_DO_I_DO_IN_SAFARI, - HELP_WHAT_ARE_SAFARI_RULES, - HELP_WANT_TO_END_SAFARI, - HELP_WHAT_IS_A_GYM, -}; - -static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_PlayingForFirstTime, - [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_WhatShouldIBeDoing, - [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_CantGetOutOfRoom, - [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_CantFindPersonIWant, - [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_TalkedToEveryoneNowWhat, - [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_SomeoneBlockingMyWay, - [HELP_I_CANT_GO_ON] = Help_Text_ICantGoOn, - [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_OutOfThingsToDo, - [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_WhatHappenedToItemIGot, - [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_WhatAreMyAdventureBasics, - [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_HowAreRoadsForestsDifferent, - [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_HowAreCavesDifferent, - [HELP_HOW_DO_I_PROGRESS] = Help_Text_HowDoIProgress, - [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_WhenCanIUseItem, - [HELP_WHATS_A_BATTLE] = Help_Text_WhatsABattle, - [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_HowDoIPrepareForBattle, - [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_WhatIsAMonsVitality, - [HELP_MY_MONS_ARE_HURT] = Help_Text_MyMonsAreHurt, - [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_WhatIsStatusProblem, - [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_WhatHappensIfAllMyMonsFaint, - [HELP_CANT_CATCH_MONS] = Help_Text_CantCatchMons, - [HELP_RAN_OUT_OF_POTIONS] = Help_Text_RanOutOfPotions, - [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_CanIBuyPokeBalls, - [HELP_WHATS_A_TRAINER] = Help_Text_WhatsATrainer, - [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_HowDoIWinAgainstTrainer, - [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_WhereDoMonsAppear, - [HELP_WHAT_ARE_MOVES] = Help_Text_WhatAreMoves, - [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_WhatAreHiddenMoves, - [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_WhatMovesShouldIUse, - [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_WantToAddMoreMoves, - [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_WantToMakeMonStronger, - [HELP_FOE_MONS_TOO_STRONG] = Help_Text_FoeMonsTooStrong, - [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_WhatDoIDoInCave, - [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_NothingIWantToKnow, - [HELP_WHATS_POKEMON_CENTER] = Help_Text_WhatsPokemonCenter, - [HELP_WHATS_POKEMON_MART] = Help_Text_WhatsPokemonMart, - [HELP_WANT_TO_END_GAME] = Help_Text_WantToEndGame, - [HELP_WHATS_A_MON] = Help_Text_WhatsAMon, - [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_WhatIsThatPersonLike, - [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_WhatDoesHiddenMoveDo, - [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_WhatDoIDoInSafari, - [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_WhatAreSafariRules, - [HELP_WANT_TO_END_SAFARI] = Help_Text_WantToEndSafari, - [HELP_WHAT_IS_A_GYM] = Help_Text_WhatIsAGym -}; - -static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_AnswerPlayingForFirstTime, - [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_AnswerWhatShouldIBeDoing, - [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_AnswerCantGetOutOfRoom, - [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_AnswerCantFindPersonIWant, - [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_AnswerTalkedToEveryoneNowWhat, - [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_AnswerSomeoneBlockingMyWay, - [HELP_I_CANT_GO_ON] = Help_Text_AnswerICantGoOn, - [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_AnswerOutOfThingsToDo, - [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_AnswerWhatHappenedToItemIGot, - [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_AnswerWhatAreMyAdventureBasics, - [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_AnswerHowAreRoadsForestsDifferent, - [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_AnswerHowAreCavesDifferent, - [HELP_HOW_DO_I_PROGRESS] = Help_Text_AnswerHowDoIProgress, - [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_AnswerWhenCanIUseItem, - [HELP_WHATS_A_BATTLE] = Help_Text_AnswerWhatsABattle, - [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_AnswerHowDoIPrepareForBattle, - [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_AnswerWhatIsAMonsVitality, - [HELP_MY_MONS_ARE_HURT] = Help_Text_AnswerMyMonsAreHurt, - [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_AnswerWhatIsStatusProblem, - [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_AnswerWhatHappensIfAllMyMonsFaint, - [HELP_CANT_CATCH_MONS] = Help_Text_AnswerCantCatchMons, - [HELP_RAN_OUT_OF_POTIONS] = Help_Text_AnswerRanOutOfPotions, - [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_AnswerCanIBuyPokeBalls, - [HELP_WHATS_A_TRAINER] = Help_Text_AnswerWhatsATrainer, - [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_AnswerHowDoIWinAgainstTrainer, - [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_AnswerWhereDoMonsAppear, - [HELP_WHAT_ARE_MOVES] = Help_Text_AnswerWhatAreMoves, - [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_AnswerWhatAreHiddenMoves, - [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_AnswerWhatMovesShouldIUse, - [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_AnswerWantToAddMoreMoves, - [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_AnswerWantToMakeMonStronger, - [HELP_FOE_MONS_TOO_STRONG] = Help_Text_AnswerFoeMonsTooStrong, - [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_AnswerWhatDoIDoInCave, - [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_AnswerNothingIWantToKnow, - [HELP_WHATS_POKEMON_CENTER] = Help_Text_AnswerWhatsPokemonCenter, - [HELP_WHATS_POKEMON_MART] = Help_Text_AnswerWhatsPokemonMart, - [HELP_WANT_TO_END_GAME] = Help_Text_AnswerWantToEndGame, - [HELP_WHATS_A_MON] = Help_Text_AnswerWhatsAMon, - [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_AnswerWhatIsThatPersonLike, - [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_AnswerWhatDoesHiddenMoveDo, - [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_AnswerWhatDoIDoInSafari, - [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_AnswerWhatAreSafariRules, - [HELP_WANT_TO_END_SAFARI] = Help_Text_AnswerWantToEndSafari, - [HELP_WHAT_IS_A_GYM] = Help_Text_AnswerWhatIsAGym -}; - -// Submenu IDs for TOPIC_HOW_TO_DO -enum -{ - HELP_USING_POKEDEX = 1, - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_USING_POKEBALL, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_RIDING_BICYCLE, - HELP_ENTERING_NAME, - HELP_USING_PC, - HELP_USING_BILLS_PC, - HELP_USING_WITHDRAW, - HELP_USING_DEPOSIT, - HELP_USING_MOVE, - HELP_MOVING_ITEMS, - HELP_USING_PLAYERS_PC, - HELP_USING_WITHDRAW_ITEM, - HELP_USING_DEPOSIT_ITEM, - HELP_USING_MAILBOX, - HELP_USING_PROF_OAKS_PC, - HELP_OPENING_MENU, - HELP_USING_FIGHT, - HELP_USING_POKEMON2, - HELP_USING_SHIFT, - HELP_USING_SUMMARY2, - HELP_USING_BAG2, - HELP_READING_POKEDEX, - HELP_USING_HOME_PC, - HELP_USING_ITEM_STORAGE, - HELP_USING_WITHDRAW_ITEM2, - HELP_USING_DEPOSIT_ITEM2, - HELP_USING_MAILBOX2, - HELP_USING_RUN, - HELP_REGISTER_KEY_ITEM, - HELP_USING_BALL, - HELP_USING_BAIT, - HELP_USING_ROCK, - HELP_USING_HALL_OF_FAME, -}; - -static const u8 *const sHelpSystemMenuTopicTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_USING_POKEDEX] = Help_Text_UsingPokedex, - [HELP_USING_POKEMON] = Help_Text_UsingPokemon, - [HELP_USING_SUMMARY] = Help_Text_UsingSummary, - [HELP_USING_SWITCH] = Help_Text_UsingSwitch, - [HELP_USING_ITEM] = Help_Text_UsingItem, - [HELP_USING_BAG] = Help_Text_UsingBag, - [HELP_USING_AN_ITEM] = Help_Text_UsingAnItem, - [HELP_USING_KEYITEM] = Help_Text_UsingKeyItem, - [HELP_USING_POKEBALL] = Help_Text_UsingPokeBall, - [HELP_USING_PLAYER] = Help_Text_UsingPlayer, - [HELP_USING_SAVE] = Help_Text_UsingSave, - [HELP_USING_OPTION] = Help_Text_UsingOption, - [HELP_USING_POTION] = Help_Text_UsingPotion, - [HELP_USING_TOWN_MAP] = Help_Text_UsingTownMap, - [HELP_USING_TM] = Help_Text_UsingTM, - [HELP_USING_HM] = Help_Text_UsingHM, - [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_UsingMoveOutsideOfBattle, - [HELP_RIDING_BICYCLE] = Help_Text_RidingBicycle, - [HELP_ENTERING_NAME] = Help_Text_EnteringName, - [HELP_USING_PC] = Help_Text_UsingPC, - [HELP_USING_BILLS_PC] = Help_Text_UsingBillsPC, - [HELP_USING_WITHDRAW] = Help_Text_UsingWithdraw, - [HELP_USING_DEPOSIT] = Help_Text_UsingDeposit, - [HELP_USING_MOVE] = Help_Text_UsingMove, - [HELP_MOVING_ITEMS] = Help_Text_MovingItems, - [HELP_USING_PLAYERS_PC] = Help_Text_UsingPlayersPC, - [HELP_USING_WITHDRAW_ITEM] = Help_Text_UsingWithdrawItem, - [HELP_USING_DEPOSIT_ITEM] = Help_Text_UsingDepositItem, - [HELP_USING_MAILBOX] = Help_Text_UsingMailbox, - [HELP_USING_PROF_OAKS_PC] = Help_Text_UsingProfOaksPC, - [HELP_OPENING_MENU] = Help_Text_OpeningMenu, - [HELP_USING_FIGHT] = Help_Text_UsingFight, - [HELP_USING_POKEMON2] = Help_Text_UsingPokemon2, - [HELP_USING_SHIFT] = Help_Text_UsingShift, - [HELP_USING_SUMMARY2] = Help_Text_UsingSummary2, - [HELP_USING_BAG2] = Help_Text_UsingBag2, - [HELP_READING_POKEDEX] = Help_Text_ReadingPokedex, - [HELP_USING_HOME_PC] = Help_Text_UsingHomePC, - [HELP_USING_ITEM_STORAGE] = Help_Text_UsingItemStorage, - [HELP_USING_WITHDRAW_ITEM2] = Help_Text_UsingWithdrawItem2, - [HELP_USING_DEPOSIT_ITEM2] = Help_Text_UsingDepositItem2, - [HELP_USING_MAILBOX2] = Help_Text_UsingMailbox2, - [HELP_USING_RUN] = Help_Text_UsingRun, - [HELP_REGISTER_KEY_ITEM] = Help_Text_RegisterKeyItem, - [HELP_USING_BALL] = Help_Text_UsingBall, - [HELP_USING_BAIT] = Help_Text_UsingBait, - [HELP_USING_ROCK] = Help_Text_UsingRock, - [HELP_USING_HALL_OF_FAME] = Help_Text_UsingHallOfFame -}; - -static const u8 *const sHelpSystemHowToUseMenuTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_USING_POKEDEX] = Help_Text_HowToUsePokedex, - [HELP_USING_POKEMON] = Help_Text_HowToUsePokemon, - [HELP_USING_SUMMARY] = Help_Text_HowToUseSummary, - [HELP_USING_SWITCH] = Help_Text_HowToUseSwitch, - [HELP_USING_ITEM] = Help_Text_HowToUseItem, - [HELP_USING_BAG] = Help_Text_HowToUseBag, - [HELP_USING_AN_ITEM] = Help_Text_HowToUseAnItem, - [HELP_USING_KEYITEM] = Help_Text_HowToUseKeyItem, - [HELP_USING_POKEBALL] = Help_Text_HowToUsePokeBall, - [HELP_USING_PLAYER] = Help_Text_HowToUsePlayer, - [HELP_USING_SAVE] = Help_Text_HowToUseSave, - [HELP_USING_OPTION] = Help_Text_HowToUseOption, - [HELP_USING_POTION] = Help_Text_HowToUsePotion, - [HELP_USING_TOWN_MAP] = Help_Text_HowToUseTownMap, - [HELP_USING_TM] = Help_Text_HowToUseTM, - [HELP_USING_HM] = Help_Text_HowToUseHM, - [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_HowToUseMoveOutsideOfBattle, - [HELP_RIDING_BICYCLE] = Help_Text_HowToRideBicycle, - [HELP_ENTERING_NAME] = Help_Text_HowToEnterName, - [HELP_USING_PC] = Help_Text_HowToUsePC, - [HELP_USING_BILLS_PC] = Help_Text_HowToUseBillsPC, - [HELP_USING_WITHDRAW] = Help_Text_HowToUseWithdraw, - [HELP_USING_DEPOSIT] = Help_Text_HowToUseDeposit, - [HELP_USING_MOVE] = Help_Text_HowToUseMove, - [HELP_MOVING_ITEMS] = Help_Text_HowToMoveItems, - [HELP_USING_PLAYERS_PC] = Help_Text_HowToUsePlayersPC, - [HELP_USING_WITHDRAW_ITEM] = Help_Text_HowToUseWithdrawItem, - [HELP_USING_DEPOSIT_ITEM] = Help_Text_HowToUseDepositItem, - [HELP_USING_MAILBOX] = Help_Text_HowToUseMailbox, - [HELP_USING_PROF_OAKS_PC] = Help_Text_HowToUseProfOaksPC, - [HELP_OPENING_MENU] = Help_Text_HowToOpenMenu, - [HELP_USING_FIGHT] = Help_Text_HowToUseFight, - [HELP_USING_POKEMON2] = Help_Text_HowToUsePokemon2, - [HELP_USING_SHIFT] = Help_Text_HowToUseShift, - [HELP_USING_SUMMARY2] = Help_Text_HowToUseSummary2, - [HELP_USING_BAG2] = Help_Text_HowToUseBag2, - [HELP_READING_POKEDEX] = Help_Text_HowToReadPokedex, - [HELP_USING_HOME_PC] = Help_Text_HowToUseHomePC, - [HELP_USING_ITEM_STORAGE] = Help_Text_HowToUseItemStorage, - [HELP_USING_WITHDRAW_ITEM2] = Help_Text_HowToUseWithdrawItem2, - [HELP_USING_DEPOSIT_ITEM2] = Help_Text_HowToUseDepositItem2, - [HELP_USING_MAILBOX2] = Help_Text_HowToUseMailbox2, - [HELP_USING_RUN] = Help_Text_HowToUseRun, - [HELP_REGISTER_KEY_ITEM] = Help_Text_HowToRegisterKeyItem, - [HELP_USING_BALL] = Help_Text_HowToUseBall, - [HELP_USING_BAIT] = Help_Text_HowToUseBait, - [HELP_USING_ROCK] = Help_Text_HowToUseRock, - [HELP_USING_HALL_OF_FAME] = Help_Text_HowToUseHallOfFame -}; - -// Submenu IDs for TOPIC_TERMS -enum -{ - HELP_TERM_HP = 1, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_LEVEL, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ITEM, - HELP_TERM_ABILITY, - HELP_TERM_MONEY, - HELP_TERM_MOVE_TYPE, - HELP_TERM_NATURE, - HELP_TERM_ID_NO, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_TERM_FNT, - HELP_TERM_ITEMS, - HELP_TERM_KEYITEMS, - HELP_TERM_POKEBALLS, - HELP_TERM_POKEDEX, - HELP_TERM_PLAY_TIME, - HELP_TERM_BADGES, - HELP_TERM_TEXT_SPEED, - HELP_TERM_BATTLE_SCENE, - HELP_TERM_BATTLE_STYLE, - HELP_TERM_SOUND, - HELP_TERM_BUTTON_MODE, - HELP_TERM_FRAME, - HELP_TERM_CANCEL, - HELP_TERM_TM, - HELP_TERM_HM, - HELP_TERM_HM_MOVE, - HELP_TERM_EVOLUTION, - HELP_TERM_STATUS_PROBLEM, - HELP_TERM_POKEMON, - HELP_TERM_ID_NO2, - HELP_TERM_MONEY2, - HELP_TERM_BADGES2, -}; - -static const u8 *const sHelpSystemTermTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_TERM_HP] = Help_Text_HP, - [HELP_TERM_EXP] = Help_Text_EXP, - [HELP_TERM_MOVES] = Help_Text_Moves, - [HELP_TERM_ATTACK] = Help_Text_Attack, - [HELP_TERM_DEFENSE] = Help_Text_Defense, - [HELP_TERM_SPATK] = Help_Text_SpAtk, - [HELP_TERM_SPDEF] = Help_Text_SpDef, - [HELP_TERM_SPEED] = Help_Text_Speed, - [HELP_TERM_LEVEL] = Help_Text_Level, - [HELP_TERM_TYPE] = Help_Text_Type, - [HELP_TERM_OT] = Help_Text_OT, - [HELP_TERM_ITEM] = Help_Text_Item, - [HELP_TERM_ABILITY] = Help_Text_Ability, - [HELP_TERM_MONEY] = Help_Text_Money, - [HELP_TERM_MOVE_TYPE] = Help_Text_MoveType, - [HELP_TERM_NATURE] = Help_Text_Nature, - [HELP_TERM_ID_NO] = Help_Text_IDNo, - [HELP_TERM_PP] = Help_Text_PP, - [HELP_TERM_POWER] = Help_Text_Power, - [HELP_TERM_ACCURACY] = Help_Text_Accuracy, - [HELP_TERM_FNT] = Help_Text_FNT, - [HELP_TERM_ITEMS] = Help_Text_Items, - [HELP_TERM_KEYITEMS] = Help_Text_KeyItems, - [HELP_TERM_POKEBALLS] = Help_Text_PokeBalls, - [HELP_TERM_POKEDEX] = Help_Text_Pokedex, - [HELP_TERM_PLAY_TIME] = Help_Text_PlayTime, - [HELP_TERM_BADGES] = Help_Text_Badges, - [HELP_TERM_TEXT_SPEED] = Help_Text_TextSpeed, - [HELP_TERM_BATTLE_SCENE] = Help_Text_BattleScene, - [HELP_TERM_BATTLE_STYLE] = Help_Text_BattleStyle, - [HELP_TERM_SOUND] = Help_Text_Sound, - [HELP_TERM_BUTTON_MODE] = Help_Text_ButtonMode, - [HELP_TERM_FRAME] = Help_Text_Frame, - [HELP_TERM_CANCEL] = Help_Text_Cancel2, - [HELP_TERM_TM] = Help_Text_TM, - [HELP_TERM_HM] = Help_Text_HM, - [HELP_TERM_HM_MOVE] = Help_Text_HMMove, - [HELP_TERM_EVOLUTION] = Help_Text_Evolution, - [HELP_TERM_STATUS_PROBLEM] = Help_Text_StatusProblem, - [HELP_TERM_POKEMON] = Help_Text_Pokemon, - [HELP_TERM_ID_NO2] = Help_Text_IDNo2, - [HELP_TERM_MONEY2] = Help_Text_Money2, - [HELP_TERM_BADGES2] = Help_Text_Badges2 -}; - -static const u8 *const sHelpSystemTermDefinitionsTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_TERM_HP] = Help_Text_DefineHP, - [HELP_TERM_EXP] = Help_Text_DefineEXP, - [HELP_TERM_MOVES] = Help_Text_DefineMoves, - [HELP_TERM_ATTACK] = Help_Text_DefineAttack, - [HELP_TERM_DEFENSE] = Help_Text_DefineDefense, - [HELP_TERM_SPATK] = Help_Text_DefineSpAtk, - [HELP_TERM_SPDEF] = Help_Text_DefineSpDef, - [HELP_TERM_SPEED] = Help_Text_DefineSpeed, - [HELP_TERM_LEVEL] = Help_Text_DefineLevel, - [HELP_TERM_TYPE] = Help_Text_DefineType, - [HELP_TERM_OT] = Help_Text_DefineOT, - [HELP_TERM_ITEM] = Help_Text_DefineItem, - [HELP_TERM_ABILITY] = Help_Text_DefineAbility, - [HELP_TERM_MONEY] = Help_Text_DefineMoney, - [HELP_TERM_MOVE_TYPE] = Help_Text_DefineMoveType, - [HELP_TERM_NATURE] = Help_Text_DefineNature, - [HELP_TERM_ID_NO] = Help_Text_DefineIDNo, - [HELP_TERM_PP] = Help_Text_DefinePP, - [HELP_TERM_POWER] = Help_Text_DefinePower, - [HELP_TERM_ACCURACY] = Help_Text_DefineAccuracy, - [HELP_TERM_FNT] = Help_Text_DefineFNT, - [HELP_TERM_ITEMS] = Help_Text_DefineItems, - [HELP_TERM_KEYITEMS] = Help_Text_DefineKeyItems, - [HELP_TERM_POKEBALLS] = Help_Text_DefinePokeBalls, - [HELP_TERM_POKEDEX] = Help_Text_DefinePokedex, - [HELP_TERM_PLAY_TIME] = Help_Text_DefinePlayTime, - [HELP_TERM_BADGES] = Help_Text_DefineBadges, - [HELP_TERM_TEXT_SPEED] = Help_Text_DefineTextSpeed, - [HELP_TERM_BATTLE_SCENE] = Help_Text_DefineBattleScene, - [HELP_TERM_BATTLE_STYLE] = Help_Text_DefineBattleStyle, - [HELP_TERM_SOUND] = Help_Text_DefineSound, - [HELP_TERM_BUTTON_MODE] = Help_Text_DefineButtonMode, - [HELP_TERM_FRAME] = Help_Text_DefineFrame, - [HELP_TERM_CANCEL] = Help_Text_DefineCancel2, - [HELP_TERM_TM] = Help_Text_DefineTM, - [HELP_TERM_HM] = Help_Text_DefineHM, - [HELP_TERM_HM_MOVE] = Help_Text_DefineHMMove, - [HELP_TERM_EVOLUTION] = Help_Text_DefineEvolution, - [HELP_TERM_STATUS_PROBLEM] = Help_Text_DefineStatusProblem, - [HELP_TERM_POKEMON] = Help_Text_DefinePokemon, - [HELP_TERM_ID_NO2] = Help_Text_DefineIDNo2, - [HELP_TERM_MONEY2] = Help_Text_DefineMoney2, - [HELP_TERM_BADGES2] = Help_Text_DefineBadges2 -}; - -// Submenu IDs for TOPIC_ABOUT_GAME -enum -{ - HELP_THE_HELP_SYSTEM = 1, - HELP_THE_GAME, - HELP_WIRELESS_ADAPTER, - HELP_GAME_FUNDAMENTALS_1, - HELP_GAME_FUNDAMENTALS_2, - HELP_GAME_FUNDAMENTALS_3, - HELP_WHAT_ARE_POKEMON, -}; - -static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_THE_HELP_SYSTEM] = Help_Text_TheHelpSystem, - [HELP_THE_GAME] = Help_Text_TheGame, - [HELP_WIRELESS_ADAPTER] = Help_Text_WirelessAdapter, - [HELP_GAME_FUNDAMENTALS_1] = Help_Text_GameFundamentals1, - [HELP_GAME_FUNDAMENTALS_2] = Help_Text_GameFundamentals2, - [HELP_GAME_FUNDAMENTALS_3] = Help_Text_GameFundamentals3, - [HELP_WHAT_ARE_POKEMON] = Help_Text_WhatArePokemon -}; - -static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = { - [HELP_NONE] = NULL, - [HELP_THE_HELP_SYSTEM] = Help_Text_DescTheHelpSystem, - [HELP_THE_GAME] = Help_Text_DescTheGame, - [HELP_WIRELESS_ADAPTER] = Help_Text_DescWirelessAdapter, - [HELP_GAME_FUNDAMENTALS_1] = Help_Text_DescGameFundamentals1, - [HELP_GAME_FUNDAMENTALS_2] = Help_Text_DescGameFundamentals2, - [HELP_GAME_FUNDAMENTALS_3] = Help_Text_DescGameFundamentals3, - [HELP_WHAT_ARE_POKEMON] = Help_Text_DescWhatArePokemon -}; - -// An enum for the type matchups isn't necessary, when used they're always used in their entirety -// Macro below is used to reference the entire group at once -#define HELP_TYPE_MATCHUPS \ - 1, \ - 2, 3, \ - 4, 5, \ - 6, 7, \ - 8, 9, \ - 10, 11, \ - 12, 13, \ - 14, 15, \ - 16, 17, \ - 18, 19, \ - 20, 21, \ - 22, 23, \ - 24, 25, \ - 26, 27, \ - 28, 29, \ - 30, 31, \ - 32, 33, \ - 34, 35 \ - -static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = { - [HELP_NONE] = NULL, - [1] = Help_Text_UsingTypeMatchupList, - [2] = Help_Text_OwnMoveDark, - [3] = Help_Text_OwnPokemonDark, - [4] = Help_Text_OwnMoveRock, - [5] = Help_Text_OwnPokemonRock, - [6] = Help_Text_OwnMovePsychic, - [7] = Help_Text_OwnPokemonPsychic, - [8] = Help_Text_OwnMoveFighting, - [9] = Help_Text_OwnPokemonFighting, - [10] = Help_Text_OwnMoveGrass, - [11] = Help_Text_OwnPokemonGrass, - [12] = Help_Text_OwnMoveGhost, - [13] = Help_Text_OwnPokemonGhost, - [14] = Help_Text_OwnMoveIce, - [15] = Help_Text_OwnPokemonIce, - [16] = Help_Text_OwnMoveGround, - [17] = Help_Text_OwnPokemonGround, - [18] = Help_Text_OwnMoveElectric, - [19] = Help_Text_OwnPokemonElectric, - [20] = Help_Text_OwnMovePoison, - [21] = Help_Text_OwnPokemonPoison, - [22] = Help_Text_OwnMoveDragon, - [23] = Help_Text_OwnPokemonDragon, - [24] = Help_Text_OwnMoveNormal, - [25] = Help_Text_OwnPokemonNormal, - [26] = Help_Text_OwnMoveSteel, - [27] = Help_Text_OwnPokemonSteel, - [28] = Help_Text_OwnMoveFlying, - [29] = Help_Text_OwnPokemonFlying, - [30] = Help_Text_OwnMoveFire, - [31] = Help_Text_OwnPokemonFire, - [32] = Help_Text_OwnMoveWater, - [33] = Help_Text_OwnPokemonWater, - [34] = Help_Text_OwnMoveBug, - [35] = Help_Text_OwnPokemonBug -}; - -static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = { - [HELP_NONE] = NULL, - [1] = Help_Text_HowToUseTypeMatchupList, - [2] = Help_Text_TypeMatchupOwnMoveDark, - [3] = Help_Text_TypeMatchupOwnPokemonDark, - [4] = Help_Text_TypeMatchupOwnMoveRock, - [5] = Help_Text_TypeMatchupOwnPokemonRock, - [6] = Help_Text_TypeMatchupOwnMovePsychic, - [7] = Help_Text_TypeMatchupOwnPokemonPsychic, - [8] = Help_Text_TypeMatchupOwnMoveFighting, - [9] = Help_Text_TypeMatchupOwnPokemonFighting, - [10] = Help_Text_TypeMatchupOwnMoveGrass, - [11] = Help_Text_TypeMatchupOwnPokemonGrass, - [12] = Help_Text_TypeMatchupOwnMoveGhost, - [13] = Help_Text_TypeMatchupOwnPokemonGhost, - [14] = Help_Text_TypeMatchupOwnMoveIce, - [15] = Help_Text_TypeMatchupOwnPokemonIce, - [16] = Help_Text_TypeMatchupOwnMoveGround, - [17] = Help_Text_TypeMatchupOwnPokemonGround, - [18] = Help_Text_TypeMatchupOwnMoveElectric, - [19] = Help_Text_TypeMatchupOwnPokemonElectric, - [20] = Help_Text_TypeMatchupOwnMovePoison, - [21] = Help_Text_TypeMatchupOwnPokemonPoison, - [22] = Help_Text_TypeMatchupOwnMoveDragon, - [23] = Help_Text_TypeMatchupOwnPokemonDragon, - [24] = Help_Text_TypeMatchupOwnMoveNormal, - [25] = Help_Text_TypeMatchupOwnPokemonNormal, - [26] = Help_Text_TypeMatchupOwnMoveSteel, - [27] = Help_Text_TypeMatchupOwnPokemonSteel, - [28] = Help_Text_TypeMatchupOwnMoveFlying, - [29] = Help_Text_TypeMatchupOwnPokemonFlying, - [30] = Help_Text_TypeMatchupOwnMoveFire, - [31] = Help_Text_TypeMatchupOwnPokemonFire, - [32] = Help_Text_TypeMatchupOwnMoveWater, - [33] = Help_Text_TypeMatchupOwnPokemonWater, - [34] = Help_Text_TypeMatchupOwnMoveBug, - [35] = Help_Text_TypeMatchupOwnPokemonBug -}; - -static const u8 sAboutGame_TitleScreen[] = { - HELP_THE_HELP_SYSTEM, - HELP_THE_GAME, - HELP_WIRELESS_ADAPTER, - HELP_END -}; - -static const u8 sAboutGame_NewGame[] = { - HELP_THE_HELP_SYSTEM, - HELP_THE_GAME, - HELP_WIRELESS_ADAPTER, - HELP_END -}; - -static const u8 sHowTo_NamingScreen[] = { - HELP_ENTERING_NAME, - HELP_END -}; - -static const u8 sAboutGame_NamingScreen[] = { - HELP_THE_HELP_SYSTEM, - HELP_THE_GAME, - HELP_WIRELESS_ADAPTER, - HELP_END -}; - -static const u8 sHowTo_Pokedex[] = { - HELP_USING_POKEDEX, - HELP_READING_POKEDEX, - HELP_END -}; - -static const u8 sHowTo_PartyMenu[] = { - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_PartyMenu[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_END -}; - -static const u8 sHowTo_PokemonInfo[] = { - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_END -}; - -static const u8 sTerms_PokemonInfo[] = { - HELP_TERM_LEVEL, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ID_NO, - HELP_TERM_ITEM, - HELP_TERM_NATURE, - HELP_END -}; - -static const u8 sTerms_PokemonSkills[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_EXP, - HELP_TERM_ABILITY, - HELP_END -}; - -static const u8 sTerms_PokemonMoves[] = { - HELP_TERM_LEVEL, - HELP_TERM_MOVES, - HELP_TERM_TYPE, - HELP_TERM_MOVE_TYPE, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_END -}; - -static const u8 sHowTo_Bag[] = { - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_REGISTER_KEY_ITEM, - HELP_USING_POKEBALL, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_RIDING_BICYCLE, - HELP_END -}; - -static const u8 sTerms_Bag[] = { - HELP_TERM_ITEMS, - HELP_TERM_KEYITEMS, - HELP_TERM_POKEBALLS, - HELP_END -}; - -static const u8 sHowTo_TrainerCardFront[] = { - HELP_USING_PLAYER, - HELP_END -}; - -static const u8 sTerms_TrainerCardFront[] = { - HELP_TERM_ID_NO, - HELP_TERM_MONEY, - HELP_TERM_POKEDEX, - HELP_TERM_PLAY_TIME, - HELP_TERM_BADGES, - HELP_END -}; - -static const u8 sHowTo_TrainerCardBack[] = { - HELP_USING_PLAYER, - HELP_END -}; - -static const u8 sHowTo_Save[] = { - HELP_USING_SAVE, - HELP_END -}; - -static const u8 sTerms_Save[] = { - HELP_TERM_BADGES2, - HELP_TERM_POKEDEX, - HELP_TERM_PLAY_TIME, - HELP_END -}; - -static const u8 sHowTo_Options[] = { - HELP_USING_OPTION, - HELP_END -}; - -static const u8 sTerms_Options[] = { - HELP_TERM_TEXT_SPEED, - HELP_TERM_BATTLE_SCENE, - HELP_TERM_BATTLE_STYLE, - HELP_TERM_SOUND, - HELP_TERM_BUTTON_MODE, - HELP_TERM_FRAME, - HELP_TERM_CANCEL, - HELP_END -}; - -static const u8 sWhatToDo_PlayersHouse[] = { - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_CANT_GET_OUT_OF_ROOM, - HELP_CANT_FIND_PERSON_I_WANT, - HELP_END -}; - -static const u8 sAboutGame_PlayersHouse[] = { - HELP_THE_HELP_SYSTEM, - HELP_THE_GAME, - HELP_WIRELESS_ADAPTER, - HELP_WHAT_ARE_POKEMON, - HELP_END -}; - -static const u8 sWhatToDo_OaksLab[] = { - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_CANT_FIND_PERSON_I_WANT, - HELP_TALKED_TO_EVERYONE_NOW_WHAT, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_OaksLab[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_REGISTER_KEY_ITEM, - HELP_USING_POKEBALL, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_OaksLab[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_TYPE, - HELP_TERM_POKEMON, - HELP_END -}; - -static const u8 sWhatToDo_PokeCenter[] = { - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_TALKED_TO_EVERYONE_NOW_WHAT, - HELP_SOMEONE_BLOCKING_MY_WAY, - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_PokeCenter[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_REGISTER_KEY_ITEM, - HELP_USING_POKEBALL, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_USING_PC, - HELP_END -}; - -static const u8 sTerms_PokeCenter[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_TYPE, - HELP_TERM_POKEMON, - HELP_END -}; - -static const u8 sAboutGame_PokeCenter[] = { - HELP_WIRELESS_ADAPTER, - HELP_WHAT_ARE_POKEMON, - HELP_GAME_FUNDAMENTALS_1, - HELP_GAME_FUNDAMENTALS_2, - HELP_GAME_FUNDAMENTALS_3, - HELP_END -}; - -static const u8 sWhatToDo_Mart[] = { - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_TALKED_TO_EVERYONE_NOW_WHAT, - HELP_SOMEONE_BLOCKING_MY_WAY, - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_Mart[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_REGISTER_KEY_ITEM, - HELP_USING_POKEBALL, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_Mart[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_TYPE, - HELP_TERM_ITEM, - HELP_TERM_MONEY, - HELP_TERM_ITEMS, - HELP_TERM_KEYITEMS, - HELP_TERM_POKEBALLS, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sWhatToDo_Gym[] = { - HELP_SOMEONE_BLOCKING_MY_WAY, - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_Gym[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_REGISTER_KEY_ITEM, - HELP_USING_POKEBALL, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_Gym[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_TYPE, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sTypeMatchups_Gym[] = { - HELP_TYPE_MATCHUPS, - HELP_END -}; - -static const u8 sWhatToDo_Indoors[] = { - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_CANT_FIND_PERSON_I_WANT, - HELP_TALKED_TO_EVERYONE_NOW_WHAT, - HELP_SOMEONE_BLOCKING_MY_WAY, - HELP_I_CANT_GO_ON, - HELP_HOW_DO_I_PROGRESS, - HELP_WHAT_IS_THAT_PERSON_LIKE, - HELP_OUT_OF_THINGS_TO_DO, - HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, - HELP_WHAT_DO_I_DO_IN_CAVE, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WHAT_IS_A_GYM, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WHEN_CAN_I_USE_ITEM, - HELP_RAN_OUT_OF_POTIONS, - HELP_CAN_I_BUY_POKEBALLS, - HELP_WHATS_A_BATTLE, - HELP_HOW_DO_I_PREPARE_FOR_BATTLE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_WHERE_DO_MONS_APPEAR, - HELP_CANT_CATCH_MONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_MY_MONS_ARE_HURT, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_WHATS_A_TRAINER, - HELP_HOW_DO_I_WIN_AGAINST_TRAINER, - HELP_WHAT_ARE_MOVES, - HELP_WANT_TO_ADD_MORE_MOVES, - HELP_WHAT_ARE_HIDDEN_MOVES, - HELP_WHAT_DOES_HIDDEN_MOVE_DO, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_Indoors[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_SUMMARY, - HELP_USING_SWITCH, - HELP_USING_ITEM, - HELP_USING_BAG, - HELP_USING_AN_ITEM, - HELP_USING_KEYITEM, - HELP_REGISTER_KEY_ITEM, - HELP_USING_POKEBALL, - HELP_USING_POTION, - HELP_USING_TOWN_MAP, - HELP_USING_TM, - HELP_USING_HM, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_Indoors[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ITEM, - HELP_TERM_ABILITY, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sWhatToDo_Overworld[] = { - HELP_WHAT_SHOULD_I_BE_DOING, - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_CANT_FIND_PERSON_I_WANT, - HELP_TALKED_TO_EVERYONE_NOW_WHAT, - HELP_SOMEONE_BLOCKING_MY_WAY, - HELP_I_CANT_GO_ON, - HELP_HOW_DO_I_PROGRESS, - HELP_WHAT_IS_THAT_PERSON_LIKE, - HELP_OUT_OF_THINGS_TO_DO, - HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, - HELP_WHAT_DO_I_DO_IN_CAVE, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WHAT_IS_A_GYM, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WHEN_CAN_I_USE_ITEM, - HELP_RAN_OUT_OF_POTIONS, - HELP_CAN_I_BUY_POKEBALLS, - HELP_WHATS_A_BATTLE, - HELP_HOW_DO_I_PREPARE_FOR_BATTLE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_WHERE_DO_MONS_APPEAR, - HELP_CANT_CATCH_MONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_MY_MONS_ARE_HURT, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_WHATS_A_TRAINER, - HELP_HOW_DO_I_WIN_AGAINST_TRAINER, - HELP_WHAT_ARE_MOVES, - HELP_WANT_TO_ADD_MORE_MOVES, - HELP_WHAT_ARE_HIDDEN_MOVES, - HELP_WHAT_DOES_HIDDEN_MOVE_DO, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_Overworld[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_BAG, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_Overworld[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ITEM, - HELP_TERM_ABILITY, - HELP_TERM_FNT, - HELP_TERM_POKEMON, - HELP_END -}; - -static const u8 sWhatToDo_Dungeon[] = { - HELP_WHAT_ARE_MY_ADVENTURE_BASICS, - HELP_I_CANT_GO_ON, - HELP_HOW_DO_I_PROGRESS, - HELP_WHAT_IS_THAT_PERSON_LIKE, - HELP_OUT_OF_THINGS_TO_DO, - HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT, - HELP_WHAT_DO_I_DO_IN_CAVE, - HELP_WHATS_POKEMON_CENTER, - HELP_WHATS_POKEMON_MART, - HELP_WHAT_IS_A_GYM, - HELP_WHAT_HAPPENED_TO_ITEM_I_GOT, - HELP_WHEN_CAN_I_USE_ITEM, - HELP_RAN_OUT_OF_POTIONS, - HELP_WHATS_A_BATTLE, - HELP_HOW_DO_I_PREPARE_FOR_BATTLE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_WHERE_DO_MONS_APPEAR, - HELP_CANT_CATCH_MONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_MY_MONS_ARE_HURT, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_WHATS_A_TRAINER, - HELP_HOW_DO_I_WIN_AGAINST_TRAINER, - HELP_WHAT_ARE_MOVES, - HELP_WANT_TO_ADD_MORE_MOVES, - HELP_WHAT_ARE_HIDDEN_MOVES, - HELP_WHAT_DOES_HIDDEN_MOVE_DO, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_Dungeon[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_BAG, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_Dungeon[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ITEM, - HELP_TERM_ABILITY, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sWhatToDo_Surfing[] = { - HELP_I_CANT_GO_ON, - HELP_WHAT_IS_THAT_PERSON_LIKE, - HELP_OUT_OF_THINGS_TO_DO, - HELP_WHAT_IS_A_GYM, - HELP_CANT_CATCH_MONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_MY_MONS_ARE_HURT, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_WHATS_A_TRAINER, - HELP_HOW_DO_I_WIN_AGAINST_TRAINER, - HELP_WHAT_ARE_MOVES, - HELP_WANT_TO_ADD_MORE_MOVES, - HELP_WHAT_ARE_HIDDEN_MOVES, - HELP_WHAT_DOES_HIDDEN_MOVE_DO, - HELP_WANT_TO_END_GAME, - HELP_END -}; - -static const u8 sHowTo_Surfing[] = { - HELP_OPENING_MENU, - HELP_USING_POKEDEX, - HELP_USING_POKEMON, - HELP_USING_BAG, - HELP_USING_PLAYER, - HELP_USING_SAVE, - HELP_USING_OPTION, - HELP_USING_MOVE_OUTSIDE_OF_BATTLE, - HELP_END -}; - -static const u8 sTerms_Surfing[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ITEM, - HELP_TERM_ABILITY, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sWhatToDo_WildBattle[] = { - HELP_WHATS_A_BATTLE, - HELP_WHAT_ARE_MOVES, - HELP_WHAT_MOVES_SHOULD_I_USE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_MY_MONS_ARE_HURT, - HELP_CANT_CATCH_MONS, - HELP_CAN_I_BUY_POKEBALLS, - HELP_RAN_OUT_OF_POTIONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_END -}; - -static const u8 sHowTo_WildBattle[] = { - HELP_USING_FIGHT, - HELP_USING_POKEMON2, - HELP_USING_SHIFT, - HELP_USING_SUMMARY2, - HELP_USING_BAG2, - HELP_USING_AN_ITEM, - HELP_USING_POKEBALL, - HELP_USING_RUN, - HELP_END -}; - -static const u8 sTerms_WildBattle[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_TYPE, - HELP_TERM_ABILITY, - HELP_TERM_MOVE_TYPE, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_TERM_STATUS_PROBLEM, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sTypeMatchups_WildBattle[] = { - HELP_TYPE_MATCHUPS, - HELP_END -}; - -static const u8 sWhatToDo_TrainerBattleSingle[] = { - HELP_WHATS_A_BATTLE, - HELP_WHAT_ARE_MOVES, - HELP_WHAT_MOVES_SHOULD_I_USE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_MY_MONS_ARE_HURT, - HELP_RAN_OUT_OF_POTIONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_END -}; - -static const u8 sHowTo_TrainerBattleSingle[] = { - HELP_USING_FIGHT, - HELP_USING_POKEMON2, - HELP_USING_SHIFT, - HELP_USING_SUMMARY2, - HELP_USING_BAG2, - HELP_USING_AN_ITEM, - HELP_USING_RUN, - HELP_END -}; - -static const u8 sTerms_TrainerBattleSingle[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_TYPE, - HELP_TERM_ABILITY, - HELP_TERM_MOVE_TYPE, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_TERM_STATUS_PROBLEM, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sTypeMatchups_TrainerBattleSingle[] = { - HELP_TYPE_MATCHUPS, - HELP_END -}; - -static const u8 sWhatToDo_TrainerBattleDouble[] = { - HELP_WHATS_A_BATTLE, - HELP_WHAT_ARE_MOVES, - HELP_WHAT_MOVES_SHOULD_I_USE, - HELP_WHAT_IS_A_MONS_VITALITY, - HELP_MY_MONS_ARE_HURT, - HELP_RAN_OUT_OF_POTIONS, - HELP_WANT_TO_MAKE_MON_STRONGER, - HELP_FOE_MONS_TOO_STRONG, - HELP_WHAT_IS_STATUS_PROBLEM, - HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT, - HELP_END -}; - -static const u8 sHowTo_TrainerBattleDouble[] = { - HELP_USING_FIGHT, - HELP_USING_POKEMON2, - HELP_USING_SHIFT, - HELP_USING_SUMMARY2, - HELP_USING_BAG2, - HELP_USING_AN_ITEM, - HELP_USING_RUN, - HELP_END -}; - -static const u8 sTerms_TrainerBattleDouble[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_TYPE, - HELP_TERM_ABILITY, - HELP_TERM_MOVE_TYPE, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_TERM_STATUS_PROBLEM, - HELP_TERM_FNT, - HELP_END -}; - -static const u8 sTypeMatchups_TrainerBattleDouble[] = { - HELP_TYPE_MATCHUPS, - HELP_END -}; - -static const u8 sWhatToDo_SafariBattle[] = { - HELP_WHAT_DO_I_DO_IN_SAFARI, - HELP_WHAT_ARE_SAFARI_RULES, - HELP_WANT_TO_END_SAFARI, - HELP_END -}; - -static const u8 sHowTo_SafariBattle[] = { - HELP_USING_BALL, - HELP_USING_BAIT, - HELP_USING_ROCK, - HELP_USING_RUN, - HELP_END -}; - -static const u8 sTerms_SafariBattle[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_TYPE, - HELP_TERM_ABILITY, - HELP_TERM_MOVE_TYPE, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_END -}; - -static const u8 sTypeMatchups_SafariBattle[] = { - HELP_TYPE_MATCHUPS, - HELP_END -}; - -static const u8 sHowTo_PC[] = { - HELP_USING_PC, - HELP_USING_BILLS_PC, - HELP_USING_WITHDRAW, - HELP_USING_DEPOSIT, - HELP_USING_MOVE, - HELP_MOVING_ITEMS, - HELP_USING_PLAYERS_PC, - HELP_USING_WITHDRAW_ITEM, - HELP_USING_DEPOSIT_ITEM, - HELP_USING_MAILBOX, - HELP_USING_PROF_OAKS_PC, - HELP_USING_HALL_OF_FAME, - HELP_END -}; - -static const u8 sHowTo_BillsPC[] = { - HELP_USING_PC, - HELP_USING_BILLS_PC, - HELP_USING_WITHDRAW, - HELP_USING_DEPOSIT, - HELP_USING_MOVE, - HELP_MOVING_ITEMS, - HELP_USING_PLAYERS_PC, - HELP_USING_WITHDRAW_ITEM, - HELP_USING_DEPOSIT_ITEM, - HELP_USING_MAILBOX, - HELP_USING_PROF_OAKS_PC, - HELP_USING_HALL_OF_FAME, - HELP_END -}; - -static const u8 sHowTo_PlayersPCItems[] = { - HELP_USING_PC, - HELP_USING_BILLS_PC, - HELP_USING_WITHDRAW, - HELP_USING_DEPOSIT, - HELP_USING_MOVE, - HELP_MOVING_ITEMS, - HELP_USING_PLAYERS_PC, - HELP_USING_WITHDRAW_ITEM, - HELP_USING_DEPOSIT_ITEM, - HELP_USING_MAILBOX, - HELP_USING_PROF_OAKS_PC, - HELP_USING_HALL_OF_FAME, - HELP_END -}; - -static const u8 sHowTo_PlayersPCMailbox[] = { - HELP_USING_PC, - HELP_USING_BILLS_PC, - HELP_USING_WITHDRAW, - HELP_USING_DEPOSIT, - HELP_USING_MOVE, - HELP_MOVING_ITEMS, - HELP_USING_PLAYERS_PC, - HELP_USING_WITHDRAW_ITEM, - HELP_USING_DEPOSIT_ITEM, - HELP_USING_MAILBOX, - HELP_USING_PROF_OAKS_PC, - HELP_USING_HALL_OF_FAME, - HELP_END -}; - -static const u8 sHowTo_PCMisc[] = { - HELP_USING_PC, - HELP_USING_BILLS_PC, - HELP_USING_WITHDRAW, - HELP_USING_DEPOSIT, - HELP_USING_MOVE, - HELP_MOVING_ITEMS, - HELP_USING_PLAYERS_PC, - HELP_USING_WITHDRAW_ITEM, - HELP_USING_DEPOSIT_ITEM, - HELP_USING_MAILBOX, - HELP_USING_PROF_OAKS_PC, - HELP_USING_HALL_OF_FAME, - HELP_END -}; - -static const u8 sHowTo_BedroomPC[] = { - HELP_USING_HOME_PC, - HELP_USING_ITEM_STORAGE, - HELP_USING_WITHDRAW_ITEM2, - HELP_USING_DEPOSIT_ITEM2, - HELP_USING_MAILBOX2, - HELP_END -}; - -static const u8 sHowTo_BedroomPCItems[] = { - HELP_USING_HOME_PC, - HELP_USING_ITEM_STORAGE, - HELP_USING_WITHDRAW_ITEM2, - HELP_USING_DEPOSIT_ITEM2, - HELP_USING_MAILBOX2, - HELP_END -}; - -static const u8 sHowTo_BedroomPCMailbox[] = { - HELP_USING_HOME_PC, - HELP_USING_ITEM_STORAGE, - HELP_USING_WITHDRAW_ITEM2, - HELP_USING_DEPOSIT_ITEM2, - HELP_USING_MAILBOX2, - HELP_END -}; - -static const u8 sTerms_Basic[] = { - HELP_TERM_LEVEL, - HELP_TERM_HP, - HELP_TERM_EXP, - HELP_TERM_MOVES, - HELP_TERM_TM, - HELP_TERM_HM_MOVE, - HELP_TERM_HM, - HELP_TERM_ATTACK, - HELP_TERM_DEFENSE, - HELP_TERM_SPATK, - HELP_TERM_SPDEF, - HELP_TERM_SPEED, - HELP_TERM_TYPE, - HELP_TERM_OT, - HELP_TERM_ITEM, - HELP_TERM_ABILITY, - HELP_TERM_MOVE_TYPE, - HELP_TERM_NATURE, - HELP_TERM_ID_NO, - HELP_TERM_PP, - HELP_TERM_POWER, - HELP_TERM_ACCURACY, - HELP_TERM_STATUS_PROBLEM, - HELP_TERM_FNT, - HELP_TERM_EVOLUTION, - HELP_TERM_ITEMS, - HELP_TERM_KEYITEMS, - HELP_TERM_POKEBALLS, - HELP_TERM_PLAY_TIME, - HELP_TERM_MONEY, - HELP_TERM_BADGES, - HELP_END -}; - - -// Cant get this to match as a 2D array but it probably should be one, [HELPCONTEXT_COUNT][TOPIC_COUNT - 1] (Excludes TOPIC_EXIT) -static const u8 *const sHelpSystemSubmenuItemLists[HELPCONTEXT_COUNT * (TOPIC_COUNT - 1)] = { - NULL, NULL, NULL, NULL, NULL, // HELPCONTEXT_NONE - NULL, NULL, NULL, sAboutGame_TitleScreen, NULL, // HELPCONTEXT_TITLE_SCREEN - NULL, NULL, NULL, sAboutGame_NewGame, NULL, // HELPCONTEXT_NEW_GAME - NULL, sHowTo_NamingScreen, NULL, sAboutGame_NamingScreen, NULL, // HELPCONTEXT_NAMING_SCREEN - NULL, sHowTo_Pokedex, NULL, NULL, NULL, // HELPCONTEXT_POKEDEX - NULL, sHowTo_PartyMenu, sTerms_PartyMenu, NULL, NULL, // HELPCONTEXT_PARTY_MENU - NULL, sHowTo_PokemonInfo, sTerms_PokemonInfo, NULL, NULL, // HELPCONTEXT_POKEMON_INFO - NULL, NULL, sTerms_PokemonSkills, NULL, NULL, // HELPCONTEXT_POKEMON_SKILLS - NULL, NULL, sTerms_PokemonMoves, NULL, NULL, // HELPCONTEXT_POKEMON_MOVES - NULL, sHowTo_Bag, sTerms_Bag, NULL, NULL, // HELPCONTEXT_BAG - NULL, sHowTo_TrainerCardFront, sTerms_TrainerCardFront, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_FRONT - NULL, sHowTo_TrainerCardBack, NULL, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_BACK - NULL, sHowTo_Save, sTerms_Save, NULL, NULL, // HELPCONTEXT_SAVE - NULL, sHowTo_Options, sTerms_Options, NULL, NULL, // HELPCONTEXT_OPTIONS - sWhatToDo_PlayersHouse, NULL, NULL, sAboutGame_PlayersHouse, NULL, // HELPCONTEXT_PLAYERS_HOUSE - sWhatToDo_OaksLab, sHowTo_OaksLab, sTerms_OaksLab, NULL, NULL, // HELPCONTEXT_OAKS_LAB - sWhatToDo_PokeCenter, sHowTo_PokeCenter, sTerms_PokeCenter, sAboutGame_PokeCenter, NULL, // HELPCONTEXT_POKECENTER - sWhatToDo_Mart, sHowTo_Mart, sTerms_Mart, NULL, NULL, // HELPCONTEXT_MART - sWhatToDo_Gym, sHowTo_Gym, sTerms_Gym, NULL, sTypeMatchups_Gym, // HELPCONTEXT_GYM - sWhatToDo_Indoors, sHowTo_Indoors, sTerms_Indoors, NULL, NULL, // HELPCONTEXT_INDOORS - sWhatToDo_Overworld, sHowTo_Overworld, sTerms_Overworld, NULL, NULL, // HELPCONTEXT_OVERWORLD - sWhatToDo_Dungeon, sHowTo_Dungeon, sTerms_Dungeon, NULL, NULL, // HELPCONTEXT_DUNGEON - sWhatToDo_Surfing, sHowTo_Surfing, sTerms_Surfing, NULL, NULL, // HELPCONTEXT_SURFING - sWhatToDo_WildBattle, sHowTo_WildBattle, sTerms_WildBattle, NULL, sTypeMatchups_WildBattle, // HELPCONTEXT_WILD_BATTLE - sWhatToDo_TrainerBattleSingle, sHowTo_TrainerBattleSingle, sTerms_TrainerBattleSingle, NULL, sTypeMatchups_TrainerBattleSingle, // HELPCONTEXT_TRAINER_BATTLE_SINGLE - sWhatToDo_TrainerBattleDouble, sHowTo_TrainerBattleDouble, sTerms_TrainerBattleDouble, NULL, sTypeMatchups_TrainerBattleDouble, // HELPCONTEXT_TRAINER_BATTLE_DOUBLE - sWhatToDo_SafariBattle, sHowTo_SafariBattle, sTerms_SafariBattle, NULL, sTypeMatchups_SafariBattle, // HELPCONTEXT_SAFARI_BATTLE - NULL, sHowTo_PC, NULL, NULL, NULL, // HELPCONTEXT_PC - NULL, sHowTo_BillsPC, NULL, NULL, NULL, // HELPCONTEXT_BILLS_PC - NULL, sHowTo_PlayersPCItems, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_ITEMS - NULL, sHowTo_PlayersPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_MAILBOX - NULL, sHowTo_PCMisc, NULL, NULL, NULL, // HELPCONTEXT_PC_MISC - NULL, sHowTo_BedroomPC, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC - NULL, sHowTo_BedroomPCItems, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_ITEMS - NULL, sHowTo_BedroomPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_MAILBOX - NULL, NULL, NULL, NULL, NULL // HELPCONTEXT_UNUSED -}; - -static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin"); - -static const u8 sHelpSystemContextTopicOrder[TOPIC_COUNT] = { - TOPIC_ABOUT_GAME, - TOPIC_WHAT_TO_DO, - TOPIC_HOW_TO_DO, - TOPIC_TERMS, - TOPIC_TYPE_MATCHUP, - TOPIC_EXIT -}; - -#define CONTEXT_TOPIC_FLAGS(whatToDo, howToDo, terms, aboutGame, typeMatchup, exit) \ - { \ - [TOPIC_WHAT_TO_DO] = whatToDo, \ - [TOPIC_HOW_TO_DO] = howToDo, \ - [TOPIC_TERMS] = terms, \ - [TOPIC_ABOUT_GAME] = aboutGame, \ - [TOPIC_TYPE_MATCHUP] = typeMatchup, \ - [TOPIC_EXIT] = exit \ - } \ - -static const bool8 sHelpSystemContextTopicFlags[HELPCONTEXT_COUNT + 1][TOPIC_COUNT] = { - [HELPCONTEXT_NONE] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_TITLE_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE), - [HELPCONTEXT_NEW_GAME] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE), - [HELPCONTEXT_NAMING_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE), - [HELPCONTEXT_POKEDEX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_PARTY_MENU] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_POKEMON_INFO] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_POKEMON_SKILLS] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_POKEMON_MOVES] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_BAG] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_TRAINER_CARD_FRONT] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_TRAINER_CARD_BACK] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_SAVE] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_OPTIONS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_PLAYERS_HOUSE] = CONTEXT_TOPIC_FLAGS( TRUE, FALSE, FALSE, TRUE, FALSE, TRUE), - [HELPCONTEXT_OAKS_LAB] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_POKECENTER] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, TRUE, FALSE, TRUE), - [HELPCONTEXT_MART] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_GYM] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), - [HELPCONTEXT_INDOORS] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_OVERWORLD] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_DUNGEON] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_SURFING] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE), - [HELPCONTEXT_WILD_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), - [HELPCONTEXT_TRAINER_BATTLE_SINGLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), - [HELPCONTEXT_TRAINER_BATTLE_DOUBLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), - [HELPCONTEXT_SAFARI_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), - [HELPCONTEXT_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_BILLS_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_PLAYERS_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_PLAYERS_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_PC_MISC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_BEDROOM_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_BEDROOM_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_BEDROOM_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE), - [HELPCONTEXT_UNUSED] = {}, - [HELPCONTEXT_COUNT] = {} -}; - -static const u16 sMartMaps[] = { - MAP_VIRIDIAN_CITY_MART, - MAP_PEWTER_CITY_MART, - MAP_CERULEAN_CITY_MART, - MAP_LAVENDER_TOWN_MART, - MAP_VERMILION_CITY_MART, - MAP_CELADON_CITY_DEPARTMENT_STORE_1F, - MAP_CELADON_CITY_DEPARTMENT_STORE_2F, - MAP_CELADON_CITY_DEPARTMENT_STORE_3F, - MAP_CELADON_CITY_DEPARTMENT_STORE_4F, - MAP_CELADON_CITY_DEPARTMENT_STORE_5F, - MAP_CELADON_CITY_DEPARTMENT_STORE_ROOF, - MAP_CELADON_CITY_DEPARTMENT_STORE_ELEVATOR, - MAP_FUCHSIA_CITY_MART, - MAP_CINNABAR_ISLAND_MART, - MAP_SAFFRON_CITY_MART, - MAP_THREE_ISLAND_MART, - MAP_FOUR_ISLAND_MART, - MAP_SEVEN_ISLAND_MART, - MAP_SIX_ISLAND_MART, - MAP_UNDEFINED -}; - -static const u16 sGymMaps[] = { - MAP_PEWTER_CITY_GYM, - MAP_CERULEAN_CITY_GYM, - MAP_VERMILION_CITY_GYM, - MAP_CELADON_CITY_GYM, - MAP_FUCHSIA_CITY_GYM, - MAP_SAFFRON_CITY_GYM, - MAP_CINNABAR_ISLAND_GYM, - MAP_VIRIDIAN_CITY_GYM, - MAP_UNDEFINED -}; - -static const u8 sDungeonMaps[][3] = { - { MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), 1 }, - { MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), 3 }, - { MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), 2 }, - { MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), 3 }, - { MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), 5 }, - { MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), 3 }, - { MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), 3 }, - { MAP_GROUP(MT_EMBER_RUBY_PATH_B4F), MAP_NUM(MT_EMBER_RUBY_PATH_B4F), 1 }, - { MAP_GROUP(MT_EMBER_SUMMIT_PATH_1F), MAP_NUM(MT_EMBER_SUMMIT_PATH_1F), 3 }, - { MAP_GROUP(MT_EMBER_RUBY_PATH_B5F), MAP_NUM(MT_EMBER_RUBY_PATH_B5F), 7 }, - { MAP_GROUP(THREE_ISLAND_BERRY_FOREST), MAP_NUM(THREE_ISLAND_BERRY_FOREST), 1 }, - { MAP_GROUP(SIX_ISLAND_PATTERN_BUSH), MAP_NUM(SIX_ISLAND_PATTERN_BUSH), 1 }, - { MAP_GROUP(FIVE_ISLAND_LOST_CAVE_ENTRANCE), MAP_NUM(FIVE_ISLAND_LOST_CAVE_ENTRANCE), 15 }, - { MAP_GROUP(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), MAP_NUM(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), 4 }, - { MAP_GROUP(SIX_ISLAND_ALTERING_CAVE), MAP_NUM(SIX_ISLAND_ALTERING_CAVE), 1 }, - { MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), 7 } -}; - -void SetHelpContextDontCheckBattle(u8 contextId) -{ - sHelpSystemContextId = contextId; -} - -void SetHelpContext(u8 contextId) -{ - switch (sHelpSystemContextId) - { - case HELPCONTEXT_WILD_BATTLE: - case HELPCONTEXT_TRAINER_BATTLE_SINGLE: - case HELPCONTEXT_TRAINER_BATTLE_DOUBLE: - case HELPCONTEXT_SAFARI_BATTLE: - if (contextId == HELPCONTEXT_BAG - || contextId == HELPCONTEXT_PARTY_MENU - || contextId == HELPCONTEXT_POKEMON_INFO - || contextId == HELPCONTEXT_POKEMON_SKILLS - || contextId == HELPCONTEXT_POKEMON_MOVES) - break; - // fallthrough - default: - sHelpSystemContextId = contextId; - break; - } -} - -void Script_SetHelpContext(void) -{ - sHelpSystemContextId = gSpecialVar_0x8004; -} - -void BackupHelpContext(void) -{ - gHelpContextIdBackup = sHelpSystemContextId; -} - -void RestoreHelpContext(void) -{ - sHelpSystemContextId = gHelpContextIdBackup; -} - -static bool32 IsInMartMap(void) -{ - return IsCurrentMapInArray(sMartMaps); -} - -static bool32 IsInGymMap(void) -{ - return IsCurrentMapInArray(sGymMaps); -} - -static bool32 IsCurrentMapInArray(const u16 * mapIdxs) -{ - u16 mapIdx = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; - s32 i; - - for (i = 0; mapIdxs[i] != MAP_UNDEFINED; i++) - { - if (mapIdxs[i] == mapIdx) - return TRUE; - } - - return FALSE; -} - -static bool8 IsInDungeonMap(void) -{ - u8 i, j; - - for (i = 0; i < NELEMS(sDungeonMaps); i++) - { - for (j = 0; j < sDungeonMaps[i][2]; j++) - { - if ( - sDungeonMaps[i][0] == gSaveBlock1Ptr->location.mapGroup - && sDungeonMaps[i][1] + j == gSaveBlock1Ptr->location.mapNum - && (i != 15 /* TANOBY */ || FlagGet(FLAG_SYS_UNLOCKED_TANOBY_RUINS) == TRUE) - ) - return TRUE; - } - } - - return FALSE; -} - -#define IN_PLAYERS_HOUSE \ - ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) \ - && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) \ - || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) \ - && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F))) \ - - #define IN_OAKS_LAB \ - (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB) \ - && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB)) \ - -void SetHelpContextForMap(void) -{ - HelpSystem_EnableToggleWithRButton(); - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - SetHelpContext(HELPCONTEXT_SURFING); - else if (IsInDungeonMap()) - SetHelpContext(HELPCONTEXT_DUNGEON); - else if (IsMapTypeIndoors(gMapHeader.mapType)) - { - if (IN_PLAYERS_HOUSE) - SetHelpContext(HELPCONTEXT_PLAYERS_HOUSE); - else if (IN_OAKS_LAB) - SetHelpContext(HELPCONTEXT_OAKS_LAB); - else if (IsCurMapPokeCenter() == TRUE) - SetHelpContext(HELPCONTEXT_POKECENTER); - else if (IsInMartMap() == TRUE) - SetHelpContext(HELPCONTEXT_MART); - else if (IsInGymMap() == TRUE) - SetHelpContext(HELPCONTEXT_GYM); - else - SetHelpContext(HELPCONTEXT_INDOORS); - } - else - SetHelpContext(HELPCONTEXT_OVERWORLD); -} - -bool8 HelpSystem_UpdateHasntSeenIntro(void) -{ - if (sSeenHelpSystemIntro == TRUE) - return FALSE; - - if (gSaveFileStatus != SAVE_STATUS_EMPTY && gSaveFileStatus != SAVE_STATUS_INVALID && FlagGet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO)) - return FALSE; - - FlagSet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO); - sSeenHelpSystemIntro = TRUE; - return TRUE; -} - -bool8 HelpSystem_IsSinglePlayer(void) -{ - if (gReceivedRemoteLinkPlayers == TRUE) - return FALSE; - return TRUE; -} - -void HelpSystem_Disable(void) -{ - gHelpSystemEnabled = FALSE; -} - -void HelpSystem_Enable(void) -{ - if (!QL_IS_PLAYBACK_STATE) - { - gHelpSystemEnabled = TRUE; - HelpSystem_EnableToggleWithRButton(); - } -} - -void HelpSystem_DisableToggleWithRButton(void) -{ - gHelpSystemToggleWithRButtonDisabled = TRUE; -} - -void HelpSystem_EnableToggleWithRButton(void) -{ - gHelpSystemToggleWithRButtonDisabled = FALSE; -} - -static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - helpListMenu->sub.items = listMenuItemsBuffer; - helpListMenu->sub.totalItems = 1; - helpListMenu->sub.maxShowed = 1; - helpListMenu->sub.left = 1; - helpListMenu->sub.top = 4; -} - -static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer); - BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer); - PrintTextOnPanel2Row52RightAlign(gUnknown_841DFAC); - HelpSystem_InitListMenuController(helpListMenu, 0, gHelpSystemState.scrollMain); - PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer); - HS_ShowOrHideMainWindowText(1); - HS_ShowOrHideControlsGuideInTopRight(1); -} - -static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - u8 i; - u8 totalItems = 0; - for (i = 0; i < TOPIC_COUNT; i++) - { - if (sHelpSystemContextTopicFlags[sHelpSystemContextId][sHelpSystemContextTopicOrder[i]] == TRUE) - { - listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]]; - listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i]; - totalItems++; - } - } - listMenuItemsBuffer[totalItems - 1].index = -2; - helpListMenu->sub.totalItems = totalItems; - helpListMenu->sub.maxShowed = totalItems; - helpListMenu->sub.left = 0; -} - -static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - HS_SetMainWindowBgBrightness(0); - HS_ShowOrHideHeaderLine_Darker_FooterStyle(0); - HS_ShowOrHideHeaderAndFooterLines_Lighter(1); - ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer); - SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer); - PrintTextOnPanel2Row52RightAlign(gUnknown_841DFC9); - HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos); - HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState.topic], 0, 0); - HS_ShowOrHideMainWindowText(1); - HS_ShowOrHideControlsGuideInTopRight(1); -} - -static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - u8 totalItems = 0; - const u8 * submenuItems = sHelpSystemSubmenuItemLists[sHelpSystemContextId * 5 + gHelpSystemState.topic]; // accessing as 2D array - u8 i; - for (i = 0; submenuItems[i] != HELP_END; i++) - { - if (IsHelpSystemSubmenuEnabled(submenuItems[i]) == TRUE) - { - if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO) - listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[submenuItems[i]]; - else if (gHelpSystemState.topic == TOPIC_HOW_TO_DO) - listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[submenuItems[i]]; - else if (gHelpSystemState.topic == TOPIC_TERMS) - listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]]; - else if (gHelpSystemState.topic == TOPIC_ABOUT_GAME) - listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[submenuItems[i]]; - else // TOPIC_TYPE_MATCHUP - listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[submenuItems[i]]; - listMenuItemsBuffer[totalItems].index = submenuItems[i]; - totalItems++; - } - } - if (HelpSystem_ShouldShowBasicTerms() == TRUE) - { - for (i = 0, submenuItems = sTerms_Basic; submenuItems[i] != HELP_END; i++) - { - listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]]; - listMenuItemsBuffer[totalItems].index = submenuItems[i]; - totalItems++; - } - } - listMenuItemsBuffer[totalItems].label = Help_Text_Cancel; - listMenuItemsBuffer[totalItems].index = -2; - totalItems++; - helpListMenu->sub.totalItems = totalItems; - helpListMenu->sub.maxShowed = 7; - helpListMenu->sub.left = 0; - helpListMenu->sub.top = 21; -} - -static bool8 HelpSystem_ShouldShowBasicTerms(void) -{ - if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gHelpSystemState.topic == TOPIC_TERMS) - return TRUE; - return FALSE; -} - -static bool8 IsHelpSystemSubmenuEnabled(u8 id) -{ - u8 i = 0; - - if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO) - { - switch (id) - { - case HELP_PLAYING_FOR_FIRST_TIME: - case HELP_WHAT_SHOULD_I_BE_DOING: - case HELP_CANT_GET_OUT_OF_ROOM: - case HELP_TALKED_TO_EVERYONE_NOW_WHAT: - case HELP_OUT_OF_THINGS_TO_DO: - case HELP_NOTHING_I_WANT_TO_KNOW: - case HELP_WHATS_A_MON: - case HELP_WHAT_DO_I_DO_IN_SAFARI: - case HELP_WHAT_ARE_SAFARI_RULES: - case HELP_WANT_TO_END_SAFARI: - return TRUE; - case HELP_CANT_FIND_PERSON_I_WANT: - return FlagGet(FLAG_VISITED_OAKS_LAB); - case HELP_SOMEONE_BLOCKING_MY_WAY: - case HELP_WHAT_ARE_MY_ADVENTURE_BASICS: - case HELP_HOW_DO_I_PREPARE_FOR_BATTLE: - case HELP_WHAT_IS_STATUS_PROBLEM: - case HELP_RAN_OUT_OF_POTIONS: - case HELP_WHATS_POKEMON_CENTER: - case HELP_WHATS_POKEMON_MART: - return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_CITY); - case HELP_I_CANT_GO_ON: - return FlagGet(FLAG_WORLD_MAP_VERMILION_CITY); - case HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT: - case HELP_WHATS_A_TRAINER: - return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST); - case HELP_WHAT_HAPPENED_TO_ITEM_I_GOT: - case HELP_WHEN_CAN_I_USE_ITEM: - case HELP_HOW_DO_I_PROGRESS: - case HELP_WHATS_A_BATTLE: - case HELP_WHAT_IS_A_MONS_VITALITY: - case HELP_MY_MONS_ARE_HURT: - case HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT: - case HELP_WHERE_DO_MONS_APPEAR: - case HELP_WHAT_MOVES_SHOULD_I_USE: - case HELP_WANT_TO_MAKE_MON_STRONGER: - case HELP_WANT_TO_END_GAME: - return FlagGet(FLAG_SYS_POKEMON_GET); - case HELP_CANT_CATCH_MONS: - case HELP_CAN_I_BUY_POKEBALLS: - return FlagGet(FLAG_SYS_POKEDEX_GET); - case HELP_HOW_ARE_CAVES_DIFFERENT: - case HELP_WHAT_DO_I_DO_IN_CAVE: - case HELP_HOW_DO_I_WIN_AGAINST_TRAINER: - case HELP_FOE_MONS_TOO_STRONG: - case HELP_WHAT_ARE_MOVES: - case HELP_WANT_TO_ADD_MORE_MOVES: - return FlagGet(FLAG_BADGE01_GET); - case HELP_WHAT_ARE_HIDDEN_MOVES: - case HELP_WHAT_DOES_HIDDEN_MOVE_DO: - return HasGottenAtLeastOneHM(); - case HELP_WHAT_IS_THAT_PERSON_LIKE: - return FlagGet(FLAG_GOT_FAME_CHECKER); - case HELP_WHAT_IS_A_GYM: - return FlagGet(FLAG_WORLD_MAP_PEWTER_CITY); - } - return FALSE; - } - if (gHelpSystemState.topic == TOPIC_HOW_TO_DO) - { - switch (id) - { - case HELP_USING_BAG: - case HELP_USING_PLAYER: - case HELP_USING_SAVE: - case HELP_USING_OPTION: - case HELP_ENTERING_NAME: - case HELP_USING_PC: - case HELP_USING_BILLS_PC: - case HELP_USING_WITHDRAW: - case HELP_USING_DEPOSIT: - case HELP_USING_MOVE: - case HELP_MOVING_ITEMS: - case HELP_USING_PLAYERS_PC: - case HELP_USING_WITHDRAW_ITEM: - case HELP_USING_DEPOSIT_ITEM: - case HELP_USING_MAILBOX: - case HELP_OPENING_MENU: - case HELP_USING_BAG2: - case HELP_USING_HOME_PC: - case HELP_USING_ITEM_STORAGE: - case HELP_USING_WITHDRAW_ITEM2: - case HELP_USING_DEPOSIT_ITEM2: - case HELP_USING_MAILBOX2: - case HELP_USING_BALL: - case HELP_USING_BAIT: - case HELP_USING_ROCK: - return TRUE; - case HELP_USING_POKEDEX: - case HELP_USING_PROF_OAKS_PC: - case HELP_READING_POKEDEX: - return FlagGet(FLAG_SYS_POKEDEX_GET); - case HELP_USING_TOWN_MAP: - return CheckBagHasItem(ITEM_TOWN_MAP, 1); - case HELP_USING_POKEMON: - case HELP_USING_SUMMARY: - case HELP_USING_ITEM: - case HELP_USING_AN_ITEM: - case HELP_USING_KEYITEM: - case HELP_USING_POKEBALL: - case HELP_USING_POTION: - case HELP_USING_FIGHT: - case HELP_USING_POKEMON2: - case HELP_USING_SUMMARY2: - case HELP_USING_RUN: - case HELP_REGISTER_KEY_ITEM: - return FlagGet(FLAG_SYS_POKEMON_GET); - case HELP_USING_SWITCH: - case HELP_USING_SHIFT: - // Only show if player has caught mon after starter - if (GetKantoPokedexCount(1) > 1) - return TRUE; - return FALSE; - case HELP_USING_TM: - return FlagGet(FLAG_BADGE01_GET); - case HELP_USING_HM: - case HELP_USING_MOVE_OUTSIDE_OF_BATTLE: - return HasGottenAtLeastOneHM(); - case HELP_RIDING_BICYCLE: - return FlagGet(FLAG_GOT_BICYCLE); - case HELP_USING_HALL_OF_FAME: - return FlagGet(FLAG_SYS_GAME_CLEAR); - } - return FALSE; - } - if (gHelpSystemState.topic == TOPIC_TERMS) - { - if (HelpSystem_ShouldShowBasicTerms() == TRUE) - { - // After defeating Brock, all basic terms are added - // This checks to make sure they arent added twice - for (i = 0; sTerms_Basic[i] != HELP_END; i++) - { - if (sTerms_Basic[i] == id) - return FALSE; - } - } - switch (id) - { - case HELP_TERM_MONEY: - case HELP_TERM_ID_NO: - case HELP_TERM_ITEMS: - case HELP_TERM_KEYITEMS: - case HELP_TERM_POKEBALLS: - case HELP_TERM_POKEDEX: - case HELP_TERM_PLAY_TIME: - case HELP_TERM_BADGES: - case HELP_TERM_TEXT_SPEED: - case HELP_TERM_BATTLE_SCENE: - case HELP_TERM_BATTLE_STYLE: - case HELP_TERM_SOUND: - case HELP_TERM_BUTTON_MODE: - case HELP_TERM_FRAME: - case HELP_TERM_CANCEL: - case HELP_TERM_TM: - case HELP_TERM_EVOLUTION: - return TRUE; - case HELP_TERM_HP: - case HELP_TERM_EXP: - case HELP_TERM_ATTACK: - case HELP_TERM_DEFENSE: - case HELP_TERM_SPATK: - case HELP_TERM_SPDEF: - case HELP_TERM_SPEED: - case HELP_TERM_LEVEL: - case HELP_TERM_TYPE: - case HELP_TERM_OT: - case HELP_TERM_ITEM: - case HELP_TERM_ABILITY: - case HELP_TERM_NATURE: - case HELP_TERM_POWER: - case HELP_TERM_ACCURACY: - case HELP_TERM_FNT: - return FlagGet(FLAG_SYS_POKEMON_GET); - case HELP_TERM_HM: - case HELP_TERM_HM_MOVE: - return HasGottenAtLeastOneHM(); - case HELP_TERM_MOVES: - case HELP_TERM_MOVE_TYPE: - case HELP_TERM_PP: - case HELP_TERM_STATUS_PROBLEM: - return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST); - } - return TRUE; - } - if (gHelpSystemState.topic == TOPIC_ABOUT_GAME) - { - switch (id) - { - case HELP_GAME_FUNDAMENTALS_2: - return FlagGet(FLAG_BADGE01_GET); - case HELP_GAME_FUNDAMENTALS_3: - return FlagGet(FLAG_BADGE02_GET); - } - return TRUE; - } - if (gHelpSystemState.topic == TOPIC_TYPE_MATCHUP) - { - return TRUE; - } - - return FALSE; -} - -static bool8 HasGottenAtLeastOneHM(void) -{ - if (FlagGet(FLAG_GOT_HM01) == TRUE) - return TRUE; - if (FlagGet(FLAG_GOT_HM02) == TRUE) - return TRUE; - if (FlagGet(FLAG_GOT_HM03) == TRUE) - return TRUE; - if (FlagGet(FLAG_GOT_HM04) == TRUE) - return TRUE; - if (FlagGet(FLAG_GOT_HM05) == TRUE) - return TRUE; - if (FlagGet(FLAG_GOT_HM06) == TRUE) - return TRUE; - if (FlagGet(FLAG_HIDE_FOUR_ISLAND_ICEFALL_CAVE_1F_HM07) == TRUE) - return TRUE; - return FALSE; -} - -bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - switch (helpListMenu->state) - { - case 8: - return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer); - case 9: - return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer); - case 10: - return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer); - case 0: - return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer); - case 1: - return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer); - case 2: - return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer); - case 3: - return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer); - case 4: - return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer); - case 5: - return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer); - case 6: - return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer); - } - return FALSE; -} - -bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - PrintTextOnPanel2Row52RightAlign(gUnknown_841DFA5); - PrintWelcomeMessageOnPanel1(); - HS_ShowOrHideMainWindowText(1); - HS_ShowOrHideControlsGuideInTopRight(1); - helpListMenu->state = 9; - return TRUE; -} - -bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - if (JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - helpListMenu->state = 10; - } - return TRUE; -} - -bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - gHelpSystemState.scrollMain = 0; - ResetHelpSystemCursor(helpListMenu); - BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer); - helpListMenu->state = 0; - return TRUE; -} - -bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - s32 input = HelpSystem_GetMenuInput(); - switch (input) - { - case -6: - case -2: - return FALSE; - case -5: - case -4: - PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer); - break; - case -3: - case -1: - break; - default: - gHelpSystemState.topic = input; - helpListMenu->state = 1; - break; - } - return TRUE; -} - -bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - gHelpSystemState.level = 1; - gHelpSystemState.scrollMain = helpListMenu->cursorPos; - ResetHelpSystemCursor(helpListMenu); - BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer); - HS_UpdateMenuScrollArrows(); - HelpSystem_SetInputDelay(2); - helpListMenu->state = 3; - return TRUE; -} - -bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - HS_ShowOrHideScrollArrows(0, 0); - HS_ShowOrHideScrollArrows(1, 0); - gHelpSystemState.level = 0; - BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer); - helpListMenu->state = 0; - return TRUE; -} - -bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - s32 input = HelpSystem_GetMenuInput(); - switch (input) - { - case -6: - return FALSE; - case -2: - helpListMenu->state = 2; - break; - case -5: - case -4: - case -3: - case -1: - break; - default: - gHelpSystemState.scrollSub = input; - helpListMenu->state = 4; - break; - } - return TRUE; -} - -void HelpSystem_PrintTopicLabel(void) -{ - HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState.topic], 0, 0); -} - -bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - gHelpSystemState.level = 2; - HS_ShowOrHideMainWindowText(0); - HelpSystem_FillPanel1(); - PrintTextOnPanel2Row52RightAlign(gUnknown_841DFBE); - HS_SetMainWindowBgBrightness(1); - HS_ShowOrHideHeaderAndFooterLines_Darker(1); - - if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO) - { - HelpSystem_PrintTwoStrings(sHelpSystemSpecializedQuestionTextPtrs[gHelpSystemState.scrollSub], sHelpSystemSpecializedAnswerTextPtrs[gHelpSystemState.scrollSub]); - } - else if (gHelpSystemState.topic == TOPIC_HOW_TO_DO) - { - HelpSystem_PrintTwoStrings(sHelpSystemMenuTopicTextPtrs[gHelpSystemState.scrollSub], sHelpSystemHowToUseMenuTextPtrs[gHelpSystemState.scrollSub]); - } - else if (gHelpSystemState.topic == TOPIC_TERMS) - { - HelpSystem_PrintTwoStrings(sHelpSystemTermTextPtrs[gHelpSystemState.scrollSub], sHelpSystemTermDefinitionsTextPtrs[gHelpSystemState.scrollSub]); - } - else if (gHelpSystemState.topic == TOPIC_ABOUT_GAME) - { - HelpSystem_PrintTwoStrings(sHelpSystemGeneralTopicTextPtrs[gHelpSystemState.scrollSub], sHelpSystemGeneralTopicDescriptionTextPtrs[gHelpSystemState.scrollSub]); - } - else // TOPIC_TYPE_MATCHUP - { - HelpSystem_PrintTwoStrings(sHelpSystemTypeMatchupTextPtrs[gHelpSystemState.scrollSub], sHelpSystemTypeMatchupDescriptionTextPtrs[gHelpSystemState.scrollSub]); - } - HS_ShowOrHideMainWindowText(1); - HS_ShowOrHideControlsGuideInTopRight(1); - helpListMenu->state = 6; - return TRUE; -} - -bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - gHelpSystemState.level = 1; - BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer); - HS_UpdateMenuScrollArrows(); - HelpSystem_SetInputDelay(2); - helpListMenu->state = 3; - return TRUE; -} - -bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - helpListMenu->state = 5; - return TRUE; - } - if (JOY_NEW(L_BUTTON | R_BUTTON)) - return FALSE; - return TRUE; -} - -static void PrintWelcomeMessageOnPanel1(void) -{ - HelpSystem_FillPanel1(); - HelpSystem_PrintTextAt(Help_Text_Greetings, 0, 0); -} - -static void PrintTextOnPanel2Row52RightAlign(const u8 * str) -{ - HelpSystem_FillPanel2(); - HelpSystem_PrintTextRightAlign_Row52(str); -} - -u8 GetHelpSystemMenuLevel(void) -{ - return gHelpSystemState.level; -} - -static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu) -{ - helpListMenu->itemsAbove = 0; - helpListMenu->cursorPos = 0; -} - -static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer) -{ - s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index; - if (index == -2) - HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[5]); - else - HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[index]); - HS_ShowOrHideToplevelTooltipWindow(1); -} diff --git a/src/help_system_util.c b/src/help_system_util.c new file mode 100644 index 000000000..87bc9fe4d --- /dev/null +++ b/src/help_system_util.c @@ -0,0 +1,856 @@ +#include "global.h" +#include "gflib.h" +#include "decompress.h" +#include "m4a.h" +#include "event_data.h" +#include "help_system.h" +#include "list_menu.h" +#include "strings.h" +#include "constants/songs.h" + +#define ZERO 0 + +bool8 gHelpSystemEnabled; + +struct HelpSystemVideoState +{ + /*0x00*/ MainCallback savedVblankCb; + /*0x04*/ MainCallback savedHblankCb; + /*0x08*/ u16 savedDispCnt; + /*0x0a*/ u16 savedBg0Cnt; + /*0x0c*/ u16 savedBg0Hofs; + /*0x0e*/ u16 savedBg0Vofs; + /*0x10*/ u16 savedBldCnt; + /*0x12*/ u8 savedTextColor[3]; + /*0x15*/ u8 state; +}; + +static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0}; +EWRAM_DATA u8 gDisableHelpSystemVolumeReduce = 0; +EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE; +static EWRAM_DATA u8 sDelayTimer = 0; +static EWRAM_DATA u8 sInHelpSystem = 0; +static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0}; +EWRAM_DATA struct HelpSystemListMenu gHelpSystemListMenu = {0}; +EWRAM_DATA struct ListMenuItem gHelpSystemListMenuItems[52] = {0}; + +static const u16 sTiles[] = INCBIN_U16("graphics/help_system/bg_tiles.4bpp"); +static const u16 sPals[] = INCBIN_U16("graphics/help_system/bg_tiles.gbapal"); + +u8 RunHelpSystemCallback(void) +{ + s32 i; + + switch (sVideoState.state) + { + case 0: + sInHelpSystem = 0; + if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP) + return 0; + if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE) + return 0; + if (JOY_NEW(L_BUTTON | R_BUTTON)) + { + if (!HelpSystem_IsSinglePlayer() || !gHelpSystemEnabled) + { + PlaySE(SE_HELP_ERROR); + return 0; + } + m4aMPlayStop(&gMPlayInfo_SE1); + m4aMPlayStop(&gMPlayInfo_SE2); + PlaySE(SE_HELP_OPEN); + if (!gDisableHelpSystemVolumeReduce) + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80); + SaveCallbacks(); + sInHelpSystem = 1; + sVideoState.state = 1; + } + break; + case 1: + SaveMapTiles(); + SaveMapGPURegs(); + SaveMapTextColors(); + (*(vu16 *)PLTT) = sPals[15]; + SetGpuReg(REG_OFFSET_DISPCNT, 0); + sVideoState.state = 2; + break; + case 2: + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT); + RequestDma3Copy(sPals, (void *)PLTT, sizeof(sPals), DMA3_16BIT); + RequestDma3Copy(sTiles, gDecompressionBuffer + 0x3EE0, sizeof(sTiles), DMA3_16BIT); + sVideoState.state = 3; + break; + case 3: + HS_BufferFillMapWithTile1FF(); + HelpSystem_FillPanel3(); + HelpSystem_FillPanel2(); + HelpSystem_PrintText_Row61(gString_Help); + HS_ShowOrHideWordHELPinTopLeft(1); + if (HelpSystem_UpdateHasntSeenIntro() == TRUE) + HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems); + else + HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems); + HS_ShowOrHideHeaderAndFooterLines_Lighter(1); + HS_ShowOrHideVerticalBlackBarsAlongSides(1); + CommitTilemap(); + sVideoState.state = 4; + break; + case 4: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31)); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); + sVideoState.state = 5; + break; + case 5: + if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems)) + { + PlaySE(SE_HELP_CLOSE); + sVideoState.state = 6; + } + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, 0); + RestoreMapTiles(); + for (i = 0; i < 0x200; i += 2) + { + *((vu16 *)(PLTT + 0x000 + i)) = sPals[15]; + *((vu16 *)(PLTT + 0x200 + i)) = sPals[15]; + } + sVideoState.state = 7; + break; + case 7: + if (!gDisableHelpSystemVolumeReduce) + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + RestoreMapTextColors(); + RestoreGPURegs(); + sVideoState.state = 8; + break; + case 8: + RestoreCallbacks(); + sInHelpSystem = 0; + sVideoState.state = 0; + break; + } + return sVideoState.state; +} + +void SaveCallbacks(void) +{ + vu16 * dma; + sVideoState.savedVblankCb = gMain.vblankCallback; + sVideoState.savedHblankCb = gMain.hblankCallback; + gMain.vblankCallback = NULL; + gMain.hblankCallback = NULL; + + dma = (void *)REG_ADDR_DMA0; + dma[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); + dma[5] &= ~DMA_ENABLE; + dma[5]; +} + +void SaveMapGPURegs(void) +{ + sVideoState.savedDispCnt = GetGpuReg(REG_OFFSET_DISPCNT); + sVideoState.savedBg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT); + sVideoState.savedBg0Hofs = GetGpuReg(REG_OFFSET_BG0HOFS); + sVideoState.savedBg0Vofs = GetGpuReg(REG_OFFSET_BG0VOFS); + sVideoState.savedBldCnt = GetGpuReg(REG_OFFSET_BLDCNT); +} + +void SaveMapTiles(void) +{ + RequestDma3Copy((void *)BG_CHAR_ADDR(3), sMapTilesBackup, BG_CHAR_SIZE, DMA3_16BIT); +} + +void SaveMapTextColors(void) +{ + SaveTextColors( + &sVideoState.savedTextColor[0], + &sVideoState.savedTextColor[1], + &sVideoState.savedTextColor[2] + ); +} + +void RestoreCallbacks(void) +{ + gMain.vblankCallback = sVideoState.savedVblankCb; + gMain.hblankCallback = sVideoState.savedHblankCb; +} + +void RestoreGPURegs(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, sVideoState.savedBldCnt); + SetGpuReg(REG_OFFSET_BG0HOFS, sVideoState.savedBg0Hofs); + SetGpuReg(REG_OFFSET_BG0VOFS, sVideoState.savedBg0Vofs); + SetGpuReg(REG_OFFSET_BG0CNT, sVideoState.savedBg0Cnt); + SetGpuReg(REG_OFFSET_DISPCNT, sVideoState.savedDispCnt); +} + +void RestoreMapTiles(void) +{ + RequestDma3Copy(sMapTilesBackup, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT); +} + +void RestoreMapTextColors(void) +{ + RestoreTextColors( + &sVideoState.savedTextColor[0], + &sVideoState.savedTextColor[1], + &sVideoState.savedTextColor[2] + ); +} + +void CommitTilemap(void) +{ + RequestDma3Copy(gDecompressionBuffer, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT); +} + +void HS_DrawBgTilemapRect(u16 baseTile, u8 left, u8 top, u8 width, u8 height, u16 increment) +{ + u16 i, j; + + for (i = top; i < top + height; i++) + { + for (j = left; j < left + width; j++) + { + *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseTile; + baseTile += increment; + } + } + + CommitTilemap(); +} + +void HS_BufferFillMapWithTile1FF(void) +{ + HS_DrawBgTilemapRect(0x1FF, 0, 0, 30, 20, 0); +} + +void HS_ShowOrHideWordHELPinTopLeft(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 1, 0, 7, 2, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x1E8, 1, 0, 7, 2, 1); + break; + } +} + +void HS_ShowOrHideControlsGuideInTopRight(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 13, 0, 16, 2, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x1A0, 13, 0, 16, 2, 1); + break; + } +} + +void HS_ShowOrHideMainWindowText(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 2, 3, 26, 16, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x000, 2, 3, 26, 16, 1); + break; + } +} + +void HS_SetMainWindowBgBrightness(u8 mode) +{ + switch (mode) + { + case 0: + // Brighter + HS_DrawBgTilemapRect(0x1FF, 1, 3, 28, 16, 0); + break; + case 1: + // Darker + HS_DrawBgTilemapRect(0x1FA, 1, 3, 28, 17, 0); + break; + } +} + +void HS_ShowOrHideToplevelTooltipWindow(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 2, 14, 26, 5, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x11E, 2, 14, 26, 5, 1); + break; + } +} + +void HS_ShowOrHideHeaderAndFooterLines_Lighter(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0); + HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x1F7, 1, 2, 28, 1, 0); + HS_DrawBgTilemapRect(0x1F8, 1, 19, 28, 1, 0); + break; + } +} + +void HS_ShowOrHideHeaderAndFooterLines_Darker(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0); + HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x1FB, 1, 2, 28, 1, 0); + HS_DrawBgTilemapRect(0x1FC, 1, 19, 28, 1, 0); + break; + } +} + +void HS_ShowOrHideVerticalBlackBarsAlongSides(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 0, 0, 1, 20, 0); + HS_DrawBgTilemapRect(0x1FF, 29, 0, 1, 20, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x1F9, 0, 0, 1, 20, 0); + HS_DrawBgTilemapRect(0x1F9, 29, 0, 1, 20, 0); + break; + } +} + +void HS_ShowOrHideHeaderLine_Darker_FooterStyle(u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 1, 5, 28, 1, 0); + break; + case 1: + HS_DrawBgTilemapRect(0x1FC, 1, 5, 28, 1, 0); + break; + } +} + +void HS_ShowOrHideScrollArrows(u8 which, u8 mode) +{ + switch (mode) + { + case 0: + HS_DrawBgTilemapRect(0x1FF, 28, 3, 1, 1, 0); + HS_DrawBgTilemapRect(0x1FF, 28, 18, 1, 1, 0); + break; + case 1: + if (which == 0) // top + HS_DrawBgTilemapRect(0x1FE, 28, 3, 1, 1, 0); + else // bottom + HS_DrawBgTilemapRect(0x1FD, 28, 18, 1, 1, 0); + break; + } +} + +void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height) +{ + // font -> sp+24 + // dest -> sp+28 + // src -> r9 + // x -> sp+34 + // y -> r10 + // width -> sp+2C + // height -> sp+30 + struct Bitmap srcBlit; + struct Bitmap destBlit; + u8 orig_x = x; + u8 i = 0; + s32 clearPixels = 0; + + while (1) + { + u16 curChar = *src; + src++; + switch (curChar) + { + case EOS: + return; + case CHAR_NEWLINE: + x = orig_x; + y += gGlyphInfo.height + 1; + break; + case PLACEHOLDER_BEGIN: + curChar = *src; + src++; + if (curChar == PLACEHOLDER_ID_PLAYER) { + for (i = 0; i < 10; i++) + { + if (gSaveBlock2Ptr->playerName[i] == EOS) + { + break; + } + DecompressAndRenderGlyph(font, gSaveBlock2Ptr->playerName[i], &srcBlit, &destBlit, dest, x, y, width, height); + // This is required to match a dummy [sp+#0x24] read here + if (font == 0) + { + x += gGlyphInfo.width; + } + else + { + x += gGlyphInfo.width + ZERO; + } + } + } + else if (curChar == PLACEHOLDER_ID_STRING_VAR_1) + { + for (i = 0; ; i++) + { + if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC) == TRUE) + { + if (gString_Bill[i] == EOS) + { + break; + } + DecompressAndRenderGlyph(font, gString_Bill[i], &srcBlit, &destBlit, dest, x, y, width, height); + } + else + { + if (gString_Someone[i] == EOS) + { + break; + } + DecompressAndRenderGlyph(font, gString_Someone[i], &srcBlit, &destBlit, dest, x, y, width, height); + } + if (font == 0) + { + x += gGlyphInfo.width; + } + else + { + x += gGlyphInfo.width + ZERO; + } + } + } + break; + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + x = orig_x; + y += gGlyphInfo.height + 1; + break; + case EXT_CTRL_CODE_BEGIN: + curChar = *src; + src++; + switch (curChar) + { + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: + src++; + //fallthrough + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: + src++; + //fallthrough + case EXT_CTRL_CODE_COLOR: + case EXT_CTRL_CODE_HIGHLIGHT: + case EXT_CTRL_CODE_SHADOW: + case EXT_CTRL_CODE_PALETTE: + case EXT_CTRL_CODE_FONT: + case EXT_CTRL_CODE_PAUSE: + case EXT_CTRL_CODE_ESCAPE: + case EXT_CTRL_CODE_SHIFT_RIGHT: + case EXT_CTRL_CODE_SHIFT_DOWN: + src++; + break; + case EXT_CTRL_CODE_CLEAR_TO: + { +#ifdef NONMATCHING + curChar = *src; + clearPixels = curChar + orig_x - x; +#else // dumb fakematch + s32 r0; + register const u8 * _src asm("r2") = src; + asm("":::"r1"); + r0 = *_src; + r0 += orig_x; + clearPixels = r0 - x; +#endif + if (clearPixels > 0) + { + destBlit.pixels = dest; + destBlit.width = width * 8; + destBlit.height = height * 8; + FillBitmapRect4Bit(&destBlit, x, y, clearPixels, GetFontAttribute(font, FONTATTR_MAX_LETTER_HEIGHT), + 0); + x += clearPixels; + } + src++; + break; + } + case EXT_CTRL_CODE_CLEAR: + case EXT_CTRL_CODE_SKIP: + case EXT_CTRL_CODE_MIN_LETTER_SPACING: + src++; + break; + case EXT_CTRL_CODE_RESET_FONT: + case EXT_CTRL_CODE_WAIT_BUTTON: + case EXT_CTRL_CODE_WAIT_SE: + case EXT_CTRL_CODE_FILL_WINDOW: + break; + case EXT_CTRL_CODE_JPN: + case EXT_CTRL_CODE_ENG: + break; + } + break; + case CHAR_KEYPAD_ICON: + curChar = *src; + src++; + srcBlit.pixels = (u8 *)gKeypadIconTiles + 0x20 * GetKeypadIconTileOffset(curChar); + srcBlit.width = 0x80; + srcBlit.height = 0x80; + destBlit.pixels = dest; + destBlit.width = width * 8; + destBlit.height = height * 8; + BlitBitmapRect4Bit(&srcBlit, &destBlit, 0, 0, x, y, GetKeypadIconWidth(curChar), GetKeypadIconHeight(curChar), 0); + x += GetKeypadIconWidth(curChar); + break; + case CHAR_EXTRA_EMOJI: + curChar = *src + 0x100; + src++; + //fallthrough + default: + if (curChar == CHAR_SPACE) + { + if (font == 0) + { + x += 5; + } + else + { + x += 4; + } + } + else + { + DecompressAndRenderGlyph(font, curChar, &srcBlit, &destBlit, dest, x, y, width, height); + if (font == 0) + { + x += gGlyphInfo.width; + } + else + { + x += gGlyphInfo.width + ZERO; + } + } + break; + } + } +} + +void DecompressAndRenderGlyph(u8 font, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height) +{ + if (font == 0) + DecompressGlyphFont0(glyph, FALSE); + else if (font == 5) + DecompressGlyphFont5(glyph, FALSE); + else + DecompressGlyphFont2(glyph, FALSE); + srcBlit->pixels = gGlyphInfo.pixels; + srcBlit->width = 16; + srcBlit->height = 16; + destBlit->pixels = destBuffer; + destBlit->width = width * 8; + destBlit->height = height * 8; + BlitBitmapRect4Bit(srcBlit, destBlit, 0, 0, x, y, gGlyphInfo.width, gGlyphInfo.height, 0); +} + +void HelpSystem_PrintText_Row61(const u8 * str) +{ + GenerateFontHalfRowLookupTable(1, 15, 2); + HelpSystemRenderText(5, gDecompressionBuffer + 0x3D00, str, 6, 2, 7, 2); +} + +void HelpSystem_PrintTextRightAlign_Row52(const u8 * str) +{ + s32 left = 0x7C - GetStringWidth(0, str, 0); + GenerateFontHalfRowLookupTable(1, 15, 2); + HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2); +} + +void HelpSystem_PrintTextAt(const u8 * str, u8 x, u8 y) +{ + GenerateFontHalfRowLookupTable(1, 15, 2); + HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str, x, y, 26, 16); +} + +void HelpSystem_PrintTwoStrings(const u8 * str1, const u8 * str2) +{ + CpuFill16(0xEEEE, gDecompressionBuffer + 0x0000, 0x3400); + GenerateFontHalfRowLookupTable(1, 14, 2); + HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str1, 0, 0, 26, 16); + HelpSystemRenderText(2, gDecompressionBuffer + 0x09C0, str2, 0, 0, 26, 13); +} + +void HelpSystem_PrintText_813C584(const u8 * str) +{ + CpuFill16(0x1111, gDecompressionBuffer + 0x23C0, 0x1040); + GenerateFontHalfRowLookupTable(2, 1, 3); + HelpSystemRenderText(2, gDecompressionBuffer + 0x23C0, str, 2, 6, 26, 5); +} + +void HelpSystem_FillPanel3(void) +{ + CpuFill16(0xFFFF, gDecompressionBuffer + 0x3D00, 0x1C0); +} + +void HelpSystem_FillPanel2(void) +{ + CpuFill16(0xFFFF, gDecompressionBuffer + 0x3400, 0x400); +} + +void HelpSystem_FillPanel1(void) +{ + CpuFill16(0xFFFF, gDecompressionBuffer + 0x0000, 0x3400); +} + +void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2) +{ + gHelpSystemListMenu.sub = a0->sub; + gHelpSystemListMenu.itemsAbove = a1; + gHelpSystemListMenu.cursorPos = a2; + gHelpSystemListMenu.state = 0; + if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed) + gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems; + HS_ShowOrHideMainWindowText(0); + HelpSystem_FillPanel1(); + PrintListMenuItems(); + PlaceListMenuCursor(); +} + +void HelpSystem_SetInputDelay(u8 a0) +{ + sDelayTimer = a0; +} + +s32 HelpSystem_GetMenuInput(void) +{ + if (sDelayTimer != 0) + { + sDelayTimer--; + return -1; + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index; + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + return -2; + } + else if (JOY_NEW(L_BUTTON | R_BUTTON)) + { + return -6; + } + else if (JOY_REPT(DPAD_UP)) + { + if (!MoveCursor(1, 0)) + PlaySE(SE_SELECT); + return -4; + } + else if (JOY_REPT(DPAD_DOWN)) + { + if (!MoveCursor(1, 1)) + PlaySE(SE_SELECT); + return -5; + } + else if (JOY_REPT(DPAD_LEFT)) + { + if (!MoveCursor(7, 0)) + PlaySE(SE_SELECT); + return -4; + } + else if (JOY_REPT(DPAD_RIGHT)) + { + if (!MoveCursor(7, 1)) + PlaySE(SE_SELECT); + return -5; + } + else + return -1; +} + +void HS_UpdateMenuScrollArrows(void) +{ + u8 topItemIdx = gHelpSystemListMenu.sub.totalItems - 7; + if (gHelpSystemListMenu.sub.totalItems > 7) + { + s32 cursorPos = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos; + HS_ShowOrHideScrollArrows(0, 0); // Hide both + if (cursorPos == 0) + HS_ShowOrHideScrollArrows(1, 1); // Show bottom + else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0) + HS_ShowOrHideScrollArrows(1, 1); // Show bottom + else if (gHelpSystemListMenu.itemsAbove == topItemIdx) + HS_ShowOrHideScrollArrows(0, 1); // Show top + else if (gHelpSystemListMenu.itemsAbove != 0) + { + // Show both + HS_ShowOrHideScrollArrows(0, 1); + HS_ShowOrHideScrollArrows(1, 1); + } + } +} + +void PrintListMenuItems(void) +{ + u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1; + s32 i; + s32 r5 = gHelpSystemListMenu.itemsAbove; + + for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++) + { + u8 x = gHelpSystemListMenu.sub.left + 8; + u8 y = gHelpSystemListMenu.sub.top + glyphHeight * i; + HelpSystem_PrintTextAt(gHelpSystemListMenu.sub.items[r5].label, x, y); + r5++; + } +} + +void PlaceListMenuCursor(void) +{ + u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1; + u8 x = gHelpSystemListMenu.sub.left; + u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos; + HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y); +} + +void HS_RemoveSelectionCursorAt(u8 i) +{ + u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1; + u8 x = gHelpSystemListMenu.sub.left; + u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight; + HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y); +} + +u8 TryMoveCursor1(u8 dirn) +{ + u16 midPoint; + if (dirn == 0) + { + if (gHelpSystemListMenu.sub.maxShowed == 1) + midPoint = 0; + else + midPoint = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1; + if (gHelpSystemListMenu.itemsAbove == 0) + { + if (gHelpSystemListMenu.cursorPos != 0) + { + gHelpSystemListMenu.cursorPos--; + return 1; + } + else + return 0; + } + if (gHelpSystemListMenu.cursorPos > midPoint) + { + gHelpSystemListMenu.cursorPos--; + return 1; + } + else + { + gHelpSystemListMenu.itemsAbove--; + return 2; + } + } + else + { + if (gHelpSystemListMenu.sub.maxShowed == 1) + midPoint = 0; + else + midPoint = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1); + if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed) + { + if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1) + { + gHelpSystemListMenu.cursorPos++; + return 1; + } + else + return 0; + } + else if (gHelpSystemListMenu.cursorPos < midPoint) + { + gHelpSystemListMenu.cursorPos++; + return 1; + } + else + { + gHelpSystemListMenu.itemsAbove++; + return 2; + } + } +} + +bool8 MoveCursor(u8 by, u8 dirn) +{ + u8 r7 = gHelpSystemListMenu.cursorPos; + u8 flags = 0; + s32 i; + for (i = 0; i < by; i++) + flags |= TryMoveCursor1(dirn); + + switch (flags) + { + case 0: + default: + // neither changed + return TRUE; + case 1: + // changed cursorPos only + HS_RemoveSelectionCursorAt(r7); + PlaceListMenuCursor(); + CommitTilemap(); + break; + case 2: + case 3: + // changed itemsAbove + if (GetHelpSystemMenuLevel() == 1) + { + HelpSystem_SetInputDelay(2); + HelpSystem_FillPanel1(); + PrintListMenuItems(); + PlaceListMenuCursor(); + HelpSystem_PrintTopicLabel(); + HS_UpdateMenuScrollArrows(); + } + else + { + HS_ShowOrHideMainWindowText(0); + HelpSystem_FillPanel1(); + PrintListMenuItems(); + PlaceListMenuCursor(); + HS_ShowOrHideMainWindowText(1); + } + CommitTilemap(); + break; + } + return FALSE; +} diff --git a/src/strings.c b/src/strings.c index d620cdc80..e183e5167 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1173,10 +1173,10 @@ const u8 gUnknown_841DF8B[] = _("BRONZE"); const u8 gUnknown_841DF92[] = _("COPPER"); const u8 gUnknown_841DF99[] = _("SILVER"); const u8 gUnknown_841DFA0[] = _("GOLD"); -const u8 gUnknown_841DFA5[] = _("{A_BUTTON}NEXT"); -const u8 gUnknown_841DFAC[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}END"); -const u8 gUnknown_841DFBE[] = _("{A_BUTTON}{B_BUTTON}CANCEL"); -const u8 gUnknown_841DFC9[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}CANCEL"); +const u8 gText_HelpSystemControls_A_Next[] = _("{A_BUTTON}NEXT"); +const u8 gText_HelpSystemControls_PickOkEnd[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}END"); +const u8 gText_HelpSystemControls_AorBtoCancel[] = _("{A_BUTTON}{B_BUTTON}CANCEL"); +const u8 gText_HelpSystemControls_PickOkCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}CANCEL"); const u8 gEasyChatGroupName_Pokemon[] = _("POKéMON"); const u8 gEasyChatGroupName_Trainer[] = _("TRAINER"); const u8 gEasyChatGroupName_Status[] = _("STATUS"); diff --git a/sym_common.txt b/sym_common.txt index 33d49ecff..3627e1478 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -59,11 +59,11 @@ .align 2 .include "party_menu.o" .align 2 - .include "help_system_812B1E0.o" + .include "help_system.o" .align 4 .include "fame_checker.o" .align 2 - .include "help_system.o" + .include "help_system_util.o" .align 4 .include "mevent.o" .align 4 diff --git a/sym_ewram.txt b/sym_ewram.txt index d92def7f2..d68dec9a9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -223,7 +223,7 @@ .align 2 .include "src/union_room_chat_objects.o" .align 2 - .include "src/help_system_812B1E0.o" + .include "src/help_system.o" .align 2 .include "src/fame_checker.o" .align 2 @@ -235,7 +235,7 @@ .align 2 .include "src/pokemon_summary_screen.o" .align 2 - .include "src/help_system.o" + .include "src/help_system_util.o" .align 2 .include "src/dynamic_placeholder_text_util.o" .align 2 |