TerrainCollisionManager

Name is open to suggestions
This commit is contained in:
Adrienn Tindall 2024-08-06 14:16:58 -04:00
parent a844494a36
commit bef2da552a
13 changed files with 220 additions and 224 deletions

View File

@ -53,7 +53,7 @@ typedef struct FieldSystem_t {
SaveData *saveData;
TaskManager *unk_10;
MapHeaderData *mapHeaderData;
int unk_18;
int bottomScreen;
Location *location;
int unk_20;
Camera *camera;
@ -70,7 +70,7 @@ typedef struct FieldSystem_t {
UnkStruct_ov5_021D3CAC *unk_50;
UnkStruct_ov5_021D41B4 *unk_54;
UnkStruct_02054C18 *unk_58;
const UnkStruct_02054F44 *unk_5C;
const TerrainCollisionManager *unk_5C;
int unk_60;
UnkStruct_ov5_021E1B20 *unk_64;
BOOL unk_68;

View File

@ -21,12 +21,12 @@ void sub_02053A80(TaskManager *param0, int param1, int param2, int param3, int p
void sub_02053AB4(FieldSystem *fieldSystem, int param1, int param2, int param3, int param4, int param5);
void sub_02053AFC(TaskManager *param0, int param1, int param2, int param3, int param4, int param5);
void sub_02053CD4(TaskManager *param0, const Location *param1, u32 param2);
void sub_02053F58(FieldSystem *fieldSystem, int param1, int param2);
void FieldSystem_StartMapChangeWarpTask(FieldSystem *fieldSystem, int param1, int param2);
void *sub_02053FAC(FieldSystem *fieldSystem);
void sub_02054064(FieldSystem *fieldSystem);
BOOL sub_02054084(TaskManager *param0);
BOOL FieldTask_MapChangeToUnderground(TaskManager *param0);
BOOL sub_0205430C(TaskManager *param0);
FieldTask sub_02054428(const FieldSystem *fieldSystem);
FieldTask FieldMapChange_GetMapChangeUndergroundTask(const FieldSystem *fieldSystem);
void sub_020544F0(TaskManager *param0, const Location *param1);
void sub_020545EC(FieldSystem *fieldSystem);
void sub_02054708(TaskManager *param0);

View File

@ -3,6 +3,6 @@
#include "field/field_system_decl.h"
void ov5_021E15A8(FieldSystem *fieldSystem, BOOL param1, BOOL *param2);
void FieldSystem_StartWarpAnimation(FieldSystem *fieldSystem, BOOL param1, BOOL *param2);
#endif // POKEPLATINUM_OV5_021E135C_H

View File

@ -1,6 +1,6 @@
#ifndef POKEPLATINUM_STRUCT_02054F44_DECL_H
#define POKEPLATINUM_STRUCT_02054F44_DECL_H
typedef struct UnkStruct_02054F44_t UnkStruct_02054F44;
typedef struct TerrainCollisionManager_t TerrainCollisionManager;
#endif // POKEPLATINUM_STRUCT_02054F44_DECL_H

View File

@ -9,7 +9,7 @@
#include "field/field_system_decl.h"
#include "overlay005/struct_ov5_021E1890_decl.h"
void sub_02054F44(const UnkStruct_02054F44 **param0, int param1);
void sub_02054F44(const TerrainCollisionManager **param0, int param1);
BOOL FieldSystem_CheckCollision(const FieldSystem *fieldSystem, const int param1, const int param2);
u8 sub_02054F94(const FieldSystem *fieldSystem, const int param1, const int param2);
const fx32 sub_02054FBC(const FieldSystem *fieldSystem, const fx32 param1, const fx32 param2, const fx32 param3, u8 *param4);

View File

@ -31,7 +31,7 @@ BOOL sub_0205DC08(u8 param0);
BOOL sub_0205DC14(u8 param0);
BOOL sub_0205DC20(u8 param0);
BOOL sub_0205DC2C(u8 param0);
BOOL sub_0205DC38(u8 param0);
BOOL TileBehavior_IsEscalator(u8 param0);
BOOL sub_0205DC44(u8 param0);
BOOL sub_0205DC50(u8 param0);
BOOL sub_0205DC5C(u8 param0);
@ -74,7 +74,7 @@ BOOL sub_0205DEB4(u8 param0);
BOOL sub_0205DEC0(u8 param0);
BOOL sub_0205DECC(u8 param0);
BOOL sub_0205DED8(u8 param0);
BOOL sub_0205DEE4(u8 param0);
BOOL TileBehavior_IsWarp(u8 param0);
BOOL sub_0205DEF0(u8 param0);
BOOL sub_0205DEFC(u8 param0);
BOOL sub_0205DF10(u8 param0);

View File

@ -81,10 +81,10 @@
FS_EXTERN_OVERLAY(overlay23);
typedef struct {
int unk_00;
Location unk_04;
int state;
Location nextLocation;
UnkStruct_ov5_021D432C *unk_18;
} UnkStruct_02053900;
} MapChangeData;
typedef struct {
int state;
@ -99,9 +99,9 @@ typedef struct {
} UnkStruct_02053AB4;
typedef struct {
BOOL unk_00;
Location unk_04;
} UnkStruct_02053718;
BOOL finishedFlag;
Location location;
} MapChangeFromErrorData;
typedef struct {
int unk_00;
@ -111,10 +111,10 @@ typedef struct {
} UnkStruct_02053CD4;
typedef struct {
int unk_00;
BOOL unk_04;
Location unk_08;
} UnkStruct_02053E98;
int state;
BOOL warpFinished;
Location nextLocation;
} MapChangeWarpData;
typedef struct {
int unk_00;
@ -130,7 +130,7 @@ typedef struct {
Strbuf *unk_34;
u8 unk_38;
UIControlData *unk_3C;
} UnkStruct_02053FAC;
} MapChangeUndergroundData;
typedef struct {
int unk_00;
@ -141,7 +141,7 @@ typedef struct {
static BOOL FieldTask_ChangeMap(TaskManager *taskMan);
static BOOL FieldTask_LoadNewGameSpawn(TaskManager *taskMan);
static void FieldMapChange_SetNewLocation(FieldSystem *fieldSystem, const Location *param1);
static void sub_020533CC(FieldSystem *fieldSystem);
static void FieldMapChange_InitTerrainCollisionManager(FieldSystem *fieldSystem);
static void sub_02053468(FieldSystem *fieldSystem);
static void FieldMapChange_CreatePlayerObject(FieldSystem *fieldSystem);
static void sub_02053374(FieldSystem *fieldSystem);
@ -219,12 +219,12 @@ static void FieldMapChange_SetNewLocation(FieldSystem *fieldSystem, const Locati
MapHeaderData_Load(fieldSystem, fieldSystem->location->mapId);
if (fieldSystem->location->unk_04 != -1) {
const WarpEvent *v2 = MapHeaderData_GetWarpEventByIndex(fieldSystem, fieldSystem->location->unk_04);
const WarpEvent *warpEvent = MapHeaderData_GetWarpEventByIndex(fieldSystem, fieldSystem->location->unk_04);
fieldSystem->location->x = v2->x;
fieldSystem->location->z = v2->z;
fieldSystem->location->x = warpEvent->x;
fieldSystem->location->z = warpEvent->z;
if (v2->destWarpID == 0x100) {
if (warpEvent->destWarpID == 0x100) {
Location *v3, *entrance;
v3 = sub_0203A730(fieldState);
@ -371,7 +371,7 @@ static void FieldMapChange_LoadObjects(FieldSystem *fieldSystem)
MapObjectMan_StopAllMovement(fieldSystem->mapObjMan);
}
static void sub_020533CC(FieldSystem *fieldSystem)
static void FieldMapChange_InitTerrainCollisionManager(FieldSystem *fieldSystem)
{
sub_020530C8(fieldSystem);
GF_ASSERT(fieldSystem->unk_5C == NULL);
@ -389,7 +389,7 @@ static void sub_020533CC(FieldSystem *fieldSystem)
fieldSystem->mapLoadMode = &sMapLoadMode[fieldSystem->mapLoadType];
fieldSystem->unk_60 = fieldSystem->mapLoadMode->unk_00_4;
fieldSystem->unk_18 = fieldSystem->mapLoadMode->fieldBottomScreen;
fieldSystem->bottomScreen = fieldSystem->mapLoadMode->fieldBottomScreen;
sub_02054F44(&fieldSystem->unk_5C, fieldSystem->mapLoadMode->unk_00_8);
@ -403,7 +403,7 @@ static void sub_02053468(FieldSystem *fieldSystem)
GF_ASSERT(fieldSystem->unk_5C != NULL);
fieldSystem->unk_5C = NULL;
fieldSystem->unk_18 = 5;
fieldSystem->bottomScreen = 5;
if (fieldSystem->mapLoadMode->unk_00_16) {
sub_02054BF8(fieldSystem);
@ -415,9 +415,7 @@ static void sub_02053468(FieldSystem *fieldSystem)
void sub_02053494(FieldSystem *fieldSystem)
{
if (fieldSystem->journal != NULL) {
void *v0;
v0 = sub_0202BC58(fieldSystem->location->mapId, 11);
void *v0 = sub_0202BC58(fieldSystem->location->mapId, 11);
Journal_SaveData(fieldSystem->journal, v0, 0);
}
}
@ -460,7 +458,7 @@ static BOOL FieldTask_LoadNewGameSpawn(TaskManager *taskMan)
switch (*state) {
case 0:
FieldMapChange_SetNewLocation(fieldSystem, fieldSystem->location);
sub_020533CC(fieldSystem);
FieldMapChange_InitTerrainCollisionManager(fieldSystem);
FieldMapChange_UpdateGameData(fieldSystem, 0);
FieldMapChange_CreateObjects(fieldSystem);
(*state)++;
@ -510,12 +508,12 @@ static BOOL FieldTask_LoadSavedGameMap(TaskManager *taskMan)
CommClub_ResetAvailable(varsFlags);
FieldMapChange_SetNewLocation(fieldSystem, sub_0203A730(fieldState));
sub_020533CC(fieldSystem);
FieldMapChange_InitTerrainCollisionManager(fieldSystem);
FieldMapChange_UpdateGameData(fieldSystem, 0);
FieldMapChange_CreateObjects(fieldSystem);
} else {
FieldMapChange_SetNewLocation(fieldSystem, NULL);
sub_020533CC(fieldSystem);
FieldMapChange_InitTerrainCollisionManager(fieldSystem);
sub_020559DC(fieldSystem);
FieldMapChange_LoadObjects(fieldSystem);
}
@ -549,8 +547,8 @@ void FieldSystem_SetLoadSavedGameMapTask(FieldSystem *fieldSystem)
static BOOL FieldTask_LoadMapFromError(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053718 *v1 = TaskManager_Environment(taskMan);
VarsFlags *v2 = SaveData_GetVarsFlags(fieldSystem->saveData);
MapChangeFromErrorData *errorData = TaskManager_Environment(taskMan);
VarsFlags *varsFlags = SaveData_GetVarsFlags(fieldSystem->saveData);
int *state = FieldTask_GetState(taskMan);
switch (*state) {
@ -558,12 +556,12 @@ static BOOL FieldTask_LoadMapFromError(TaskManager *taskMan)
sub_0200F344(0, 0x0);
sub_0200F344(1, 0x0);
sub_0202878C(fieldSystem->saveData);
fieldSystem->journal = Journal_GetSavedPage(SaveData_GetJournal(fieldSystem->saveData), inline_020535E8(v2));
fieldSystem->journal = Journal_GetSavedPage(SaveData_GetJournal(fieldSystem->saveData), inline_020535E8(varsFlags));
(*state)++;
break;
case 1:
FieldMapChange_SetNewLocation(fieldSystem, &v1->unk_04);
sub_020533CC(fieldSystem);
FieldMapChange_SetNewLocation(fieldSystem, &errorData->location);
FieldMapChange_InitTerrainCollisionManager(fieldSystem);
FieldMapChange_UpdateGameData(fieldSystem, 0);
FieldMapChange_CreateObjects(fieldSystem);
sub_020534BC(fieldSystem);
@ -576,17 +574,17 @@ static BOOL FieldTask_LoadMapFromError(TaskManager *taskMan)
(*state)++;
break;
case 3:
v1->unk_00 = 0;
ov5_021E15A8(fieldSystem, 0, &v1->unk_00);
errorData->finishedFlag = FALSE;
FieldSystem_StartWarpAnimation(fieldSystem, 0, &errorData->finishedFlag);
(*state)++;
break;
case 4:
if (v1->unk_00) {
if (errorData->finishedFlag) {
(*state)++;
}
break;
case 5:
Heap_FreeToHeap(v1);
Heap_FreeToHeap(errorData);
return 1;
}
@ -595,7 +593,7 @@ static BOOL FieldTask_LoadMapFromError(TaskManager *taskMan)
void FieldSystem_StartLoadMapFromErrorTask(FieldSystem *fieldSystem)
{
UnkStruct_02053718 *v1;
MapChangeFromErrorData *errorData;
if (!MapHeader_IsUnionRoom(fieldSystem->location->mapId)) {
if (FieldSystem_IsSaveInUnionRoom(fieldSystem)) {
@ -609,30 +607,30 @@ void FieldSystem_StartLoadMapFromErrorTask(FieldSystem *fieldSystem)
}
}
v1 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02053718));
v1->unk_00 = 0;
errorData = Heap_AllocFromHeapAtEnd(11, sizeof(MapChangeFromErrorData));
errorData->finishedFlag = FALSE;
Location_Set(&v1->unk_04, 466, -1, 8, 14, 0);
Location_Set(&errorData->location, 466, -1, 8, 14, 0);
fieldSystem->mapLoadType = MAP_LOAD_TYPE_UNION;
FieldTask_Set(fieldSystem, FieldTask_LoadMapFromError, v1);
FieldTask_Set(fieldSystem, FieldTask_LoadMapFromError, errorData);
}
static BOOL FieldTask_ChangeMap(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053900 *v1 = TaskManager_Environment(taskMan);
Location *location = &v1->unk_04;
MapChangeData *mapChangeData = TaskManager_Environment(taskMan);
Location *location = &mapChangeData->nextLocation;
switch (v1->unk_00) {
switch (mapChangeData->state) {
case 0:
Sound_PlayEffect(1539);
Sound_TryFadeInBGM(fieldSystem, location->mapId);
sub_02055974(taskMan);
(v1->unk_00)++;
(mapChangeData->state)++;
break;
case 1:
sub_020539A0(taskMan, &v1->unk_04);
(v1->unk_00)++;
sub_020539A0(taskMan, &mapChangeData->nextLocation);
(mapChangeData->state)++;
break;
case 2:
if (Sound_CheckFade() != 0) {
@ -641,10 +639,10 @@ static BOOL FieldTask_ChangeMap(TaskManager *taskMan)
Sound_PlayMapBGM(fieldSystem, location->mapId);
FieldTask_StartFadeIn(taskMan);
(v1->unk_00)++;
(mapChangeData->state)++;
break;
case 3:
Heap_FreeToHeap(v1);
Heap_FreeToHeap(mapChangeData);
return TRUE;
}
@ -653,12 +651,12 @@ static BOOL FieldTask_ChangeMap(TaskManager *taskMan)
void FieldSystem_StartChangeMapTask(TaskManager *taskMan, const Location *nextLocation)
{
UnkStruct_02053900 *v0 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02053900));
MapChangeData *mapChangeData = Heap_AllocFromHeapAtEnd(11, sizeof(MapChangeData));
v0->unk_00 = 0;
v0->unk_04 = *nextLocation;
mapChangeData->state = 0;
mapChangeData->nextLocation = *nextLocation;
FieldTask_Start(taskMan, FieldTask_ChangeMap, v0);
FieldTask_Start(taskMan, FieldTask_ChangeMap, mapChangeData);
}
static BOOL FieldTask_ChangeMapSub(TaskManager *taskMan)
@ -674,7 +672,7 @@ static BOOL FieldTask_ChangeMapSub(TaskManager *taskMan)
break;
case 1:
FieldMapChange_SetNewLocation(fieldSystem, &v2->unk_04);
sub_020533CC(fieldSystem);
FieldMapChange_InitTerrainCollisionManager(fieldSystem);
FieldMapChange_UpdateGameData(fieldSystem, 0);
RadarChain_Clear(fieldSystem->chain);
(v2->state)++;
@ -1010,91 +1008,89 @@ static void sub_02053E5C(TaskManager *taskMan)
return;
}
{
void *v2 = ov6_022472C8(fieldSystem, 4, v1->unk_04);
FieldTask_Start(taskMan, ov6_022472E8, v2);
}
void *v2 = ov6_022472C8(fieldSystem, 4, v1->unk_04);
FieldTask_Start(taskMan, ov6_022472E8, v2);
}
static BOOL sub_02053E98(TaskManager *taskMan)
static BOOL FieldTask_MapChangeWarp(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053E98 *v1 = TaskManager_Environment(taskMan);
Location *v2 = &v1->unk_08;
MapChangeWarpData *mapChangeWarpData = TaskManager_Environment(taskMan);
Location *nextLocation = &mapChangeWarpData->nextLocation;
switch (v1->unk_00) {
switch (mapChangeWarpData->state) {
case 0:
ov5_021E15A8(fieldSystem, 1, &v1->unk_04);
v1->unk_00++;
FieldSystem_StartWarpAnimation(fieldSystem, 1, &mapChangeWarpData->warpFinished);
mapChangeWarpData->state++;
break;
case 1:
if (v1->unk_04) {
Sound_TryFadeInBGM(fieldSystem, v2->mapId);
if (mapChangeWarpData->warpFinished) {
Sound_TryFadeInBGM(fieldSystem, nextLocation->mapId);
sub_02055820(taskMan);
v1->unk_00++;
mapChangeWarpData->state++;
}
break;
case 2:
sub_020539A0(taskMan, &v1->unk_08);
v1->unk_00++;
sub_020539A0(taskMan, &mapChangeWarpData->nextLocation);
mapChangeWarpData->state++;
break;
case 3:
if (Sound_CheckFade() != 0) {
break;
}
Sound_PlayMapBGM(fieldSystem, v2->mapId);
Sound_PlayMapBGM(fieldSystem, nextLocation->mapId);
sub_02055868(taskMan);
v1->unk_00++;
mapChangeWarpData->state++;
break;
case 4:
v1->unk_04 = 0;
ov5_021E15A8(fieldSystem, 0, &v1->unk_04);
v1->unk_00++;
mapChangeWarpData->warpFinished = FALSE;
FieldSystem_StartWarpAnimation(fieldSystem, 0, &mapChangeWarpData->warpFinished);
mapChangeWarpData->state++;
break;
case 5:
if (v1->unk_04) {
v1->unk_00++;
if (mapChangeWarpData->warpFinished) {
mapChangeWarpData->state++;
}
break;
case 6:
Heap_FreeToHeap(v1);
Heap_FreeToHeap(mapChangeWarpData);
return 1;
}
return 0;
return FALSE;
}
void sub_02053F58(FieldSystem *fieldSystem, int param1, int param2)
void FieldSystem_StartMapChangeWarpTask(FieldSystem *fieldSystem, int param1, int param2)
{
Location v0;
UnkStruct_02053E98 *v1 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02053E98));
Location nextLocation;
MapChangeWarpData *mapChangeWarpData = Heap_AllocFromHeapAtEnd(11, sizeof(MapChangeWarpData));
MI_CpuClear8(v1, sizeof(UnkStruct_02053E98));
MI_CpuClear8(mapChangeWarpData, sizeof(MapChangeWarpData));
Location_Set(&v0, param1, param2, 0, 0, PlayerAvatar_GetDir(fieldSystem->playerAvatar));
v1->unk_08 = v0;
FieldTask_Set(fieldSystem, sub_02053E98, v1);
Location_Set(&nextLocation, param1, param2, 0, 0, PlayerAvatar_GetDir(fieldSystem->playerAvatar));
mapChangeWarpData->nextLocation = nextLocation;
FieldTask_Set(fieldSystem, FieldTask_MapChangeWarp, mapChangeWarpData);
}
void *sub_02053FAC(FieldSystem *fieldSystem)
{
UnkStruct_02053FAC *v0;
MapChangeUndergroundData *mapChangeUndergroundData;
Location *v1 = sub_0203A730(SaveData_GetFieldOverworldState(fieldSystem->saveData));
v0 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02053FAC));
v0->unk_00 = 0;
v0->unk_04 = 0;
mapChangeUndergroundData = Heap_AllocFromHeapAtEnd(11, sizeof(MapChangeUndergroundData));
mapChangeUndergroundData->unk_00 = 0;
mapChangeUndergroundData->unk_04 = 0;
if (fieldSystem->mapLoadType == MAP_LOAD_TYPE_UNDERGROUND) {
v0->unk_08 = v1->mapId;
v0->unk_0C = -1;
v0->unk_10 = v1->x;
v0->unk_14 = v1->z;
mapChangeUndergroundData->unk_08 = v1->mapId;
mapChangeUndergroundData->unk_0C = -1;
mapChangeUndergroundData->unk_10 = v1->x;
mapChangeUndergroundData->unk_14 = v1->z;
} else {
Location_SetToPlayerLocation(v1, fieldSystem);
v0->unk_08 = 2;
v0->unk_0C = -1;
mapChangeUndergroundData->unk_08 = 2;
mapChangeUndergroundData->unk_0C = -1;
{
int v2, v3;
@ -1120,61 +1116,61 @@ void *sub_02053FAC(FieldSystem *fieldSystem)
v4 = (v4 / 2) + 1;
v5 = (v5 / 2) + 2 + 1;
v0->unk_10 = v4 * 32 + v2;
v0->unk_14 = v5 * 32 + v3;
mapChangeUndergroundData->unk_10 = v4 * 32 + v2;
mapChangeUndergroundData->unk_14 = v5 * 32 + v3;
}
}
return v0;
return mapChangeUndergroundData;
}
void sub_02054064(FieldSystem *fieldSystem)
{
UnkStruct_02053FAC *v0 = sub_02053FAC(fieldSystem);
MapChangeUndergroundData *mapChangeUndergroundData = sub_02053FAC(fieldSystem);
if (v0 == NULL) {
if (mapChangeUndergroundData == NULL) {
return;
}
FieldTask_Set(fieldSystem, sub_02054428(fieldSystem), v0);
FieldTask_Set(fieldSystem, FieldMapChange_GetMapChangeUndergroundTask(fieldSystem), mapChangeUndergroundData);
}
BOOL sub_02054084(TaskManager *taskMan)
BOOL FieldTask_MapChangeToUnderground(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053FAC *v1 = TaskManager_Environment(taskMan);
MapChangeUndergroundData *mapChangeUndergroundData = TaskManager_Environment(taskMan);
switch (v1->unk_00) {
switch (mapChangeUndergroundData->unk_00) {
case 0:
MessageLoader *v2 = MessageLoader_Init(1, 26, 221, 11);
v1->unk_34 = MessageLoader_GetNewStrbuf(v2, 124);
mapChangeUndergroundData->unk_34 = MessageLoader_GetNewStrbuf(v2, 124);
MessageLoader_Free(v2);
FieldMessage_AddWindow(fieldSystem->unk_08, &v1->unk_24, 3);
FieldMessage_DrawWindow(&v1->unk_24, SaveData_Options(fieldSystem->saveData));
v1->unk_38 = FieldMessage_Print(&v1->unk_24, v1->unk_34, SaveData_Options(fieldSystem->saveData), 1);
v1->unk_00 = 1;
FieldMessage_AddWindow(fieldSystem->unk_08, &mapChangeUndergroundData->unk_24, 3);
FieldMessage_DrawWindow(&mapChangeUndergroundData->unk_24, SaveData_Options(fieldSystem->saveData));
mapChangeUndergroundData->unk_38 = FieldMessage_Print(&mapChangeUndergroundData->unk_24, mapChangeUndergroundData->unk_34, SaveData_Options(fieldSystem->saveData), 1);
mapChangeUndergroundData->unk_00 = 1;
break;
case 1:
if (FieldMessage_FinishedPrinting(v1->unk_38) == 1) {
Strbuf_Free(v1->unk_34);
if (FieldMessage_FinishedPrinting(mapChangeUndergroundData->unk_38) == 1) {
Strbuf_Free(mapChangeUndergroundData->unk_34);
sub_0200DAA4(fieldSystem->unk_08, 3, 1024 - (18 + 12) - 9, 11, 0, 11);
v1->unk_3C = sub_02002100(fieldSystem->unk_08, &Unk_020EC3A0, 1024 - (18 + 12) - 9, 11, 11);
v1->unk_00 = 2;
mapChangeUndergroundData->unk_3C = sub_02002100(fieldSystem->unk_08, &Unk_020EC3A0, 1024 - (18 + 12) - 9, 11, 11);
mapChangeUndergroundData->unk_00 = 2;
}
break;
case 2:
switch (sub_02002114(v1->unk_3C, 11)) {
switch (sub_02002114(mapChangeUndergroundData->unk_3C, 11)) {
case 0:
sub_0200E084(&v1->unk_24, 0);
BGL_DeleteWindow(&v1->unk_24);
v1->unk_00 = 3;
sub_0200E084(&mapChangeUndergroundData->unk_24, 0);
BGL_DeleteWindow(&mapChangeUndergroundData->unk_24);
mapChangeUndergroundData->unk_00 = 3;
break;
case 0xfffffffe:
sub_0200E084(&v1->unk_24, 0);
BGL_DeleteWindow(&v1->unk_24);
v1->unk_00 = 5;
sub_0200E084(&mapChangeUndergroundData->unk_24, 0);
BGL_DeleteWindow(&mapChangeUndergroundData->unk_24);
mapChangeUndergroundData->unk_00 = 5;
}
break;
case 3:
@ -1182,51 +1178,51 @@ BOOL sub_02054084(TaskManager *taskMan)
ScriptManager_Start(taskMan, 2034, NULL, NULL);
} else {
sub_020287E0(fieldSystem->saveData);
v1->unk_20 = ov5_021E1F98(fieldSystem, 11, 3);
ov5_021E1F04(v1->unk_20);
v1->unk_1C = 0;
ScriptManager_Start(taskMan, 2005, NULL, &v1->unk_1C);
mapChangeUndergroundData->unk_20 = ov5_021E1F98(fieldSystem, 11, 3);
ov5_021E1F04(mapChangeUndergroundData->unk_20);
mapChangeUndergroundData->unk_1C = 0;
ScriptManager_Start(taskMan, 2005, NULL, &mapChangeUndergroundData->unk_1C);
}
v1->unk_00 = 4;
mapChangeUndergroundData->unk_00 = 4;
break;
case 4:
if (SaveData_OverwriteCheck(fieldSystem->saveData)) {
v1->unk_00 = 5;
mapChangeUndergroundData->unk_00 = 5;
} else {
ov5_021E1F7C(v1->unk_20);
ov5_021E1FF4(v1->unk_20);
ov5_021E1F7C(mapChangeUndergroundData->unk_20);
ov5_021E1FF4(mapChangeUndergroundData->unk_20);
if (v1->unk_1C == 0) {
v1->unk_00 = 5;
if (mapChangeUndergroundData->unk_1C == 0) {
mapChangeUndergroundData->unk_00 = 5;
} else {
v1->unk_00 = 6;
mapChangeUndergroundData->unk_00 = 6;
}
}
break;
case 5:
MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan);
Heap_FreeToHeap(v1);
Heap_FreeToHeap(mapChangeUndergroundData);
return 1;
case 6:
sub_0200564C(0, 30);
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
break;
case 7:
if (sub_0205444C(taskMan, 0)) {
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
}
break;
case 8:
sub_02055820(taskMan);
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
break;
case 9:
fieldSystem->mapLoadType = MAP_LOAD_TYPE_UNDERGROUND;
Overlay_LoadByID(FS_OVERLAY_ID(overlay23), 2);
ov23_022499E8(fieldSystem);
sub_020539E8(taskMan, v1->unk_08, -1, v1->unk_10, v1->unk_14, 1);
(v1->unk_00)++;
sub_020539E8(taskMan, mapChangeUndergroundData->unk_08, -1, mapChangeUndergroundData->unk_10, mapChangeUndergroundData->unk_14, 1);
(mapChangeUndergroundData->unk_00)++;
break;
case 10:
if (Sound_CheckFade() != 0) {
@ -1236,20 +1232,20 @@ BOOL sub_02054084(TaskManager *taskMan)
sub_02004234(0);
Sound_ClearSpecialBGM(fieldSystem);
sub_02055868(taskMan);
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
break;
case 11:
if (sub_0205444C(taskMan, 1)) {
ov23_02249A2C();
fieldSystem->unk_6C = ov23_02249404(fieldSystem);
sub_0200AAE0(30, 0, -16, GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_OBJ, 2);
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
}
break;
case 12:
if (sub_0200AC1C(2)) {
ov23_0224DBF4(1);
Heap_FreeToHeap(v1);
Heap_FreeToHeap(mapChangeUndergroundData);
return 1;
}
break;
@ -1258,42 +1254,42 @@ BOOL sub_02054084(TaskManager *taskMan)
return 0;
}
BOOL sub_0205430C(TaskManager *taskMan)
BOOL FieldTask_MapChangeFromUnderground(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053FAC *v1 = TaskManager_Environment(taskMan);
MapChangeUndergroundData *mapChangeUndergroundData = TaskManager_Environment(taskMan);
int v2 = 0;
switch (v1->unk_00) {
switch (mapChangeUndergroundData->unk_00) {
case 0:
ov23_0224DBF4(0);
ov23_02249A5C();
ov23_0224942C(fieldSystem->unk_6C);
sub_0200AAE0(30, -16, 0, GX_BLEND_PLANEMASK_BG0, 2);
v1->unk_00++;
mapChangeUndergroundData->unk_00++;
break;
case 1:
if (sub_0200AC1C(2)) {
if ((fieldSystem->unk_6C == NULL) && !CommSys_IsInitialized()) {
sub_0200564C(0, 30);
v1->unk_00++;
mapChangeUndergroundData->unk_00++;
}
}
break;
case 2:
if (sub_0205444C(taskMan, 2)) {
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
}
break;
case 3:
sub_02055820(taskMan);
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
break;
case 4:
fieldSystem->mapLoadType = MAP_LOAD_TYPE_OVERWORLD;
Overlay_UnloadByID(FS_OVERLAY_ID(overlay23));
sub_020539E8(taskMan, v1->unk_08, -1, v1->unk_10, v1->unk_14, 1);
(v1->unk_00)++;
sub_020539E8(taskMan, mapChangeUndergroundData->unk_08, -1, mapChangeUndergroundData->unk_10, mapChangeUndergroundData->unk_14, 1);
(mapChangeUndergroundData->unk_00)++;
break;
case 5:
if (Sound_CheckFade() != 0) {
@ -1303,15 +1299,15 @@ BOOL sub_0205430C(TaskManager *taskMan)
sub_02004234(0);
Sound_ClearSpecialBGM(fieldSystem);
sub_02055868(taskMan);
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
break;
case 6:
if (sub_0205444C(taskMan, 3)) {
(v1->unk_00)++;
(mapChangeUndergroundData->unk_00)++;
}
break;
case 7:
Heap_FreeToHeap(v1);
Heap_FreeToHeap(mapChangeUndergroundData);
return 1;
break;
}
@ -1319,12 +1315,12 @@ BOOL sub_0205430C(TaskManager *taskMan)
return 0;
}
FieldTask sub_02054428(const FieldSystem *fieldSystem)
FieldTask FieldMapChange_GetMapChangeUndergroundTask(const FieldSystem *fieldSystem)
{
if (fieldSystem->mapLoadType == MAP_LOAD_TYPE_OVERWORLD) {
return sub_02054084;
return FieldTask_MapChangeToUnderground;
} else if (fieldSystem->mapLoadType == MAP_LOAD_TYPE_UNDERGROUND) {
return sub_0205430C;
return FieldTask_MapChangeFromUnderground;
} else {
GF_ASSERT(0);
return NULL;
@ -1334,18 +1330,18 @@ FieldTask sub_02054428(const FieldSystem *fieldSystem)
static BOOL sub_0205444C(TaskManager *taskMan, int param1)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053FAC *v1 = TaskManager_Environment(taskMan);
MapChangeUndergroundData *mapChangeUndergroundData = TaskManager_Environment(taskMan);
BOOL v2 = 0;
switch (v1->unk_04) {
switch (mapChangeUndergroundData->unk_04) {
case 0:
v1->unk_18 = 0;
sub_0205CFDC(fieldSystem, param1, &v1->unk_18);
v1->unk_04++;
mapChangeUndergroundData->unk_18 = 0;
sub_0205CFDC(fieldSystem, param1, &mapChangeUndergroundData->unk_18);
mapChangeUndergroundData->unk_04++;
break;
case 1:
if (v1->unk_18) {
v1->unk_04 = 0;
if (mapChangeUndergroundData->unk_18) {
mapChangeUndergroundData->unk_04 = 0;
v2 = 1;
}
break;
@ -1404,7 +1400,7 @@ static BOOL sub_02054538(TaskManager *taskMan)
switch (*v2) {
case 0:
Sound_TryFadeInBGM(fieldSystem, v3->mapId);
ov5_021E15A8(fieldSystem, 1, &v1->unk_04);
FieldSystem_StartWarpAnimation(fieldSystem, 1, &v1->unk_04);
(*v2)++;
break;
case 1:
@ -1486,7 +1482,7 @@ static BOOL sub_02054648(TaskManager *taskMan)
break;
case 4:
v1->unk_04 = 0;
ov5_021E15A8(fieldSystem, 0, &v1->unk_04);
FieldSystem_StartWarpAnimation(fieldSystem, 0, &v1->unk_04);
(*state)++;
break;
case 5:
@ -1523,62 +1519,62 @@ void sub_02054708(TaskManager *taskMan)
static BOOL sub_02054778(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
UnkStruct_02053900 *v1 = TaskManager_Environment(taskMan);
Location *v2 = &v1->unk_04;
MapChangeData *mapChangeData = TaskManager_Environment(taskMan);
Location *location = &mapChangeData->nextLocation;
switch (v1->unk_00) {
switch (mapChangeData->state) {
case 0:
Sound_PlayEffect(1539);
Sound_TryFadeInBGM(fieldSystem, v2->mapId);
Sound_TryFadeInBGM(fieldSystem, location->mapId);
sub_02055974(taskMan);
(v1->unk_00)++;
(mapChangeData->state)++;
break;
case 1:
sub_020539A0(taskMan, &v1->unk_04);
(v1->unk_00)++;
sub_020539A0(taskMan, &mapChangeData->nextLocation);
(mapChangeData->state)++;
break;
case 2:
if (Sound_CheckFade() != 0) {
break;
}
Sound_PlayMapBGM(fieldSystem, v2->mapId);
Sound_PlayMapBGM(fieldSystem, location->mapId);
sub_02055868(taskMan);
(v1->unk_00)++;
(mapChangeData->state)++;
break;
case 3:
Heap_FreeToHeap(v1);
return 1;
Heap_FreeToHeap(mapChangeData);
return TRUE;
}
return 0;
return FALSE;
}
void sub_02054800(TaskManager *taskMan, int mapId, int param2, int x, int z, int param5)
{
Location v0;
Location nextLocation;
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
Location *v2 = sub_0203A730(SaveData_GetFieldOverworldState(fieldSystem->saveData));
Location *location = sub_0203A730(SaveData_GetFieldOverworldState(fieldSystem->saveData));
Location_SetToPlayerLocation(v2, fieldSystem);
Location_SetToPlayerLocation(location, fieldSystem);
fieldSystem->mapLoadType = MAP_LOAD_TYPE_COLOSSEUM;
UnkStruct_02053900 *v3 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02053900));
MapChangeData *mapChangeData = Heap_AllocFromHeapAtEnd(11, sizeof(MapChangeData));
Location_Set(&v0, mapId, param2, x, z, param5);
Location_Set(&nextLocation, mapId, param2, x, z, param5);
v3->unk_00 = 0;
v3->unk_04 = v0;
mapChangeData->state = 0;
mapChangeData->nextLocation = nextLocation;
FieldTask_Start(taskMan, sub_02054778, v3);
FieldTask_Start(taskMan, sub_02054778, mapChangeData);
}
void sub_02054864(TaskManager *taskMan)
{
FieldSystem *fieldSystem = TaskManager_FieldSystem(taskMan);
Location *v1 = sub_0203A730(SaveData_GetFieldOverworldState(fieldSystem->saveData));
Location *location = sub_0203A730(SaveData_GetFieldOverworldState(fieldSystem->saveData));
fieldSystem->mapLoadType = MAP_LOAD_TYPE_OVERWORLD;
FieldSystem_StartChangeMapTask(fieldSystem->unk_10, v1);
FieldSystem_StartChangeMapTask(fieldSystem->unk_10, location);
}

View File

@ -470,7 +470,7 @@ BOOL FieldInput_Process_UnionRoom(const FieldInput *input, FieldSystem *fieldSys
}
}
if (input->movement && sub_0205DEE4(Field_CurrentTileBehavior(fieldSystem))) {
if (input->movement && TileBehavior_IsWarp(Field_CurrentTileBehavior(fieldSystem))) {
sub_020545EC(fieldSystem);
return TRUE;
}
@ -799,7 +799,7 @@ static BOOL Field_CheckTransition(FieldSystem *fieldSystem, const int playerX, c
sub_02056BDC(fieldSystem, nextMap.mapId, nextMap.unk_04, 0, 0, playerDir, 2);
return TRUE;
} else if (sub_0205DC38(curTileBehavior) == TRUE) {
} else if (TileBehavior_IsEscalator(curTileBehavior) == TRUE) {
int playerDir = PlayerAvatar_GetDir(fieldSystem->playerAvatar);
if (playerDir != DIR_WEST && playerDir != DIR_EAST) {
@ -816,8 +816,8 @@ static BOOL Field_CheckTransition(FieldSystem *fieldSystem, const int playerX, c
return TRUE;
}
if (sub_0205DEE4(curTileBehavior)) {
sub_02053F58(fieldSystem, nextMap.mapId, nextMap.unk_04);
if (TileBehavior_IsWarp(curTileBehavior)) {
FieldSystem_StartMapChangeWarpTask(fieldSystem, nextMap.mapId, nextMap.unk_04);
return TRUE;
}

View File

@ -38,19 +38,19 @@ static const UnkStruct_ov5_021F8C7C Unk_ov5_021F8C7C[] = {
{ ov5_021EA830, NULL, ov5_021EA848, ov5_021EA854 }
};
static int ov5_021D5BC0(FieldSystem *fieldSystem)
static int FieldSystem_GetBottomScreenIndex(FieldSystem *fieldSystem)
{
int v0 = fieldSystem->unk_18;
int fieldBottomScreen = fieldSystem->bottomScreen;
GF_ASSERT(v0 != 0);
GF_ASSERT(v0 < 5);
GF_ASSERT(fieldBottomScreen != 0);
GF_ASSERT(fieldBottomScreen < 5);
return v0 - 1;
return fieldBottomScreen - 1;
}
void ov5_021D5BD8(FieldSystem *fieldSystem)
{
Unk_ov5_021F8C7C[ov5_021D5BC0(fieldSystem)].unk_00(fieldSystem);
Unk_ov5_021F8C7C[FieldSystem_GetBottomScreenIndex(fieldSystem)].unk_00(fieldSystem);
}
BOOL ov5_021D5BF4(FieldSystem *fieldSystem)
@ -59,7 +59,7 @@ BOOL ov5_021D5BF4(FieldSystem *fieldSystem)
BOOL (* v0)(FieldSystem *);
// clang-format on
v0 = Unk_ov5_021F8C7C[ov5_021D5BC0(fieldSystem)].unk_04;
v0 = Unk_ov5_021F8C7C[FieldSystem_GetBottomScreenIndex(fieldSystem)].unk_04;
if (v0 == NULL) {
return 1;
@ -70,12 +70,12 @@ BOOL ov5_021D5BF4(FieldSystem *fieldSystem)
void ov5_021D5C14(FieldSystem *fieldSystem)
{
Unk_ov5_021F8C7C[ov5_021D5BC0(fieldSystem)].unk_08(fieldSystem);
Unk_ov5_021F8C7C[FieldSystem_GetBottomScreenIndex(fieldSystem)].unk_08(fieldSystem);
}
BOOL ov5_021D5C30(FieldSystem *fieldSystem)
{
return Unk_ov5_021F8C7C[ov5_021D5BC0(fieldSystem)].unk_0C(fieldSystem);
return Unk_ov5_021F8C7C[FieldSystem_GetBottomScreenIndex(fieldSystem)].unk_0C(fieldSystem);
}
static void ov5_021D5C4C(FieldSystem *fieldSystem)

View File

@ -127,7 +127,7 @@ static void ov5_021E1470(SysTask *param0, void *param1)
}
}
void ov5_021E15A8(FieldSystem *fieldSystem, BOOL param1, BOOL *param2)
void FieldSystem_StartWarpAnimation(FieldSystem *fieldSystem, BOOL param1, BOOL *param2)
{
UnkStruct_ov5_021E135C *v0 = Heap_AllocFromHeapAtEnd(4, sizeof(UnkStruct_ov5_021E135C));

View File

@ -20,13 +20,13 @@
#include "unk_0205DAC8.h"
#include "unk_02068344.h"
typedef const fx32 (*UnkFuncPtr_02054F44)(const FieldSystem *, const fx32, const fx32, const fx32, u8 *);
typedef BOOL (*UnkFuncPtr_02054F44_1)(const FieldSystem *, const int, const int, u16 *);
typedef const fx32 (*GetTerrainHeightFunc)(const FieldSystem *, const fx32, const fx32, const fx32, u8 *);
typedef BOOL (*GetTerrainAttributeFunc)(const FieldSystem *, const int, const int, u16 *);
typedef struct UnkStruct_02054F44_t {
UnkFuncPtr_02054F44 unk_00;
UnkFuncPtr_02054F44_1 unk_04;
} UnkStruct_02054F44;
typedef struct TerrainCollisionManager_t {
GetTerrainHeightFunc getHeightFunc;
GetTerrainAttributeFunc getAttrFunc;
} TerrainCollisionManager;
static const fx32 sub_02054D0C(const FieldSystem *fieldSystem, const fx32 param1, const fx32 param2, const fx32 param3, u8 *param4);
static const fx32 sub_02054E50(const FieldSystem *fieldSystem, const fx32 param1, const fx32 param2, const fx32 param3, u8 *param4);
@ -34,12 +34,12 @@ static BOOL sub_02054E84(const FieldSystem *fieldSystem, const int param1, const
static BOOL sub_02054EF4(const FieldSystem *fieldSystem, const int param1, const int param2, u16 *param3);
static int sub_02054FD0(const FieldSystem *fieldSystem, const VecFx32 *param1, const int param2, const int param3, u8 *param4);
static const UnkStruct_02054F44 Unk_020EC3D0 = {
static const TerrainCollisionManager Unk_020EC3D0 = {
sub_02054D0C,
sub_02054E84
};
static const UnkStruct_02054F44 Unk_020EC3D8 = {
static const TerrainCollisionManager Unk_020EC3D8 = {
sub_02054E50,
sub_02054EF4
};
@ -261,7 +261,7 @@ static BOOL sub_02054EF4(const FieldSystem *fieldSystem, const int param1, const
}
}
void sub_02054F44(const UnkStruct_02054F44 **param0, int param1)
void sub_02054F44(const TerrainCollisionManager **param0, int param1)
{
if (param1 == 0) {
*param0 = &Unk_020EC3D0;
@ -277,7 +277,7 @@ BOOL FieldSystem_CheckCollision(const FieldSystem *fieldSystem, const int param1
BOOL v0;
u16 v1;
v0 = fieldSystem->unk_5C->unk_04(fieldSystem, param1, param2, &v1);
v0 = fieldSystem->unk_5C->getAttrFunc(fieldSystem, param1, param2, &v1);
if (v0) {
u8 v2;
@ -298,7 +298,7 @@ u8 sub_02054F94(const FieldSystem *fieldSystem, const int param1, const int para
BOOL v0;
u16 v1;
v0 = fieldSystem->unk_5C->unk_04(fieldSystem, param1, param2, &v1);
v0 = fieldSystem->unk_5C->getAttrFunc(fieldSystem, param1, param2, &v1);
if (v0) {
u8 v2;
@ -317,7 +317,7 @@ const fx32 sub_02054FBC(const FieldSystem *fieldSystem, const fx32 param1, const
BOOL v0;
fx32 v1;
v1 = fieldSystem->unk_5C->unk_00(fieldSystem, param1, param2, param3, param4);
v1 = fieldSystem->unk_5C->getHeightFunc(fieldSystem, param1, param2, param3, param4);
return v1;
}

View File

@ -412,7 +412,7 @@ BOOL sub_0205DC2C(u8 param0)
return param0 == 0x6a;
}
BOOL sub_0205DC38(u8 param0)
BOOL TileBehavior_IsEscalator(u8 param0)
{
return param0 == 0x6b;
}
@ -631,7 +631,7 @@ BOOL sub_0205DED8(u8 param0)
return param0 == 0x43;
}
BOOL sub_0205DEE4(u8 param0)
BOOL TileBehavior_IsWarp(u8 param0)
{
return param0 == 0x67;
}

View File

@ -390,7 +390,7 @@ static void sub_02068710(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
sub_020509D4(fieldSystem);
v1->unk_22C = sub_02054084;
v1->unk_22C = FieldTask_MapChangeToUnderground;
v1->unk_25C = sub_02053FAC(fieldSystem);
v1->state = FIELD_MENU_STATE_10;
@ -402,7 +402,7 @@ static BOOL sub_02068750(UnkStruct_02068870 *param0)
void *v0 = sub_02053FAC(param0->fieldSystem);
MapObjectMan_PauseAllMovement(param0->fieldSystem->mapObjMan);
FieldTask_Set(param0->fieldSystem, sub_02054084, v0);
FieldTask_Set(param0->fieldSystem, FieldTask_MapChangeToUnderground, v0);
param0->fieldSystem->unk_90 = 0;
return 0;