diff --git a/include/field_overworld_state.h b/include/field_overworld_state.h index c9844d0d23..94375578f6 100644 --- a/include/field_overworld_state.h +++ b/include/field_overworld_state.h @@ -3,12 +3,12 @@ #include "struct_decls/struct_0203A790_decl.h" #include "struct_decls/struct_0203A79C_decl.h" -#include "struct_defs/struct_020556C4.h" #include "struct_defs/struct_0205EC34.h" #include "field/field_system_decl.h" #include "location.h" +#include "overworld_map_history.h" #include "savedata.h" int FieldOverworldState_Size(void); @@ -26,7 +26,7 @@ u16 FieldOverworldState_GetWeather(const FieldOverworldState *fieldState); void FieldOverworldState_SetWeather(FieldOverworldState *fieldState, u16 weather); u16 FieldOverworldState_GetWarpId(const FieldOverworldState *fieldState); void FieldOverworldState_SetWarpId(FieldOverworldState *fieldState, u16 warpId); -UnkStruct_020556C4 *sub_0203A76C(FieldOverworldState *fieldState); +OverworldMapHistory *FieldOverworldState_GetMapHistory(FieldOverworldState *fieldState); int FieldOverworldState_GetCameraType(const FieldOverworldState *fieldState); void FieldOverworldState_SetCameraType(FieldOverworldState *fieldState, int type); PlayerData *FieldOverworldState_GetPlayerData(FieldOverworldState *fieldState); diff --git a/include/overworld_map_history.h b/include/overworld_map_history.h new file mode 100644 index 0000000000..cd1c734cdf --- /dev/null +++ b/include/overworld_map_history.h @@ -0,0 +1,22 @@ +#ifndef POKEPLATINUM_OVERWORLD_MAP_HISTORY_H +#define POKEPLATINUM_OVERWORLD_MAP_HISTORY_H + +typedef struct OverworldMapHistoryItem { + u8 mapX; + u8 mapZ; + u8 faceDirection; + u8 dummy_03; // this is always set to 1 +} OverworldMapHistoryItem; + +typedef struct OverworldMapHistory { + int historyPointer; + u8 currentMapX; + u8 currentMapZ; + OverworldMapHistoryItem items[6]; +} OverworldMapHistory; + +void OverworldMapHistory_Clear(OverworldMapHistory *mapHistory); +void OverworldMapHistory_PushViaWarp(OverworldMapHistory *mapHistory, int x, int z); +void OverworldMapHistory_Push(OverworldMapHistory *mapHistory, int x, int z, int faceDirection); + +#endif // POKEPLATINUM_OVERWORLD_MAP_HISTORY_H diff --git a/include/struct_defs/struct_020556C4.h b/include/struct_defs/struct_020556C4.h deleted file mode 100644 index 2323d801ea..0000000000 --- a/include/struct_defs/struct_020556C4.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_020556C4_H -#define POKEPLATINUM_STRUCT_020556C4_H - -#include "struct_defs/struct_020556C4_sub1.h" - -typedef struct { - int unk_00; - u8 unk_04; - u8 unk_05; - UnkStruct_020556C4_sub1 unk_06[6]; -} UnkStruct_020556C4; - -#endif // POKEPLATINUM_STRUCT_020556C4_H diff --git a/include/struct_defs/struct_020556C4_sub1.h b/include/struct_defs/struct_020556C4_sub1.h deleted file mode 100644 index 640092d773..0000000000 --- a/include/struct_defs/struct_020556C4_sub1.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_020556C4_SUB1_H -#define POKEPLATINUM_STRUCT_020556C4_SUB1_H - -typedef struct { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; -} UnkStruct_020556C4_sub1; - -#endif // POKEPLATINUM_STRUCT_020556C4_SUB1_H diff --git a/include/struct_defs/struct_0205EC34.h b/include/struct_defs/struct_0205EC34.h index 2656601b16..00c8bb2c0c 100644 --- a/include/struct_defs/struct_0205EC34.h +++ b/include/struct_defs/struct_0205EC34.h @@ -2,7 +2,7 @@ #define POKEPLATINUM_STRUCT_0205EC34_H typedef struct { - u16 unk_00; + u16 cyclingGear; u16 runningShoes; u32 form; } PlayerData; diff --git a/include/unk_020556C4.h b/include/unk_020556C4.h deleted file mode 100644 index 59dea1e387..0000000000 --- a/include/unk_020556C4.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef POKEPLATINUM_UNK_020556C4_H -#define POKEPLATINUM_UNK_020556C4_H - -#include "struct_defs/struct_020556C4.h" - -void sub_020556C4(UnkStruct_020556C4 *param0); -void sub_020556E8(UnkStruct_020556C4 *param0, int param1, int param2); -void sub_02055740(UnkStruct_020556C4 *param0, int param1, int param2, int param3); - -#endif // POKEPLATINUM_UNK_020556C4_H diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index 566b562fe7..c2c295333f 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -230,7 +230,7 @@ Static main Object main.nef.p/src_terrain_attributes.c.o Object main.nef.p/src_terrain_collision_manager.c.o Object main.nef.p/src_unk_020553DC.c.o - Object main.nef.p/src_unk_020556C4.c.o + Object main.nef.p/src_overworld_map_history.c.o Object main.nef.p/src_field_transition.c.o Object main.nef.p/src_unk_020559DC.c.o Object main.nef.p/src_unk_02055C50.c.o diff --git a/src/field_overworld_state.c b/src/field_overworld_state.c index be90b52299..f7e23c9e5f 100644 --- a/src/field_overworld_state.c +++ b/src/field_overworld_state.c @@ -3,17 +3,16 @@ #include #include -#include "struct_defs/struct_020556C4.h" #include "struct_defs/struct_0205EC34.h" #include "field/field_system.h" #include "location.h" #include "map_object.h" +#include "overworld_map_history.h" #include "player_avatar.h" #include "savedata.h" #include "unk_0203A7D8.h" -#include "unk_020556C4.h" typedef struct FieldOverworldState { Location player; @@ -25,13 +24,12 @@ typedef struct FieldOverworldState { u16 weather; u16 warpId; u8 cameraType; - UnkStruct_020556C4 unk_6C; + OverworldMapHistory mapHistory; PlayerData playerData; u16 poisonSteps; u16 safariSteps; u16 safariBalls; - u16 padding_9A; // unused - u16 padding_9C; // unused + u8 padding_9A[6]; } FieldOverworldState; typedef struct UnkStruct_0203A79C_t { @@ -57,7 +55,7 @@ void FieldOverworldState_Init(FieldOverworldState *fieldState) { memset(fieldState, 0, sizeof(FieldOverworldState)); - sub_020556C4(&fieldState->unk_6C); + OverworldMapHistory_Clear(&fieldState->mapHistory); PlayerData_Init(&fieldState->playerData); fieldState->warpId = sub_0203A7EC(); @@ -119,9 +117,9 @@ void FieldOverworldState_SetWarpId(FieldOverworldState *fieldState, u16 warpId) fieldState->warpId = warpId; } -UnkStruct_020556C4 *sub_0203A76C(FieldOverworldState *fieldState) +OverworldMapHistory *FieldOverworldState_GetMapHistory(FieldOverworldState *fieldState) { - return &fieldState->unk_6C; + return &fieldState->mapHistory; } int FieldOverworldState_GetCameraType(const FieldOverworldState *fieldState) diff --git a/src/meson.build b/src/meson.build index c475b5f969..d054f0d9e8 100644 --- a/src/meson.build +++ b/src/meson.build @@ -217,7 +217,7 @@ pokeplatinum_c = files( 'terrain_attributes.c', 'terrain_collision_manager.c', 'unk_020553DC.c', - 'unk_020556C4.c', + 'overworld_map_history.c', 'field_transition.c', 'unk_020559DC.c', 'unk_02055C50.c', diff --git a/src/overlay005/fieldmap.c b/src/overlay005/fieldmap.c index 5f2482521f..81bd6ea01f 100644 --- a/src/overlay005/fieldmap.c +++ b/src/overlay005/fieldmap.c @@ -10,7 +10,6 @@ #include "struct_decls/struct_02020C44_decl.h" #include "struct_decls/struct_0203A790_decl.h" -#include "struct_defs/struct_020556C4.h" #include "struct_defs/struct_02099F80.h" #include "field/field_system.h" @@ -70,6 +69,7 @@ #include "map_object.h" #include "narc.h" #include "overlay_manager.h" +#include "overworld_map_history.h" #include "persisted_map_features.h" #include "player_avatar.h" #include "pltt_transfer.h" @@ -82,7 +82,6 @@ #include "unk_02020AEC.h" #include "unk_0202419C.h" #include "unk_020553DC.h" -#include "unk_020556C4.h" #include "unk_020559DC.h" #include "unk_02055C50.h" #include "vram_transfer.h" @@ -512,19 +511,16 @@ static void ov5_021D134C(FieldSystem *fieldSystem, u8 param1) static void ov5_021D13B4(FieldSystem *fieldSystem) { - UnkStruct_020556C4 *v0; - int v1, v2, v3; - if (MapHeader_IsOnMainMatrix(fieldSystem->location->mapId) == 0) { return; } - v0 = sub_0203A76C(SaveData_GetFieldOverworldState(fieldSystem->saveData)); - v1 = (Player_GetXPos(fieldSystem->playerAvatar) - LandDataManager_GetOffsetTileX(fieldSystem->landDataMan)) / MAP_TILES_COUNT_X; - v2 = (Player_GetZPos(fieldSystem->playerAvatar) - LandDataManager_GetOffsetTileZ(fieldSystem->landDataMan)) / MAP_TILES_COUNT_Z; - v3 = PlayerAvatar_GetDir(fieldSystem->playerAvatar); + OverworldMapHistory *mapHistory = FieldOverworldState_GetMapHistory(SaveData_GetFieldOverworldState(fieldSystem->saveData)); + int mapX = (Player_GetXPos(fieldSystem->playerAvatar) - LandDataManager_GetOffsetTileX(fieldSystem->landDataMan)) / MAP_TILES_COUNT_X; + int mapZ = (Player_GetZPos(fieldSystem->playerAvatar) - LandDataManager_GetOffsetTileZ(fieldSystem->landDataMan)) / MAP_TILES_COUNT_Z; + int faceDirection = PlayerAvatar_GetDir(fieldSystem->playerAvatar); - sub_02055740(v0, v1, v2, v3); + OverworldMapHistory_Push(mapHistory, mapX, mapZ, faceDirection); } static void ov5_021D1414(void) diff --git a/src/overworld_map_history.c b/src/overworld_map_history.c new file mode 100644 index 0000000000..c2ee923778 --- /dev/null +++ b/src/overworld_map_history.c @@ -0,0 +1,51 @@ +#include "overworld_map_history.h" + +#include +#include + +#include "constants/field/map.h" + +void OverworldMapHistory_Clear(OverworldMapHistory *mapHistory) +{ + for (u8 i = 0; i < 6; i++) { + mapHistory->items[i].mapX = 0; + mapHistory->items[i].mapZ = 0; + mapHistory->items[i].faceDirection = 0; + mapHistory->items[i].dummy_03 = 0; + } + + mapHistory->historyPointer = 0; + mapHistory->currentMapX = 0; + mapHistory->currentMapZ = 0; +} + +void OverworldMapHistory_PushViaWarp(OverworldMapHistory *mapHistory, int x, int z) +{ + u8 mapX = x / MAP_TILES_COUNT_X; + u8 mapZ = z / MAP_TILES_COUNT_Z; + + if (mapX != mapHistory->currentMapX || mapZ != mapHistory->currentMapZ) { + mapHistory->items[mapHistory->historyPointer].mapX = mapX; + mapHistory->items[mapHistory->historyPointer].mapZ = mapZ; + mapHistory->items[mapHistory->historyPointer].faceDirection = -1; + mapHistory->items[mapHistory->historyPointer].dummy_03 = 1; + mapHistory->historyPointer = (mapHistory->historyPointer + 1) % 6; + } +} + +void OverworldMapHistory_Push(OverworldMapHistory *mapHistory, int x, int z, int faceDirection) +{ + u8 mapX = x; + u8 mapZ = z; + + if (mapX != mapHistory->currentMapX || mapZ != mapHistory->currentMapZ) { + mapHistory->items[mapHistory->historyPointer].mapX = mapX; + mapHistory->items[mapHistory->historyPointer].mapZ = mapZ; + mapHistory->items[mapHistory->historyPointer].faceDirection = faceDirection; + mapHistory->items[mapHistory->historyPointer].dummy_03 = 1; + + mapHistory->currentMapX = mapX; + mapHistory->currentMapZ = mapZ; + mapHistory->historyPointer = (mapHistory->historyPointer + 1) % 6; + } +} diff --git a/src/player_avatar.c b/src/player_avatar.c index 093b000dcd..0195caca01 100644 --- a/src/player_avatar.c +++ b/src/player_avatar.c @@ -453,7 +453,7 @@ void sub_0205EC20(PlayerAvatar *playerAvatar, u32 param1, int param2) void PlayerData_Init(PlayerData *playerData) { - playerData->unk_00 = 0; + playerData->cyclingGear = 0; playerData->runningShoes = FALSE; playerData->form = 0x0; } @@ -484,13 +484,13 @@ int PlayerData_CyclingGear(PlayerData *playerData) return 0; } - return playerData->unk_00; + return playerData->cyclingGear; } void PlayerData_SetCyclingGear(PlayerData *playerData, int gear) { if (playerData != NULL) { - playerData->unk_00 = gear; + playerData->cyclingGear = gear; } } diff --git a/src/unk_0203D1B8.c b/src/unk_0203D1B8.c index 3fdac2ff93..62021a12cf 100644 --- a/src/unk_0203D1B8.c +++ b/src/unk_0203D1B8.c @@ -29,7 +29,6 @@ #include "struct_defs/struct_0203E608.h" #include "struct_defs/struct_0203E6C0.h" #include "struct_defs/struct_02042434.h" -#include "struct_defs/struct_020556C4.h" #include "struct_defs/struct_020684D0.h" #include "struct_defs/struct_0206BC70.h" #include "struct_defs/struct_02072014.h" @@ -98,6 +97,7 @@ #include "mail.h" #include "math_util.h" #include "overlay_manager.h" +#include "overworld_map_history.h" #include "party.h" #include "player_avatar.h" #include "pokedex.h" @@ -737,7 +737,7 @@ void *sub_0203D8AC(FieldSystem *fieldSystem) UnkStruct_0203D8AC *v0; TrainerInfo *v1; int v2 = 0, v3 = 0; - sub_0203A76C(SaveData_GetFieldOverworldState(fieldSystem->saveData)); + FieldOverworldState_GetMapHistory(SaveData_GetFieldOverworldState(fieldSystem->saveData)); v0 = Heap_AllocFromHeapAtEnd(HEAP_ID_FIELDMAP, sizeof(UnkStruct_0203D8AC)); diff --git a/src/unk_020556C4.c b/src/unk_020556C4.c deleted file mode 100644 index aff1ec7654..0000000000 --- a/src/unk_020556C4.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "unk_020556C4.h" - -#include -#include - -#include "struct_defs/struct_020556C4.h" - -void sub_020556C4(UnkStruct_020556C4 *param0) -{ - u8 v0; - - for (v0 = 0; v0 < 6; v0++) { - param0->unk_06[v0].unk_00 = 0; - param0->unk_06[v0].unk_01 = 0; - param0->unk_06[v0].unk_02 = 0; - param0->unk_06[v0].unk_03 = 0; - } - - param0->unk_00 = 0; - param0->unk_04 = 0; - param0->unk_05 = 0; -} - -void sub_020556E8(UnkStruct_020556C4 *param0, int param1, int param2) -{ - u8 v0 = param1 / 32; - u8 v1 = param2 / 32; - - if ((v0 != param0->unk_04) || (v1 != param0->unk_05)) { - param0->unk_06[param0->unk_00].unk_00 = v0; - param0->unk_06[param0->unk_00].unk_01 = v1; - param0->unk_06[param0->unk_00].unk_02 = -1; - param0->unk_06[param0->unk_00].unk_03 = 1; - param0->unk_00 = (param0->unk_00 + 1) % 6; - } -} - -void sub_02055740(UnkStruct_020556C4 *param0, int param1, int param2, int param3) -{ - u8 v0 = param1, v1; - v1 = param2; - - if ((v0 != param0->unk_04) || (v1 != param0->unk_05)) { - param0->unk_06[param0->unk_00].unk_00 = v0; - param0->unk_06[param0->unk_00].unk_01 = v1; - param0->unk_06[param0->unk_00].unk_02 = param3; - param0->unk_06[param0->unk_00].unk_03 = 1; - - param0->unk_04 = v0; - param0->unk_05 = v1; - param0->unk_00 = (param0->unk_00 + 1) % 6; - } -} diff --git a/src/unk_0206B70C.c b/src/unk_0206B70C.c index 280f72778a..2d8ec16849 100644 --- a/src/unk_0206B70C.c +++ b/src/unk_0206B70C.c @@ -7,7 +7,6 @@ #include "struct_decls/struct_0203A790_decl.h" #include "struct_defs/struct_0203D8AC.h" -#include "struct_defs/struct_020556C4.h" #include "struct_defs/union_0206B878.h" #include "field/field_system.h" @@ -19,6 +18,7 @@ #include "location.h" #include "map_header.h" #include "map_matrix.h" +#include "overworld_map_history.h" #include "player_avatar.h" #include "save_player.h" #include "script_manager.h" @@ -77,7 +77,7 @@ void sub_0206B70C(FieldSystem *fieldSystem, UnkStruct_0203D8AC *param1, int para TrainerInfo *v0; int v1 = 0, v2 = 0, v3 = 0; int x, z, v6; - UnkStruct_020556C4 *v7; + OverworldMapHistory *v7; VarsFlags *v8 = SaveData_GetVarsFlags(fieldSystem->saveData); FieldOverworldState *fieldState = SaveData_GetFieldOverworldState(fieldSystem->saveData); Location *v10 = FieldOverworldState_GetExitLocation(fieldState); @@ -114,18 +114,18 @@ void sub_0206B70C(FieldSystem *fieldSystem, UnkStruct_0203D8AC *param1, int para v0 = SaveData_GetTrainerInfo(FieldSystem_GetSaveData(fieldSystem)); param1->unk_0C = TrainerInfo_Gender(v0); - v7 = sub_0203A76C(SaveData_GetFieldOverworldState(fieldSystem->saveData)); - v2 = (v7->unk_00 - 2 + 6) % 6; + v7 = FieldOverworldState_GetMapHistory(SaveData_GetFieldOverworldState(fieldSystem->saveData)); + v2 = (v7->historyPointer - 2 + 6) % 6; for (v1 = 0; v1 < 5; v1++) { - param1->unk_20[v1].unk_00 = v7->unk_06[v2].unk_00; - param1->unk_20[v1].unk_04 = v7->unk_06[v2].unk_01; - param1->unk_20[v1].unk_0A = v7->unk_06[v2].unk_03; + param1->unk_20[v1].unk_00 = v7->items[v2].mapX; + param1->unk_20[v1].unk_04 = v7->items[v2].mapZ; + param1->unk_20[v1].unk_0A = v7->items[v2].dummy_03; - if (v7->unk_06[v2].unk_02 > 3) { + if (v7->items[v2].faceDirection > 3) { param1->unk_20[v1].unk_08 = 3 + 1; } else { - param1->unk_20[v1].unk_08 = v7->unk_06[v2].unk_02; + param1->unk_20[v1].unk_08 = v7->items[v2].faceDirection; } v2 = (v2 - 1 + 6) % 6; diff --git a/src/unk_02070428.c b/src/unk_02070428.c index 9d8d2e4c8d..bcf093c78e 100644 --- a/src/unk_02070428.c +++ b/src/unk_02070428.c @@ -4,7 +4,6 @@ #include #include "struct_defs/special_encounter.h" -#include "struct_defs/struct_020556C4.h" #include "struct_defs/struct_0205EC34.h" #include "field/field_system.h" @@ -14,6 +13,7 @@ #include "journal.h" #include "location.h" #include "map_header.h" +#include "overworld_map_history.h" #include "player_avatar.h" #include "roaming_pokemon.h" #include "save_player.h" @@ -21,7 +21,6 @@ #include "system_flags.h" #include "system_vars.h" #include "unk_0203A7D8.h" -#include "unk_020556C4.h" #include "vars_flags.h" static BOOL sub_020705DC(FieldSystem *fieldSystem); @@ -98,10 +97,8 @@ void FieldSystem_InitFlagsWarp(FieldSystem *fieldSystem) } if (MapHeader_IsOnMainMatrix(fieldSystem->location->mapId)) { - UnkStruct_020556C4 *v3; - - v3 = sub_0203A76C(SaveData_GetFieldOverworldState(fieldSystem->saveData)); - sub_020556E8(v3, fieldSystem->location->x, fieldSystem->location->z); + OverworldMapHistory *mapHistory = FieldOverworldState_GetMapHistory(SaveData_GetFieldOverworldState(fieldSystem->saveData)); + OverworldMapHistory_PushViaWarp(mapHistory, fieldSystem->location->x, fieldSystem->location->z); } }