summaryrefslogtreecommitdiff
path: root/src/field/overworld.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/field/overworld.c')
-rw-r--r--src/field/overworld.c2657
1 files changed, 0 insertions, 2657 deletions
diff --git a/src/field/overworld.c b/src/field/overworld.c
deleted file mode 100644
index 07453e4fe..000000000
--- a/src/field/overworld.c
+++ /dev/null
@@ -1,2657 +0,0 @@
-#include "global.h"
-#include "overworld.h"
-#include "battle_setup.h"
-#include "berry.h"
-#include "cable_club.h"
-#include "clock.h"
-#include "event_data.h"
-#include "field_camera.h"
-#include "field_control_avatar.h"
-#include "field_effect.h"
-#include "field_fadetransition.h"
-#include "field_ground_effect.h"
-#include "field_map_obj.h"
-#include "field_map_obj_helpers.h"
-#include "field_message_box.h"
-#include "field_player_avatar.h"
-#include "field_screen_effect.h"
-#include "field_special_scene.h"
-#include "field_specials.h"
-#include "field_tasks.h"
-#include "field_weather.h"
-#include "fieldmap.h"
-#include "fldeff_flash.h"
-#include "heal_location.h"
-#include "link.h"
-#include "load_save.h"
-#include "main.h"
-#include "constants/maps.h"
-#include "map_name_popup.h"
-#include "menu.h"
-#include "metatile_behavior.h"
-#include "new_game.h"
-#include "palette.h"
-#include "play_time.h"
-#include "random.h"
-#include "roamer.h"
-#include "rotating_gate.h"
-#include "safari_zone.h"
-#include "script.h"
-#include "script_pokemon_80C4.h"
-#include "secret_base.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "constants/species.h"
-#include "start_menu.h"
-#include "task.h"
-#include "tileset_anim.h"
-#include "time_events.h"
-#include "tv.h"
-#include "scanline_effect.h"
-#include "wild_encounter.h"
-
-#ifdef SAPPHIRE
-#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain
-#else
-#define LEGENDARY_MUSIC BGM_HIDERI // Drought
-#endif
-
-struct UnkTVStruct
-{
- u32 tv_field_0;
- u32 tv_field_4;
-};
-
-extern u16 gUnknown_03004898;
-extern u16 gUnknown_0300489C;
-
-extern u8 S_WhiteOut[];
-extern u8 gUnknown_0819FC9F[];
-extern u8 SingleBattleColosseum_EventScript_1A436F[];
-extern u8 SingleBattleColosseum_EventScript_1A4379[];
-extern u8 DoubleBattleColosseum_EventScript_1A4383[];
-extern u8 DoubleBattleColosseum_EventScript_1A439E[];
-extern u8 DoubleBattleColosseum_EventScript_1A43B9[];
-extern u8 DoubleBattleColosseum_EventScript_1A43D4[];
-extern u8 TradeCenter_EventScript_1A43F0[];
-extern u8 TradeCenter_EventScript_1A43FA[];
-extern u8 RecordCorner_EventScript_1A4418[];
-extern u8 RecordCorner_EventScript_1A442D[];
-extern u8 RecordCorner_EventScript_1A4442[];
-extern u8 RecordCorner_EventScript_1A4457[];
-extern u8 TradeRoom_ReadTrainerCard1[];
-extern u8 TradeRoom_ReadTrainerCard2[];
-extern u8 TradeRoom_TooBusyToNotice[];
-extern u8 TradeRoom_PromptToCancelLink[];
-extern u8 TradeRoom_TerminateLink[];
-extern u8 gUnknown_081A4508[];
-
-extern struct MapData * const gMapAttributes[];
-extern struct MapHeader * const * const gMapGroups[];
-extern s32 gMaxFlashLevel;
-
-EWRAM_DATA struct WarpData gUnknown_020297F0 = {0};
-EWRAM_DATA struct WarpData gWarpDestination = {0}; // new warp position
-EWRAM_DATA struct WarpData gUnknown_02029800 = {0};
-EWRAM_DATA struct WarpData gUnknown_02029808 = {0};
-EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0};
-EWRAM_DATA static u16 sAmbientCrySpecies = 0;
-EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
-EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0};
-
-static u8 gUnknown_03000580[4];
-static u16 (*gUnknown_03000584)(u32);
-static u8 gUnknown_03000588;
-
-u16 word_3004858;
-void (*gFieldCallback)(void);
-u8 gUnknown_03004860;
-u8 gFieldLinkPlayerCount;
-
-static const struct WarpData sDummyWarpData =
-{
- .mapGroup = -1,
- .mapNum = -1,
- .warpId = -1,
- .x = -1,
- .y = -1,
-};
-
-static const u8 sUnusedData[] =
-{
- 0xB0, 0x04, 0x00, 0x00,
- 0x10, 0x0E, 0x00, 0x00,
- 0xB0, 0x04, 0x00, 0x00,
- 0x60, 0x09, 0x00, 0x00,
- 0x32, 0x00, 0x00, 0x00,
- 0x50, 0x00, 0x00, 0x00,
- 0xD4, 0xFF, 0xFF, 0xFF,
- 0x2C, 0x00, 0x00, 0x00,
-};
-
-const struct UCoords32 gUnknown_0821664C[] =
-{
- { 0, 0},
- { 0, 1},
- { 0, -1},
- {-1, 0},
- { 1, 0},
- {-1, 1},
- { 1, 1},
- {-1, -1},
- { 1, -1},
-};
-
-const struct ScanlineEffectParams gUnknown_08216694 =
-{
- (void *)REG_ADDR_WIN0H,
- ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
- 1,
- 0,
-};
-
-static u8 sub_8055C68(struct LinkPlayerMapObject *, struct MapObject *, u8);
-static u8 sub_8055C88(struct LinkPlayerMapObject *, struct MapObject *, u8);
-static u8 sub_8055C8C(struct LinkPlayerMapObject *, struct MapObject *, u8);
-
-static u8 (*const gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
-{
- sub_8055C68,
- sub_8055C88,
- sub_8055C8C,
-};
-
-static u8 sub_8055CAC(struct LinkPlayerMapObject *, struct MapObject *, u8);
-static u8 sub_8055CB0(struct LinkPlayerMapObject *, struct MapObject *, u8);
-static u8 sub_8055D18(struct LinkPlayerMapObject *, struct MapObject *, u8);
-
-static u8 (*const gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
-{
- sub_8055CAC,
- sub_8055CB0,
- sub_8055CB0,
- sub_8055CB0,
- sub_8055CB0,
- sub_8055CAC,
- sub_8055CAC,
- sub_8055D18,
- sub_8055D18,
- sub_8055D18,
- sub_8055D18,
-};
-
-static void sub_8055D30(struct LinkPlayerMapObject *, struct MapObject *);
-static void sub_8055D38(struct LinkPlayerMapObject *, struct MapObject *);
-
-static void (*const gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *) =
-{
- sub_8055D30,
- sub_8055D38,
-};
-
-
-static void DoWhiteOut(void)
-{
- ScriptContext2_RunNewScript(S_WhiteOut);
- gSaveBlock1.money /= 2;
- ScrSpecial_HealPlayerParty();
- Overworld_ResetStateAfterWhiteOut();
- Overworld_SetWarpDestToLastHealLoc();
- warp_in();
-}
-
-void Overworld_ResetStateAfterFly(void)
-{
- player_avatar_init_params_reset();
- FlagClear(FLAG_SYS_CYCLING_ROAD);
- FlagClear(FLAG_SYS_CRUISE_MODE);
- FlagClear(FLAG_SYS_SAFARI_MODE);
- FlagClear(FLAG_SYS_USE_STRENGTH);
- FlagClear(FLAG_SYS_USE_FLASH);
-}
-
-void Overworld_ResetStateAfterTeleport(void)
-{
- player_avatar_init_params_reset();
- FlagClear(FLAG_SYS_CYCLING_ROAD);
- FlagClear(FLAG_SYS_CRUISE_MODE);
- FlagClear(FLAG_SYS_SAFARI_MODE);
- FlagClear(FLAG_SYS_USE_STRENGTH);
- FlagClear(FLAG_SYS_USE_FLASH);
- ScriptContext2_RunNewScript(gUnknown_0819FC9F);
-}
-
-void Overworld_ResetStateAfterDigEscRope(void)
-{
- player_avatar_init_params_reset();
- FlagClear(FLAG_SYS_CYCLING_ROAD);
- FlagClear(FLAG_SYS_CRUISE_MODE);
- FlagClear(FLAG_SYS_SAFARI_MODE);
- FlagClear(FLAG_SYS_USE_STRENGTH);
- FlagClear(FLAG_SYS_USE_FLASH);
-}
-
-void Overworld_ResetStateAfterWhiteOut(void)
-{
- player_avatar_init_params_reset();
- FlagClear(FLAG_SYS_CYCLING_ROAD);
- FlagClear(FLAG_SYS_CRUISE_MODE);
- FlagClear(FLAG_SYS_SAFARI_MODE);
- FlagClear(FLAG_SYS_USE_STRENGTH);
- FlagClear(FLAG_SYS_USE_FLASH);
-}
-
-void sub_805308C(void)
-{
- FlagClear(FLAG_SYS_SAFARI_MODE);
- ChooseAmbientCrySpecies();
- ResetCyclingRoadChallengeData();
- UpdateLocationHistoryForRoamer();
- RoamerMoveToOtherLocationSet();
-}
-
-void ResetGameStats(void)
-{
- s32 i;
-
- for (i = 0; i < NUM_GAME_STATS; i++)
- gSaveBlock1.gameStats[i] = 0;
-}
-
-void IncrementGameStat(u8 index)
-{
- if (index < NUM_GAME_STATS)
- {
- if (gSaveBlock1.gameStats[index] < 0xFFFFFF)
- gSaveBlock1.gameStats[index]++;
- else
- gSaveBlock1.gameStats[index] = 0xFFFFFF;
- }
-}
-
-u32 GetGameStat(u8 index)
-{
- if (index >= NUM_GAME_STATS)
- return 0;
-
- return gSaveBlock1.gameStats[index];
-}
-
-void SetGameStat(u8 index, u32 value)
-{
- if (index < NUM_GAME_STATS)
- gSaveBlock1.gameStats[index] = value;
-}
-
-void LoadMapObjTemplatesFromHeader(void)
-{
- // Clear map object templates
- CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates));
-
- // Copy map header events to save block
- CpuCopy32(gMapHeader.events->mapObjects,
- gSaveBlock1.mapObjectTemplates,
- gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate));
-}
-
-static void LoadSaveblockMapObjScripts(void)
-{
- struct MapObjectTemplate *mapObjectTemplates = gSaveBlock1.mapObjectTemplates;
- s32 i;
-
- for (i = 0; i < 64; i++)
- mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script;
-}
-
-void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
-{
- s32 i;
- for (i = 0; i < 64; i++)
- {
- struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i];
- if (mapObjectTemplate->localId == localId)
- {
- mapObjectTemplate->x = x;
- mapObjectTemplate->y = y;
- return;
- }
- }
-}
-
-void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType)
-{
- s32 i;
-
- for (i = 0; i < 64; i++)
- {
- struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i];
- if (mapObjectTemplate->localId == localId)
- {
- mapObjectTemplate->movementType = movementType;
- return;
- }
- }
-}
-
-static void mapdata_load_assets_to_gpu_and_full_redraw(void)
-{
- move_tilemap_camera_to_upper_left_corner();
- copy_map_tileset1_tileset2_to_vram(gMapHeader.mapData);
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- DrawWholeMapView();
- cur_mapheader_run_tileset_funcs_after_some_cpuset();
-}
-
-static struct MapData *get_mapdata_header(void)
-{
- u16 mapDataId = gSaveBlock1.mapDataId;
- if (mapDataId)
- return gMapAttributes[mapDataId - 1];
- return NULL;
-}
-
-static void ApplyCurrentWarp(void)
-{
- gUnknown_020297F0 = gSaveBlock1.location;
- gSaveBlock1.location = gWarpDestination;
- gUnknown_02029800 = sDummyWarpData;
- gUnknown_02029808 = sDummyWarpData;
-}
-
-static 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;
-}
-
-static bool32 warp_data_is_not_neg_1(struct WarpData *warp)
-{
- if (warp->mapGroup != -1)
- return FALSE;
- if (warp->mapNum != -1)
- return FALSE;
- if (warp->warpId != -1)
- return FALSE;
- if (warp->x != -1)
- return FALSE;
- if (warp->y != -1)
- return FALSE;
- return TRUE;
-}
-
-struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum)
-{
- return gMapGroups[mapGroup][mapNum];
-}
-
-struct MapHeader *const warp1_get_mapheader(void)
-{
- return Overworld_GetMapHeaderByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum);
-}
-
-static void set_current_map_header_from_sav1_save_old_name(void)
-{
- gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- gSaveBlock1.mapDataId = gMapHeader.mapDataId;
- gMapHeader.mapData = get_mapdata_header();
-}
-
-static void LoadSaveblockMapHeader(void)
-{
- gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- gMapHeader.mapData = get_mapdata_header();
-}
-
-void sub_80533CC(void)
-{
- if (gSaveBlock1.location.warpId >= 0 && gSaveBlock1.location.warpId < gMapHeader.events->warpCount)
- {
- gSaveBlock1.pos.x = gMapHeader.events->warps[gSaveBlock1.location.warpId].x;
- gSaveBlock1.pos.y = gMapHeader.events->warps[gSaveBlock1.location.warpId].y;
- }
- else if (gSaveBlock1.location.x >= 0 && gSaveBlock1.location.y >= 0)
- {
- gSaveBlock1.pos.x = gSaveBlock1.location.x;
- gSaveBlock1.pos.y = gSaveBlock1.location.y;
- }
- else
- {
- gSaveBlock1.pos.x = gMapHeader.mapData->width / 2;
- gSaveBlock1.pos.y = gMapHeader.mapData->height / 2;
- }
-}
-
-void warp_in(void)
-{
- ApplyCurrentWarp();
- set_current_map_header_from_sav1_save_old_name();
- sub_80533CC();
-}
-
-void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
-{
- SetWarpData(&gWarpDestination, mapGroup, mapNum, warpId, x, y);
-}
-
-void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId)
-{
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
-}
-
-void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId)
-{
- SetWarpData(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, gSaveBlock1.pos.x, gSaveBlock1.pos.y);
-}
-
-void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
-{
- SetWarpData(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y);
-}
-
-void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused)
-{
- gWarpDestination = gSaveBlock1.warp2;
-}
-
-void sub_8053538(u8 a1)
-{
- const struct HealLocation *warp = GetHealLocation(a1);
-
- if (warp)
- Overworld_SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
-}
-
-void Overworld_SetWarpDestToLastHealLoc(void)
-{
- gWarpDestination = gSaveBlock1.lastHealLocation;
-}
-
-void Overworld_SetHealLocationWarp(u8 healLocationId)
-{
- const struct HealLocation *healLocation = GetHealLocation(healLocationId);
-
- if (healLocation != NULL)
- SetWarpData(&gSaveBlock1.lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
-}
-
-void sub_80535C4(s16 a1, s16 a2)
-{
- u8 currMapType = Overworld_GetMapTypeOfSaveblockLocation();
- u8 destMapType = GetMapTypeByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum);
- if (is_map_type_1_2_3_5_or_6(currMapType) && is_map_type_1_2_3_5_or_6(destMapType) != TRUE)
- sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6);
-}
-
-void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
-{
- SetWarpData(&gSaveBlock1.warp4, mapGroup, mapNum, warpId, x, y);
-}
-
-void sub_8053678(void)
-{
- gWarpDestination = gSaveBlock1.warp4;
-}
-
-void sub_8053690(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
-{
- SetWarpData(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y);
-}
-
-static void warp1_set_to_warp2(void)
-{
- gWarpDestination = gUnknown_02029800;
-}
-
-void sub_80536E4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
-{
- SetWarpData(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y);
-}
-
-void sub_8053720(s16 x, s16 y)
-{
- if (warp_data_is_not_neg_1(&gUnknown_02029808) == TRUE)
- {
- gWarpDestination = gUnknown_020297F0;
- }
- else
- {
- Overworld_SetWarpDestination(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y);
- }
-}
-
-void sub_8053778(void)
-{
- gWarpDestination = gSaveBlock1.warp1;
-}
-
-void unref_sub_8053790(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
-{
- SetWarpData(&gSaveBlock1.warp1, mapGroup, mapNum, warpId, x, y);
-}
-
-void sub_80537CC(u8 a1)
-{
- const struct HealLocation *warp = GetHealLocation(a1);
- if (warp)
- SetWarpData(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y);
-}
-
-void gpu_sync_bg_hide()
-{
- gSaveBlock1.warp1 = gSaveBlock1.warp2;
-}
-
-struct MapConnection *GetMapConnection(u8 dir)
-{
- s32 i;
- s32 count = gMapHeader.connections->count;
- 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 sub_8053850(u8 dir, u16 x, u16 y)
-{
- struct MapConnection *connection = GetMapConnection(dir);
-
- if (connection != NULL)
- {
- Overworld_SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
- }
- else
- {
- mapheader_run_script_with_tag_x6();
- if (warp_data_is_not_neg_1(&gUnknown_02029800))
- return FALSE;
- warp1_set_to_warp2();
- }
- return TRUE;
-}
-
-bool8 sub_80538B0(u16 x, u16 y)
-{
- return sub_8053850(CONNECTION_EMERGE, x, y);
-}
-
-bool8 sub_80538D0(u16 x, u16 y)
-{
- return sub_8053850(CONNECTION_DIVE, x, y);
-}
-
-void sub_80538F0(u8 mapGroup, u8 mapNum)
-{
- s32 paletteIndex;
-
- Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
- sub_8053F0C();
- ApplyCurrentWarp();
- set_current_map_header_from_sav1_save_old_name();
- LoadMapObjTemplatesFromHeader();
- ClearTempFieldEventData();
- ResetCyclingRoadChallengeData();
- prev_quest_postbuffer_cursor_backup_reset();
- TryUpdateRandomTrainerRematches(mapGroup, mapNum);
- DoTimeBasedEvents();
- SetSav1WeatherFromCurrMapHeader();
- ChooseAmbientCrySpecies();
- SetDefaultFlashLevel();
- Overworld_ClearSavedMusic();
- mapheader_run_script_with_tag_x3();
- not_trainer_hill_battle_pyramid();
- sub_8056D38(gMapHeader.mapData);
- apply_map_tileset2_palette(gMapHeader.mapData);
-
- for (paletteIndex = 6; paletteIndex < 12; paletteIndex++)
- ApplyWeatherGammaShiftToPal(paletteIndex);
-
- sub_8072ED0();
- UpdateLocationHistoryForRoamer();
- RoamerMove();
- DoCurrentWeather();
- ResetFieldTasksArgs();
- mapheader_run_script_with_tag_x5();
- ShowMapNamePopup();
-}
-
-void sub_8053994(u32 a1)
-{
- bool8 v2;
- bool8 v3;
-
- set_current_map_header_from_sav1_save_old_name();
- LoadMapObjTemplatesFromHeader();
- v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType);
- v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType);
- ClearTempFieldEventData();
- ResetCyclingRoadChallengeData();
- prev_quest_postbuffer_cursor_backup_reset();
- TryUpdateRandomTrainerRematches(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- if (a1 != 1)
- DoTimeBasedEvents();
- SetSav1WeatherFromCurrMapHeader();
- ChooseAmbientCrySpecies();
- if (v2)
- FlagClear(FLAG_SYS_USE_FLASH);
- SetDefaultFlashLevel();
- Overworld_ClearSavedMusic();
- mapheader_run_script_with_tag_x3();
- UpdateLocationHistoryForRoamer();
- RoamerMoveToOtherLocationSet();
- not_trainer_hill_battle_pyramid();
- if (a1 != 1 && v3)
- {
- UpdateTVScreensOnMap(gUnknown_03004870.width, gUnknown_03004870.height);
- sub_80BBCCC(1);
- }
-}
-
-void player_avatar_init_params_reset(void)
-{
- gUnknown_02029810.player_field_1 = 1;
- gUnknown_02029810.player_field_0 = 1;
-}
-
-void walkrun_find_lowest_active_bit_in_bitfield(void)
-{
- gUnknown_02029810.player_field_1 = player_get_direction_lower_nybble();
-
- if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
- gUnknown_02029810.player_field_0 = 2;
- else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
- gUnknown_02029810.player_field_0 = 4;
- else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- gUnknown_02029810.player_field_0 = 8;
- else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4))
- gUnknown_02029810.player_field_0 = 16;
- else
- gUnknown_02029810.player_field_0 = 1;
-}
-
-struct UnkPlayerStruct *sub_8053AA8(void)
-{
- struct UnkPlayerStruct playerStruct;
- u8 mapType = Overworld_GetMapTypeOfSaveblockLocation();
- u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1();
- u8 v4 = sub_8053B00(&gUnknown_02029810, v2, mapType);
- playerStruct.player_field_0 = v4;
- playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, mapType);
- gUnknown_02029810 = playerStruct;
- return &gUnknown_02029810;
-}
-
-u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3)
-{
- if (a3 != 8 && FlagGet(FLAG_SYS_CRUISE_MODE))
- return 1;
- if (a3 == 5)
- return 16;
- if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1)
- return 8;
- if (Overworld_IsBikingAllowed() != TRUE)
- return 1;
- if (playerStruct->player_field_0 == 2)
- return 2;
- if (playerStruct->player_field_0 != 4)
- return 1;
- return 4;
-}
-
-u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4)
-{
- if (FlagGet(FLAG_SYS_CRUISE_MODE) && a4 == 6)
- return 4;
- if (MetatileBehavior_IsDeepSouthWarp(a3) == TRUE)
- return 2;
- if (MetatileBehavior_IsNonAnimDoor(a3) == TRUE || MetatileBehavior_IsDoor(a3) == TRUE)
- return 1;
- if (MetatileBehavior_IsSouthArrowWarp(a3) == TRUE)
- return 2;
- if (MetatileBehavior_IsNorthArrowWarp(a3) == TRUE)
- return 1;
- if (MetatileBehavior_IsWestArrowWarp(a3) == TRUE)
- return 4;
- if (MetatileBehavior_IsEastArrowWarp(a3) == TRUE)
- return 3;
- if ((playerStruct->player_field_0 == 16 && a2 == 8)
- || (playerStruct->player_field_0 == 8 && a2 == 16))
- return playerStruct->player_field_1;
- if (MetatileBehavior_IsLadder(a3) == TRUE)
- return playerStruct->player_field_1;
- return 1;
-}
-
-u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void)
-{
- return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7);
-}
-
-bool32 Overworld_IsBikingAllowed(void)
-{
- // is player in cycling road entrance?
- if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE)
- && (gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE)
- || gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)))
- return TRUE;
-
- // is player indoor, in a secret base, or underwater?
- if (gMapHeader.mapType == MAP_TYPE_INDOOR)
- return FALSE;
- if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE)
- return FALSE;
- if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
- return FALSE;
-
- // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon.
- if (gSaveBlock1.location.mapGroup == MAP_GROUP(SEAFLOOR_CAVERN_ROOM9)
- && gSaveBlock1.location.mapNum == MAP_NUM(SEAFLOOR_CAVERN_ROOM9))
- return FALSE;
- if (gSaveBlock1.location.mapGroup == MAP_GROUP(CAVE_OF_ORIGIN_B4F)
- && gSaveBlock1.location.mapNum == MAP_NUM(CAVE_OF_ORIGIN_B4F))
- return FALSE;
-
- return TRUE;
-}
-
-void SetDefaultFlashLevel(void)
-{
- if (!gMapHeader.cave)
- gSaveBlock1.flashLevel = 0;
- else if (FlagGet(FLAG_SYS_USE_FLASH))
- gSaveBlock1.flashLevel = 1;
- else
- gSaveBlock1.flashLevel = gMaxFlashLevel;
-}
-
-void Overworld_SetFlashLevel(s32 flashLevel)
-{
- if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
- flashLevel = 0;
- gSaveBlock1.flashLevel = flashLevel;
-}
-
-u8 Overworld_GetFlashLevel(void)
-{
- return gSaveBlock1.flashLevel;
-}
-
-void sub_8053D14(u16 mapDataId)
-{
- gSaveBlock1.mapDataId = mapDataId;
- gMapHeader.mapData = get_mapdata_header();
-}
-
-static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
-{
- if (!FlagGet(FLAG_SYS_WEATHER_CTRL))
- return FALSE;
- if (warp->mapGroup == 0)
- {
- switch (warp->mapNum)
- {
- case MAP_NUM(LILYCOVE_CITY):
- case MAP_NUM(MOSSDEEP_CITY):
- case MAP_NUM(SOOTOPOLIS_CITY):
- case MAP_NUM(EVER_GRANDE_CITY):
- return TRUE;
- case MAP_NUM(ROUTE124):
- case MAP_NUM(ROUTE125):
- case MAP_NUM(ROUTE126):
- case MAP_NUM(ROUTE127):
- case MAP_NUM(ROUTE128):
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp)
-{
- if (VarGet(VAR_WEATHER_INSTITUTE_STATE))
- return FALSE;
- if (warp->mapGroup != MAP_GROUP(ROUTE119_WEATHER_INSTITUTE_1F))
- return FALSE;
- if (warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_1F)
- || warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_2F))
- return TRUE;
- return FALSE;
-}
-
-static u16 GetLocationMusic(struct WarpData *warp)
-{
- if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE)
- return LEGENDARY_MUSIC;
- else if (IsInfiltratedWeatherInstitute(warp) == TRUE)
- return BGM_TOZAN;
- else
- return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
-}
-
-u16 GetCurrLocationDefaultMusic(void)
-{
- u16 music;
-
- // Play the desert music only when the sandstorm is active on Route 111.
- if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE111)
- && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE111)
- && GetSav1Weather() == 8)
- return BGM_ASHROAD;
-
- music = GetLocationMusic(&gSaveBlock1.location);
- if (music != 0x7FFF)
- {
- return music;
- }
- else
- {
- if (gSaveBlock1.pos.x < 24)
- return BGM_DOORO_X1;
- else
- return BGM_GRANROAD;
- }
-}
-
-u16 GetWarpDestinationMusic(void)
-{
- u16 music = GetLocationMusic(&gWarpDestination);
- if (music != 0x7FFF)
- {
- return music;
- }
- else
- {
- if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAUVILLE_CITY)
- && gSaveBlock1.location.mapNum == MAP_NUM(MAUVILLE_CITY))
- return BGM_DOORO_X1;
- else
- return BGM_GRANROAD;
- }
-}
-
-void Overworld_ResetMapMusic(void)
-{
- ResetMapMusic();
-}
-
-void Overworld_PlaySpecialMapMusic(void)
-{
- u16 music = GetCurrLocationDefaultMusic();
-
- if (music != LEGENDARY_MUSIC)
- {
- if (gSaveBlock1.savedMusic)
- music = gSaveBlock1.savedMusic;
- else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
- music = BGM_DEEPDEEP;
- else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- music = BGM_NAMINORI;
- }
-
- if (music != GetCurrentMapMusic())
- PlayNewMapMusic(music);
-}
-
-void Overworld_SetSavedMusic(u16 songNum)
-{
- gSaveBlock1.savedMusic = songNum;
-}
-
-void Overworld_ClearSavedMusic(void)
-{
- gSaveBlock1.savedMusic = 0;
-}
-
-void sub_8053F0C(void)
-{
- if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE)
- {
- u16 newMusic = GetWarpDestinationMusic();
- u16 currentMusic = GetCurrentMapMusic();
- if (newMusic != LEGENDARY_MUSIC)
- {
- if (currentMusic == BGM_DEEPDEEP || currentMusic == BGM_NAMINORI)
- return;
- if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- newMusic = BGM_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 && currentMusic != LEGENDARY_MUSIC)
- FadeOutAndPlayNewMapMusic(newMusic, 8);
-}
-
-u8 GetMapMusicFadeoutSpeed(void)
-{
- struct MapHeader *mapHeader = warp1_get_mapheader();
- if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE)
- return 2;
- else
- return 4;
-}
-
-void sub_8053FF8(void)
-{
- u16 music = GetWarpDestinationMusic();
- if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic())
- {
- u8 speed = GetMapMusicFadeoutSpeed();
- FadeOutMapMusic(speed);
- }
-}
-
-bool8 sub_8054034(void)
-{
- return IsNotWaitingForBGMStop();
-}
-
-void Overworld_FadeOutMapMusic(void)
-{
- FadeOutMapMusic(4);
-}
-
-static void PlayAmbientCry(void)
-{
- s16 x, y;
- s8 pan;
- s8 volume;
-
- PlayerGetDestCoords(&x, &y);
- if (sIsAmbientCryWaterMon == TRUE
- && !MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y)))
- return;
- pan = (Random() % 88) + 212;
- volume = (Random() % 30) + 50;
- PlayCry2(sAmbientCrySpecies, pan, volume, 1);
-}
-
-void UpdateAmbientCry(s16 *state, u16 *delayCounter)
-{
- 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)
-{
- if ((gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE130)
- && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE130))
- && !IsMirageIslandPresent())
- {
- // Only play water pokemon cries on this route
- // when Mirage Island is not present
- sIsAmbientCryWaterMon = TRUE;
- sAmbientCrySpecies = GetLocalWaterMon();
- }
- else
- {
- sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon);
- }
-}
-
-u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum)
-{
- return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType;
-}
-
-u8 GetMapTypeByWarpData(struct WarpData *warp)
-{
- return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum);
-}
-
-u8 Overworld_GetMapTypeOfSaveblockLocation(void)
-{
- return GetMapTypeByWarpData(&gSaveBlock1.location);
-}
-
-u8 get_map_type_from_warp0(void)
-{
- return GetMapTypeByWarpData(&gUnknown_020297F0);
-}
-
-bool8 is_map_type_1_2_3_5_or_6(u8 mapType)
-{
- if (mapType == MAP_TYPE_ROUTE
- || mapType == MAP_TYPE_TOWN
- || mapType == MAP_TYPE_UNDERWATER
- || mapType == MAP_TYPE_CITY
- || mapType == MAP_TYPE_6)
- return TRUE;
- else
- return FALSE;
-}
-
-bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType)
-{
- if (mapType == MAP_TYPE_ROUTE
- || mapType == MAP_TYPE_TOWN
- || mapType == MAP_TYPE_6
- || mapType == MAP_TYPE_CITY)
- return TRUE;
- else
- return FALSE;
-}
-
-bool8 Overworld_MapTypeIsIndoors(u8 mapType)
-{
- if (mapType == MAP_TYPE_INDOOR
- || mapType == MAP_TYPE_SECRET_BASE)
- return TRUE;
- else
- return FALSE;
-}
-
-u8 unref_sub_8054260(void)
-{
- return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId;
-}
-
-u8 sav1_map_get_name(void)
-{
- return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId;
-}
-
-u8 sav1_map_get_battletype(void)
-{
- return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType;
-}
-
-void ResetSafariZoneFlag_(void)
-{
- ResetSafariZoneFlag();
-}
-
-bool32 is_c1_link_related_active(void)
-{
- if (gMain.callback1 == sub_8055354)
- return TRUE;
- else
- return FALSE;
-}
-
-void c1_overworld_normal(u16 newKeys, u16 heldKeys)
-{
- struct FieldInput inputStruct;
-
- sub_8059204();
- FieldClearPlayerInput(&inputStruct);
- FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
- if (!ScriptContext2_IsEnabled())
- {
- if (sub_8068024(&inputStruct) == 1)
- {
- ScriptContext2_Enable();
- HideMapNamePopup();
- }
- else
- {
- player_step(inputStruct.dpadDirection, newKeys, heldKeys);
- }
- }
-}
-
-void c1_overworld(void)
-{
- if (gMain.callback2 == c2_overworld)
- c1_overworld_normal(gMain.newKeys, gMain.heldKeys);
-}
-
-void OverworldBasic(void)
-{
- ScriptContext2_RunScript();
- RunTasks();
- AnimateSprites();
- CameraUpdate();
- UpdateCameraPanning();
- BuildOamBuffer();
- UpdatePaletteFade();
- sub_8072EDC();
-}
-
-// This CB2 is used when starting
-void CB2_OverworldBasic(void)
-{
- OverworldBasic();
-}
-
-void c2_overworld(void)
-{
- int fading = (gPaletteFade.active != 0);
- if (fading)
- SetVBlankCallback(NULL);
- OverworldBasic();
- if (fading)
- SetFieldVBlankCallback();
-}
-
-void set_callback1(MainCallback cb)
-{
- gMain.callback1 = cb;
-}
-
-void sub_80543DC(u16 (*a1)(u32))
-{
- gUnknown_03000584 = a1;
-}
-
-void sub_80543E8(void)
-{
- if (gFieldCallback != NULL)
- gFieldCallback();
- else
- mapldr_default();
- gFieldCallback = NULL;
-}
-
-void CB2_NewGame(void)
-{
- FieldClearVBlankHBlankCallbacks();
- StopMapMusic();
- ResetSafariZoneFlag_();
- NewGameInitData();
- player_avatar_init_params_reset();
- PlayTimeCounter_Start();
- ScriptContext1_Init();
- ScriptContext2_Disable();
- gFieldCallback = ExecuteTruckSequence;
- do_load_map_stuff_loop(&gMain.state);
- SetFieldVBlankCallback();
- set_callback1(c1_overworld);
- SetMainCallback2(c2_overworld);
-}
-
-void CB2_WhiteOut(void)
-{
- u8 val;
- gMain.state++;
- if (gMain.state >= 120)
- {
- FieldClearVBlankHBlankCallbacks();
- StopMapMusic();
- ResetSafariZoneFlag_();
- DoWhiteOut();
- player_avatar_init_params_reset();
- ScriptContext1_Init();
- ScriptContext2_Disable();
- gFieldCallback = sub_8080B60;
- val = 0;
- do_load_map_stuff_loop(&val);
- SetFieldVBlankCallback();
- set_callback1(c1_overworld);
- SetMainCallback2(c2_overworld);
- }
-}
-
-void CB2_LoadMap(void)
-{
- FieldClearVBlankHBlankCallbacks();
- ScriptContext1_Init();
- ScriptContext2_Disable();
- set_callback1(NULL);
- SetMainCallback2(sub_810CC80);
- gMain.savedCallback = CB2_LoadMap2;
-}
-
-void CB2_LoadMap2(void)
-{
- do_load_map_stuff_loop(&gMain.state);
- SetFieldVBlankCallback();
- set_callback1(c1_overworld);
- SetMainCallback2(c2_overworld);
-}
-
-void sub_8054534(void)
-{
- if (!gMain.state)
- {
- FieldClearVBlankHBlankCallbacks();
- ScriptContext1_Init();
- ScriptContext2_Disable();
- set_callback1(NULL);
- }
- if (sub_805493C(&gMain.state, 1))
- {
- SetFieldVBlankCallback();
- set_callback1(c1_overworld);
- SetMainCallback2(c2_overworld);
- }
-}
-
-void sub_8054588(void)
-{
- FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_8080AC4;
- SetMainCallback2(c2_80567AC);
-}
-
-void c2_80567AC(void)
-{
- if (sub_805483C(&gMain.state))
- {
- SetFieldVBlankCallback();
- set_callback1(sub_8055354);
- sub_80543DC(sub_8055390);
- SetMainCallback2(c2_overworld);
- }
-}
-
-void c2_exit_to_overworld_2_switch(void)
-{
- if (is_c1_link_related_active() == TRUE)
- {
- SetMainCallback2(c2_exit_to_overworld_2_link);
- }
- else
- {
- FieldClearVBlankHBlankCallbacks();
- SetMainCallback2(c2_exit_to_overworld_2_local);
- }
-}
-
-void c2_exit_to_overworld_2_local(void)
-{
- if (sub_8054A4C(&gMain.state))
- {
- SetFieldVBlankCallback();
- SetMainCallback2(c2_overworld);
- }
-}
-
-void c2_exit_to_overworld_2_link(void)
-{
- if (!sub_8055870() && sub_8054A9C(&gMain.state))
- SetMainCallback2(c2_overworld);
-}
-
-void sub_805465C(void)
-{
- FieldClearVBlankHBlankCallbacks();
- StopMapMusic();
- sub_8054F70();
- set_callback1(sub_8055354);
- sub_80543DC(sub_8055390);
- gFieldCallback = sub_8080A3C;
- ScriptContext1_Init();
- ScriptContext2_Disable();
- c2_exit_to_overworld_2_switch();
-}
-
-void sub_805469C(void)
-{
- FieldClearVBlankHBlankCallbacks();
- gFieldCallback = atk17_seteffectsecondary;
- c2_exit_to_overworld_2_switch();
-}
-
-void sub_80546B8(void)
-{
- FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_80809B0;
- c2_exit_to_overworld_2_switch();
-}
-
-void c2_exit_to_overworld_1_continue_scripts_restart_music(void)
-{
- FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_8080990;
- c2_exit_to_overworld_2_switch();
-}
-
-void sub_80546F0(void)
-{
- FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_8080B60;
- c2_exit_to_overworld_2_switch();
-}
-
-void sub_805470C(void)
-{
- if (gMapHeader.flags == 1 && sub_80BBB24() == 1)
- ShowMapNamePopup();
- sub_8080B60();
-}
-
-void CB2_ContinueSavedGame(void)
-{
- FieldClearVBlankHBlankCallbacks();
- StopMapMusic();
- ResetSafariZoneFlag_();
- LoadSaveblockMapHeader();
- LoadSaveblockMapObjScripts();
- UnfreezeMapObjects();
- DoTimeBasedEvents();
- sub_805308C();
- sub_8055FC0();
- PlayTimeCounter_Start();
- ScriptContext1_Init();
- ScriptContext2_Disable();
- if (GetSecretBase2Field_9() == 1)
- {
- ClearSecretBase2Field_9();
- sub_8053778();
- warp_in();
- SetMainCallback2(CB2_LoadMap);
- }
- else
- {
- gFieldCallback = sub_805470C;
- set_callback1(c1_overworld);
- c2_exit_to_overworld_2_switch();
- }
-}
-
-void FieldClearVBlankHBlankCallbacks(void)
-{
- u16 savedIme = REG_IME;
- REG_IME = 0;
- REG_IE &= ~INTR_FLAG_HBLANK;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = savedIme;
- SetVBlankCallback(NULL);
- SetHBlankCallback(NULL);
-}
-
-void SetFieldVBlankCallback(void)
-{
- SetVBlankCallback(VBlankCB_Field);
-}
-
-void VBlankCB_Field(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- ScanlineEffect_InitHBlankDmaTransfer();
- sub_8057A58();
- TransferPlttBuffer();
- sub_8072E74();
-}
-
-void sub_8054814(void)
-{
- u8 val = Overworld_GetFlashLevel();
- if (val)
- {
- sub_80815E0(val);
- ScanlineEffect_SetParams(gUnknown_08216694);
- }
-}
-
-bool32 sub_805483C(u8 *a1)
-{
- switch (*a1)
- {
- case 0:
- FieldClearVBlankHBlankCallbacks();
- ScriptContext1_Init();
- ScriptContext2_Disable();
- sub_8054F70();
- sub_8054BA8();
- (*a1)++;
- break;
- case 1:
- sub_8053994(1);
- (*a1)++;
- break;
- case 2:
- sub_8054D4C(1);
- (*a1)++;
- break;
- case 3:
- sub_8054E98();
- sub_8054D90();
- sub_8054EC8();
- sub_8054E60();
- (*a1)++;
- break;
- case 4:
- sub_8054814();
- sub_8054C54();
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- (*a1)++;
- break;
- case 5:
- move_tilemap_camera_to_upper_left_corner();
- (*a1)++;
- break;
- case 6:
- sub_8056D28(gMapHeader.mapData);
- (*a1)++;
- break;
- case 7:
- sub_8056D38(gMapHeader.mapData);
- (*a1)++;
- break;
- case 8:
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- (*a1)++;
- break;
- case 9:
- DrawWholeMapView();
- (*a1)++;
- break;
- case 10:
- cur_mapheader_run_tileset_funcs_after_some_cpuset();
- (*a1)++;
- break;
- case 12:
- sub_80543E8();
- (*a1)++;
- break;
- case 11:
- (*a1)++;
- break;
- case 13:
- return 1;
- }
- return 0;
-}
-
-bool32 sub_805493C(u8 *a1, u32 a2)
-{
- switch (*a1)
- {
- case 0:
- FieldClearVBlankHBlankCallbacks();
- sub_8053994(a2);
- (*a1)++;
- break;
- case 1:
- sub_8054BA8();
- (*a1)++;
- break;
- case 2:
- sub_8054D4C(a2);
- (*a1)++;
- break;
- case 3:
- mli4_mapscripts_and_other();
- sub_8054E34();
- (*a1)++;
- break;
- case 4:
- sub_8054814();
- sub_8054C54();
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- (*a1)++;
- break;
- case 5:
- move_tilemap_camera_to_upper_left_corner();
- (*a1)++;
- break;
- case 6:
- sub_8056D28(gMapHeader.mapData);
- (*a1)++;
- break;
- case 7:
- sub_8056D38(gMapHeader.mapData);
- (*a1)++;
- break;
- case 8:
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- (*a1)++;
- break;
- case 9:
- DrawWholeMapView();
- (*a1)++;
- break;
- case 10:
- cur_mapheader_run_tileset_funcs_after_some_cpuset();
- (*a1)++;
- break;
- case 11:
- if (gMapHeader.flags == 1 && sub_80BBB24() == 1)
- ShowMapNamePopup();
- (*a1)++;
- break;
- case 12:
- sub_80543E8();
- (*a1)++;
- break;
- case 13:
- return 1;
- }
- return 0;
-}
-
-bool32 sub_8054A4C(u8 *a1)
-{
- switch (*a1)
- {
- case 0:
- sub_8054BA8();
- sub_8054D4C(0);
- sub_8054E20();
- sub_8054E34();
- (*a1)++;
- break;
- case 1:
- sub_8054C2C();
- (*a1)++;
- break;
- case 2:
- sub_80543E8();
- (*a1)++;
- break;
- case 3:
- return 1;
- }
- return 0;
-}
-
-bool32 sub_8054A9C(u8 *a1)
-{
- switch (*a1)
- {
- case 0:
- FieldClearVBlankHBlankCallbacks();
- sub_8054BA8();
- (*a1)++;
- break;
- case 1:
- sub_8054D4C(1);
- (*a1)++;
- break;
- case 2:
- sub_8054F48();
- sub_8054E20();
- sub_8054E7C();
- (*a1)++;
- break;
- case 3:
- sub_8054814();
- sub_8054C54();
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- (*a1)++;
- break;
- case 4:
- move_tilemap_camera_to_upper_left_corner();
- (*a1)++;
- break;
- case 5:
- sub_8056D28(gMapHeader.mapData);
- (*a1)++;
- break;
- case 6:
- sub_8056D38(gMapHeader.mapData);
- (*a1)++;
- break;
- case 7:
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- (*a1)++;
- break;
- case 8:
- DrawWholeMapView();
- (*a1)++;
- break;
- case 9:
- cur_mapheader_run_tileset_funcs_after_some_cpuset();
- (*a1)++;
- break;
- case 12:
- sub_80543E8();
- (*a1)++;
- break;
- case 10:
- case 11:
- (*a1)++;
- break;
- case 13:
- SetFieldVBlankCallback();
- (*a1)++;
- return 1;
- }
- return 0;
-}
-
-void do_load_map_stuff_loop(u8 *a1)
-{
- while (!sub_805493C(a1, 0))
- ;
-}
-
-void sub_8054BA8(void)
-{
- REG_DISPCNT = 0;
-
- ScanlineEffect_Stop();
-
- DmaClear16(3, PLTT + 2, PLTT_SIZE - 2);
- DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
- ResetOamRange(0, 128);
- LoadOam();
-}
-
-void sub_8054C2C(void)
-{
- sub_8054814();
- sub_8054C54();
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- mapdata_load_assets_to_gpu_and_full_redraw();
-}
-
-void sub_8054C54(void)
-{
- REG_MOSAIC = 0;
- REG_WININ = 7967;
- REG_WINOUT = 257;
- REG_WIN0H = 255;
- REG_WIN0V = 255;
- REG_WIN1H = -1;
- REG_WIN1V = -1;
- REG_BLDCNT = gUnknown_081E29E0[1] | gUnknown_081E29E0[2] | gUnknown_081E29E0[3] | 0x1040;
- REG_BLDALPHA = 1805;
- *gBGHOffsetRegs[0] = 0;
- *gBGVOffsetRegs[0] = 0;
- *gBGControlRegs[0] = 0;
- *gBGHOffsetRegs[1] = 0;
- *gBGVOffsetRegs[1] = 0;
- *gBGControlRegs[1] = 7489;
- *gBGHOffsetRegs[2] = 0;
- *gBGVOffsetRegs[2] = 0;
- *gBGControlRegs[2] = 7234;
- *gBGHOffsetRegs[3] = 0;
- *gBGVOffsetRegs[3] = 0;
- *gBGControlRegs[3] = 7747;
- REG_DISPCNT = gUnknown_081E29D8[1] | 0x7060 | gUnknown_081E29D8[2] | gUnknown_081E29D8[0] | gUnknown_081E29D8[3];
-}
-
-void sub_8054D4C(u32 a1)
-{
- ResetTasks();
- ResetSpriteData();
- ResetPaletteFade();
- ScanlineEffect_Clear();
- ResetCameraUpdateInfo();
- InstallCameraPanAheadCallback();
- sub_805C7C4(0);
- FieldEffectActiveListClear();
- InitFieldMessageBox();
- StartWeather();
- sub_8080750();
- if (!a1)
- SetUpFieldTasks();
- mapheader_run_script_with_tag_x5();
-}
-
-void sub_8054D90(void)
-{
- gUnknown_0300489C = 0;
- gUnknown_03004898 = 0;
- sub_805AA98();
- sub_805B55C(0, 0);
- mapheader_run_first_tag4_script_list_match();
-}
-
-void mli4_mapscripts_and_other(void)
-{
- s16 x, y;
- struct UnkPlayerStruct *player;
- gUnknown_0300489C = 0;
- gUnknown_03004898 = 0;
- sub_805AA98();
- sav1_camera_get_focus_coords(&x, &y);
- player = sub_8053AA8();
- InitPlayerAvatar(x, y, player->player_field_1, gSaveBlock2.playerGender);
- SetPlayerAvatarTransitionFlags(player->player_field_0);
- player_avatar_init_params_reset();
- sub_805B55C(0, 0);
- ResetBerryTreeSparkleFlags();
- mapheader_run_first_tag4_script_list_match();
-}
-
-void sub_8054E20(void)
-{
- sub_805B710(0, 0);
- RotatingGate_InitPuzzleAndGraphics();
-}
-
-void sub_8054E34(void)
-{
- gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1;
- InitCameraUpdateCallback(gPlayerAvatar.spriteId);
-}
-
-void sub_8054E60(void)
-{
- InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860));
-}
-
-void sub_8054E7C(void)
-{
- InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860));
-}
-
-void sub_8054E98(void)
-{
- u16 x, y;
- sav1_camera_get_focus_coords(&x, &y);
- sub_8056C50(x + gUnknown_03004860, y);
-}
-
-void sub_8054EC8(void)
-{
- u16 i;
- u16 x, y;
-
- sav1_camera_get_focus_coords(&x, &y);
- x -= gUnknown_03004860;
-
- for (i = 0; i < gFieldLinkPlayerCount; i++)
- {
- SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender);
- CreateLinkPlayerSprite(i);
- }
-
- sub_8055340(word_3002910);
-}
-
-void sub_8054F48(void)
-{
- u16 i;
- for (i = 0; i < gFieldLinkPlayerCount; i++)
- CreateLinkPlayerSprite(i);
-}
-
-void sub_8054F70(void)
-{
- int i;
- for (i = 0; i < 4; i++)
- gUnknown_03000580[i] = 0x80;
-}
-
-bool32 sub_8054F88(u16 a1)
-{
- int i;
- int count = gFieldLinkPlayerCount;
-
- for (i = 0; i < count; i++)
- if (gUnknown_03000580[i] != a1)
- return FALSE;
- return TRUE;
-}
-
-bool32 sub_8054FC0(u16 a1)
-{
- int i;
- int count = gFieldLinkPlayerCount;
-
- for (i = 0; i < count; i++)
- if (gUnknown_03000580[i] == a1)
- return TRUE;
- return FALSE;
-}
-
-void sub_8054FF8(u32 a1, u16 a2, struct UnkStruct_8054FF8 *a3, u16 *a4)
-{
- u8 *script;
-
- if (gUnknown_03000580[a1] == 0x80)
- {
- script = sub_8055648(a3);
- if (script)
- {
- *a4 = sub_8055758(script);
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_80553E4);
- sub_8055808(script);
- }
- return;
- }
- if (sub_8054FC0(0x83) == 1)
- {
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_80553E4);
- sub_805585C();
- }
- return;
- }
- switch (a2)
- {
- case 24:
- if (sub_8055630(a3))
- {
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_80553E4);
- sub_80557F4();
- }
- }
- break;
- case 18:
- if (sub_8055660(a3) == 1)
- {
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_80553E4);
- sub_8055824();
- }
- }
- break;
- case 25:
- script = sub_805568C(a3);
- if (script)
- {
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_80553E4);
- sub_8055840(script);
- }
- }
- break;
- case 27:
- if (sub_8055618(a3))
- {
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_8055408);
- sub_80557E8();
- }
- }
- break;
- case 28:
- if (sub_8055618(a3))
- {
- gUnknown_03000580[a1] = 0x81;
- if (a3->b)
- {
- sub_80543DC(sub_8055438);
- sub_80557E8();
- }
- }
- break;
- }
- }
-
- switch (a2)
- {
- case 23:
- gUnknown_03000580[a1] = 0x83;
- break;
- case 22:
- gUnknown_03000580[a1] = 0x82;
- break;
- case 26:
- gUnknown_03000580[a1] = 0x80;
- if (a3->b)
- sub_80543DC(sub_8055390);
- break;
- case 29:
- if (gUnknown_03000580[a1] == 0x82)
- gUnknown_03000580[a1] = 0x81;
- break;
- }
-}
-
-void sub_8055218(u16 *a1, int a2)
-{
- struct UnkStruct_8054FF8 st;
- int i;
- for (i = 0; i < 4; i++)
- {
- u16 v5 = a1[i];
- u16 v8 = 0;
- sub_80555B0(i, a2, &st);
- sub_8054FF8(i, v5, &st, &v8);
- if (gUnknown_03000580[i] == 0x80)
- v8 = sub_805530C(v5);
- sub_8055BFC(i, v8);
- }
-}
-
-void sub_8055280(u16 a1)
-{
- if (a1 >= 17 && a1 < 30)
- word_3004858 = a1;
- else
- word_3004858 = 17;
-}
-
-u16 sub_80552B0(u32 a1)
-{
- if (gMain.heldKeys & DPAD_UP)
- {
- return 19;
- }
- else if (gMain.heldKeys & DPAD_DOWN)
- {
- return 18;
- }
- else if (gMain.heldKeys & DPAD_LEFT)
- {
- return 20;
- }
- else if (gMain.heldKeys & DPAD_RIGHT)
- {
- return 21;
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- return 24;
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- return 25;
- }
- else
- {
- return 17;
- }
-}
-
-u16 sub_805530C(u16 a1)
-{
- switch (a1)
- {
- case 21:
- return 4;
- case 20:
- return 3;
- case 19:
- return 1;
- case 18:
- return 2;
- default:
- return 0;
- }
-}
-
-void sub_8055340(u16 *a1)
-{
- int i;
- for (i = 0; i < 4; i++)
- a1[i] = 17;
-}
-
-void sub_8055354(void)
-{
- u8 val = gUnknown_03004860;
- sub_8055218(word_3002910, val);
- sub_8055280(gUnknown_03000584(val));
- sub_8055340(word_3002910);
-}
-
-u16 sub_8055390(u32 a1)
-{
- if (ScriptContext2_IsEnabled() == 1)
- return 17;
- if (gLink.recvQueue.count > 4)
- return 27;
- if (gLink.sendQueue.count <= 4)
- return sub_80552B0(a1);
- return 28;
-}
-
-u16 sub_80553E0(u32 a1)
-{
- return 17;
-}
-
-u16 sub_80553E4(u32 a1)
-{
- u16 retVal;
- if (ScriptContext2_IsEnabled() == 1)
- {
- retVal = 17;
- }
- else
- {
- retVal = 26;
- sub_80543DC(sub_80553E0);
- }
- return retVal;
-}
-
-u16 sub_8055408(u32 a1)
-{
- u16 retVal;
- if (gLink.recvQueue.count > 2)
- {
- retVal = 17;
- }
- else
- {
- retVal = 26;
- ScriptContext2_Disable();
- sub_80543DC(sub_80553E0);
- }
- return retVal;
-}
-
-u16 sub_8055438(u32 a1)
-{
- u16 retVal;
- if (gLink.sendQueue.count > 2)
- {
- retVal = 17;
- }
- else
- {
- retVal = 26;
- ScriptContext2_Disable();
- sub_80543DC(sub_80553E0);
- }
- return retVal;
-}
-
-u16 sub_8055468(u32 a1)
-{
- return 17;
-}
-
-u16 sub_805546C(u32 linkPlayerId)
-{
- if (gUnknown_03000580[linkPlayerId] == 0x82 && (gMain.newKeys & B_BUTTON))
- {
- sub_80543DC(sub_8055468);
- return 29;
- }
- else
- {
- return 17;
- }
-}
-
-u16 sub_80554A4(u32 a1)
-{
- sub_80543DC(sub_805546C);
- return 22;
-}
-
-u16 sub_80554B8(u32 a1)
-{
- return 17;
-}
-
-u16 sub_80554BC(u32 a1)
-{
- if (sub_8054F88(0x83) == TRUE)
- {
- ScriptContext1_SetupScript(gUnknown_081A4508);
- sub_80543DC(sub_80554B8);
- }
- return 17;
-}
-
-u16 sub_80554E4(u32 a1)
-{
- sub_80543DC(sub_80554BC);
- return 23;
-}
-
-u32 sub_80554F8(void)
-{
- if (sub_8054FC0(0x83) == TRUE)
- return 2;
- if (gUnknown_03000584 == sub_805546C && gUnknown_03000580[gUnknown_03004860] != 0x82)
- return 0;
- if (gUnknown_03000584 == sub_8055468 && gUnknown_03000580[gUnknown_03004860] == 0x81)
- return 2;
- return sub_8054F88(0x82);
-}
-
-bool32 unref_sub_8055568(void)
-{
- return sub_8054FC0(0x83);
-}
-
-u16 sub_8055574(void)
-{
- sub_80543DC(sub_80554A4);
- return 0;
-}
-
-u16 sub_8055588(void)
-{
- sub_80543DC(sub_80553E4);
- return 0;
-}
-
-u16 sub_805559C(void)
-{
- sub_80543DC(sub_80554E4);
- return 0;
-}
-
-void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3)
-{
- s16 x, y;
-
- a3->a = linkPlayerId;
- a3->b = (linkPlayerId == a2) ? 1 : 0;
- a3->c = gLinkPlayerMapObjects[linkPlayerId].mode;
- a3->d = sub_8055B30(linkPlayerId);
- sub_8055B08(linkPlayerId, &x, &y);
- a3->sub.x = x;
- a3->sub.y = y;
- a3->sub.height = sub_8055B50(linkPlayerId);
- a3->field_C = MapGridGetMetatileBehaviorAt(x, y);
-}
-
-bool32 sub_8055618(struct UnkStruct_8054FF8 *a1)
-{
- u8 v1 = a1->c;
- if (v1 == 2 || v1 == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-bool32 sub_8055630(struct UnkStruct_8054FF8 *a1)
-{
- u8 v1 = a1->c;
- if (v1 == 2 || v1 == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-u8 *sub_8055648(struct UnkStruct_8054FF8 *a1)
-{
- if (a1->c != 2)
- return 0;
- return sub_8068E24(&a1->sub);
-}
-
-bool32 sub_8055660(struct UnkStruct_8054FF8 *a1)
-{
- if (a1->c != 2 && a1->c != 0)
- return FALSE;
- if (!MetatileBehavior_IsSouthArrowWarp(a1->field_C))
- return FALSE;
- if (a1->d != 1)
- return FALSE;
- return TRUE;
-}
-
-u8 *sub_805568C(struct UnkStruct_8054FF8 *a1)
-{
- struct MapPosition unkStruct;
- u8 linkPlayerId;
-
- if (a1->c && a1->c != 2)
- return 0;
-
- unkStruct = a1->sub;
- unkStruct.x += gUnknown_0821664C[a1->d].x;
- unkStruct.y += gUnknown_0821664C[a1->d].y;
- unkStruct.height = 0;
- linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y);
-
- if (linkPlayerId != 4)
- {
- if (!a1->b)
- return TradeRoom_TooBusyToNotice;
- if (gUnknown_03000580[linkPlayerId] != 0x80)
- return TradeRoom_TooBusyToNotice;
- if (!sub_8083BF4(linkPlayerId))
- return TradeRoom_ReadTrainerCard1;
- else
- return TradeRoom_ReadTrainerCard2;
- }
-
- return sub_80682A8(&unkStruct, a1->field_C, a1->d);
-}
-
-u16 sub_8055758(u8 *script)
-{
- if (script == DoubleBattleColosseum_EventScript_1A4383)
- return 10;
- if (script == DoubleBattleColosseum_EventScript_1A439E)
- return 9;
- if (script == DoubleBattleColosseum_EventScript_1A43B9)
- return 10;
- if (script == DoubleBattleColosseum_EventScript_1A43D4)
- return 9;
- if (script == RecordCorner_EventScript_1A4418)
- return 10;
- if (script == RecordCorner_EventScript_1A442D)
- return 9;
- if (script == RecordCorner_EventScript_1A4442)
- return 10;
- if (script == RecordCorner_EventScript_1A4457)
- return 9;
- if (script == SingleBattleColosseum_EventScript_1A436F)
- return 10;
- if (script == SingleBattleColosseum_EventScript_1A4379)
- return 9;
- if (script == TradeCenter_EventScript_1A43F0)
- return 10;
- if (script == TradeCenter_EventScript_1A43FA)
- return 9;
- return 0;
-}
-
-void sub_80557E8(void)
-{
- ScriptContext2_Enable();
-}
-
-void sub_80557F4(void)
-{
- PlaySE(SE_WIN_OPEN);
- sub_8071310();
- ScriptContext2_Enable();
-}
-
-void sub_8055808(u8 *script)
-{
- PlaySE(SE_SELECT);
- ScriptContext1_SetupScript(script);
- ScriptContext2_Enable();
-}
-
-void sub_8055824(void)
-{
- PlaySE(SE_WIN_OPEN);
- ScriptContext1_SetupScript(TradeRoom_PromptToCancelLink);
- ScriptContext2_Enable();
-}
-
-void sub_8055840(u8 *script)
-{
- PlaySE(SE_SELECT);
- ScriptContext1_SetupScript(script);
- ScriptContext2_Enable();
-}
-
-void sub_805585C(void)
-{
- ScriptContext1_SetupScript(TradeRoom_TerminateLink);
- ScriptContext2_Enable();
-}
-
-bool32 sub_8055870(void)
-{
- if (!is_c1_link_related_active())
- return 0;
- if (gLink.recvQueue.count >= 3)
- gUnknown_03000588 = 1;
- else
- gUnknown_03000588 = 0;
- return gUnknown_03000588;
-}
-
-bool32 sub_80558AC(void)
-{
- u8 temp;
-
- if (is_c1_link_related_active() != TRUE)
- return FALSE;
-
- if (sub_8007B24() != TRUE)
- return FALSE;
-
- if (gUnknown_03000584 == sub_8055408)
- return TRUE;
-
- if (gUnknown_03000584 != sub_80553E4)
- return FALSE;
-
- temp = gUnknown_03000588;
- gUnknown_03000588 = 0;
-
- if (temp == TRUE)
- return TRUE;
-
- if (gPaletteFade.active && gPaletteFade.softwareFadeFinishing)
- return TRUE;
-
- return FALSE;
-}
-
-bool32 sub_8055910(void)
-{
- if (is_c1_link_related_active() != TRUE)
- return FALSE;
-
- if (sub_8007B24() != TRUE)
- return FALSE;
-
- if (gUnknown_03000584 == sub_8055438)
- return TRUE;
-
- return FALSE;
-}
-
-bool32 sub_8055940(void)
-{
- if (!sub_8007B24())
- return FALSE;
- return TRUE;
-}
-
-void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj)
-{
- memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject));
-}
-
-void strange_npc_table_clear(void)
-{
- memset(gLinkPlayerMapObjects, 0, sizeof(gLinkPlayerMapObjects));
-}
-
-void ZeroMapObject(struct MapObject *mapObj)
-{
- memset(mapObj, 0, sizeof(struct MapObject));
-}
-
-void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4)
-{
- u8 mapObjId = sub_805AB54();
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- struct MapObject *mapObj = &gMapObjects[mapObjId];
-
- ZeroLinkPlayerMapObject(linkPlayerMapObj);
- ZeroMapObject(mapObj);
-
- linkPlayerMapObj->active = 1;
- linkPlayerMapObj->linkPlayerId = linkPlayerId;
- linkPlayerMapObj->mapObjId = mapObjId;
- linkPlayerMapObj->mode = 0;
-
- mapObj->active = 1;
- mapObj->mapobj_bit_1 = a4;
- mapObj->range.as_byte = 2;
- mapObj->spriteId = 64;
-
- InitLinkPlayerMapObjectPos(mapObj, x, y);
-}
-
-void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y)
-{
- mapObj->coords2.x = x;
- mapObj->coords2.y = y;
- mapObj->coords3.x = x;
- mapObj->coords3.y = y;
- sub_80603CC(x, y, &mapObj->coords1.x, &mapObj->coords1.y);
- mapObj->coords1.x += 8;
- FieldObjectUpdateZCoord(mapObj);
-}
-
-void unref_sub_8055A6C(u8 linkPlayerId, u8 a2)
-{
- if (gLinkPlayerMapObjects[linkPlayerId].active)
- {
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- mapObj->range.as_byte = a2;
- }
-}
-
-void unref_sub_8055A9C(u8 linkPlayerId)
-{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- u8 mapObjId = linkPlayerMapObj->mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- if (mapObj->spriteId != 64 )
- DestroySprite(&gSprites[mapObj->spriteId]);
- linkPlayerMapObj->active = 0;
- mapObj->active = 0;
-}
-
-u8 sub_8055AE8(u8 linkPlayerId)
-{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return mapObj->spriteId;
-}
-
-void sub_8055B08(u8 linkPlayerId, u16 *x, u16 *y)
-{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- *x = mapObj->coords2.x;
- *y = mapObj->coords2.y;
-}
-
-u8 sub_8055B30(u8 linkPlayerId)
-{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return mapObj->range.as_byte;
-}
-
-u8 sub_8055B50(u8 linkPlayerId)
-{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return mapObj->mapobj_unk_0B_0;
-}
-
-s32 unref_sub_8055B74(u8 linkPlayerId)
-{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return 16 - (s8)mapObj->mapobj_unk_21;
-}
-
-u8 GetLinkPlayerIdAt(s16 x, s16 y)
-{
- u8 i;
- for (i = 0; i < 4; i++)
- {
- if (gLinkPlayerMapObjects[i].active
- && (gLinkPlayerMapObjects[i].mode == 0 || gLinkPlayerMapObjects[i].mode == 2))
- {
- struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId];
- if (mapObj->coords2.x == x && mapObj->coords2.y == y)
- return i;
- }
- }
- return 4;
-}
-
-void sub_8055BFC(u8 linkPlayerId, u8 a2)
-{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- u8 mapObjId = linkPlayerMapObj->mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
-
- if (linkPlayerMapObj->active)
- {
- if (a2 > 10)
- mapObj->mapobj_bit_2 = 1;
- else
- gUnknown_082166D8[gUnknown_082166A0[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj);
- }
-}
-
-static u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
-{
- return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3);
-}
-
-static u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
-{
- return 1;
-}
-
-static u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
-{
- return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3);
-}
-
-static u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
-{
- return 0;
-}
-
-static u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
-{
- s16 x, y;
-
- mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte);
- FieldObjectMoveDestCoords(mapObj, mapObj->range.as_byte, &x, &y);
-
- if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->range.as_byte, x, y))
- {
- return 0;
- }
- else
- {
- mapObj->mapobj_unk_21 = 16;
- npc_coords_shift(mapObj, x, y);
- FieldObjectUpdateZCoord(mapObj);
- return 1;
- }
-}
-
-static u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
-{
- mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte);
- return 0;
-}
-
-static void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
-{
- linkPlayerMapObj->mode = 0;
-}
-
-static void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
-{
- mapObj->mapobj_unk_21--;
- linkPlayerMapObj->mode = 1;
- MoveCoords(mapObj->range.as_byte, &mapObj->coords1.x, &mapObj->coords1.y);
- if (!mapObj->mapobj_unk_21)
- {
- npc_coords_shift_still(mapObj);
- linkPlayerMapObj->mode = 2;
- }
-}
-
-u8 npc_something3(u8 a1, u8 a2)
-{
- switch (a1 - 1)
- {
- case 0:
- case 6:
- return 2;
- case 1:
- case 7:
- return 1;
- case 2:
- case 8:
- return 3;
- case 3:
- case 9:
- return 4;
- }
- return a2;
-}
-
-u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y)
-{
- u8 i;
- for (i = 0; i < 16; i++)
- {
- if (i != selfMapObjId)
- {
- if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y)
- || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y))
- {
- return 1;
- }
- }
- }
- return MapGridIsImpassableAt(x, y);
-}
-
-void CreateLinkPlayerSprite(u8 linkPlayerId)
-{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- u8 mapObjId = linkPlayerMapObj->mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- struct Sprite *sprite;
-
- if (linkPlayerMapObj->active)
- {
- u8 val = GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1);
- mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0);
- sprite = &gSprites[mapObj->spriteId];
- sprite->coordOffsetEnabled = TRUE;
- sprite->data[0] = linkPlayerId;
- mapObj->mapobj_bit_2 = 0;
- }
-}
-
-void SpriteCB_LinkPlayer(struct Sprite *sprite)
-{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data[0]];
- struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId];
- sprite->pos1.x = mapObj->coords1.x;
- sprite->pos1.y = mapObj->coords1.y;
- SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1);
- sprite->oam.priority = ZCoordToPriority(mapObj->elevation);
- if (!linkPlayerMapObj->mode)
- StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->range.as_byte));
- else
- StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->range.as_byte));
- sub_806487C(sprite, 0);
- if (mapObj->mapobj_bit_2)
- {
- sprite->invisible = ((sprite->data[7] & 4) >> 2);
- sprite->data[7]++;
- }
-}