save_data: document OverworldMapHistory (#578)
Some checks failed
build / build (push) Has been cancelled

This commit is contained in:
ellieplayswow
2025-06-28 04:55:59 +01:00
committed by GitHub
parent b96901ce5c
commit 5782f85be0
16 changed files with 107 additions and 130 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -2,7 +2,7 @@
#define POKEPLATINUM_STRUCT_0205EC34_H
typedef struct {
u16 unk_00;
u16 cyclingGear;
u16 runningShoes;
u32 form;
} PlayerData;

View File

@@ -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

View File

@@ -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

View File

@@ -3,17 +3,16 @@
#include <nitro.h>
#include <string.h>
#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)

View File

@@ -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',

View File

@@ -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)

View File

@@ -0,0 +1,51 @@
#include "overworld_map_history.h"
#include <nitro.h>
#include <string.h>
#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;
}
}

View File

@@ -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;
}
}

View File

@@ -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));

View File

@@ -1,53 +0,0 @@
#include "unk_020556C4.h"
#include <nitro.h>
#include <string.h>
#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;
}
}

View File

@@ -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;

View File

@@ -4,7 +4,6 @@
#include <string.h>
#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);
}
}