summaryrefslogtreecommitdiff
path: root/src/overworld.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/overworld.c')
-rw-r--r--src/overworld.c871
1 files changed, 433 insertions, 438 deletions
diff --git a/src/overworld.c b/src/overworld.c
index 6376aa1af..f6dea1271 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -50,20 +50,14 @@
#include "wild_encounter.h"
#ifdef SAPPHIRE
-#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain
+#define LEGENDARY_MUSIC MUS_OOAME // Heavy Rain
#else
-#define LEGENDARY_MUSIC BGM_HIDERI // Drought
+#define LEGENDARY_MUSIC MUS_HIDERI // Drought
#endif
-struct UnkTVStruct
-{
- u32 tv_field_0;
- u32 tv_field_4;
-};
-
extern u8 gUnknown_020297ED;
-extern u16 gUnknown_03004898;
-extern u16 gUnknown_0300489C;
+extern u16 gTotalCameraPixelOffsetY;
+extern u16 gTotalCameraPixelOffsetX;
extern u8 S_WhiteOut[];
extern u8 gUnknown_0819FC9F[];
@@ -86,28 +80,34 @@ extern u8 TradeRoom_PromptToCancelLink[];
extern u8 TradeRoom_TerminateLink[];
extern u8 gUnknown_081A4508[];
-extern struct MapData * const gMapAttributes[];
+extern struct MapLayout * const gMapLayouts[];
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 struct WarpData gLastUsedWarp = {0};
+EWRAM_DATA struct WarpData gWarpDestination = {0};
+EWRAM_DATA struct WarpData gFixedDiveWarp = {0};
+EWRAM_DATA struct WarpData gFixedHoleWarp = {0};
+EWRAM_DATA struct InitialPlayerAvatarState gInitialPlayerAvatarState = {0};
EWRAM_DATA static u16 sAmbientCrySpecies = 0;
EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
-EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0};
+EWRAM_DATA struct LinkPlayerEventObject gLinkPlayerEventObjects[4] = {0};
static u8 gUnknown_03000580[4];
static u16 (*gUnknown_03000584)(u32);
static u8 gUnknown_03000588;
u16 word_3004858;
-void (*gFieldCallback)(void);
+extern void (*gFieldCallback)(void);
u8 gUnknown_03004860;
u8 gFieldLinkPlayerCount;
+static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState*, u16, u8);
+static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState*, u8, u16, u8);
+static bool32 sub_805483C(u8*);
+static void c2_80567AC(void);
+static void InitOverworldGraphicsRegisters(void);
+
static const struct WarpData sDummyWarpData =
{
.mapGroup = -1,
@@ -129,20 +129,20 @@ static const u8 sUnusedData[] =
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 UCoords32 gDirectionToVectors[] =
+{
+ { 0, 0}, // DIR_NONE
+ { 0, 1}, // DIR_SOUTH
+ { 0, -1}, // DIR_NORTH
+ {-1, 0}, // DIR_WEST
+ { 1, 0}, // DIR_EAST
+ {-1, 1}, // DIR_SOUTHWEST
+ { 1, 1}, // DIR_SOUTHEAST
+ {-1, -1}, // DIR_NORTHWEST
+ { 1, -1}, // DIR_NORTHEAST
};
-const struct ScanlineEffectParams gUnknown_08216694 =
+static const struct ScanlineEffectParams sFlashEffectParams =
{
(void *)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
@@ -150,22 +150,22 @@ const struct ScanlineEffectParams gUnknown_08216694 =
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 sub_8055C68(struct LinkPlayerEventObject *, struct EventObject *, u8);
+static u8 sub_8055C88(struct LinkPlayerEventObject *, struct EventObject *, u8);
+static u8 sub_8055C8C(struct LinkPlayerEventObject *, struct EventObject *, u8);
-static u8 (*const gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
+static u8 (*const gUnknown_082166A0[])(struct LinkPlayerEventObject *, struct EventObject *, 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 sub_8055CAC(struct LinkPlayerEventObject *, struct EventObject *, u8);
+static u8 sub_8055CB0(struct LinkPlayerEventObject *, struct EventObject *, u8);
+static u8 sub_8055D18(struct LinkPlayerEventObject *, struct EventObject *, u8);
-static u8 (*const gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
+static u8 (*const gUnknown_082166AC[])(struct LinkPlayerEventObject *, struct EventObject *, u8) =
{
sub_8055CAC,
sub_8055CB0,
@@ -180,10 +180,10 @@ static u8 (*const gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapO
sub_8055D18,
};
-static void sub_8055D30(struct LinkPlayerMapObject *, struct MapObject *);
-static void sub_8055D38(struct LinkPlayerMapObject *, struct MapObject *);
+static void sub_8055D30(struct LinkPlayerEventObject *, struct EventObject *);
+static void sub_8055D38(struct LinkPlayerEventObject *, struct EventObject *);
-static void (*const gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *) =
+static void (*const gUnknown_082166D8[])(struct LinkPlayerEventObject *, struct EventObject *) =
{
sub_8055D30,
sub_8055D38,
@@ -197,12 +197,12 @@ static void DoWhiteOut(void)
ScrSpecial_HealPlayerParty();
Overworld_ResetStateAfterWhiteOut();
Overworld_SetWarpDestToLastHealLoc();
- warp_in();
+ WarpIntoMap();
}
void Overworld_ResetStateAfterFly(void)
{
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
FlagClear(FLAG_SYS_CYCLING_ROAD);
FlagClear(FLAG_SYS_CRUISE_MODE);
FlagClear(FLAG_SYS_SAFARI_MODE);
@@ -212,7 +212,7 @@ void Overworld_ResetStateAfterFly(void)
void Overworld_ResetStateAfterTeleport(void)
{
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
FlagClear(FLAG_SYS_CYCLING_ROAD);
FlagClear(FLAG_SYS_CRUISE_MODE);
FlagClear(FLAG_SYS_SAFARI_MODE);
@@ -223,7 +223,7 @@ void Overworld_ResetStateAfterTeleport(void)
void Overworld_ResetStateAfterDigEscRope(void)
{
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
FlagClear(FLAG_SYS_CYCLING_ROAD);
FlagClear(FLAG_SYS_CRUISE_MODE);
FlagClear(FLAG_SYS_SAFARI_MODE);
@@ -233,7 +233,7 @@ void Overworld_ResetStateAfterDigEscRope(void)
void Overworld_ResetStateAfterWhiteOut(void)
{
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
FlagClear(FLAG_SYS_CYCLING_ROAD);
FlagClear(FLAG_SYS_CRUISE_MODE);
FlagClear(FLAG_SYS_SAFARI_MODE);
@@ -241,7 +241,7 @@ void Overworld_ResetStateAfterWhiteOut(void)
FlagClear(FLAG_SYS_USE_FLASH);
}
-void sub_805308C(void)
+static void sub_805308C(void)
{
FlagClear(FLAG_SYS_SAFARI_MODE);
ChooseAmbientCrySpecies();
@@ -269,65 +269,65 @@ void IncrementGameStat(u8 index)
}
}
-u32 GetGameStat(u8 index)
+u32 GetGameStat(u8 stat)
{
- if (index >= NUM_GAME_STATS)
+ if (stat >= NUM_GAME_STATS)
return 0;
- return gSaveBlock1.gameStats[index];
+ return gSaveBlock1.gameStats[stat];
}
-void SetGameStat(u8 index, u32 value)
+void SetGameStat(u8 stat, u32 value)
{
- if (index < NUM_GAME_STATS)
- gSaveBlock1.gameStats[index] = value;
+ if (stat < NUM_GAME_STATS)
+ gSaveBlock1.gameStats[stat] = value;
}
-void LoadMapObjTemplatesFromHeader(void)
+void LoadEventObjTemplatesFromHeader(void)
{
- // Clear map object templates
- CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates));
+ // Clear event object templates
+ CpuFill32(0, gSaveBlock1.eventObjectTemplates, sizeof(gSaveBlock1.eventObjectTemplates));
// Copy map header events to save block
- CpuCopy32(gMapHeader.events->mapObjects,
- gSaveBlock1.mapObjectTemplates,
- gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate));
+ CpuCopy32(gMapHeader.events->eventObjects,
+ gSaveBlock1.eventObjectTemplates,
+ gMapHeader.events->eventObjectCount * sizeof(struct EventObjectTemplate));
}
-static void LoadSaveblockMapObjScripts(void)
+static void LoadSaveblockEventObjScripts(void)
{
- struct MapObjectTemplate *mapObjectTemplates = gSaveBlock1.mapObjectTemplates;
+ struct EventObjectTemplate *eventObjectTemplates = gSaveBlock1.eventObjectTemplates;
s32 i;
for (i = 0; i < 64; i++)
- mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script;
+ eventObjectTemplates[i].script = gMapHeader.events->eventObjects[i].script;
}
-void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
+void Overworld_SetEventObjTemplateCoords(u8 localId, s16 x, s16 y)
{
s32 i;
for (i = 0; i < 64; i++)
{
- struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i];
- if (mapObjectTemplate->localId == localId)
+ struct EventObjectTemplate *eventObjectTemplate = &gSaveBlock1.eventObjectTemplates[i];
+ if (eventObjectTemplate->localId == localId)
{
- mapObjectTemplate->x = x;
- mapObjectTemplate->y = y;
+ eventObjectTemplate->x = x;
+ eventObjectTemplate->y = y;
return;
}
}
}
-void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType)
+void Overworld_SetEventObjTemplateMovementType(u8 localId, u8 movementType)
{
s32 i;
for (i = 0; i < 64; i++)
{
- struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i];
- if (mapObjectTemplate->localId == localId)
+ struct EventObjectTemplate *eventObjectTemplate = &gSaveBlock1.eventObjectTemplates[i];
+ if (eventObjectTemplate->localId == localId)
{
- mapObjectTemplate->movementType = movementType;
+ eventObjectTemplate->movementType = movementType;
return;
}
}
@@ -336,26 +336,26 @@ void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType)
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);
+ copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout);
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
DrawWholeMapView();
cur_mapheader_run_tileset_funcs_after_some_cpuset();
}
-static struct MapData *get_mapdata_header(void)
+static struct MapLayout *GetMapLayout(void)
{
- u16 mapDataId = gSaveBlock1.mapDataId;
- if (mapDataId)
- return gMapAttributes[mapDataId - 1];
+ u16 mapLayoutId = gSaveBlock1.mapLayoutId;
+ if (mapLayoutId)
+ return gMapLayouts[mapLayoutId - 1];
return NULL;
}
static void ApplyCurrentWarp(void)
{
- gUnknown_020297F0 = gSaveBlock1.location;
+ gLastUsedWarp = gSaveBlock1.location;
gSaveBlock1.location = gWarpDestination;
- gUnknown_02029800 = sDummyWarpData;
- gUnknown_02029808 = sDummyWarpData;
+ gFixedDiveWarp = sDummyWarpData;
+ gFixedHoleWarp = sDummyWarpData;
}
static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
@@ -367,7 +367,7 @@ static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId
warp->y = y;
}
-static bool32 warp_data_is_not_neg_1(struct WarpData *warp)
+static bool32 IsDummyWarp(struct WarpData *warp)
{
if (warp->mapGroup != -1)
return FALSE;
@@ -387,25 +387,25 @@ struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 map
return gMapGroups[mapGroup][mapNum];
}
-struct MapHeader *const warp1_get_mapheader(void)
+struct MapHeader *const GetDestinationWarpMapHeader(void)
{
return Overworld_GetMapHeaderByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum);
}
-static void set_current_map_header_from_sav1_save_old_name(void)
+static void LoadCurrentMapData(void)
{
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- gSaveBlock1.mapDataId = gMapHeader.mapDataId;
- gMapHeader.mapData = get_mapdata_header();
+ gSaveBlock1.mapLayoutId = gMapHeader.mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
}
static void LoadSaveblockMapHeader(void)
{
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- gMapHeader.mapData = get_mapdata_header();
+ gMapHeader.mapLayout = GetMapLayout();
}
-void sub_80533CC(void)
+static void SetPlayerCoordsFromWarp(void)
{
if (gSaveBlock1.location.warpId >= 0 && gSaveBlock1.location.warpId < gMapHeader.events->warpCount)
{
@@ -419,16 +419,16 @@ void sub_80533CC(void)
}
else
{
- gSaveBlock1.pos.x = gMapHeader.mapData->width / 2;
- gSaveBlock1.pos.y = gMapHeader.mapData->height / 2;
+ gSaveBlock1.pos.x = gMapHeader.mapLayout->width / 2;
+ gSaveBlock1.pos.y = gMapHeader.mapLayout->height / 2;
}
}
-void warp_in(void)
+void WarpIntoMap(void)
{
ApplyCurrentWarp();
- set_current_map_header_from_sav1_save_old_name();
- sub_80533CC();
+ LoadCurrentMapData();
+ SetPlayerCoordsFromWarp();
}
void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
@@ -495,31 +495,27 @@ void sub_8053678(void)
gWarpDestination = gSaveBlock1.warp4;
}
-void sub_8053690(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
}
-static void warp1_set_to_warp2(void)
+static void SetFixedDiveWarpAsDestination(void)
{
- gWarpDestination = gUnknown_02029800;
+ gWarpDestination = gFixedDiveWarp;
}
-void sub_80536E4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
}
-void sub_8053720(s16 x, s16 y)
+void SetFixedHoleWarpAsDestination(s16 x, s16 y)
{
- if (warp_data_is_not_neg_1(&gUnknown_02029808) == TRUE)
- {
- gWarpDestination = gUnknown_020297F0;
- }
+ if (IsDummyWarp(&gFixedHoleWarp) == TRUE)
+ gWarpDestination = gLastUsedWarp;
else
- {
- Overworld_SetWarpDestination(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y);
- }
+ Overworld_SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
}
void sub_8053778(void)
@@ -560,10 +556,9 @@ struct MapConnection *GetMapConnection(u8 dir)
return NULL;
}
-bool8 sub_8053850(u8 dir, u16 x, u16 y)
+static bool8 SetDiveWarp(u8 direction, u16 x, u16 y)
{
- struct MapConnection *connection = GetMapConnection(dir);
-
+ struct MapConnection *connection = GetMapConnection(direction);
if (connection != NULL)
{
Overworld_SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
@@ -571,21 +566,23 @@ bool8 sub_8053850(u8 dir, u16 x, u16 y)
else
{
mapheader_run_script_with_tag_x6();
- if (warp_data_is_not_neg_1(&gUnknown_02029800))
+ if (IsDummyWarp(&gFixedDiveWarp))
return FALSE;
- warp1_set_to_warp2();
+
+ SetFixedDiveWarpAsDestination();
}
+
return TRUE;
}
-bool8 sub_80538B0(u16 x, u16 y)
+bool8 SetDiveWarpEmerge(u16 x, u16 y)
{
- return sub_8053850(CONNECTION_EMERGE, x, y);
+ return SetDiveWarp(CONNECTION_EMERGE, x, y);
}
-bool8 sub_80538D0(u16 x, u16 y)
+bool8 SetDiveWarpDive(u16 x, u16 y)
{
- return sub_8053850(CONNECTION_DIVE, x, y);
+ return SetDiveWarp(CONNECTION_DIVE, x, y);
}
void sub_80538F0(u8 mapGroup, u8 mapNum)
@@ -595,11 +592,11 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
sub_8053F0C();
ApplyCurrentWarp();
- set_current_map_header_from_sav1_save_old_name();
- LoadMapObjTemplatesFromHeader();
+ LoadCurrentMapData();
+ LoadEventObjTemplatesFromHeader();
ClearTempFieldEventData();
ResetCyclingRoadChallengeData();
- prev_quest_postbuffer_cursor_backup_reset();
+ RestartWildEncounterImmunitySteps();
TryUpdateRandomTrainerRematches(mapGroup, mapNum);
DoTimeBasedEvents();
SetSav1WeatherFromCurrMapHeader();
@@ -608,8 +605,8 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
Overworld_ClearSavedMusic();
mapheader_run_script_with_tag_x3();
not_trainer_hill_battle_pyramid();
- sub_8056D38(gMapHeader.mapData);
- apply_map_tileset2_palette(gMapHeader.mapData);
+ sub_8056D38(gMapHeader.mapLayout);
+ apply_map_tileset2_palette(gMapHeader.mapLayout);
for (paletteIndex = 6; paletteIndex < 12; paletteIndex++)
ApplyWeatherGammaShiftToPal(paletteIndex);
@@ -628,13 +625,13 @@ void sub_8053994(u32 a1)
bool8 v2;
bool8 v3;
- set_current_map_header_from_sav1_save_old_name();
- LoadMapObjTemplatesFromHeader();
+ LoadCurrentMapData();
+ LoadEventObjTemplatesFromHeader();
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();
+ RestartWildEncounterImmunitySteps();
TryUpdateRandomTrainerRematches(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
if (a1 != 1)
DoTimeBasedEvents();
@@ -655,82 +652,82 @@ void sub_8053994(u32 a1)
}
}
-void player_avatar_init_params_reset(void)
+void ResetInitialPlayerAvatarState(void)
{
- gUnknown_02029810.player_field_1 = 1;
- gUnknown_02029810.player_field_0 = 1;
+ gInitialPlayerAvatarState.direction = DIR_SOUTH;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
}
-void walkrun_find_lowest_active_bit_in_bitfield(void)
+void StoreInitialPlayerAvatarState(void)
{
- gUnknown_02029810.player_field_1 = player_get_direction_lower_nybble();
+ gInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
- gUnknown_02029810.player_field_0 = 2;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
- gUnknown_02029810.player_field_0 = 4;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
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;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
else
- gUnknown_02029810.player_field_0 = 1;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
}
-struct UnkPlayerStruct *sub_8053AA8(void)
+static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
{
- struct UnkPlayerStruct playerStruct;
+ struct InitialPlayerAvatarState 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;
+ u16 metatileBehavior = GetCenterScreenMetatileBehavior();
+ u8 transitionFlags = GetAdjustedInitialTransitionFlags(&gInitialPlayerAvatarState, metatileBehavior, mapType);
+ playerStruct.transitionFlags = transitionFlags;
+ playerStruct.direction = GetAdjustedInitialDirection(&gInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
+ gInitialPlayerAvatarState = playerStruct;
+ return &gInitialPlayerAvatarState;
+}
+
+static 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;
+ if (mapType == MAP_TYPE_UNDERWATER)
+ return PLAYER_AVATAR_FLAG_UNDERWATER;
+ if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE)
+ return PLAYER_AVATAR_FLAG_SURFING;
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 PLAYER_AVATAR_FLAG_ON_FOOT;
+ if (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_MACH_BIKE)
+ return PLAYER_AVATAR_FLAG_MACH_BIKE;
+ if (playerStruct->transitionFlags != PLAYER_AVATAR_FLAG_ACRO_BIKE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ return PLAYER_AVATAR_FLAG_ACRO_BIKE;
+}
+
+static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType)
+{
+ if (FlagGet(FLAG_SYS_CRUISE_MODE) && mapType == MAP_TYPE_6)
+ return DIR_EAST;
+ if (MetatileBehavior_IsDeepSouthWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE || MetatileBehavior_IsDoor(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ if (MetatileBehavior_IsSouthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ if (MetatileBehavior_IsNorthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ if (MetatileBehavior_IsWestArrowWarp(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ 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;
+ if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
+ return playerStruct->direction;
+ return DIR_SOUTH;
+}
+
+u16 GetCenterScreenMetatileBehavior(void)
{
return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7);
}
@@ -784,10 +781,10 @@ u8 Overworld_GetFlashLevel(void)
return gSaveBlock1.flashLevel;
}
-void sub_8053D14(u16 mapDataId)
+void sub_8053D14(u16 mapLayoutId)
{
- gSaveBlock1.mapDataId = mapDataId;
- gMapHeader.mapData = get_mapdata_header();
+ gSaveBlock1.mapLayoutId = mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
}
static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
@@ -831,7 +828,7 @@ static u16 GetLocationMusic(struct WarpData *warp)
if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE)
return LEGENDARY_MUSIC;
else if (IsInfiltratedWeatherInstitute(warp) == TRUE)
- return BGM_TOZAN;
+ return MUS_TOZAN;
else
return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
}
@@ -844,7 +841,7 @@ u16 GetCurrLocationDefaultMusic(void)
if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE111)
&& gSaveBlock1.location.mapNum == MAP_NUM(ROUTE111)
&& GetSav1Weather() == 8)
- return BGM_ASHROAD;
+ return MUS_ASHROAD;
music = GetLocationMusic(&gSaveBlock1.location);
if (music != 0x7FFF)
@@ -854,9 +851,9 @@ u16 GetCurrLocationDefaultMusic(void)
else
{
if (gSaveBlock1.pos.x < 24)
- return BGM_DOORO_X1;
+ return MUS_DOORO_X1;
else
- return BGM_GRANROAD;
+ return MUS_GRANROAD;
}
}
@@ -871,9 +868,9 @@ u16 GetWarpDestinationMusic(void)
{
if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAUVILLE_CITY)
&& gSaveBlock1.location.mapNum == MAP_NUM(MAUVILLE_CITY))
- return BGM_DOORO_X1;
+ return MUS_DOORO_X1;
else
- return BGM_GRANROAD;
+ return MUS_GRANROAD;
}
}
@@ -891,9 +888,9 @@ void Overworld_PlaySpecialMapMusic(void)
if (gSaveBlock1.savedMusic)
music = gSaveBlock1.savedMusic;
else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
- music = BGM_DEEPDEEP;
+ music = MUS_DEEPDEEP;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- music = BGM_NAMINORI;
+ music = MUS_NAMINORI;
}
if (music != GetCurrentMapMusic())
@@ -918,10 +915,10 @@ void sub_8053F0C(void)
u16 currentMusic = GetCurrentMapMusic();
if (newMusic != LEGENDARY_MUSIC)
{
- if (currentMusic == BGM_DEEPDEEP || currentMusic == BGM_NAMINORI)
+ if (currentMusic == MUS_DEEPDEEP || currentMusic == MUS_NAMINORI)
return;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- newMusic = BGM_NAMINORI;
+ newMusic = MUS_NAMINORI;
}
if (newMusic != currentMusic)
{
@@ -949,14 +946,14 @@ void Overworld_ChangeMusicTo(u16 newMusic)
u8 GetMapMusicFadeoutSpeed(void)
{
- struct MapHeader *mapHeader = warp1_get_mapheader();
+ struct MapHeader *mapHeader = GetDestinationWarpMapHeader();
if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE)
return 2;
else
return 4;
}
-void sub_8053FF8(void)
+void TryFadeOutOldMapMusic(void)
{
u16 music = GetWarpDestinationMusic();
if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic())
@@ -966,7 +963,7 @@ void sub_8053FF8(void)
}
}
-bool8 sub_8054034(void)
+bool8 BGMusicStopped(void)
{
return IsNotWaitingForBGMStop();
}
@@ -1054,9 +1051,9 @@ u8 Overworld_GetMapTypeOfSaveblockLocation(void)
return GetMapTypeByWarpData(&gSaveBlock1.location);
}
-u8 get_map_type_from_warp0(void)
+u8 GetLastUsedWarpMapType(void)
{
- return GetMapTypeByWarpData(&gUnknown_020297F0);
+ return GetMapTypeByWarpData(&gLastUsedWarp);
}
bool8 is_map_type_1_2_3_5_or_6(u8 mapType)
@@ -1124,10 +1121,10 @@ void CB2_InitTestMenu(void)
ResetSpriteData();
ResetTasks();
ScanlineEffect_Stop();
- Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
+ Text_LoadWindowTemplate(&gMenuTextWindowTemplate);
+ InitMenuWindow(&gMenuTextWindowTemplate);
debug_sub_8076B68();
- BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
REG_IE |= 1;
REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP;
m4aSoundVSyncOn();
@@ -1183,21 +1180,21 @@ bool32 is_c1_link_related_active(void)
void c1_overworld_normal(u16 newKeys, u16 heldKeys)
{
- struct FieldInput inputStruct;
+ struct FieldInput fieldInput;
sub_8059204();
- FieldClearPlayerInput(&inputStruct);
- FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
+ ClearPlayerFieldInput(&fieldInput);
+ GetPlayerFieldInput(&fieldInput, newKeys, heldKeys);
if (!ScriptContext2_IsEnabled())
{
- if (sub_8068024(&inputStruct) == 1)
+ if (ProcessPlayerFieldInput(&fieldInput) == 1)
{
ScriptContext2_Enable();
HideMapNamePopup();
}
else
{
- player_step(inputStruct.dpadDirection, newKeys, heldKeys);
+ player_step(fieldInput.dpadDirection, newKeys, heldKeys);
}
}
}
@@ -1246,7 +1243,7 @@ void sub_80543DC(u16 (*a1)(u32))
gUnknown_03000584 = a1;
}
-void sub_80543E8(void)
+static void RunFieldCallback(void)
{
if (gFieldCallback != NULL)
gFieldCallback();
@@ -1261,7 +1258,7 @@ void CB2_NewGame(void)
StopMapMusic();
ResetSafariZoneFlag_();
NewGameInitData();
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
PlayTimeCounter_Start();
ScriptContext1_Init();
ScriptContext2_Disable();
@@ -1274,14 +1271,12 @@ void CB2_NewGame(void)
#if DEBUG
-extern void (*gFieldCallback)(void);
-
void debug_sub_8058C00(void)
{
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
ResetSafariZoneFlag_();
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
PlayTimeCounter_Start();
ScriptContext1_Init();
ScriptContext2_Disable();
@@ -1309,7 +1304,7 @@ void CB2_WhiteOut(void)
StopMapMusic();
ResetSafariZoneFlag_();
DoWhiteOut();
- player_avatar_init_params_reset();
+ ResetInitialPlayerAvatarState();
ScriptContext1_Init();
ScriptContext2_Disable();
gFieldCallback = sub_8080B60;
@@ -1363,7 +1358,7 @@ void sub_8054588(void)
SetMainCallback2(c2_80567AC);
}
-void c2_80567AC(void)
+static void c2_80567AC(void)
{
if (sub_805483C(&gMain.state))
{
@@ -1415,10 +1410,10 @@ void sub_805465C(void)
c2_exit_to_overworld_2_switch();
}
-void sub_805469C(void)
+void c2_exit_to_overworld_1_sub_8080DEC(void)
{
FieldClearVBlankHBlankCallbacks();
- gFieldCallback = atk17_seteffectsecondary;
+ gFieldCallback = sub_8080DEC;
c2_exit_to_overworld_2_switch();
}
@@ -1460,8 +1455,8 @@ void CB2_ContinueSavedGame(void)
#endif
ResetSafariZoneFlag_();
LoadSaveblockMapHeader();
- LoadSaveblockMapObjScripts();
- UnfreezeMapObjects();
+ LoadSaveblockEventObjScripts();
+ UnfreezeEventObjects();
DoTimeBasedEvents();
sub_805308C();
sub_8055FC0();
@@ -1472,7 +1467,7 @@ void CB2_ContinueSavedGame(void)
{
ClearSecretBase2Field_9();
sub_8053778();
- warp_in();
+ WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
}
else
@@ -1509,19 +1504,19 @@ void VBlankCB_Field(void)
sub_8072E74();
}
-void sub_8054814(void)
+static void InitCurrentFlashLevelScanlineEffect(void)
{
- u8 val = Overworld_GetFlashLevel();
- if (val)
+ u8 flashLevel = Overworld_GetFlashLevel();
+ if (flashLevel)
{
- sub_80815E0(val);
- ScanlineEffect_SetParams(gUnknown_08216694);
+ WriteFlashScanlineEffectBuffer(flashLevel);
+ ScanlineEffect_SetParams(sFlashEffectParams);
}
}
-bool32 sub_805483C(u8 *a1)
+static bool32 sub_805483C(u8 *state)
{
- switch (*a1)
+ switch (*state)
{
case 0:
FieldClearVBlankHBlankCallbacks();
@@ -1529,60 +1524,60 @@ bool32 sub_805483C(u8 *a1)
ScriptContext2_Disable();
sub_8054F70();
sub_8054BA8();
- (*a1)++;
+ (*state)++;
break;
case 1:
sub_8053994(1);
- (*a1)++;
+ (*state)++;
break;
case 2:
sub_8054D4C(1);
- (*a1)++;
+ (*state)++;
break;
case 3:
sub_8054E98();
sub_8054D90();
sub_8054EC8();
sub_8054E60();
- (*a1)++;
+ (*state)++;
break;
case 4:
- sub_8054814();
- sub_8054C54();
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- (*a1)++;
+ InitMenuWindow(&gMenuTextWindowTemplate);
+ (*state)++;
break;
case 5:
move_tilemap_camera_to_upper_left_corner();
- (*a1)++;
+ (*state)++;
break;
case 6:
- sub_8056D28(gMapHeader.mapData);
- (*a1)++;
+ sub_8056D28(gMapHeader.mapLayout);
+ (*state)++;
break;
case 7:
- sub_8056D38(gMapHeader.mapData);
- (*a1)++;
+ sub_8056D38(gMapHeader.mapLayout);
+ (*state)++;
break;
case 8:
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- (*a1)++;
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
break;
case 9:
DrawWholeMapView();
- (*a1)++;
+ (*state)++;
break;
case 10:
cur_mapheader_run_tileset_funcs_after_some_cpuset();
- (*a1)++;
+ (*state)++;
break;
case 12:
- sub_80543E8();
- (*a1)++;
+ RunFieldCallback();
+ (*state)++;
break;
case 11:
- (*a1)++;
+ (*state)++;
break;
case 13:
return 1;
@@ -1590,67 +1585,67 @@ bool32 sub_805483C(u8 *a1)
return 0;
}
-bool32 sub_805493C(u8 *a1, u32 a2)
+bool32 sub_805493C(u8 *state, u32 a2)
{
- switch (*a1)
+ switch (*state)
{
case 0:
FieldClearVBlankHBlankCallbacks();
sub_8053994(a2);
- (*a1)++;
+ (*state)++;
break;
case 1:
sub_8054BA8();
- (*a1)++;
+ (*state)++;
break;
case 2:
sub_8054D4C(a2);
- (*a1)++;
+ (*state)++;
break;
case 3:
mli4_mapscripts_and_other();
sub_8054E34();
- (*a1)++;
+ (*state)++;
break;
case 4:
- sub_8054814();
- sub_8054C54();
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- (*a1)++;
+ InitMenuWindow(&gMenuTextWindowTemplate);
+ (*state)++;
break;
case 5:
move_tilemap_camera_to_upper_left_corner();
- (*a1)++;
+ (*state)++;
break;
case 6:
- sub_8056D28(gMapHeader.mapData);
- (*a1)++;
+ sub_8056D28(gMapHeader.mapLayout);
+ (*state)++;
break;
case 7:
- sub_8056D38(gMapHeader.mapData);
- (*a1)++;
+ sub_8056D38(gMapHeader.mapLayout);
+ (*state)++;
break;
case 8:
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- (*a1)++;
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
break;
case 9:
DrawWholeMapView();
- (*a1)++;
+ (*state)++;
break;
case 10:
cur_mapheader_run_tileset_funcs_after_some_cpuset();
- (*a1)++;
+ (*state)++;
break;
case 11:
if (gMapHeader.flags == 1 && sub_80BBB24() == 1)
ShowMapNamePopup();
- (*a1)++;
+ (*state)++;
break;
case 12:
- sub_80543E8();
- (*a1)++;
+ RunFieldCallback();
+ (*state)++;
break;
case 13:
return 1;
@@ -1658,24 +1653,24 @@ bool32 sub_805493C(u8 *a1, u32 a2)
return 0;
}
-bool32 sub_8054A4C(u8 *a1)
+bool32 sub_8054A4C(u8 *state)
{
- switch (*a1)
+ switch (*state)
{
case 0:
sub_8054BA8();
sub_8054D4C(0);
sub_8054E20();
sub_8054E34();
- (*a1)++;
+ (*state)++;
break;
case 1:
sub_8054C2C();
- (*a1)++;
+ (*state)++;
break;
case 2:
- sub_80543E8();
- (*a1)++;
+ RunFieldCallback();
+ (*state)++;
break;
case 3:
return 1;
@@ -1683,67 +1678,67 @@ bool32 sub_8054A4C(u8 *a1)
return 0;
}
-bool32 sub_8054A9C(u8 *a1)
+bool32 sub_8054A9C(u8 *state)
{
- switch (*a1)
+ switch (*state)
{
case 0:
FieldClearVBlankHBlankCallbacks();
sub_8054BA8();
- (*a1)++;
+ (*state)++;
break;
case 1:
sub_8054D4C(1);
- (*a1)++;
+ (*state)++;
break;
case 2:
sub_8054F48();
sub_8054E20();
sub_8054E7C();
- (*a1)++;
+ (*state)++;
break;
case 3:
- sub_8054814();
- sub_8054C54();
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- (*a1)++;
+ InitMenuWindow(&gMenuTextWindowTemplate);
+ (*state)++;
break;
case 4:
move_tilemap_camera_to_upper_left_corner();
- (*a1)++;
+ (*state)++;
break;
case 5:
- sub_8056D28(gMapHeader.mapData);
- (*a1)++;
+ sub_8056D28(gMapHeader.mapLayout);
+ (*state)++;
break;
case 6:
- sub_8056D38(gMapHeader.mapData);
- (*a1)++;
+ sub_8056D38(gMapHeader.mapLayout);
+ (*state)++;
break;
case 7:
- apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
- (*a1)++;
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
break;
case 8:
DrawWholeMapView();
- (*a1)++;
+ (*state)++;
break;
case 9:
cur_mapheader_run_tileset_funcs_after_some_cpuset();
- (*a1)++;
+ (*state)++;
break;
case 12:
- sub_80543E8();
- (*a1)++;
+ RunFieldCallback();
+ (*state)++;
break;
case 10:
case 11:
- (*a1)++;
+ (*state)++;
break;
case 13:
SetFieldVBlankCallback();
- (*a1)++;
+ (*state)++;
return 1;
}
return 0;
@@ -1769,14 +1764,14 @@ void sub_8054BA8(void)
void sub_8054C2C(void)
{
- sub_8054814();
- sub_8054C54();
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
+ InitMenuWindow(&gMenuTextWindowTemplate);
mapdata_load_assets_to_gpu_and_full_redraw();
}
-void sub_8054C54(void)
+static void InitOverworldGraphicsRegisters(void)
{
REG_MOSAIC = 0;
REG_WININ = 7967;
@@ -1810,7 +1805,7 @@ void sub_8054D4C(u32 a1)
ScanlineEffect_Clear();
ResetCameraUpdateInfo();
InstallCameraPanAheadCallback();
- sub_805C7C4(0);
+ InitEventObjectPalettes(0);
FieldEffectActiveListClear();
InitFieldMessageBox();
StartWeather();
@@ -1822,26 +1817,26 @@ void sub_8054D4C(u32 a1)
void sub_8054D90(void)
{
- gUnknown_0300489C = 0;
- gUnknown_03004898 = 0;
- sub_805AA98();
- sub_805B55C(0, 0);
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetEventObjects();
+ TrySpawnEventObjects(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();
+ struct InitialPlayerAvatarState *initialPlayerAvatarState;
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetEventObjects();
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);
+ initialPlayerAvatarState = GetInitialPlayerAvatarState();
+ InitPlayerAvatar(x, y, initialPlayerAvatarState->direction, gSaveBlock2.playerGender);
+ SetPlayerAvatarTransitionFlags(initialPlayerAvatarState->transitionFlags);
+ ResetInitialPlayerAvatarState();
+ TrySpawnEventObjects(0, 0);
ResetBerryTreeSparkleFlags();
mapheader_run_first_tag4_script_list_match();
}
@@ -1854,7 +1849,7 @@ void sub_8054E20(void)
void sub_8054E34(void)
{
- gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1;
+ gEventObjects[gPlayerAvatar.eventObjectId].trackedByCamera = 1;
InitCameraUpdateCallback(gPlayerAvatar.spriteId);
}
@@ -1885,7 +1880,7 @@ void sub_8054EC8(void)
for (i = 0; i < gFieldLinkPlayerCount; i++)
{
- SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender);
+ SpawnLinkPlayerEventObject(i, i + x, y, gLinkPlayers[i].gender);
CreateLinkPlayerSprite(i);
}
@@ -2273,7 +2268,7 @@ void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3)
a3->a = linkPlayerId;
a3->b = (linkPlayerId == a2) ? 1 : 0;
- a3->c = gLinkPlayerMapObjects[linkPlayerId].mode;
+ a3->c = gLinkPlayerEventObjects[linkPlayerId].mode;
a3->d = sub_8055B30(linkPlayerId);
sub_8055B08(linkPlayerId, &x, &y);
a3->sub.x = x;
@@ -2304,7 +2299,7 @@ u8 *sub_8055648(struct UnkStruct_8054FF8 *a1)
{
if (a1->c != 2)
return 0;
- return sub_8068E24(&a1->sub);
+ return GetCoordEventScriptAtMapPosition(&a1->sub);
}
bool32 sub_8055660(struct UnkStruct_8054FF8 *a1)
@@ -2327,8 +2322,8 @@ u8 *sub_805568C(struct UnkStruct_8054FF8 *a1)
return 0;
unkStruct = a1->sub;
- unkStruct.x += gUnknown_0821664C[a1->d].x;
- unkStruct.y += gUnknown_0821664C[a1->d].y;
+ unkStruct.x += gDirectionToVectors[a1->d].x;
+ unkStruct.y += gDirectionToVectors[a1->d].y;
unkStruct.height = 0;
linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y);
@@ -2344,7 +2339,7 @@ u8 *sub_805568C(struct UnkStruct_8054FF8 *a1)
return TradeRoom_ReadTrainerCard2;
}
- return sub_80682A8(&unkStruct, a1->field_C, a1->d);
+ return GetInteractedLinkPlayerScript(&unkStruct, a1->field_C, a1->d);
}
u16 sub_8055758(u8 *script)
@@ -2475,109 +2470,109 @@ bool32 sub_8055940(void)
return TRUE;
}
-void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj)
+void ClearLinkPlayerEventObject(struct LinkPlayerEventObject *linkPlayerEventObj)
{
- memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject));
+ memset(linkPlayerEventObj, 0, sizeof(struct LinkPlayerEventObject));
}
-void strange_npc_table_clear(void)
+void ClearLinkPlayerEventObjects(void)
{
- memset(gLinkPlayerMapObjects, 0, sizeof(gLinkPlayerMapObjects));
+ memset(gLinkPlayerEventObjects, 0, sizeof(gLinkPlayerEventObjects));
}
-void ZeroMapObject(struct MapObject *mapObj)
+static void ClearEventObject(struct EventObject *eventObj)
{
- memset(mapObj, 0, sizeof(struct MapObject));
+ memset(eventObj, 0, sizeof(struct EventObject));
}
-void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4)
+void SpawnLinkPlayerEventObject(u8 linkPlayerId, s16 x, s16 y, u8 a4)
{
- u8 mapObjId = sub_805AB54();
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- struct MapObject *mapObj = &gMapObjects[mapObjId];
+ u8 eventObjId = GetFirstInactiveEventObjectId();
+ struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
- ZeroLinkPlayerMapObject(linkPlayerMapObj);
- ZeroMapObject(mapObj);
+ ClearLinkPlayerEventObject(linkPlayerEventObj);
+ ClearEventObject(eventObj);
- linkPlayerMapObj->active = 1;
- linkPlayerMapObj->linkPlayerId = linkPlayerId;
- linkPlayerMapObj->mapObjId = mapObjId;
- linkPlayerMapObj->mode = 0;
+ linkPlayerEventObj->active = 1;
+ linkPlayerEventObj->linkPlayerId = linkPlayerId;
+ linkPlayerEventObj->eventObjId = eventObjId;
+ linkPlayerEventObj->mode = 0;
- mapObj->active = 1;
- mapObj->mapobj_bit_1 = a4;
- mapObj->range.as_byte = 2;
- mapObj->spriteId = 64;
+ eventObj->active = 1;
+ eventObj->singleMovementActive = a4;
+ eventObj->range.as_byte = 2;
+ eventObj->spriteId = 64;
- InitLinkPlayerMapObjectPos(mapObj, x, y);
+ InitLinkPlayerEventObjectPos(eventObj, x, y);
}
-void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y)
+void InitLinkPlayerEventObjectPos(struct EventObject *eventObj, 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);
+ eventObj->currentCoords.x = x;
+ eventObj->currentCoords.y = y;
+ eventObj->previousCoords.x = x;
+ eventObj->previousCoords.y = y;
+ sub_80603CC(x, y, &eventObj->initialCoords.x, &eventObj->initialCoords.y);
+ eventObj->initialCoords.x += 8;
+ EventObjectUpdateZCoord(eventObj);
}
void unref_sub_8055A6C(u8 linkPlayerId, u8 a2)
{
- if (gLinkPlayerMapObjects[linkPlayerId].active)
+ if (gLinkPlayerEventObjects[linkPlayerId].active)
{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- mapObj->range.as_byte = a2;
+ u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ eventObj->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;
+ struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
+ u8 eventObjId = linkPlayerEventObj->eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ if (eventObj->spriteId != 64 )
+ DestroySprite(&gSprites[eventObj->spriteId]);
+ linkPlayerEventObj->active = 0;
+ eventObj->active = 0;
}
u8 sub_8055AE8(u8 linkPlayerId)
{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return mapObj->spriteId;
+ u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ return eventObj->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 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ *x = eventObj->currentCoords.x;
+ *y = eventObj->currentCoords.y;
}
u8 sub_8055B30(u8 linkPlayerId)
{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return mapObj->range.as_byte;
+ u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ return eventObj->range.as_byte;
}
u8 sub_8055B50(u8 linkPlayerId)
{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return mapObj->mapobj_unk_0B_0;
+ u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ return eventObj->currentElevation;
}
s32 unref_sub_8055B74(u8 linkPlayerId)
{
- u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
- return 16 - (s8)mapObj->mapobj_unk_21;
+ u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
+ return 16 - (s8)eventObj->directionSequenceIndex;
}
u8 GetLinkPlayerIdAt(s16 x, s16 y)
@@ -2585,11 +2580,11 @@ 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))
+ if (gLinkPlayerEventObjects[i].active
+ && (gLinkPlayerEventObjects[i].mode == 0 || gLinkPlayerEventObjects[i].mode == 2))
{
- struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId];
- if (mapObj->coords2.x == x && mapObj->coords2.y == y)
+ struct EventObject *eventObj = &gEventObjects[gLinkPlayerEventObjects[i].eventObjId];
+ if (eventObj->currentCoords.x == x && eventObj->currentCoords.y == y)
return i;
}
}
@@ -2598,79 +2593,79 @@ u8 GetLinkPlayerIdAt(s16 x, s16 y)
void sub_8055BFC(u8 linkPlayerId, u8 a2)
{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- u8 mapObjId = linkPlayerMapObj->mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
+ struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
+ u8 eventObjId = linkPlayerEventObj->eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
- if (linkPlayerMapObj->active)
+ if (linkPlayerEventObj->active)
{
if (a2 > 10)
- mapObj->mapobj_bit_2 = 1;
+ eventObj->triggerGroundEffectsOnMove = 1;
else
- gUnknown_082166D8[gUnknown_082166A0[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj);
+ gUnknown_082166D8[gUnknown_082166A0[linkPlayerEventObj->mode](linkPlayerEventObj, eventObj, a2)](linkPlayerEventObj, eventObj);
}
}
-static u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055C68(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
{
- return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3);
+ return gUnknown_082166AC[a3](linkPlayerEventObj, eventObj, a3);
}
-static u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055C88(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
{
return 1;
}
-static u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055C8C(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
{
- return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3);
+ return gUnknown_082166AC[a3](linkPlayerEventObj, eventObj, a3);
}
-static u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055CAC(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
{
return 0;
}
-static u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055CB0(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
{
s16 x, y;
- mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte);
- FieldObjectMoveDestCoords(mapObj, mapObj->range.as_byte, &x, &y);
+ eventObj->range.as_byte = npc_something3(a3, eventObj->range.as_byte);
+ EventObjectMoveDestCoords(eventObj, eventObj->range.as_byte, &x, &y);
- if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->range.as_byte, x, y))
+ if (LinkPlayerDetectCollision(linkPlayerEventObj->eventObjId, eventObj->range.as_byte, x, y))
{
return 0;
}
else
{
- mapObj->mapobj_unk_21 = 16;
- npc_coords_shift(mapObj, x, y);
- FieldObjectUpdateZCoord(mapObj);
+ eventObj->directionSequenceIndex = 16;
+ ShiftEventObjectCoords(eventObj, x, y);
+ EventObjectUpdateZCoord(eventObj);
return 1;
}
}
-static u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055D18(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
{
- mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte);
+ eventObj->range.as_byte = npc_something3(a3, eventObj->range.as_byte);
return 0;
}
-static void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
+static void sub_8055D30(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj)
{
- linkPlayerMapObj->mode = 0;
+ linkPlayerEventObj->mode = 0;
}
-static void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
+static void sub_8055D38(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj)
{
- mapObj->mapobj_unk_21--;
- linkPlayerMapObj->mode = 1;
- MoveCoords(mapObj->range.as_byte, &mapObj->coords1.x, &mapObj->coords1.y);
- if (!mapObj->mapobj_unk_21)
+ eventObj->directionSequenceIndex--;
+ linkPlayerEventObj->mode = 1;
+ MoveCoords(eventObj->range.as_byte, &eventObj->initialCoords.x, &eventObj->initialCoords.y);
+ if (!eventObj->directionSequenceIndex)
{
- npc_coords_shift_still(mapObj);
- linkPlayerMapObj->mode = 2;
+ ShiftStillEventObjectCoords(eventObj);
+ linkPlayerEventObj->mode = 2;
}
}
@@ -2694,15 +2689,15 @@ u8 npc_something3(u8 a1, u8 a2)
return a2;
}
-u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y)
+u8 LinkPlayerDetectCollision(u8 selfEventObjId, u8 a2, s16 x, s16 y)
{
u8 i;
for (i = 0; i < 16; i++)
{
- if (i != selfMapObjId)
+ if (i != selfEventObjId)
{
- if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y)
- || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y))
+ if ((gEventObjects[i].currentCoords.x == x && gEventObjects[i].currentCoords.y == y)
+ || (gEventObjects[i].previousCoords.x == x && gEventObjects[i].previousCoords.y == y))
{
return 1;
}
@@ -2713,36 +2708,36 @@ u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y)
void CreateLinkPlayerSprite(u8 linkPlayerId)
{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
- u8 mapObjId = linkPlayerMapObj->mapObjId;
- struct MapObject *mapObj = &gMapObjects[mapObjId];
+ struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
+ u8 eventObjId = linkPlayerEventObj->eventObjId;
+ struct EventObject *eventObj = &gEventObjects[eventObjId];
struct Sprite *sprite;
- if (linkPlayerMapObj->active)
+ if (linkPlayerEventObj->active)
{
- u8 val = GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1);
- mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0);
- sprite = &gSprites[mapObj->spriteId];
+ u8 val = GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, eventObj->singleMovementActive);
+ eventObj->spriteId = AddPseudoEventObject(val, SpriteCB_LinkPlayer, 0, 0, 0);
+ sprite = &gSprites[eventObj->spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->data[0] = linkPlayerId;
- mapObj->mapobj_bit_2 = 0;
+ eventObj->triggerGroundEffectsOnMove = 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));
+ struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[sprite->data[0]];
+ struct EventObject *eventObj = &gEventObjects[linkPlayerEventObj->eventObjId];
+ sprite->pos1.x = eventObj->initialCoords.x;
+ sprite->pos1.y = eventObj->initialCoords.y;
+ SetObjectSubpriorityByZCoord(eventObj->previousElevation, sprite, 1);
+ sprite->oam.priority = ZCoordToPriority(eventObj->previousElevation);
+ if (!linkPlayerEventObj->mode)
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObj->range.as_byte));
else
- StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->range.as_byte));
- sub_806487C(sprite, 0);
- if (mapObj->mapobj_bit_2)
+ StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(eventObj->range.as_byte));
+ UpdateEventObjectSpriteVisibility(sprite, 0);
+ if (eventObj->triggerGroundEffectsOnMove)
{
sprite->invisible = ((sprite->data[7] & 4) >> 2);
sprite->data[7]++;