summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bg_regs.c2
-rw-r--r--src/cable_club.c4
-rw-r--r--src/daycare.c2
-rw-r--r--src/diploma.c2
-rw-r--r--src/easy_chat_2.c2
-rw-r--r--src/event_data.c2
-rw-r--r--src/field_effect.c4
-rw-r--r--src/field_fadetransition.c26
-rw-r--r--src/field_screen_effect.c14
-rw-r--r--src/field_specials.c30
-rw-r--r--src/field_tasks.c2
-rw-r--r--src/fieldmap.c6
-rw-r--r--src/heal_location.c2
-rw-r--r--src/item_use.c2
-rw-r--r--src/itemfinder.c6
-rw-r--r--src/learn_move.c2
-rw-r--r--src/load_save.c10
-rw-r--r--src/map_name_popup.c2
-rw-r--r--src/metatile_behavior.c2
-rw-r--r--src/option_menu.c2
-rw-r--r--src/overworld.c2465
-rw-r--r--src/party_menu_specials.c2
-rw-r--r--src/post_battle_event_funcs.c4
-rw-r--r--src/quest_log.c14
-rw-r--r--src/region_map.c14
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/script.c14
-rw-r--r--src/seagallop.c2
-rw-r--r--src/strings.c4
-rw-r--r--src/trade.c4
-rw-r--r--src/trade_scene.c2
-rw-r--r--src/vs_seeker.c2
32 files changed, 2559 insertions, 94 deletions
diff --git a/src/bg_regs.c b/src/bg_regs.c
index d5879a862..ec884e4f7 100644
--- a/src/bg_regs.c
+++ b/src/bg_regs.c
@@ -25,7 +25,7 @@ vu16 *const gBGVOffsetRegs[] =
};
const u16 gDISPCNTBGFlags[] = { DISPCNT_BG0_ON, DISPCNT_BG1_ON, DISPCNT_BG2_ON, DISPCNT_BG3_ON };
-const u16 gBLDCNTTarget2BGFlags[] = { BLDCNT_TGT2_BG0, BLDCNT_TGT2_BG1, BLDCNT_TGT2_BG2, BLDCNT_TGT2_BG3 };
+const u16 gOverworldBackgroundLayerFlags[] = { BLDCNT_TGT2_BG0, BLDCNT_TGT2_BG1, BLDCNT_TGT2_BG2, BLDCNT_TGT2_BG3 };
const u16 gBLDCNTTarget1BGFlags[] = { BLDCNT_TGT1_BG0, BLDCNT_TGT1_BG1, BLDCNT_TGT1_BG2, BLDCNT_TGT1_BG3 };
const u8 gBGControlRegOffsets[] =
diff --git a/src/cable_club.c b/src/cable_club.c
index bc41ca4f6..e1cab2d02 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -724,7 +724,7 @@ static void sub_8081624(void)
void CB2_ReturnFromCableClubBattle(void)
{
gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
- sub_8055DB8();
+ Overworld_ResetMapMusic();
LoadPlayerParty();
SavePlayerBag();
Special_UpdateTrainerFansAfterLinkBattle();
@@ -750,7 +750,7 @@ void CB2_ReturnFromCableClubBattle(void)
}
else
{
- gMain.savedCallback = c2_8056854;
+ gMain.savedCallback = CB2_ReturnToFieldFromMultiplayer;
}
SetMainCallback2(CB2_SetUpSaveAfterLinkBattle);
}
diff --git a/src/daycare.c b/src/daycare.c
index e07c2a234..1e50a7c09 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1766,7 +1766,7 @@ static void Task_EggHatch(u8 taskID)
{
CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_EggHatch_0);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskID);
}
}
diff --git a/src/diploma.c b/src/diploma.c
index f702eebd5..5c653d071 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -193,7 +193,7 @@ static void Task_DiplomaReturnToOverworld(u8 taskId)
DestroyTask(taskId);
FreeAllWindowBuffers();
FREE_AND_SET_NULL(gDiploma);
- SetMainCallback2(CB2_Overworld);
+ SetMainCallback2(sub_80568FC);
}
static void DiplomaBgInit(void)
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c
index 4b3c70b67..948b7c39f 100644
--- a/src/easy_chat_2.c
+++ b/src/easy_chat_2.c
@@ -279,7 +279,7 @@ void ShowEasyChatScreen(void)
default:
return;
}
- DoEasyChatScreen(gSpecialVar_0x8004, words, sub_80568C4);
+ DoEasyChatScreen(gSpecialVar_0x8004, words, CB2_ReturnToFieldContinueScript);
}
static const u16 sECPhrase_MysteryEventIsExciting[] = {
diff --git a/src/event_data.c b/src/event_data.c
index f16267c98..c012a4a59 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -38,7 +38,7 @@ void InitEventData(void)
memset(sSpecialFlags, 0, SPECIAL_FLAGS_COUNT);
}
-void sub_806E110(void)
+void ClearTempFieldEventData(void)
{
memset(gSaveBlock1Ptr->flags, 0, 4);
memset(gSaveBlock1Ptr->vars, 0, 16 * 2);
diff --git a/src/field_effect.c b/src/field_effect.c
index b59ce5a6b..c0d7d3463 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -2064,7 +2064,7 @@ static void EscapeRopeFieldEffect_Step1(struct Task * task)
if (data[4] == 1 && !gPaletteFade.active && BGMusicStopped() == TRUE)
{
SetObjectEventDirection(playerObj, task->data[15]);
- sub_80555E0();
+ SetWarpDestinationToEscapeWarp();
WarpIntoMap();
gFieldCallback = FieldCallback_EscapeRopeExit;
SetMainCallback2(CB2_LoadMap);
@@ -2331,7 +2331,7 @@ static void TeleportFieldEffectTask4(struct Task * task)
{
if (BGMusicStopped() == TRUE)
{
- copy_saved_warp3_bank_and_enter_x_to_warp1();
+ SetWarpDestinationToLastHealLocation();
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
gFieldCallback = FieldCallback_TeleportIn;
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 03190c095..bf5ab0ab3 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -94,7 +94,7 @@ void FadeInFromBlack(void)
void WarpFadeOutScreen(void)
{
- const struct MapHeader *header = warp1_get_mapheader();
+ const struct MapHeader *header = GetDestinationWarpMapHeader();
if (header->regionMapSectionId != gMapHeader.regionMapSectionId && MapHasPreviewScreen(header->regionMapSectionId, MPS_TYPE_CAVE))
FadeScreen(FADE_TO_BLACK, 0);
else
@@ -113,7 +113,7 @@ void WarpFadeOutScreen(void)
static void sub_807DC70(void)
{
- switch (MapTransitionIsEnter(GetCurrentMapType(), warp1_get_mapheader()->mapType))
+ switch (MapTransitionIsEnter(GetCurrentMapType(), GetDestinationWarpMapHeader()->mapType))
{
case FALSE:
FadeScreen(FADE_TO_BLACK, 3);
@@ -152,7 +152,7 @@ static void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskId)
}
}
-void FieldCallback_ReturnToEventScript2(void)
+void FieldCB_ContinueScriptHandleMusic(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
@@ -160,7 +160,7 @@ void FieldCallback_ReturnToEventScript2(void)
CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
}
-void sub_807DD44(void)
+void FieldCB_ContinueScript(void)
{
ScriptContext2_Enable();
FadeInFromBlack();
@@ -193,7 +193,7 @@ static void task_mpl_807DD60(u8 taskId)
}
}
-void FieldCB_ReturnToFieldWiredLink(void)
+void FieldCB_ReturnToFieldCableLink(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
@@ -284,7 +284,7 @@ static void sub_807DF4C(bool8 a0)
FadeInFromBlack();
}
-void FieldCB_UnionRoomWarp(void)
+void FieldCB_DefaultWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
@@ -292,7 +292,7 @@ void FieldCB_UnionRoomWarp(void)
ScriptContext2_Enable();
}
-void sub_807DF7C(void)
+void FieldCB_WarpExitFadeFromBlack(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
@@ -491,7 +491,7 @@ void FadeTransition_FadeInOnReturnToStartMenu(void)
ScriptContext2_Enable();
}
-bool8 FieldCB2_ReturnToStartMenuInit(void)
+bool8 FieldCB_ReturnToFieldOpenStartMenu(void)
{
SetUpReturnToStartMenu();
return FALSE;
@@ -535,7 +535,7 @@ void DoWarp(void)
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(sub_807E718, 10);
}
@@ -545,7 +545,7 @@ void DoDiveWarp(void)
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(sub_807E718, 10);
}
@@ -560,7 +560,7 @@ void sub_807E4A0(u16 metatileBehavior, u16 delay)
void DoDoorWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(sub_807E80C, 10);
}
@@ -574,7 +574,7 @@ void sub_807E500(void)
void DoUnionRoomWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_TeleportWarp, 10);
}
@@ -833,7 +833,7 @@ static void sub_807E980(u8 taskId)
data[0]++;
break;
default:
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
DestroyTask(taskId);
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index a12b57b24..22043ed2d 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -360,7 +360,7 @@ static void Task_BarnDoorWipeChild(u8 taskId)
#undef DIR_WIPE_OUT
#undef tChildOffset
-static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y)
+static bool8 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u8 x, u8 y)
{
u8 windowId = gTasks[taskId].data[1];
@@ -385,7 +385,7 @@ static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y)
return FALSE;
}
-static void sub_807F45C(u8 taskId)
+static void Task_RushInjuredPokemonToCenter(u8 taskId)
{
u8 windowId;
const struct HealLocation *loc;
@@ -399,7 +399,7 @@ static void sub_807F45C(u8 taskId)
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
- loc = GetHealLocationPointer(1);
+ loc = GetHealLocation(1);
if (gSaveBlock1Ptr->lastHealLocation.mapGroup == loc->group
&& gSaveBlock1Ptr->lastHealLocation.mapNum == loc->map
&& gSaveBlock1Ptr->lastHealLocation.warpId == -1
@@ -410,14 +410,14 @@ static void sub_807F45C(u8 taskId)
gTasks[taskId].data[0] = 1;
break;
case 1:
- if (sub_807F3A4(taskId, gUnknown_841B554, 2, 8))
+ if (PrintWhiteOutRecoveryMessage(taskId, gText_PlayerScurriedToCenter, 2, 8))
{
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2);
++gTasks[taskId].data[0];
}
break;
case 4:
- if (sub_807F3A4(taskId, gUnknown_841B5B6, 2, 8))
+ if (PrintWhiteOutRecoveryMessage(taskId, gText_PlayerScurriedBackHome, 2, 8))
{
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2);
++gTasks[taskId].data[0];
@@ -450,12 +450,12 @@ static void sub_807F45C(u8 taskId)
}
}
-void sub_807F5F0(void)
+void FieldCB_RushInjuredPokemonToCenter(void)
{
u8 taskId;
ScriptContext2_Enable();
palette_bg_faded_fill_black();
- taskId = CreateTask(sub_807F45C, 10);
+ taskId = CreateTask(Task_RushInjuredPokemonToCenter, 10);
gTasks[taskId].data[0] = 0;
}
diff --git a/src/field_specials.c b/src/field_specials.c
index 59c026b78..657c80a40 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -108,7 +108,7 @@ void ForcePlayerOntoBike(void)
Overworld_ChangeMusicTo(MUS_CYCLING);
}
-void nullsub_74(void)
+void ResetCyclingRoadChallengeData(void)
{
}
@@ -840,9 +840,9 @@ static const u8 sElevatorWindowAnimDuration[] = {
void GetElevatorFloor(void)
{
u16 floor = 4;
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(SILPH_CO_1F):
floor = 4;
@@ -888,9 +888,9 @@ void GetElevatorFloor(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_1F):
floor = 4;
@@ -909,9 +909,9 @@ void GetElevatorFloor(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(TRAINER_TOWER_1F):
case MAP_NUM(TRAINER_TOWER_2F):
@@ -937,9 +937,9 @@ u16 InitElevatorFloorSelectMenuPos(void)
sElevatorScroll = 0;
sElevatorCursorPos = 0;
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(SILPH_CO_11F):
sElevatorScroll = 0;
@@ -999,9 +999,9 @@ u16 InitElevatorFloorSelectMenuPos(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_5F):
sElevatorScroll = 0;
@@ -1025,9 +1025,9 @@ u16 InitElevatorFloorSelectMenuPos(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(TRAINER_TOWER_1F):
case MAP_NUM(TRAINER_TOWER_2F):
@@ -2037,10 +2037,10 @@ const u16 sPokeCenter1FMaps[] = {
MAP_UNDEFINED
};
-bool8 sub_80CC87C(void)
+bool8 UsedPokemonCenterWarp(void)
{
s32 i;
- u16 mapno = (gUnknown_2031DB4.mapGroup << 8) + gUnknown_2031DB4.mapNum;
+ u16 mapno = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum;
for (i = 0; sPokeCenter1FMaps[i] != MAP_UNDEFINED; i++)
{
if (sPokeCenter1FMaps[i] == mapno)
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 6bd4b6f46..4c7b93f20 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -63,7 +63,7 @@ static void Task_RunTimeBasedEvents(u8 taskId)
{
if (gQuestLogState != 2 && gQuestLogState != 3)
{
- sub_8056078(&data[1], &data[2]);
+ UpdateAmbientCry(&data[1], &data[2]);
}
}
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 53a97629f..60c6f3dae 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -370,7 +370,7 @@ union Block
s32 xprime; \
s32 yprime; \
\
- struct MapLayout *mapLayout = gMapHeader.mapLayout; \
+ const struct MapLayout *mapLayout = gMapHeader.mapLayout; \
\
xprime = x - 7; \
xprime += 8 * mapLayout->borderWidth; \
@@ -485,7 +485,7 @@ void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
}
}
-u32 GetBehaviorByMetatileIdAndMapLayout(struct MapLayout *mapLayout, u16 metatile, u8 attr)
+u32 GetBehaviorByMetatileIdAndMapLayout(const struct MapLayout *mapLayout, u16 metatile, u8 attr)
{
u32 * attributes;
@@ -732,7 +732,7 @@ bool8 CameraMove(s32 x, s32 y)
old_y = gSaveBlock1Ptr->pos.y;
connection = sub_8059600(direction, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
sub_80594AC(connection, direction, x, y);
- sub_8055864(connection->mapGroup, connection->mapNum);
+ LoadMapFromCameraTransition(connection->mapGroup, connection->mapNum);
gCamera.active = TRUE;
gCamera.x = old_x - gSaveBlock1Ptr->pos.x;
gCamera.y = old_y - gSaveBlock1Ptr->pos.y;
diff --git a/src/heal_location.c b/src/heal_location.c
index a8ac8cb46..ae02c7844 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -50,7 +50,7 @@ static const struct HealLocation * GetHealLocationPointerFromMapGroupAndNum(u16
return &sSpawnPoints[i - 1];
}
-const struct HealLocation * GetHealLocationPointer(u32 idx)
+const struct HealLocation * GetHealLocation(u32 idx)
{
if (idx == 0)
return NULL;
diff --git a/src/item_use.c b/src/item_use.c
index df3dbaceb..b1751d639 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -268,7 +268,7 @@ void FieldUseFunc_MachBike(u8 taskId)
|| MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE
|| MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
sub_80A10C4(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451);
- else if (sub_8055C9C() == TRUE && !sub_80BD540())
+ else if (Overworld_IsBikingAllowed() == TRUE && !sub_80BD540())
{
sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle;
sub_80A103C(taskId);
diff --git a/src/itemfinder.c b/src/itemfinder.c
index 5d6950acc..51a670b0f 100644
--- a/src/itemfinder.c
+++ b/src/itemfinder.c
@@ -15,7 +15,7 @@
static void Task_NoResponse_CleanUp(u8 taskId);
static void Task_ItemfinderResponseSoundsAndAnims(u8 taskId);
static void Task_ItemfinderUnderfootSoundsAndAnims(u8 taskId);
-static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskId);
+static bool8 HiddenItemIsWithinRangeOfPlayer(const struct MapEvents * events, u8 taskId);
static void SetUnderfootHiddenItem(u8 taskId, u32 hiddenItem);
static void SetNormalHiddenItem(u8 taskId);
static void FindHiddenItemsInConnectedMaps(u8 taskId);
@@ -199,7 +199,7 @@ static void Task_ItemfinderUnderfootSoundsAndAnims(u8 taskId)
tDingTimer++;
}
-static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskId)
+static bool8 HiddenItemIsWithinRangeOfPlayer(const struct MapEvents * events, u8 taskId)
{
s16 x, y, i, dx, dy;
PlayerGetDestCoords(&x, &y);
@@ -284,7 +284,7 @@ static void SetNormalHiddenItem(u8 taskId)
}
}
-static bool8 HiddenItemAtPos(struct MapEvents * events, s16 x, s16 y)
+static bool8 HiddenItemAtPos(const struct MapEvents * events, s16 x, s16 y)
{
u8 bgEventCount = events->bgEventCount;
struct BgEvent * bgEvents = events->bgEvents;
diff --git a/src/learn_move.c b/src/learn_move.c
index 8a2f5781b..8cf10cffa 100644
--- a/src/learn_move.c
+++ b/src/learn_move.c
@@ -286,7 +286,7 @@ static void Task_InitMoveRelearnerMenu(u8 taskId)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_MoveRelearner_Init);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskId);
}
}
diff --git a/src/load_save.c b/src/load_save.c
index 7ab28ffc3..9dff59928 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -127,24 +127,24 @@ void MoveSaveBlocks_ResetHeap(void)
gSaveBlock2Ptr->encryptionKey = encryptionKey;
}
-u32 sav2_x1_query_bit1(void)
+u32 UseContinueGameWarp(void)
{
return gSaveBlock2Ptr->specialSaveWarpFlags & CONTINUE_GAME_WARP;
}
-void sav2_x9_clear_bit1(void)
+void ClearContinueGameWarpStatus(void)
{
gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP;
}
-void sub_804C1AC(void)
+void SetContinueGameWarpStatus(void)
{
gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
void SetContinueGameWarpStatusToDynamicWarp(void)
{
- sub_8055778(0);
+ SetContinueGameWarpToDynamicWarp(0);
gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
@@ -286,7 +286,7 @@ void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey)
for(i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->trainerTower[i].bestTime, encryptionKey);
- sub_8054F38(encryptionKey);
+ ApplyNewEncryptionKeyToGameStats(encryptionKey);
ApplyNewEncryptionKeyToBagItems_(encryptionKey);
ApplyNewEncryptionKeyToBerryPowder(encryptionKey);
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->money, encryptionKey);
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 10e549cbd..df2f9f88f 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -18,7 +18,7 @@ static u16 MapNamePopupCreateWindow(bool32 palIntoFadedBuffer);
static void MapNamePopupPrintMapNameOnWindow(u16 windowId);
static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags);
-void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer)
+void ShowMapNamePopup(bool32 palIntoFadedBuffer)
{
u8 taskId;
if (FlagGet(FLAG_SPECIAL_FLAG_0x4000) != TRUE && !(gQuestLogState == 2 || gQuestLogState == 3))
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index f75630802..77c839b89 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -199,7 +199,7 @@ bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_ReturnFalse_2(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior)
{
diff --git a/src/option_menu.c b/src/option_menu.c
index 62e90c33b..87306c98f 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -509,7 +509,7 @@ static void BufferOptionMenuString(u8 selection)
static void CloseAndSaveOptionMenu(u8 taskId)
{
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
SetMainCallback2(gMain.savedCallback);
FreeAllWindowBuffers();
gSaveBlock2Ptr->optionsTextSpeed = sOptionMenuPtr->option[MENUITEM_TEXTSPEED];
diff --git a/src/overworld.c b/src/overworld.c
new file mode 100644
index 000000000..4fb6be314
--- /dev/null
+++ b/src/overworld.c
@@ -0,0 +1,2465 @@
+#include "global.h"
+#include "gflib.h"
+#include "bg_regs.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "event_scripts.h"
+#include "field_camera.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_fadetransition.h"
+#include "field_message_box.h"
+#include "field_player_avatar.h"
+#include "field_screen_effect.h"
+#include "field_specials.h"
+#include "field_tasks.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "heal_location.h"
+#include "help_system.h"
+#include "link.h"
+#include "load_save.h"
+#include "m4a.h"
+#include "map_name_popup.h"
+#include "map_preview_screen.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 "quest_log_objects.h"
+#include "random.h"
+#include "renewable_hidden_items.h"
+#include "roamer.h"
+#include "safari_zone.h"
+#include "save_location.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "script_pokemon_util.h"
+#include "tileset_anims.h"
+#include "trainer_pokemon_sprites.h"
+#include "vs_seeker.h"
+#include "wild_encounter.h"
+#include "constants/maps.h"
+#include "constants/flags.h"
+#include "constants/species.h"
+#include "constants/region_map_sections.h"
+#include "constants/songs.h"
+
+struct InitialPlayerAvatarState
+{
+ u8 transitionFlags;
+ u8 direction;
+ bool8 unk2;
+};
+
+EWRAM_DATA struct WarpData gLastUsedWarp = {};
+EWRAM_DATA struct WarpData sWarpDestination = {};
+EWRAM_DATA struct WarpData gFixedDiveWarp = {};
+EWRAM_DATA struct WarpData gFixedHoleWarp = {};
+
+// File boundary perhaps?
+EWRAM_DATA struct InitialPlayerAvatarState gInitialPlayerAvatarState = {};
+
+// File boundary perhaps?
+EWRAM_DATA bool8 gDisableMapMusicChangeOnMapLoad = FALSE;
+EWRAM_DATA u16 sAmbientCrySpecies = SPECIES_NONE;
+EWRAM_DATA bool8 sIsAmbientCryWaterMon = FALSE;
+
+// File boundary perhaps?
+ALIGNED(4) EWRAM_DATA bool8 gUnknown_2031DE0 = FALSE;
+EWRAM_DATA const struct CreditsOverworldCmd *gUnknown_2031DE4 = NULL;
+EWRAM_DATA s16 gUnknown_2031DE8 = 0;
+EWRAM_DATA s16 gUnknown_2031DEA = 0;
+
+// File boundary perhaps?
+EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {};
+
+u16 *gBGTilemapBuffers1;
+u16 *gBGTilemapBuffers2;
+u16 *gBGTilemapBuffers3;
+void (*gFieldCallback)(void);
+bool8 (*gFieldCallback2)(void);
+u16 gHeldKeyCodeToSend;
+u8 gLocalLinkPlayerId;
+u8 gFieldLinkPlayerCount;
+
+u8 CountBadgesForOverworldWhiteOutLossCalculation(void);
+void Overworld_ResetStateAfterWhitingOut(void);
+void Overworld_SetWhiteoutRespawnPoint(void);
+u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType);
+u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType);
+u16 GetCenterScreenMetatileBehavior(void);
+bool8 sub_8055B38(u16 metatileBehavior);
+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 FieldClearVBlankHBlankCallbacks(void);
+void SetFieldVBlankCallback(void);
+void VBlankCB_Field(void);
+
+bool32 map_loading_iteration_3(u8 *state);
+bool32 sub_8056CD8(u8 *state);
+bool32 map_loading_iteration_2_link(u8 *state);
+void do_load_map_stuff_loop(u8 *state);
+void MoveSaveBlocks_ResetHeap_(void);
+void sub_8056E80(void);
+void sub_8056F08(void);
+void InitOverworldGraphicsRegisters(void);
+void sub_8057024(bool32 a0);
+void sub_8057074(void);
+void mli4_mapscripts_and_other(void);
+void sub_8057100(void);
+void sub_8057114(void);
+void SetCameraToTrackGuestPlayer(void);
+void SetCameraToTrackGuestPlayer_2(void);
+void sub_8057178(void);
+void sub_80571A8(void);
+void CreateLinkPlayerSprites(void);
+void sub_80572D8(void);
+void sub_8057300(u8 *state);
+bool32 sub_8057314(u8 *state);
+bool32 sub_8057528(u8 *state, u8 unused);
+bool8 sub_8057650(void);
+void sub_8057748(struct CameraObject * camera);
+void sub_805781C(u8 taskId);
+void sub_8057854(u8 taskId);
+void SpawnLinkPlayerObjectEvent(u8 i, s16 x, s16 y, u8 gender);
+void CreateLinkPlayerSprite(u8 i, u8 version);
+void ClearAllPlayerKeys(void);
+u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
+void CB1_UpdateLinkState(void);
+void ResetAllMultiplayerState(void);
+
+extern const struct MapLayout * gMapLayouts[];
+extern const struct MapHeader *const *gMapGroups[];
+
+// Routines related to game state on warping in
+
+static const u8 sWhiteOutMoneyLossMultipliers[] = {
+ 2,
+ 4,
+ 6,
+ 9,
+ 12,
+ 16,
+ 20,
+ 25,
+ 30
+};
+
+const u16 sWhiteOutMoneyLossBadgeFlagIDs[] = {
+ FLAG_BADGE01_GET,
+ FLAG_BADGE02_GET,
+ FLAG_BADGE03_GET,
+ FLAG_BADGE04_GET,
+ FLAG_BADGE05_GET,
+ FLAG_BADGE06_GET,
+ FLAG_BADGE07_GET,
+ FLAG_BADGE08_GET
+};
+
+void DoWhiteOut(void)
+{
+ ScriptContext2_RunNewScript(EventScript_ResetEliteFourEnd);
+ RemoveMoney(&gSaveBlock1Ptr->money, ComputeWhiteOutMoneyLoss());
+ HealPlayerParty();
+ Overworld_ResetStateAfterWhitingOut();
+ Overworld_SetWhiteoutRespawnPoint();
+ WarpIntoMap();
+}
+
+u32 ComputeWhiteOutMoneyLoss(void)
+{
+ u8 nbadges = CountBadgesForOverworldWhiteOutLossCalculation();
+ u8 toplevel = GetPlayerPartyHighestLevel();
+ u32 losings = toplevel * 4 * sWhiteOutMoneyLossMultipliers[nbadges];
+ u32 money = GetMoney(&gSaveBlock1Ptr->money);
+ if (losings > money)
+ losings = money;
+ return losings;
+}
+
+void OverworldWhiteOutGetMoneyLoss(void)
+{
+ u32 losings = ComputeWhiteOutMoneyLoss();
+ ConvertIntToDecimalStringN(gStringVar1, losings, STR_CONV_MODE_LEFT_ALIGN, CountDigits(losings));
+}
+
+u8 CountBadgesForOverworldWhiteOutLossCalculation(void)
+{
+ int i;
+ u8 nbadges = 0;
+ for (i = 0; i < NELEMS(sWhiteOutMoneyLossBadgeFlagIDs); i++)
+ {
+ if (FlagGet(sWhiteOutMoneyLossBadgeFlagIDs[i]))
+ nbadges++;
+ }
+ return nbadges;
+}
+
+void Overworld_ResetStateAfterFly(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterTeleport(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterDigEscRope(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterWhitingOut(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void sub_8054E40(void)
+{
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ ChooseAmbientCrySpecies();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+}
+
+// Routines related to game stats
+
+void ResetGameStats(void)
+{
+ int i;
+
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ {
+ gSaveBlock1Ptr->gameStats[i] = 0;
+ }
+}
+
+void IncrementGameStat(u8 statId)
+{
+ u32 statVal;
+ if (statId >= NUM_USED_GAME_STATS)
+ return;
+ statVal = GetGameStat(statId);
+ if (statVal < 0xFFFFFF)
+ statVal++;
+ else
+ statVal = 0xFFFFFF;
+ SetGameStat(statId, statVal);
+}
+
+u32 GetGameStat(u8 statId)
+{
+ if (statId >= NUM_USED_GAME_STATS)
+ return 0;
+ else
+ return gSaveBlock1Ptr->gameStats[statId] ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void SetGameStat(u8 statId, u32 statVal)
+{
+ if (statId >= NUM_USED_GAME_STATS)
+ return;
+ gSaveBlock1Ptr->gameStats[statId] = statVal ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void ApplyNewEncryptionKeyToGameStats(u32 newKey)
+{
+ u8 i;
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ {
+ ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->gameStats[i], newKey);
+ }
+}
+
+// Routines related to object events
+
+void sub_8054F68(void)
+{
+ u8 i, j;
+ u8 mapGroup;
+ u8 mapNum;
+ u8 localId;
+ const struct MapHeader * linkedMap;
+
+ for (i = 0, j = 0; i < gMapHeader.events->objectEventCount; i++)
+ {
+ if (gMapHeader.events->objectEvents[i].unk2 == 0xFF)
+ {
+ localId = gMapHeader.events->objectEvents[i].elevation;
+ mapNum = gMapHeader.events->objectEvents[i].trainerType;
+ mapGroup = gMapHeader.events->objectEvents[i].trainerRange_berryTreeId;
+ linkedMap = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
+ gSaveBlock1Ptr->objectEventTemplates[j] = linkedMap->events->objectEvents[localId - 1];
+ gSaveBlock1Ptr->objectEventTemplates[j].localId = gMapHeader.events->objectEvents[i].localId;
+ gSaveBlock1Ptr->objectEventTemplates[j].x = gMapHeader.events->objectEvents[i].x;
+ gSaveBlock1Ptr->objectEventTemplates[j].y = gMapHeader.events->objectEvents[i].y;
+ gSaveBlock1Ptr->objectEventTemplates[j].elevation = localId;
+ gSaveBlock1Ptr->objectEventTemplates[j].trainerType = mapNum;
+ gSaveBlock1Ptr->objectEventTemplates[j].trainerRange_berryTreeId = mapGroup;
+ gSaveBlock1Ptr->objectEventTemplates[j].unk2 = 0xFF;
+ j++;
+ }
+ else
+ {
+ gSaveBlock1Ptr->objectEventTemplates[j] = gMapHeader.events->objectEvents[i];
+ j++;
+ }
+ }
+}
+
+void LoadSaveblockObjEventScripts(void)
+{
+ int i;
+ const struct ObjectEventTemplate * src = gMapHeader.events->objectEvents;
+ struct ObjectEventTemplate * savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
+
+ for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
+ {
+ savObjTemplates[i].script = src[i].script;
+ }
+}
+
+void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
+{
+ int i;
+ struct ObjectEventTemplate * savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
+ for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
+ {
+ if (savObjTemplates[i].localId == localId)
+ {
+ savObjTemplates[i].x = x;
+ savObjTemplates[i].y = y;
+ break;
+ }
+ }
+}
+
+void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType)
+{
+ s32 i;
+
+ struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
+ for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
+ {
+ struct ObjectEventTemplate *objectEventTemplate = &savObjTemplates[i];
+ if (objectEventTemplate->localId == localId)
+ {
+ objectEventTemplate->movementType = movementType;
+ return;
+ }
+ }
+}
+
+// Routines related to the map layout
+
+void mapdata_load_assets_to_gpu_and_full_redraw(void)
+{
+ move_tilemap_camera_to_upper_left_corner();
+ copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout);
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ DrawWholeMapView();
+ InitTilesetAnimations();
+}
+
+const struct MapLayout *GetMapLayout(void)
+{
+ u16 mapLayoutId = gSaveBlock1Ptr->mapLayoutId;
+ if (mapLayoutId)
+ return gMapLayouts[mapLayoutId - 1];
+ return NULL;
+}
+
+// Routines related to warps
+
+const struct WarpData sDummyWarpData = {
+ .mapGroup = MAP_GROUP(UNDEFINED),
+ .mapNum = MAP_NUM(UNDEFINED),
+ .warpId = 0xFF,
+ .x = -1,
+ .y = -1
+};
+
+void ApplyCurrentWarp(void)
+{
+ gLastUsedWarp = gSaveBlock1Ptr->location;
+ gSaveBlock1Ptr->location = sWarpDestination;
+ gFixedDiveWarp = sDummyWarpData;
+ gFixedHoleWarp = sDummyWarpData;
+}
+
+void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ warp->mapGroup = mapGroup;
+ warp->mapNum = mapNum;
+ warp->warpId = warpId;
+ warp->x = x;
+ warp->y = y;
+}
+
+bool32 IsDummyWarp(struct WarpData *warp)
+{
+ if (warp->mapGroup != -1)
+ return FALSE;
+ else if (warp->mapNum != -1)
+ return FALSE;
+ else if (warp->warpId != -1)
+ return FALSE;
+ else if (warp->x != -1)
+ return FALSE;
+ else if (warp->y != -1)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum)
+{
+ return gMapGroups[mapGroup][mapNum];
+}
+
+struct MapHeader const *const GetDestinationWarpMapHeader(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
+}
+
+void LoadCurrentMapData(void)
+{
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ gSaveBlock1Ptr->mapLayoutId = gMapHeader.mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+void LoadSaveblockMapHeader(void)
+{
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+void SetPlayerCoordsFromWarp(void)
+{
+ if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount)
+ {
+ gSaveBlock1Ptr->pos.x = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].x;
+ gSaveBlock1Ptr->pos.y = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].y;
+ }
+ else if (gSaveBlock1Ptr->location.x >= 0 && gSaveBlock1Ptr->location.y >= 0)
+ {
+ gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->location.x;
+ gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->location.y;
+ }
+ else
+ {
+ gSaveBlock1Ptr->pos.x = gMapHeader.mapLayout->width / 2;
+ gSaveBlock1Ptr->pos.y = gMapHeader.mapLayout->height / 2;
+ }
+}
+
+void WarpIntoMap(void)
+{
+ ApplyCurrentWarp();
+ LoadCurrentMapData();
+ SetPlayerCoordsFromWarp();
+}
+
+void SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sWarpDestination, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpId)
+{
+ SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
+}
+
+void SetDynamicWarp(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId)
+{
+ SetWarpData(&gSaveBlock1Ptr->dynamicWarp, mapGroup, mapNum, warpId, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
+}
+
+void SetDynamicWarpWithCoords(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->dynamicWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToDynamicWarp(u8 unusedWarpId)
+{
+ sWarpDestination = gSaveBlock1Ptr->dynamicWarp;
+}
+
+void SetWarpDestinationToHealLocation(u8 healLocationId)
+{
+ const struct HealLocation *warp = GetHealLocation(healLocationId);
+ if (warp)
+ SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
+}
+
+void SetWarpDestinationToLastHealLocation(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->lastHealLocation;
+}
+
+void Overworld_SetWhiteoutRespawnPoint(void)
+{
+ SetWhiteoutRespawnWarpAndHealerNpc(&sWarpDestination);
+}
+
+void SetLastHealLocationWarp(u8 healLocationId)
+{
+ const struct HealLocation *healLocation = GetHealLocation(healLocationId);
+ if (healLocation)
+ SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
+}
+
+void UpdateEscapeWarp(s16 x, s16 y)
+{
+ u8 currMapType = GetCurrentMapType();
+ u8 destMapType = GetMapTypeByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
+ u8 delta;
+ if (IsMapTypeOutdoors(currMapType) && IsMapTypeOutdoors(destMapType) != TRUE && !(gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VIRIDIAN_FOREST) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(VIRIDIAN_FOREST)))
+ {
+ delta = GetPlayerFacingDirection() != DIR_SOUTH;
+ SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x - 7, y - 7 + delta);
+ }
+}
+
+void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->escapeWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToEscapeWarp(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->escapeWarp;
+}
+
+void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToDiveWarp(void)
+{
+ sWarpDestination = gFixedDiveWarp;
+}
+
+void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
+{
+ if (IsDummyWarp(&gFixedHoleWarp) == TRUE)
+ sWarpDestination = gLastUsedWarp;
+ else
+ SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
+}
+
+void SetWarpDestinationToContinueGameWarp(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->continueGameWarp;
+}
+
+void SetContinueGameWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetContinueGameWarpToHealLocation(u8 healLocationId)
+{
+ const struct HealLocation *warp = GetHealLocation(healLocationId);
+ if (warp)
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, -1, warp->x, warp->y);
+}
+
+void SetContinueGameWarpToDynamicWarp(int unused)
+{
+ gSaveBlock1Ptr->continueGameWarp = gSaveBlock1Ptr->dynamicWarp;
+}
+
+const struct MapConnection * GetMapConnection(u8 dir)
+{
+ s32 i;
+ s32 count = gMapHeader.connections->count;
+ const struct MapConnection *connection = gMapHeader.connections->connections;
+
+ if (connection == NULL)
+ return NULL;
+
+ for(i = 0; i < count; i++, connection++)
+ if (connection->direction == dir)
+ return connection;
+
+ return NULL;
+}
+
+bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
+{
+ const struct MapConnection *connection = GetMapConnection(dir);
+
+ if (connection != NULL)
+ {
+ SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
+ }
+ else
+ {
+ RunOnDiveWarpMapScript();
+ if (IsDummyWarp(&gFixedDiveWarp))
+ return FALSE;
+ SetWarpDestinationToDiveWarp();
+ }
+ return TRUE;
+}
+
+bool8 SetDiveWarpEmerge(u16 x, u16 y)
+{
+ return SetDiveWarp(CONNECTION_EMERGE, x, y);
+}
+
+bool8 SetDiveWarpDive(u16 x, u16 y)
+{
+ return SetDiveWarp(CONNECTION_DIVE, x, y);
+}
+
+// Map loaders
+
+void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
+{
+ int paletteIndex;
+
+ SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
+ Overworld_TryMapConnectionMusicTransition();
+ ApplyCurrentWarp();
+ LoadCurrentMapData();
+ sub_8054F68();
+ TrySetMapSaveWarpStatus();
+ ClearTempFieldEventData();
+ ResetCyclingRoadChallengeData();
+ RestartWildEncounterImmunitySteps();
+ TryUpdateRandomTrainerRematches(mapGroup, mapNum);
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ SetDefaultFlashLevel();
+ Overworld_ClearSavedMusic();
+ RunOnTransitionMapScript();
+ TryRegenerateRenewableHiddenItems();
+ InitMap();
+ copy_map_tileset2_to_vram_2(gMapHeader.mapLayout);
+ apply_map_tileset2_palette(gMapHeader.mapLayout);
+ for (paletteIndex = 7; paletteIndex < 13; paletteIndex++)
+ ApplyWeatherGammaShiftToPal(paletteIndex);
+ InitSecondaryTilesetAnimation();
+ UpdateLocationHistoryForRoamer();
+ RoamerMove();
+ sub_8110920();
+ DoCurrentWeather();
+ ResetFieldTasksArgs();
+ RunOnResumeMapScript();
+ if (GetLastUsedWarpMapSectionId() != gMapHeader.regionMapSectionId)
+ ShowMapNamePopup(TRUE);
+}
+
+void mli0_load_map(bool32 a1)
+{
+ bool8 isOutdoors;
+
+ LoadCurrentMapData();
+ sub_8054F68();
+ isOutdoors = IsMapTypeOutdoors(gMapHeader.mapType);
+
+ TrySetMapSaveWarpStatus();
+ ClearTempFieldEventData();
+ ResetCyclingRoadChallengeData();
+ RestartWildEncounterImmunitySteps();
+ TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ if (isOutdoors)
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ SetDefaultFlashLevel();
+ Overworld_ClearSavedMusic();
+ RunOnTransitionMapScript();
+ TryRegenerateRenewableHiddenItems();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+ sub_8110920();
+ InitMap();
+}
+
+void sub_80559A8(void)
+{
+ bool8 isOutdoors;
+
+ LoadCurrentMapData();
+ sub_8054F68();
+ isOutdoors = IsMapTypeOutdoors(gMapHeader.mapType);
+ TrySetMapSaveWarpStatus();
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ SetDefaultFlashLevel();
+ sub_8110920();
+ sub_8111708();
+ LoadSaveblockMapHeader();
+ InitMap();
+}
+
+// Routines related to the initial player avatar state
+
+void ResetInitialPlayerAvatarState(void)
+{
+ gInitialPlayerAvatarState.direction = DIR_SOUTH;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ gInitialPlayerAvatarState.unk2 = FALSE;
+}
+
+void SetInitialPlayerAvatarStateWithDirection(u8 dirn)
+{
+ gInitialPlayerAvatarState.direction = dirn;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ gInitialPlayerAvatarState.unk2 = TRUE;
+}
+
+void StoreInitialPlayerAvatarState(void)
+{
+ gInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
+
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
+ else
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ gInitialPlayerAvatarState.unk2 = FALSE;
+}
+
+struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
+{
+ struct InitialPlayerAvatarState playerStruct;
+ u8 mapType = GetCurrentMapType();
+ u16 metatileBehavior = GetCenterScreenMetatileBehavior();
+ u8 transitionFlags = GetAdjustedInitialTransitionFlags(&gInitialPlayerAvatarState, metatileBehavior, mapType);
+ playerStruct.transitionFlags = transitionFlags;
+ playerStruct.direction = GetAdjustedInitialDirection(&gInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
+ playerStruct.unk2 = FALSE;
+ gInitialPlayerAvatarState = playerStruct;
+ return &gInitialPlayerAvatarState;
+}
+
+u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType)
+{
+ if (mapType != MAP_TYPE_INDOOR && FlagGet(FLAG_SYS_CRUISE_MODE))
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (mapType == MAP_TYPE_UNDERWATER)
+ return PLAYER_AVATAR_FLAG_UNDERWATER;
+ else if (sub_8055B38(metatileBehavior) == TRUE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (MetatileBehavior_IsSurfable(metatileBehavior) == TRUE)
+ return PLAYER_AVATAR_FLAG_SURFING;
+ else if (Overworld_IsBikingAllowed() != TRUE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_MACH_BIKE)
+ return PLAYER_AVATAR_FLAG_MACH_BIKE;
+ else if (playerStruct->transitionFlags != PLAYER_AVATAR_FLAG_ACRO_BIKE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else
+ return PLAYER_AVATAR_FLAG_ACRO_BIKE;
+}
+
+bool8 sub_8055B38(u16 metatileBehavior)
+{
+ if (MetatileBehavior_IsSurfable(metatileBehavior) != TRUE)
+ return FALSE;
+ if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B3F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B3F)) || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B4F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B4F)))
+ return TRUE;
+ return FALSE;
+}
+
+u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType)
+{
+ if (FlagGet(FLAG_SYS_CRUISE_MODE) && mapType == MAP_TYPE_OCEAN_ROUTE)
+ return DIR_EAST;
+ else if (MetatileBehavior_IsDeepSouthWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ else if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE || MetatileBehavior_IsWarpDoor_2(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ else if (MetatileBehavior_IsSouthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ else if (MetatileBehavior_IsNorthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ else if (MetatileBehavior_IsWestArrowWarp(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ else if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6E(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ else if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6F(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING)
+ || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER ))
+ return playerStruct->direction;
+ else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
+ return playerStruct->direction;
+ else if (playerStruct->unk2)
+ return playerStruct->direction;
+ else
+ return DIR_SOUTH;
+}
+
+u16 GetCenterScreenMetatileBehavior(void)
+{
+ return MapGridGetMetatileBehaviorAt(gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7);
+}
+
+// Routines related to flash level and map perms
+
+bool32 Overworld_IsBikingAllowed(void)
+{
+ if (!gMapHeader.bikingAllowed)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void SetDefaultFlashLevel(void)
+{
+ if (!gMapHeader.cave)
+ gSaveBlock1Ptr->flashLevel = 0;
+ else if (FlagGet(FLAG_SYS_FLASH_ACTIVE))
+ gSaveBlock1Ptr->flashLevel = 0;
+ else
+ gSaveBlock1Ptr->flashLevel = gMaxFlashLevel;
+}
+
+void Overworld_SetFlashLevel(s32 flashLevel)
+{
+ if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
+ flashLevel = 0;
+ gSaveBlock1Ptr->flashLevel = flashLevel;
+}
+
+u8 Overworld_GetFlashLevel(void)
+{
+ return gSaveBlock1Ptr->flashLevel;
+}
+
+void SetCurrentMapLayout(u16 mapLayoutId)
+{
+ gSaveBlock1Ptr->mapLayoutId = mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+void sub_8055D5C(struct WarpData * warp)
+{
+ sWarpDestination = *warp;
+}
+
+// Routines related to map music
+
+u16 GetLocationMusic(struct WarpData * warp)
+{
+ return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
+}
+
+u16 GetCurrLocationDefaultMusic(void)
+{
+ u16 music;
+ music = GetLocationMusic(&gSaveBlock1Ptr->location);
+ return music;
+}
+
+u16 GetWarpDestinationMusic(void)
+{
+ u16 music = GetLocationMusic(&sWarpDestination);
+ return music;
+}
+
+void Overworld_ResetMapMusic(void)
+{
+ ResetMapMusic();
+}
+
+void Overworld_PlaySpecialMapMusic(void)
+{
+ u16 music;
+ s16 x, y;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(POKEMON_LEAGUE_CHAMPIONS_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(POKEMON_LEAGUE_CHAMPIONS_ROOM))
+ {
+ PlayerGetDestCoords(&x, &y);
+ if (y - 7 < 11 && gMPlayInfo_BGM.songHeader == &mus_win_gym)
+ {
+ FadeInBGM(4);
+ return;
+ }
+ }
+
+ music = GetCurrLocationDefaultMusic();
+
+ if (gSaveBlock1Ptr->savedMusic)
+ music = gSaveBlock1Ptr->savedMusic;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) &&sub_8056124(MUS_NAMINORI))
+ music = MUS_NAMINORI;
+
+ if (music != GetCurrentMapMusic())
+ PlayNewMapMusic(music);
+}
+
+void Overworld_SetSavedMusic(u16 songNum)
+{
+ gSaveBlock1Ptr->savedMusic = songNum;
+}
+
+void Overworld_ClearSavedMusic(void)
+{
+ gSaveBlock1Ptr->savedMusic = 0;
+}
+
+void Overworld_TryMapConnectionMusicTransition(void)
+{
+ u16 newMusic;
+ u16 currentMusic;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE)
+ {
+ newMusic = GetWarpDestinationMusic();
+ currentMusic = GetCurrentMapMusic();
+ if (currentMusic == MUS_NAMINORI)
+ return;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && sub_8056124(MUS_NAMINORI))
+ newMusic = MUS_NAMINORI;
+ if (newMusic != currentMusic)
+ {
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ FadeOutAndFadeInNewMapMusic(newMusic, 4, 4);
+ else
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+ }
+ }
+}
+
+void Overworld_ChangeMusicToDefault(void)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != GetCurrLocationDefaultMusic())
+ FadeOutAndPlayNewMapMusic(GetCurrLocationDefaultMusic(), 8);
+}
+
+void Overworld_ChangeMusicTo(u16 newMusic)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != newMusic)
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+}
+
+u8 GetMapMusicFadeoutSpeed(void)
+{
+ const struct MapHeader *mapHeader = GetDestinationWarpMapHeader();
+ if (IsMapTypeIndoors(mapHeader->mapType) == TRUE)
+ return 2;
+ else
+ return 4;
+}
+
+void TryFadeOutOldMapMusic(void)
+{
+ u16 warpMusic = GetWarpDestinationMusic();
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE && warpMusic != GetCurrentMapMusic())
+ {
+ FadeOutMapMusic(GetMapMusicFadeoutSpeed());
+ }
+}
+
+bool8 BGMusicStopped(void)
+{
+ return IsNotWaitingForBGMStop();
+}
+
+void Overworld_FadeOutMapMusic(void)
+{
+ FadeOutMapMusic(4);
+}
+
+void PlayAmbientCry(void)
+{
+ s16 x, y;
+ s8 pan;
+ s8 volume;
+
+ PlayerGetDestCoords(&x, &y);
+ if (sIsAmbientCryWaterMon == TRUE
+ && !MetatileBehavior_IsSurfable(MapGridGetMetatileBehaviorAt(x, y)))
+ return;
+ pan = (Random() % 88) + 212;
+ volume = (Random() % 30) + 50;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+
+ PlayCry2(sAmbientCrySpecies, pan, volume, 1);
+}
+
+void UpdateAmbientCry(s16 *state, u16 *delayCounter)
+{
+ u8 i, monsCount, divBy;
+
+ switch (*state)
+ {
+ case 0:
+ if (sAmbientCrySpecies == SPECIES_NONE)
+ *state = 4;
+ else
+ *state = 1;
+ break;
+ case 1:
+ *delayCounter = (Random() % 2400) + 1200;
+ *state = 3;
+ break;
+ case 2:
+ *delayCounter = (Random() % 1200) + 1200;
+ *state = 3;
+ break;
+ case 3:
+ (*delayCounter)--;
+ if (*delayCounter == 0)
+ {
+ PlayAmbientCry();
+ *state = 2;
+ }
+ break;
+ case 4:
+ break;
+ }
+}
+
+void ChooseAmbientCrySpecies(void)
+{
+ sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon);
+}
+
+bool32 sub_8056124(u16 music)
+{
+ if (music == MUS_CYCLING || music == MUS_NAMINORI)
+ {
+ if (gMapHeader.regionMapSectionId == MAPSEC_KANTO_VICTORY_ROAD || gMapHeader.regionMapSectionId == MAPSEC_ROUTE_23 || gMapHeader.regionMapSectionId == MAPSEC_INDIGO_PLATEAU)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum)
+{
+ return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType;
+}
+
+u8 GetMapTypeByWarpData(struct WarpData *warp)
+{
+ return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum);
+}
+
+u8 GetCurrentMapType(void)
+{
+ return GetMapTypeByWarpData(&gSaveBlock1Ptr->location);
+}
+
+u8 GetLastUsedWarpMapType(void)
+{
+ return GetMapTypeByWarpData(&gLastUsedWarp);
+}
+
+u8 GetLastUsedWarpMapSectionId(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gLastUsedWarp.mapGroup, gLastUsedWarp.mapNum)->regionMapSectionId;
+}
+
+bool8 IsMapTypeOutdoors(u8 mapType)
+{
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_UNDERWATER
+ || mapType == MAP_TYPE_CITY
+ || mapType == MAP_TYPE_OCEAN_ROUTE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType)
+{
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_OCEAN_ROUTE
+ || mapType == MAP_TYPE_CITY)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 IsMapTypeIndoors(u8 mapType)
+{
+ if (mapType == MAP_TYPE_INDOOR
+ || mapType == MAP_TYPE_SECRET_BASE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 GetSavedWarpRegionMapSectionId(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->dynamicWarp.mapGroup, gSaveBlock1Ptr->dynamicWarp.mapNum)->regionMapSectionId;
+}
+
+u8 GetCurrentRegionMapSectionId(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId;
+}
+
+u8 GetCurrentMapBattleScene(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->battleType;
+}
+
+const int sUnusedData[] = {
+ 1200,
+ 3600,
+ 1200,
+ 2400,
+ 50,
+ 80,
+ -44,
+ 44
+};
+
+const struct UCoords32 gDirectionToVectors[] = {
+ { 0u, 0u},
+ { 0u, 1u},
+ { 0u, -1u},
+ {-1u, 0u},
+ { 1u, 0u},
+ {-1u, 1u},
+ { 1u, 1u},
+ {-1u, -1u},
+ { 1u, -1u},
+};
+
+const struct BgTemplate sOverworldBgTemplates[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x000
+ }, {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0x000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0x000
+ }
+};
+
+void InitOverworldBgs(void)
+{
+ MoveSaveBlocks_ResetHeap_();
+ sub_8056E80();
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sOverworldBgTemplates, NELEMS(sOverworldBgTemplates));
+ SetBgAttribute(1, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(2, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(3, BG_ATTR_MOSAIC, TRUE);
+ gBGTilemapBuffers2 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers1 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers3 = AllocZeroed(BG_SCREEN_SIZE);
+ SetBgTilemapBuffer(1, gBGTilemapBuffers2);
+ SetBgTilemapBuffer(2, gBGTilemapBuffers1);
+ SetBgTilemapBuffer(3, gBGTilemapBuffers3);
+ InitStandardTextBoxWindows();
+ ResetBg0();
+ sub_8069348();
+}
+
+void InitOverworldBgs_NoResetHeap(void)
+{
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sOverworldBgTemplates, NELEMS(sOverworldBgTemplates));
+ SetBgAttribute(1, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(2, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(3, BG_ATTR_MOSAIC, TRUE);
+ gBGTilemapBuffers2 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers1 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers3 = AllocZeroed(BG_SCREEN_SIZE);
+ SetBgTilemapBuffer(1, gBGTilemapBuffers2);
+ SetBgTilemapBuffer(2, gBGTilemapBuffers1);
+ SetBgTilemapBuffer(3, gBGTilemapBuffers3);
+ InitStandardTextBoxWindows();
+ ResetBg0();
+ sub_8069348();
+}
+
+void CleanupOverworldWindowsAndTilemaps(void)
+{
+ FreeAllOverworldWindowBuffers();
+ Free(gBGTilemapBuffers3);
+ Free(gBGTilemapBuffers1);
+ Free(gBGTilemapBuffers2);
+}
+
+void ResetSafariZoneFlag_(void)
+{
+ ResetSafariZoneFlag();
+}
+
+bool32 IsUpdateLinkStateCBActive(void)
+{
+ if (gMain.callback1 == CB1_UpdateLinkState)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
+{
+ struct FieldInput fieldInput;
+
+ sub_8112B3C();
+ sub_805BEB8();
+ FieldClearPlayerInput(&fieldInput);
+ FieldGetPlayerInput(&fieldInput, newKeys, heldKeys);
+ FieldInput_HandleCancelSignpost(&fieldInput);
+ if (!ScriptContext2_IsEnabled())
+ {
+ if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
+ {
+ if (gUnknown_3005E88 == 2)
+ sub_81127F8(&gInputToStoreInQuestLogMaybe);
+ ScriptContext2_Enable();
+ DismissMapNamePopup();
+ }
+ else
+ {
+ player_step(fieldInput.dpadDirection, newKeys, 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();
+}
+
+void CB2_ContinueSavedGame(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ LoadSaveblockMapHeader();
+ LoadSaveblockObjEventScripts();
+ UnfreezeObjectEvents();
+ sub_8054E40();
+ InitMapFromSavedGame();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback2 = NULL;
+ gUnknown_2031DE0 = TRUE;
+ if (UseContinueGameWarp() == TRUE)
+ {
+ ClearContinueGameWarpStatus();
+ SetWarpDestinationToContinueGameWarp();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ }
+ else
+ {
+ gFieldCallback = sub_8056918;
+ SetMainCallback1(CB1_Overworld);
+ CB2_ReturnToField();
+ }
+}
+
+void FieldClearVBlankHBlankCallbacks(void)
+{
+ if (UsedPokemonCenterWarp() == TRUE)
+ CloseLink();
+
+ if (gWirelessCommType != 0)
+ {
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ }
+ else
+ {
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ }
+
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+}
+
+void SetFieldVBlankCallback(void)
+{
+ SetVBlankCallback(VBlankCB_Field);
+}
+
+void VBlankCB_Field(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ ScanlineEffect_InitHBlankDmaTransfer();
+ FieldUpdateBgTilemapScroll();
+ TransferPlttBuffer();
+ TransferTilesetAnimsBuffer();
+}
+
+void InitCurrentFlashLevelScanlineEffect(void)
+{
+ u8 flashLevel = Overworld_GetFlashLevel();
+ if (flashLevel != 0)
+ {
+ WriteFlashScanlineEffectBuffer(flashLevel);
+ ScanlineEffect_SetParams((struct ScanlineEffectParams){
+ .dmaDest = &REG_WIN0H,
+ .dmaControl = (2 >> 1) | ((DMA_16BIT | DMA_DEST_RELOAD | DMA_SRC_INC | DMA_REPEAT | DMA_START_HBLANK | DMA_ENABLE) << 16),
+ .initState = 1,
+ .unused9 = 0
+ });
+ }
+}
+
+bool32 map_loading_iteration_3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ (*state)++;
+ break;
+ case 1:
+ mli0_load_map(TRUE);
+ (*state)++;
+ break;
+ case 2:
+ sub_8057024(TRUE);
+ (*state)++;
+ break;
+ case 3:
+ sub_8057178();
+ sub_8057074();
+ sub_80571A8();
+ SetCameraToTrackGuestPlayer();
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 4:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 5:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 8:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 9:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 10:
+ InitTilesetAnimations();
+ (*state)++;
+ break;
+ case 11:
+ if (gWirelessCommType != 0)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 13:
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 load_map_stuff(u8 *state, bool32 a1)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ FieldClearVBlankHBlankCallbacks();
+ mli0_load_map(a1);
+ (*state)++;
+ break;
+ case 1:
+ sub_8111F14();
+ (*state)++;
+ break;
+ case 2:
+ sub_8057024(a1);
+ (*state)++;
+ break;
+ case 3:
+ if (sub_8113748() == TRUE)
+ return TRUE;
+ (*state)++;
+ break;
+ case 4:
+ mli4_mapscripts_and_other();
+ sub_8057114();
+ if (gQuestLogState != QL_STATE_2)
+ {
+ sub_80CC534();
+ sub_80CC59C();
+ }
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 5:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 6:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 8:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 9:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 10:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 11:
+ InitTilesetAnimations();
+ (*state)++;
+ break;
+ case 12:
+ if (GetLastUsedWarpMapSectionId() != gMapHeader.regionMapSectionId && MapHasPreviewScreen_HandleQLState2(gMapHeader.regionMapSectionId, MPS_TYPE_FOREST) == TRUE)
+ {
+ MapPreview_LoadGfx(gMapHeader.regionMapSectionId);
+ MapPreview_StartForestTransition(gMapHeader.regionMapSectionId);
+ }
+ else if (SHOW_MAP_NAME_ENABLED)
+ {
+ ShowMapNamePopup(FALSE);
+ }
+ (*state)++;
+ break;
+ case 13:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 14:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 sub_8056CD8(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ sub_8111F14();
+ sub_8057024(FALSE);
+ sub_8057100();
+ sub_8057114();
+ (*state)++;
+ break;
+ case 1:
+ (*state)++;
+ break;
+ case 2:
+ sub_8056F08();
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 3:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 4:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 map_loading_iteration_2_link(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ FieldClearVBlankHBlankCallbacks();
+ (*state)++;
+ break;
+ case 1:
+ sub_8111F14();
+ sub_8057024(1);
+ (*state)++;
+ break;
+ case 2:
+ CreateLinkPlayerSprites();
+ sub_8057100();
+ SetCameraToTrackGuestPlayer_2();
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 3:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 4:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 5:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 7:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 8:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 9:
+ InitTilesetAnimations();
+ (*state)++;
+ break;
+ case 10:
+ (*state)++;
+ break;
+ case 11:
+ if (gWirelessCommType != 0)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 13:
+ SetFieldVBlankCallback();
+ (*state)++;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void do_load_map_stuff_loop(u8 *state)
+{
+ while (!load_map_stuff(state, FALSE))
+ ;
+}
+
+void MoveSaveBlocks_ResetHeap_(void)
+{
+ MoveSaveBlocks_ResetHeap();
+}
+
+void sub_8056E80(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ScanlineEffect_Stop();
+
+ DmaClear16(3, PLTT + 2, PLTT_SIZE - 2);
+ DmaFillLarge16(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
+ ResetOamRange(0, 128);
+ LoadOam();
+}
+
+void sub_8056F08(void)
+{
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ mapdata_load_assets_to_gpu_and_full_redraw();
+}
+
+void InitOverworldGraphicsRegisters(void)
+{
+ ClearScheduledBgCopiesToVram();
+ ResetTempTileDataBuffers();
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WINOBJ_BG0);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 255));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 255));
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(255, 255));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(255, 255));
+ SetGpuReg(REG_OFFSET_BLDCNT, gOverworldBackgroundLayerFlags[1] | gOverworldBackgroundLayerFlags[2] | gOverworldBackgroundLayerFlags[3]
+ | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(13, 7));
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | 0x20 | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+}
+
+void sub_8057024(u32 a1)
+{
+ ResetTasks();
+ ResetSpriteData();
+ ResetPaletteFade();
+ ScanlineEffect_Clear();
+ ResetAllPicSprites();
+ ResetCameraUpdateInfo();
+ InstallCameraPanAheadCallback();
+ if (!a1)
+ InitObjectEventPalettes(0);
+ else
+ InitObjectEventPalettes(1);
+
+ FieldEffectActiveListClear();
+ StartWeather();
+ ResumePausedWeather();
+ if (!a1)
+ SetUpFieldTasks();
+ RunOnResumeMapScript();
+}
+
+void sub_8057074(void)
+{
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetObjectEvents();
+ TrySpawnObjectEvents(0, 0);
+ TryRunOnWarpIntoMapScript();
+}
+
+void mli4_mapscripts_and_other(void)
+{
+ s16 x, y;
+ struct InitialPlayerAvatarState *player;
+
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetObjectEvents();
+ GetCameraFocusCoords(&x, &y);
+ player = GetInitialPlayerAvatarState();
+ InitPlayerAvatar(x, y, player->direction, gSaveBlock2Ptr->playerGender);
+ SetPlayerAvatarTransitionFlags(player->transitionFlags);
+ ResetInitialPlayerAvatarState();
+ TrySpawnObjectEvents(0, 0);
+ TryRunOnWarpIntoMapScript();
+}
+
+void sub_8057100(void)
+{
+ sub_805EDF0(0, 0);
+ RunOnReturnToFieldMapScript();
+}
+
+void sub_8057114(void)
+{
+ gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = 1;
+ InitCameraUpdateCallback(gPlayerAvatar.spriteId);
+}
+
+void SetCameraToTrackGuestPlayer(void)
+{
+ InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId));
+}
+
+// Duplicate function.
+void SetCameraToTrackGuestPlayer_2(void)
+{
+ InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId));
+}
+
+void sub_8057178(void)
+{
+ u16 x, y;
+ GetCameraFocusCoords(&x, &y);
+
+ // This is a hack of some kind; it's undone in sub_8086B14, which is called
+ // soon after this function.
+ SetCameraFocusCoords(x + gLocalLinkPlayerId, y);
+}
+
+void sub_80571A8(void)
+{
+ u16 i;
+ u16 x, y;
+
+ GetCameraFocusCoords(&x, &y);
+ x -= gLocalLinkPlayerId;
+
+ for (i = 0; i < gFieldLinkPlayerCount; i++)
+ {
+ SpawnLinkPlayerObjectEvent(i, i + x, y, gLinkPlayers[i].gender);
+ CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
+ }
+
+ ClearAllPlayerKeys();
+}
+
+void CreateLinkPlayerSprites(void)
+{
+ u16 i;
+ for (i = 0; i < gFieldLinkPlayerCount; i++)
+ CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
+}
+
+// Credits
+
+void sub_805726C(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gUnknown_2036E28 = 1;
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(CB2_DoChangeMap);
+ gMain.savedCallback = sub_80572D8;
+}
+
+void sub_80572A8(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gUnknown_2036E28 = 1;
+ LoadSaveblockMapHeader();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(sub_80572D8);
+}
+
+void sub_80572D8(void)
+{
+ sub_8057300(&gMain.state);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+}
+
+void sub_8057300(u8 *state)
+{
+ while (!sub_8057314(state))
+ ;
+}
+
+bool32 sub_8057314(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ FieldClearVBlankHBlankCallbacks();
+ sub_8111F14();
+ sub_81113E4();
+ sub_8111438();
+ if (sub_8110AC8() == 2)
+ {
+ gUnknown_2031DE0 = 0;
+ mli0_load_map(FALSE);
+ }
+ else
+ {
+ gUnknown_2031DE0 = 1;
+ sub_80559A8();
+ }
+ (*state)++;
+ break;
+ case 1:
+ sub_8110FCC();
+ (*state)++;
+ break;
+ case 2:
+ sub_8057024(0);
+ (*state)++;
+ break;
+ case 3:
+ sub_8057100();
+ sub_8057114();
+ (*state)++;
+ break;
+ case 4:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 5:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 8:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 9:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 10:
+ InitTilesetAnimations();
+ sub_815A540();
+ (*state)++;
+ break;
+ default:
+ if (map_post_load_hook_exec())
+ return TRUE;
+ break;
+ }
+ return FALSE;
+}
+
+void sub_8057430(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ gUnknown_2036E28 = 3;
+ ResetSafariZoneFlag_();
+ LoadSaveblockMapHeader();
+ LoadSaveblockObjEventScripts();
+ UnfreezeObjectEvents();
+ sub_8054E40();
+ InitMapFromSavedGame();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ gUnknown_2031DE0 = TRUE;
+ if (UseContinueGameWarp() == TRUE)
+ {
+ ClearContinueGameWarpStatus();
+ SetWarpDestinationToContinueGameWarp();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ }
+ else
+ {
+ SetMainCallback1(CB1_Overworld);
+ CB2_ReturnToField();
+ }
+}
+
+void Overworld_CreditsMainCB(void)
+{
+ bool8 fading = !!gPaletteFade.active;
+ if (fading)
+ SetVBlankCallback(NULL);
+ RunTasks();
+ AnimateSprites();
+ sub_805ACF0();
+ UpdateCameraPanning();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ UpdateTilesetAnimations();
+ DoScheduledBgTilemapCopiesToVram();
+ if (fading)
+ SetFieldVBlankCallback();
+}
+
+bool8 sub_80574EC(void)
+{
+ if (gPaletteFade.active)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 Overworld_DoScrollSceneForCredits(u8 *state_p, const struct CreditsOverworldCmd * script, u8 a2)
+{
+ gUnknown_2031DE4 = script;
+ gUnknown_2036E28 = a2;
+ return sub_8057528(state_p, 0);
+}
+
+bool32 sub_8057528(u8 *state, u8 unused)
+{
+ struct WarpData warp;
+ switch (*state)
+ {
+ case 0:
+ gUnknown_2031DEA = 0;
+ gUnknown_2031DE8 = 0;
+ (*state)++;
+ return FALSE;
+ case 1:
+ warp.mapGroup = gUnknown_2031DE4[gUnknown_2031DEA].unk_2;
+ warp.mapNum = gUnknown_2031DE4[gUnknown_2031DEA].unk_4;
+ warp.warpId = -1;
+ gUnknown_2031DEA++;
+ warp.x = gUnknown_2031DE4[gUnknown_2031DEA].unk_0;
+ warp.y = gUnknown_2031DE4[gUnknown_2031DEA].unk_2;
+ sWarpDestination = warp;
+ gUnknown_2031DE8 = gUnknown_2031DE4[gUnknown_2031DEA].unk_4;
+ WarpIntoMap();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ gFieldCallback2 = sub_80574EC;
+ gMain.state = 0;
+ (*state)++;
+ return FALSE;
+ case 2:
+ if (sub_8057650())
+ {
+ (*state)++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ gFieldCamera.callback = sub_8057748;
+ SetFieldVBlankCallback();
+ *state = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8057650(void)
+{
+ u8 *state = &gMain.state;
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs_NoResetHeap();
+ mli0_load_map(FALSE);
+ (*state)++;
+ break;
+ case 1:
+ ScanlineEffect_Clear();
+ ResetAllPicSprites();
+ ResetCameraUpdateInfo();
+ InstallCameraPanAheadCallback();
+ FieldEffectActiveListClear();
+ StartWeather();
+ ResumePausedWeather();
+ SetUpFieldTasks();
+ RunOnResumeMapScript();
+ (*state)++;
+ break;
+ case 2:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 3:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 4:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 5:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 6:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 7:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 8:
+ InitTilesetAnimations();
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ FadeSelectedPals(FADE_FROM_BLACK, 0, 0x3FFFFFFF);
+ (*state)++;
+ break;
+ default:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_8057748(struct CameraObject * camera)
+{
+ if (gUnknown_2031DE8 == 0)
+ {
+ gUnknown_2031DEA++;
+ switch (gUnknown_2031DE4[gUnknown_2031DEA].unk_0)
+ {
+ case 0xFC:
+ case 0xFE:
+ return;
+ case 0xFF:
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ camera->callback = NULL;
+ CreateTask(sub_805781C, 0);
+ return;
+ case 0xFB:
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ camera->callback = NULL;
+ break;
+ case 0xFD:
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ camera->callback = NULL;
+ return;
+ default:
+ gUnknown_2031DE8 = gUnknown_2031DE4[gUnknown_2031DEA].unk_4;
+ camera->movementSpeedX = gUnknown_2031DE4[gUnknown_2031DEA].unk_0;
+ camera->movementSpeedY = gUnknown_2031DE4[gUnknown_2031DEA].unk_2;
+ break;
+ }
+ }
+ if (gUnknown_2031DE4[gUnknown_2031DEA].unk_0 == 0xFF)
+ {
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ }
+ else
+ gUnknown_2031DE8--;
+}
+
+void sub_805781C(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = sub_8057854;
+}
+
+void sub_8057854(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ CleanupOverworldWindowsAndTilemaps();
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(taskId);
+ }
+}
diff --git a/src/party_menu_specials.c b/src/party_menu_specials.c
index aba11a534..48406da9a 100644
--- a/src/party_menu_specials.c
+++ b/src/party_menu_specials.c
@@ -47,7 +47,7 @@ void SelectMoveDeleterMove(void)
{
ShowSelectMovePokemonSummaryScreen(gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField, 0);
sub_8138B38(3);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
}
void GetNumMovesSelectedMonHas(void)
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 86406fa2a..7d154f815 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -28,8 +28,8 @@ bool8 EnterHallOfFame(void)
{
SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2Ptr->playTimeHours << 16) | (gSaveBlock2Ptr->playTimeMinutes << 8) | gSaveBlock2Ptr->playTimeSeconds);
}
- sub_804C1AC();
- sub_8055738(SPAWN_PALLET_TOWN);
+ SetContinueGameWarpStatus();
+ SetContinueGameWarpToHealLocation(SPAWN_PALLET_TOWN);
gaveAtLeastOneRibbon = FALSE;
for (i = 0, r7 = &ribbonState; i < PARTY_SIZE; i++)
{
diff --git a/src/quest_log.c b/src/quest_log.c
index 21a05f407..3c6b88d3d 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -96,7 +96,7 @@ struct UnkStruct_203B044
u8 gUnknown_3005E88;
u16 sNumEventsInLogEntry;
-struct UnkStruct_3005E90 gUnknown_3005E90;
+struct FieldInput gUnknown_3005E90;
struct QuestLogEntry * sCurQuestLogEntry;
static struct UnkStruct_300201C * sFlagOrVarRecords;
@@ -600,7 +600,7 @@ bool8 sub_8111000(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
SetQuestLogState(QL_STATE_2);
- FieldCB_UnionRoomWarp();
+ FieldCB_DefaultWarpExit();
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
gUnknown_203AE94.unk_0_0 = 2;
return 1;
@@ -610,7 +610,7 @@ bool8 sub_8111038(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
SetQuestLogState(QL_STATE_2);
- sub_807DF7C();
+ FieldCB_WarpExitFadeFromBlack();
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
gUnknown_203AE94.unk_0_0 = 2;
return 1;
@@ -1217,7 +1217,7 @@ static bool8 sub_8111F60(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
DrawPreviouslyOnQuestHeader(0);
- sub_807DF7C();
+ FieldCB_WarpExitFadeFromBlack();
CreateTask(sub_8111F8C, 0xFF);
return TRUE;
}
@@ -1313,7 +1313,7 @@ static void Task_EndQuestLog(u8 taskId)
break;
default:
if (gUnknown_203AE94.unk_0_6 == 1)
- CreateMapNamePopupIfNotAlreadyRunning(1);
+ ShowMapNamePopup(1);
CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
Free(gUnknown_203AE90);
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
@@ -1536,7 +1536,7 @@ void sub_811278C(u8 movementActionId, u8 duration)
}
}
-void sub_81127F8(struct UnkStruct_3005E90 * a0)
+void sub_81127F8(struct FieldInput * a0)
{
if (sQuestLogCursor < sNumEventsInLogEntry)
{
@@ -1616,7 +1616,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size)
}
sQuestLogCursor = 0;
gUnknown_203B01C = 0;
- gUnknown_3005E90 = (struct UnkStruct_3005E90){};
+ gUnknown_3005E90 = (struct FieldInput){};
sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4;
sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].unk_3;
sMovementScripts[0][1] = 0xFF;
diff --git a/src/region_map.c b/src/region_map.c
index 3a902ec0e..f97d67ffc 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -3471,7 +3471,7 @@ static void GetPlayerPositionOnRegionMap(void)
const struct MapHeader * mapHeader;
struct WarpData * warp;
- switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
+ switch (GetMapTypeByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
{
default:
case 1:
@@ -3495,12 +3495,12 @@ static void GetPlayerPositionOnRegionMap(void)
y = gSaveBlock1Ptr->escapeWarp.y;
break;
case 9:
- mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp2.mapGroup, gSaveBlock1Ptr->warp2.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->dynamicWarp.mapGroup, gSaveBlock1Ptr->dynamicWarp.mapNum);
gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId;
width = mapHeader->mapLayout->width;
height = mapHeader->mapLayout->height;
- x = gSaveBlock1Ptr->warp2.x;
- y = gSaveBlock1Ptr->warp2.y;
+ x = gSaveBlock1Ptr->dynamicWarp.x;
+ y = gSaveBlock1Ptr->dynamicWarp.y;
break;
case 8:
if ((gUnknown_20399E4->field_014 = gMapHeader.regionMapSectionId) != MAPSEC_SPECIAL_AREA)
@@ -3510,7 +3510,7 @@ static void GetPlayerPositionOnRegionMap(void)
}
else
{
- warp = &gSaveBlock1Ptr->warp2;
+ warp = &gSaveBlock1Ptr->dynamicWarp;
mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum);
gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId;
}
@@ -4318,7 +4318,7 @@ static void sub_80C4F08(u8 taskId)
case 4:
if ((sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) && GetRegionMapPermission(MAPPERM_3) == TRUE)
{
- switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
+ switch (GetMapTypeByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
{
case 4:
case 8:
@@ -4388,7 +4388,7 @@ static void sub_80C527C(u16 mapsec)
u16 idx = mapsec - MAPSECS_KANTO;
if (sMapsecToSpawn[idx][2])
{
- sub_805546C(sMapsecToSpawn[idx][2]);
+ SetWarpDestinationToHealLocation(sMapsecToSpawn[idx][2]);
SetUsedFlyQuestLogEvent(sMapsecToSpawn[idx]);
}
else
diff --git a/src/scrcmd.c b/src/scrcmd.c
index af977fbc7..bec0f4942 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1168,7 +1168,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext * ctx)
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 movementType = ScriptReadByte(ctx);
- Overworld_SetMapObjTemplateMovementType(localId, movementType);
+ Overworld_SetObjEventTemplateMovementType(localId, movementType);
return FALSE;
}
diff --git a/src/script.c b/src/script.c
index ff74b40bc..8e490811b 100644
--- a/src/script.c
+++ b/src/script.c
@@ -358,7 +358,7 @@ void ScriptContext2_RunNewScript(const u8 *ptr)
u8 *mapheader_get_tagged_pointer(u8 tag)
{
- u8 *mapScripts = gMapHeader.mapScripts;
+ const u8 *mapScripts = gMapHeader.mapScripts;
if (mapScripts == NULL)
return NULL;
@@ -370,7 +370,7 @@ u8 *mapheader_get_tagged_pointer(u8 tag)
if (*mapScripts == tag)
{
mapScripts++;
- return (u8 *)(mapScripts[0] + (mapScripts[1] << 8) + (mapScripts[2] << 16) + (mapScripts[3] << 24));
+ return T2_READ_PTR(mapScripts);
}
mapScripts += 5;
}
@@ -411,22 +411,22 @@ void RunOnLoadMapScript(void)
mapheader_run_script_by_tag(1);
}
-void mapheader_run_script_with_tag_x3(void)
+void RunOnTransitionMapScript(void)
{
mapheader_run_script_by_tag(3);
}
-void mapheader_run_script_with_tag_x5(void)
+void RunOnResumeMapScript(void)
{
mapheader_run_script_by_tag(5);
}
-void mapheader_run_script_with_tag_x7(void)
+void RunOnReturnToFieldMapScript(void)
{
mapheader_run_script_by_tag(7);
}
-void mapheader_run_script_with_tag_x6(void)
+void RunOnDiveWarpMapScript(void)
{
mapheader_run_script_by_tag(6);
}
@@ -447,7 +447,7 @@ bool8 TryRunOnFrameMapScript(void)
return 1;
}
-void mapheader_run_first_tag4_script_list_match(void)
+void TryRunOnWarpIntoMapScript(void)
{
u8 *ptr = mapheader_get_first_match_from_tagged_ptr_list(4);
if (ptr)
diff --git a/src/seagallop.c b/src/seagallop.c
index fb55e6bd2..f7405296f 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -322,7 +322,7 @@ static void Task_Seagallop_3(void)
SetWarpDestination(warpInfo[0], warpInfo[1], -1, warpInfo[2], warpInfo[3]);
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
ResetInitialPlayerAvatarState();
diff --git a/src/strings.c b/src/strings.c
index 547a36138..fbe51254c 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -958,8 +958,8 @@ const u8 gText_Sorry[] = _("SORRY");
const u8 gText_YaySmileEmoji[] = _("YAY{EXTRA 0xF9}");
const u8 gText_ThankYou[] = _("THANK YOU");
const u8 gText_ByeBye[] = _("BYE-BYE!");
-const u8 gUnknown_841B554[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm‥\p");
-const u8 gUnknown_841B5B6[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm‥\p");
+const u8 gText_PlayerScurriedToCenter[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm‥\p");
+const u8 gText_PlayerScurriedBackHome[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm‥\p");
const u8 gUnknown_841B60E[] = _("PLAYER: {DYNAMIC 0x00}");
const u8 gUnknown_841B619[] = _("This document is issued in\nrecognition of your magnificent\nachievement - the completion of\nthe {DYNAMIC 0x01} POKéDEX.");
const u8 gUnknown_841B684[] = _("GAME FREAK");
diff --git a/src/trade.c b/src/trade.c
index bd6860e85..bb2634613 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -2022,7 +2022,7 @@ static void sub_804E944(void)
Free(sTradeMenuResourcesPtr);
FreeAllWindowBuffers();
DestroyWirelessStatusIndicatorSprite();
- SetMainCallback2(c2_8056854);
+ SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
}
}
else
@@ -2032,7 +2032,7 @@ static void sub_804E944(void)
Free(sSpriteTextTileBuffer);
Free(sTradeMenuResourcesPtr);
FreeAllWindowBuffers();
- SetMainCallback2(c2_8056854);
+ SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
}
}
}
diff --git a/src/trade_scene.c b/src/trade_scene.c
index d609a9b53..308cd6e5b 100644
--- a/src/trade_scene.c
+++ b/src/trade_scene.c
@@ -2747,7 +2747,7 @@ static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_InitTradeAnim_InGameTrade);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskId);
}
}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 599e4f9b4..7054a13ed 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -681,7 +681,7 @@ bool8 sub_810C4EC(void)
return FALSE;
}
-void sub_810C578(void)
+void TryUpdateRandomTrainerRematches(u16 mapGroup, u16 mapNum)
{
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
sub_810C640();