summaryrefslogtreecommitdiff
path: root/src/start_menu.c
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2017-09-05 13:01:24 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2017-09-05 13:01:24 +0200
commit1680fc0b81675b0e1cc988ece1c79075a56dbcf0 (patch)
tree66d9f8d0691fd6df39a566ecb854e7d880730c85 /src/start_menu.c
parent54b83061152ce6e85d1ce7185ab3645d7448e03d (diff)
start start menu decomp
Diffstat (limited to 'src/start_menu.c')
-rw-r--r--src/start_menu.c231
1 files changed, 231 insertions, 0 deletions
diff --git a/src/start_menu.c b/src/start_menu.c
new file mode 100644
index 000000000..ffcab5220
--- /dev/null
+++ b/src/start_menu.c
@@ -0,0 +1,231 @@
+#include "global.h"
+#include "start_menu.h"
+#include "menu.h"
+#include "safari_zone.h"
+#include "event_data.h"
+#include "window.h"
+#include "string_util.h"
+#include "text.h"
+
+// Menu actions
+enum
+{
+ MENU_ACTION_POKEDEX,
+ MENU_ACTION_POKEMON,
+ MENU_ACTION_BAG,
+ MENU_ACTION_POKENAV,
+ MENU_ACTION_PLAYER,
+ MENU_ACTION_SAVE,
+ MENU_ACTION_OPTION,
+ MENU_ACTION_EXIT,
+ MENU_ACTION_RETIRE_SAFARI,
+ MENU_ACTION_PLAYER_LINK,
+ MENU_ACTION_REST_FRONTIER,
+ MENU_ACTION_RETIRE_FRONTIER,
+ MENU_ACTION_PYRAMID_BAG
+};
+
+static void BuildStartMenuActions_LinkMode(void);
+static void BuildStartMenuActions_UnionRoom(void);
+static void BuildStartMenuActions_SafariZone(void);
+static void BuildStartMenuActions_BattlePike(void);
+static void BuildStartMenuActions_BattlePyramid(void);
+static void BuildStartMenuActions_MultiBattleRoom(void);
+static void BuildStartMenuActions_Normal(void);
+u8 StartMenu_PlayerName(void);
+
+extern bool32 is_c1_link_related_active(void);
+extern bool32 InUnionRoom(void);
+extern bool8 InBattlePike(void);
+extern bool8 InBattlePyramid(void);
+extern bool8 InMultiBattleRoom(void);
+extern void sub_81973FC(u8 windowId, u8 a1);
+extern void sub_8198070(u8 windowId, u8 a1);
+
+EWRAM_DATA u8 sSafariBallsWindowId = 0;
+EWRAM_DATA u8 sBattlePyramidFloorWindowId = 0;
+EWRAM_DATA u8 sStartMenuCursorPos = 0;
+EWRAM_DATA u8 sNumStartMenuActions = 0;
+EWRAM_DATA u8 sCurrentStartMenuActions[9] = {0};
+
+void BuildStartMenuActions(void)
+{
+ sNumStartMenuActions = 0;
+ if (is_c1_link_related_active() == TRUE)
+ BuildStartMenuActions_LinkMode();
+ else if (InUnionRoom() == TRUE)
+ BuildStartMenuActions_UnionRoom();
+ else if (GetSafariZoneFlag() == TRUE)
+ BuildStartMenuActions_SafariZone();
+ else if (InBattlePike())
+ BuildStartMenuActions_BattlePike();
+ else if (InBattlePyramid())
+ BuildStartMenuActions_BattlePyramid();
+ else if (InMultiBattleRoom())
+ BuildStartMenuActions_MultiBattleRoom();
+ else
+ BuildStartMenuActions_Normal();
+}
+
+void AddStartMenuAction(u8 action)
+{
+ AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action);
+}
+
+static void BuildStartMenuActions_Normal(void)
+{
+ if (FlagGet(SYS_POKEDEX_GET) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKEDEX);
+ if (FlagGet(SYS_POKEMON_GET) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ if (FlagGet(SYS_POKENAV_GET) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKENAV);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_SAVE);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_SafariZone(void)
+{
+ AddStartMenuAction(MENU_ACTION_RETIRE_SAFARI);
+ AddStartMenuAction(MENU_ACTION_POKEDEX);
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_LinkMode(void)
+{
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ if (FlagGet(SYS_POKENAV_GET) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKENAV);
+ AddStartMenuAction(MENU_ACTION_PLAYER_LINK);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_UnionRoom(void)
+{
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ if (FlagGet(SYS_POKENAV_GET) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKENAV);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_BattlePike(void)
+{
+ AddStartMenuAction(MENU_ACTION_POKEDEX);
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_BattlePyramid(void)
+{
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_PYRAMID_BAG);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_REST_FRONTIER);
+ AddStartMenuAction(MENU_ACTION_RETIRE_FRONTIER);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_MultiBattleRoom(void)
+{
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+extern const struct WindowTemplate gSafariBallsWindowTemplate;
+extern const struct WindowTemplate gPyramidFloorWindowTemplate_1;
+extern const struct WindowTemplate gPyramidFloorWindowTemplate_2;
+extern const u8 gOtherText_SafariStock[];
+
+void DisplaySafariBallsWindow(void)
+{
+ sSafariBallsWindowId = AddWindow(&gSafariBallsWindowTemplate);
+ PutWindowTilemap(sSafariBallsWindowId);
+ sub_81973FC(sSafariBallsWindowId, 0);
+ ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_SafariStock);
+ PrintTextOnWindow(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
+ CopyWindowToVram(sSafariBallsWindowId, 2);
+}
+
+extern const u8* const gUnknown_08510510[];
+extern const u8 gOtherText_BattlePyramid_X[];
+
+void DisplayPyramidFloorWindow(void)
+{
+ // TODO: fix location
+ if (*(u16*)(&gSaveBlock2Ptr->field_CAA[8]) == 7)
+ sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_1);
+ else
+ sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_2);
+ PutWindowTilemap(sBattlePyramidFloorWindowId);
+ sub_81973FC(sBattlePyramidFloorWindowId, 0);
+ StringCopy(gStringVar1, gUnknown_08510510[*(u16*)(&gSaveBlock2Ptr->field_CAA[8])]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_BattlePyramid_X);
+ PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
+ CopyWindowToVram(sBattlePyramidFloorWindowId, 2);
+}
+
+void RemoveExtraStartMenuWindows(void)
+{
+ if (GetSafariZoneFlag())
+ {
+ sub_8198070(sSafariBallsWindowId, 0);
+ CopyWindowToVram(sSafariBallsWindowId, 2);
+ RemoveWindow(sSafariBallsWindowId);
+ }
+ if (InBattlePyramid())
+ {
+ sub_8198070(sBattlePyramidFloorWindowId, 0);
+ RemoveWindow(sBattlePyramidFloorWindowId);
+ }
+}
+
+extern const struct MenuAction sStartMenuItems[];
+
+/*
+// Prints n menu items starting at *index
+static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n)
+{
+ s8 _index = *index;
+
+ do
+ {
+ if (sStartMenuItems[sCurrentStartMenuActions[_index]].func == StartMenu_PlayerName)
+ {
+
+ }
+ else
+ {
+
+ }
+
+ } while (++_index > sNumStartMenuActions);
+
+ if (--n == 0)
+ {
+ *index = _index;
+ return FALSE;
+ }
+ else
+ {
+ *index = _index;
+ return TRUE;
+ }
+}*/