summaryrefslogtreecommitdiff
path: root/src/overworld.c
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-28 14:03:51 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-28 14:03:51 -0400
commitf0fe4904d0fa8b4e964b64b896c10d4599eb15d3 (patch)
tree740143a91293bc1f480f0fdf934ffe0cbbd71f13 /src/overworld.c
parent9bcc82856db7e6417bb56265bbcc04dae290cbf3 (diff)
through sub_8056918
Diffstat (limited to 'src/overworld.c')
-rw-r--r--src/overworld.c291
1 files changed, 287 insertions, 4 deletions
diff --git a/src/overworld.c b/src/overworld.c
index d4299d044..a5e61e844 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -4,6 +4,7 @@
#include "event_scripts.h"
#include "field_camera.h"
#include "field_control_avatar.h"
+#include "field_fadetransition.h"
#include "field_message_box.h"
#include "field_player_avatar.h"
#include "field_screen_effect.h"
@@ -11,13 +12,16 @@
#include "field_weather.h"
#include "fieldmap.h"
#include "heal_location.h"
+#include "link.h"
#include "load_save.h"
#include "m4a.h"
#include "map_name_popup.h"
#include "metatile_behavior.h"
#include "money.h"
+#include "new_game.h"
#include "new_menu_helpers.h"
#include "overworld.h"
+#include "play_time.h"
#include "quest_log.h"
#include "random.h"
#include "renewable_hidden_items.h"
@@ -84,9 +88,22 @@ void SetDefaultFlashLevel(void);
void Overworld_TryMapConnectionMusicTransition(void);
void ChooseAmbientCrySpecies(void);
+void CB2_Overworld(void);
+void CB2_DoChangeMap(void);
+void CB2_LoadMap2(void);
+void c2_80567AC(void);
+void CB2_ReturnToFieldLocal(void);
+void CB2_ReturnToFieldLink(void);
void MoveSaveBlocks_ResetHeap_(void);
void sub_8056E80(void);
void CB1_UpdateLinkState(void);
+void SetFieldVBlankCallback(void);
+void FieldClearVBlankHBlankCallbacks(void);
+void ResetAllMultiplayerState(void);
+void do_load_map_stuff_loop(u8 *state);
+bool32 sub_8056CD8(u8 *state);
+bool32 map_loading_iteration_3(u8 *state);
+bool32 map_loading_iteration_2_link(u8 *state);
extern const struct MapLayout * gMapLayouts[];
extern const struct MapHeader *const *gMapGroups[];
@@ -116,7 +133,7 @@ const u16 sWhiteOutMoneyLossBadgeFlagIDs[] = {
FLAG_BADGE08_GET
};
-void sub_8054BC8(void)
+void DoWhiteOut(void)
{
ScriptContext2_RunNewScript(EventScript_ResetEliteFourEnd);
RemoveMoney(&gSaveBlock1Ptr->money, ComputeWhiteOutMoneyLoss());
@@ -654,7 +671,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
ResetFieldTasksArgs();
mapheader_run_script_with_tag_x5();
if (GetLastUsedWarpMapSectionId() != gMapHeader.regionMapSectionId)
- CreateMapNamePopupIfNotAlreadyRunning(TRUE);
+ ShowMapNamePopup(TRUE);
}
void mli0_load_map(bool32 a1)
@@ -710,7 +727,7 @@ void ResetInitialPlayerAvatarState(void)
gInitialPlayerAvatarState.unk2 = FALSE;
}
-void sub_80559F8(u8 dirn)
+void SetInitialPlayerAvatarStateWithDirection(u8 dirn)
{
gInitialPlayerAvatarState.direction = dirn;
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
@@ -1264,7 +1281,7 @@ bool32 IsUpdateLinkStateCBActive(void)
return FALSE;
}
-void sub_805644C(u16 newKeys, u16 heldKeys)
+void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
{
struct FieldInput fieldInput;
@@ -1289,3 +1306,269 @@ void sub_805644C(u16 newKeys, u16 heldKeys)
}
RunQuestLogCB();
}
+
+void DoCB1_Overworld_QuestLogPlayback(void)
+{
+ struct FieldInput fieldInput;
+
+ sub_8112B3C();
+ sub_805BEB8();
+ sub_8111C68();
+ FieldClearPlayerInput(&fieldInput);
+ fieldInput = gUnknown_3005E90;
+ FieldInput_HandleCancelSignpost(&fieldInput);
+ if (!ScriptContext2_IsEnabled())
+ {
+ if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
+ {
+ ScriptContext2_Enable();
+ DismissMapNamePopup();
+ }
+ else
+ {
+ RunQuestLogCB();
+ }
+ }
+ else if (sub_8111CD0() == TRUE)
+ {
+ RunQuestLogCB();
+ }
+ FieldClearPlayerInput(&gUnknown_3005E90);
+}
+
+void CB1_Overworld(void)
+{
+ if (gMain.callback2 == CB2_Overworld)
+ {
+ if (sub_8112CAC() == TRUE || gQuestLogState == QL_STATE_2)
+ DoCB1_Overworld_QuestLogPlayback();
+ else
+ DoCB1_Overworld(gMain.newKeys, gMain.heldKeys);
+ }
+}
+
+void OverworldBasic(void)
+{
+ ScriptContext2_RunScript();
+ RunTasks();
+ AnimateSprites();
+ CameraUpdate();
+ sub_8115798();
+ UpdateCameraPanning();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ UpdateTilesetAnimations();
+ DoScheduledBgTilemapCopiesToVram();
+}
+
+// This CB2 is used when starting
+void CB2_OverworldBasic(void)
+{
+ OverworldBasic();
+}
+
+void CB2_Overworld(void)
+{
+ bool32 fading = !!gPaletteFade.active;
+ if (fading)
+ SetVBlankCallback(NULL);
+ OverworldBasic();
+ if (fading)
+ SetFieldVBlankCallback();
+}
+
+void SetMainCallback1(MainCallback cb)
+{
+ gMain.callback1 = cb;
+}
+
+bool8 map_post_load_hook_exec(void)
+{
+ if (gFieldCallback2)
+ {
+ if (!gFieldCallback2())
+ {
+ return FALSE;
+ }
+ else
+ {
+ gFieldCallback2 = NULL;
+ gFieldCallback = NULL;
+ }
+ }
+ else
+ {
+ if (gFieldCallback)
+ gFieldCallback();
+ else
+ FieldCB_DefaultWarpExit();
+
+ gFieldCallback = NULL;
+ }
+
+ return TRUE;
+}
+
+void CB2_NewGame(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ NewGameInitData();
+ ResetInitialPlayerAvatarState();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
+ gFieldCallback2 = NULL;
+ do_load_map_stuff_loop(&gMain.state);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+}
+
+void CB2_WhiteOut(void)
+{
+ u8 val;
+
+ if (++gMain.state >= 120)
+ {
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ DoWhiteOut();
+ SetInitialPlayerAvatarStateWithDirection(DIR_NORTH);
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback = FieldCB_RushInjuredPokemonToCenter;
+ val = 0;
+ do_load_map_stuff_loop(&val);
+ sub_8112364();
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_LoadMap(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(CB2_DoChangeMap);
+ gMain.savedCallback = CB2_LoadMap2;
+}
+
+void CB2_LoadMap2(void)
+{
+ do_load_map_stuff_loop(&gMain.state);
+ if (sub_8113748() == TRUE)
+ {
+ sub_81119C8();
+ }
+ else
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToFieldCableClub(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
+ SetMainCallback2(c2_80567AC);
+}
+
+void c2_80567AC(void)
+{
+ if (map_loading_iteration_3(&gMain.state))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_UpdateLinkState);
+ ResetAllMultiplayerState();
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToField(void)
+{
+ if (IsUpdateLinkStateCBActive() == TRUE)
+ {
+ SetMainCallback2(CB2_ReturnToFieldLink);
+ }
+ else
+ {
+ FieldClearVBlankHBlankCallbacks();
+ SetMainCallback2(CB2_ReturnToFieldLocal);
+ }
+}
+
+void CB2_ReturnToFieldLocal(void)
+{
+ if (sub_8056CD8(&gMain.state))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToFieldLink(void)
+{
+ if (!sub_8058244() && map_loading_iteration_2_link(&gMain.state))
+ SetMainCallback2(CB2_Overworld);
+}
+
+void CB2_ReturnToFieldFromMultiplayer(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ SetMainCallback1(CB1_UpdateLinkState);
+ ResetAllMultiplayerState();
+
+ if (gWirelessCommType != 0)
+ gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
+ else
+ gFieldCallback = FieldCB_ReturnToFieldCableLink;
+
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldWithOpenMenu(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback2 = FieldCB_ReturnToFieldOpenStartMenu;
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldContinueScript(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_ContinueScript;
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldContinueScriptPlayMapMusic(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
+ CB2_ReturnToField();
+}
+
+void sub_80568FC(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
+ CB2_ReturnToField();
+}
+
+void sub_8056918(void)
+{
+ if (SHOW_MAP_NAME_ENABLED)
+ ShowMapNamePopup(FALSE);
+ FieldCB_WarpExitFadeFromBlack();
+}