summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-03-23 11:43:46 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-03-23 11:43:46 -0400
commit10a96540ffcde633fa35344b5fe0cb0c4ae34fee (patch)
tree99aa53a713468bc6285d1502fd62f473a895cac5
parentd1f62285b56210c1fe7e368edf63e9d7f3fd075b (diff)
Rename help system C files
-rw-r--r--common_syms/help_system.txt3
-rw-r--r--common_syms/help_system_812B1E0.txt2
-rw-r--r--common_syms/help_system_util.txt1
-rw-r--r--graphics/help_system/bg_tiles.png (renamed from graphics/help_system/unk_8464008.png)bin200 -> 200 bytes
-rw-r--r--include/strings.h8
-rw-r--r--ld_script.txt8
-rw-r--r--src/help_system.c3002
-rw-r--r--src/help_system_812B1E0.c2480
-rw-r--r--src/help_system_util.c856
-rw-r--r--src/strings.c8
-rw-r--r--sym_common.txt4
-rw-r--r--sym_ewram.txt4
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
index 339a685d5..339a685d5 100644
--- a/graphics/help_system/unk_8464008.png
+++ b/graphics/help_system/bg_tiles.png
Binary files differ
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