From 3f8301106c03d2fdcc9521ae79916042cdaa207c Mon Sep 17 00:00:00 2001 From: Kuruyia Date: Tue, 4 Feb 2025 20:50:58 +0100 Subject: [PATCH] Document BDHC file loading This documents the loading of BDHC files that are embedded in files of the land data NARC. Credits goes to Mikelan98, HiroTDK and HumanGamer for their resources (listed below). It would have been a lot more painful having to reverse this file format. Resources used: * https://hirotdk.neocities.org/FileSpecs#Terrain * https://www.pokecommunity.com/threads/i-solved-the-final-piece-of-the-terrain-bdhc-files-in-gen-4-inclines.424428/ Signed-off-by: Kuruyia --- include/constants/bdhc.h | 8 + include/overlay005/bdhc.h | 35 ++ include/overlay005/bdhc_loader.h | 18 + include/overlay005/ov5_021E779C.h | 4 +- include/overlay005/ov5_021EEC68.h | 4 +- include/overlay005/ov5_021EEF34.h | 17 - include/overlay005/struct_ov5_021EEC68.h | 9 - include/overlay005/struct_ov5_021EED38.h | 10 - include/overlay005/struct_ov5_021EF13C.h | 21 -- include/overlay005/struct_ov5_021EF13C_decl.h | 6 - include/overlay005/struct_ov5_021EF13C_sub1.h | 11 - platinum.us/main.lsf | 2 +- src/meson.build | 2 +- src/overlay005/bdhc_loader.c | 269 +++++++++++++++ src/overlay005/ov5_021E779C.c | 44 +-- src/overlay005/ov5_021EEC68.c | 76 +++-- src/overlay005/ov5_021EEF34.c | 307 ------------------ src/unk_02054D00.c | 4 +- 18 files changed, 397 insertions(+), 450 deletions(-) create mode 100644 include/constants/bdhc.h create mode 100644 include/overlay005/bdhc.h create mode 100644 include/overlay005/bdhc_loader.h delete mode 100644 include/overlay005/ov5_021EEF34.h delete mode 100644 include/overlay005/struct_ov5_021EEC68.h delete mode 100644 include/overlay005/struct_ov5_021EED38.h delete mode 100644 include/overlay005/struct_ov5_021EF13C.h delete mode 100644 include/overlay005/struct_ov5_021EF13C_decl.h delete mode 100644 include/overlay005/struct_ov5_021EF13C_sub1.h create mode 100644 src/overlay005/bdhc_loader.c delete mode 100644 src/overlay005/ov5_021EEF34.c diff --git a/include/constants/bdhc.h b/include/constants/bdhc.h new file mode 100644 index 0000000000..b8699abeb0 --- /dev/null +++ b/include/constants/bdhc.h @@ -0,0 +1,8 @@ +#ifndef POKEPLATINUM_CONSTANTS_BDHC_H +#define POKEPLATINUM_CONSTANTS_BDHC_H + +#define BDHC_BUFFER_SIZE 0x9000 + +#define BDHC_MAGIC_LENGTH 4 + +#endif // POKEPLATINUM_CONSTANTS_BDHC_H diff --git a/include/overlay005/bdhc.h b/include/overlay005/bdhc.h new file mode 100644 index 0000000000..85a87f5c09 --- /dev/null +++ b/include/overlay005/bdhc.h @@ -0,0 +1,35 @@ +#ifndef POKEPLATINUM_OV5_BDHC_H +#define POKEPLATINUM_OV5_BDHC_H + +#include + +typedef struct BDHCPlate { + u16 firstPointIndex; + u16 secondPointIndex; + u16 normalIndex; + u16 heightIndex; +} BDHCPlate; + +typedef struct BDHCPoint { + fx32 x; + fx32 y; +} BDHCPoint; + +typedef struct BDHCStrip { + fx32 lowerBound; + u16 accessListElementCount; + u16 accessListStartIndex; +} BDHCStrip; + +typedef struct BDHC { + BDHCPlate *plates; + fx32 *heights; + BDHCStrip *strips; + u16 *accessList; + BDHCPoint *points; + VecFx32 *slopes; + BOOL loaded; + int stripsSize; +} BDHC; + +#endif // POKEPLATINUM_OV5_BDHC_H diff --git a/include/overlay005/bdhc_loader.h b/include/overlay005/bdhc_loader.h new file mode 100644 index 0000000000..a03da6a2d9 --- /dev/null +++ b/include/overlay005/bdhc_loader.h @@ -0,0 +1,18 @@ +#ifndef POKEPLATINUM_OV5_BDHC_LOADER_H +#define POKEPLATINUM_OV5_BDHC_LOADER_H + +#include "overlay005/bdhc.h" + +#include "narc.h" +#include "sys_task_manager.h" + +void BDHCLoader_Load(NARC *narc, const int bdhcSize, BDHC *bdhc, u8 *buffer); +SysTask *BDHCLoader_StartTask(NARC *landDataNARC, const int param1, BDHC *bdhc, int *param3, u8 **buffer, int *param5); +void BDHCLoader_ForceExitTask(SysTask *sysTask); +void BDHCLoader_MarkBDHCNotLoaded(BDHC *bdhc); + +BDHC *BDHC_New(void); +void BDHC_Free(BDHC *bdhc); +void BDHC_Reset(BDHC *bdhc); + +#endif // POKEPLATINUM_OV5_BDHC_LOADER_H diff --git a/include/overlay005/ov5_021E779C.h b/include/overlay005/ov5_021E779C.h index b67c45e563..f7ffc7bf20 100644 --- a/include/overlay005/ov5_021E779C.h +++ b/include/overlay005/ov5_021E779C.h @@ -4,12 +4,12 @@ #include #include "field/field_system_decl.h" +#include "overlay005/bdhc.h" #include "overlay005/funcptr_ov5_021E9630.h" #include "overlay005/struct_ov5_021D3CAC_decl.h" #include "overlay005/struct_ov5_021D5894.h" #include "overlay005/struct_ov5_021E1608_decl.h" #include "overlay005/struct_ov5_021E8F60_decl.h" -#include "overlay005/struct_ov5_021EF13C_decl.h" #include "overlay005/struct_ov5_021EF76C_decl.h" #include "map_matrix.h" @@ -33,7 +33,7 @@ u8 ov5_021E935C(const u32 param0, const int param1); u8 ov5_021E9390(const int param0, const u8 param1, const UnkStruct_ov5_021E8F60 *param2); int ov5_021E9560(const UnkStruct_ov5_021E8F60 *param0, const u8 param1); BOOL ov5_021E9580(const UnkStruct_ov5_021E8F60 *param0, const int param1, const int param2, u8 *param3); -const UnkStruct_ov5_021EF13C *ov5_021E9610(const UnkStruct_ov5_021E8F60 *param0, const u8 param1); +const BDHC *ov5_021E9610(const UnkStruct_ov5_021E8F60 *param0, const u8 param1); u16 const *ov5_021E9624(const UnkStruct_ov5_021E8F60 *param0, const u8 param1); void ov5_021E9630(UnkStruct_ov5_021E8F60 *param0, UnkFuncPtr_ov5_021E9630 param1, void *param2); NARC *ov5_021E9828(UnkStruct_ov5_021E8F60 *param0); diff --git a/include/overlay005/ov5_021EEC68.h b/include/overlay005/ov5_021EEC68.h index b15579f074..abb484e15b 100644 --- a/include/overlay005/ov5_021EEC68.h +++ b/include/overlay005/ov5_021EEC68.h @@ -1,8 +1,8 @@ #ifndef POKEPLATINUM_OV5_021EEC68_H #define POKEPLATINUM_OV5_021EEC68_H -#include "overlay005/struct_ov5_021EF13C_decl.h" +#include "overlay005/bdhc.h" -BOOL ov5_021EED9C(const fx32 param0, const fx32 param1, const fx32 param2, const UnkStruct_ov5_021EF13C *param3, fx32 *param4); +BOOL ov5_021EED9C(const fx32 param0, const fx32 param1, const fx32 param2, const BDHC *param3, fx32 *param4); #endif // POKEPLATINUM_OV5_021EEC68_H diff --git a/include/overlay005/ov5_021EEF34.h b/include/overlay005/ov5_021EEF34.h deleted file mode 100644 index 0f03c05d0b..0000000000 --- a/include/overlay005/ov5_021EEF34.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef POKEPLATINUM_OV5_021EEF34_H -#define POKEPLATINUM_OV5_021EEF34_H - -#include "overlay005/struct_ov5_021EF13C_decl.h" - -#include "narc.h" -#include "sys_task_manager.h" - -UnkStruct_ov5_021EF13C *ov5_021EF13C(void); -void ov5_021EF158(NARC *param0, const int param1, UnkStruct_ov5_021EF13C *param2, u8 *param3); -void ov5_021EF1D0(UnkStruct_ov5_021EF13C *param0); -void ov5_021EF1DC(UnkStruct_ov5_021EF13C *param0); -SysTask *ov5_021EF1F0(NARC *param0, const int param1, UnkStruct_ov5_021EF13C *param2, int *param3, u8 **param4, int *param5); -void ov5_021EF23C(SysTask *param0); -void ov5_021EF248(UnkStruct_ov5_021EF13C *param0); - -#endif // POKEPLATINUM_OV5_021EEF34_H diff --git a/include/overlay005/struct_ov5_021EEC68.h b/include/overlay005/struct_ov5_021EEC68.h deleted file mode 100644 index 17cce26c3e..0000000000 --- a/include/overlay005/struct_ov5_021EEC68.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV5_021EEC68_H -#define POKEPLATINUM_STRUCT_OV5_021EEC68_H - -typedef struct UnkStruct_ov5_021EEC68_t { - fx32 unk_00; - fx32 unk_04; -} UnkStruct_ov5_021EEC68; - -#endif // POKEPLATINUM_STRUCT_OV5_021EEC68_H diff --git a/include/overlay005/struct_ov5_021EED38.h b/include/overlay005/struct_ov5_021EED38.h deleted file mode 100644 index d54c6d0f9f..0000000000 --- a/include/overlay005/struct_ov5_021EED38.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV5_021EED38_H -#define POKEPLATINUM_STRUCT_OV5_021EED38_H - -typedef struct UnkStruct_ov5_021EED38_t { - fx32 unk_00; - u16 unk_04; - u16 unk_06; -} UnkStruct_ov5_021EED38; - -#endif // POKEPLATINUM_STRUCT_OV5_021EED38_H diff --git a/include/overlay005/struct_ov5_021EF13C.h b/include/overlay005/struct_ov5_021EF13C.h deleted file mode 100644 index 4257774e94..0000000000 --- a/include/overlay005/struct_ov5_021EF13C.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV5_021EF13C_H -#define POKEPLATINUM_STRUCT_OV5_021EF13C_H - -#include - -#include "overlay005/struct_ov5_021EEC68.h" -#include "overlay005/struct_ov5_021EED38.h" -#include "overlay005/struct_ov5_021EF13C_sub1.h" - -typedef struct UnkStruct_ov5_021EF13C_t { - UnkStruct_ov5_021EF13C_sub1 *unk_00; - fx32 *unk_04; - UnkStruct_ov5_021EED38 *unk_08; - u16 *unk_0C; - UnkStruct_ov5_021EEC68 *unk_10; - VecFx32 *unk_14; - BOOL unk_18; - int unk_1C; -} UnkStruct_ov5_021EF13C; - -#endif // POKEPLATINUM_STRUCT_OV5_021EF13C_H diff --git a/include/overlay005/struct_ov5_021EF13C_decl.h b/include/overlay005/struct_ov5_021EF13C_decl.h deleted file mode 100644 index b29e22d7ad..0000000000 --- a/include/overlay005/struct_ov5_021EF13C_decl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV5_021EF13C_DECL_H -#define POKEPLATINUM_STRUCT_OV5_021EF13C_DECL_H - -typedef struct UnkStruct_ov5_021EF13C_t UnkStruct_ov5_021EF13C; - -#endif // POKEPLATINUM_STRUCT_OV5_021EF13C_DECL_H diff --git a/include/overlay005/struct_ov5_021EF13C_sub1.h b/include/overlay005/struct_ov5_021EF13C_sub1.h deleted file mode 100644 index 6af6542567..0000000000 --- a/include/overlay005/struct_ov5_021EF13C_sub1.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV5_021EF13C_SUB1_H -#define POKEPLATINUM_STRUCT_OV5_021EF13C_SUB1_H - -typedef struct { - u16 unk_00; - u16 unk_02; - u16 unk_04; - u16 unk_06; -} UnkStruct_ov5_021EF13C_sub1; - -#endif // POKEPLATINUM_STRUCT_OV5_021EF13C_SUB1_H diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index 90e98bd758..5ffa344958 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -509,7 +509,7 @@ Overlay overlay5 Object main.nef.p/src_overlay005_ov5_021EE7D4.c.o Object main.nef.p/src_overlay005_ov5_021EEAC8.c.o Object main.nef.p/src_overlay005_ov5_021EEC68.c.o - Object main.nef.p/src_overlay005_ov5_021EEF34.c.o + Object main.nef.p/src_overlay005_bdhc_loader.c.o Object main.nef.p/src_overlay005_ov5_021EF250.c.o Object main.nef.p/src_overlay005_hblank_system.c.o Object main.nef.p/src_overlay005_ov5_021EF4BC.c.o diff --git a/src/meson.build b/src/meson.build index 64add46438..580c8c2e31 100644 --- a/src/meson.build +++ b/src/meson.build @@ -402,7 +402,7 @@ pokeplatinum_c = files( 'overlay005/ov5_021EE7D4.c', 'overlay005/ov5_021EEAC8.c', 'overlay005/ov5_021EEC68.c', - 'overlay005/ov5_021EEF34.c', + 'overlay005/bdhc_loader.c', 'overlay005/ov5_021EF250.c', 'overlay005/hblank_system.c', 'overlay005/ov5_021EF4BC.c', diff --git a/src/overlay005/bdhc_loader.c b/src/overlay005/bdhc_loader.c new file mode 100644 index 0000000000..a79d9e00c7 --- /dev/null +++ b/src/overlay005/bdhc_loader.c @@ -0,0 +1,269 @@ +#include "overlay005/bdhc_loader.h" + +#include +#include + +#include "constants/bdhc.h" +#include "constants/heap.h" + +#include "overlay005/bdhc.h" + +#include "heap.h" +#include "narc.h" +#include "sys_task.h" +#include "sys_task_manager.h" + +enum BDHCSubTask { + BDHC_LOADER_SUBTASK_PREPARE_FILE_LOAD = 0, + BDHC_LOADER_SUBTASK_LOAD_FILE, + BDHC_LOADER_SUBTASK_END_TASK, +}; + +typedef struct { + int pointsSize; + int slopesSize; + int heightsSize; + int platesSize; + int stripsSize; + int accessListSize; +} BDHCHeader; + +typedef struct { + FSFile unk_00; + int unk_AC; + BDHCHeader bdhcHeader; + BOOL unk_C8; + u8 currentSubTask; + u8 *buffer; + BDHC *bdhc; + BOOL forceExit; + int *unk_DC; + NARC *landDataNARC; + int unk_E4; + int *unk_E8; +} BDHCLoaderTaskContext; + +static void BDHCLoader_PrepareBuffers(const BDHCHeader *bdhcHeader, BDHC *bdhc, void **buffer); +static void BDHCLoader_LoadPoints(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader); +static void BDHCLoader_LoadSlopes(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader); +static void BDHCLoader_LoadHeights(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader); +static void BDHCLoader_LoadPlates(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader); +static void BDHCLoader_LoadStrips(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader); +static void BDHCLoader_LoadAccessList(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader); + +static void BDHCLoader_LoadHeader(NARC *narc, BDHCHeader *bdhcHeader) +{ + u16 magic[BDHC_MAGIC_LENGTH]; + + MI_CpuClear32(bdhcHeader, sizeof(BDHCHeader)); + + NARC_ReadFile(narc, BDHC_MAGIC_LENGTH, magic); + NARC_ReadFile(narc, 2, &bdhcHeader->pointsSize); + NARC_ReadFile(narc, 2, &bdhcHeader->slopesSize); + NARC_ReadFile(narc, 2, &bdhcHeader->heightsSize); + NARC_ReadFile(narc, 2, &bdhcHeader->platesSize); + NARC_ReadFile(narc, 2, &bdhcHeader->stripsSize); + NARC_ReadFile(narc, 2, &bdhcHeader->accessListSize); +} + +static void BDHCLoader_PrepareBuffers(const BDHCHeader *bdhcHeader, BDHC *bdhc, void **buffer) +{ + void *ptr; + int offset = 0; + + ptr = (u8 *)*buffer; + bdhc->points = ptr; + offset += (sizeof(BDHCPoint) * bdhcHeader->pointsSize); + + ptr = (u8 *)*buffer + offset; + bdhc->slopes = ptr; + offset += (sizeof(VecFx32) * bdhcHeader->slopesSize); + + ptr = (u8 *)*buffer + offset; + bdhc->heights = ptr; + offset += (sizeof(fx32) * bdhcHeader->heightsSize); + + ptr = (u8 *)*buffer + offset; + bdhc->plates = ptr; + offset += (sizeof(BDHCPlate) * bdhcHeader->platesSize); + + ptr = (u8 *)*buffer + offset; + bdhc->strips = ptr; + offset += sizeof(BDHCStrip) * bdhcHeader->stripsSize; + + ptr = (u8 *)*buffer + offset; + bdhc->accessList = ptr; + offset += sizeof(u16) * bdhcHeader->accessListSize; + + GF_ASSERT(offset <= BDHC_BUFFER_SIZE); +} + +static void BDHCLoader_LoadPoints(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader) +{ + NARC_ReadFile(narc, sizeof(BDHCPoint) * bdhcHeader->pointsSize, bdhc->points); +} + +static void BDHCLoader_LoadSlopes(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader) +{ + NARC_ReadFile(narc, sizeof(VecFx32) * bdhcHeader->slopesSize, bdhc->slopes); +} + +static void BDHCLoader_LoadHeights(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader) +{ + NARC_ReadFile(narc, sizeof(fx32) * bdhcHeader->heightsSize, bdhc->heights); +} + +static void BDHCLoader_LoadPlates(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader) +{ + NARC_ReadFile(narc, sizeof(BDHCPlate) * bdhcHeader->platesSize, bdhc->plates); +} + +static void BDHCLoader_LoadStrips(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader) +{ + NARC_ReadFile(narc, sizeof(BDHCStrip) * bdhcHeader->stripsSize, bdhc->strips); +} + +static void BDHCLoader_LoadAccessList(NARC *narc, BDHC *bdhc, const BDHCHeader *bdhcHeader) +{ + NARC_ReadFile(narc, sizeof(u16) * bdhcHeader->accessListSize, bdhc->accessList); +} + +static void BDHCLoader_RunTask(SysTask *sysTask, void *sysTaskParam) +{ + BOOL subTaskCompleted; + BDHCLoaderTaskContext *ctx = (BDHCLoaderTaskContext *)sysTaskParam; + + if (ctx->forceExit == TRUE) { + ctx->currentSubTask = BDHC_LOADER_SUBTASK_END_TASK; + } + + switch (ctx->currentSubTask) { + case BDHC_LOADER_SUBTASK_PREPARE_FILE_LOAD: + if (*ctx->unk_E8) { + subTaskCompleted = FALSE; + break; + } + + BDHCLoader_LoadHeader(ctx->landDataNARC, &ctx->bdhcHeader); + ctx->bdhc->stripsSize = ctx->bdhcHeader.stripsSize; + BDHCLoader_PrepareBuffers(&ctx->bdhcHeader, ctx->bdhc, (void **)&ctx->buffer); + + subTaskCompleted = TRUE; + break; + + case BDHC_LOADER_SUBTASK_LOAD_FILE: + BDHCLoader_LoadPoints(ctx->landDataNARC, ctx->bdhc, &ctx->bdhcHeader); + BDHCLoader_LoadSlopes(ctx->landDataNARC, ctx->bdhc, &ctx->bdhcHeader); + BDHCLoader_LoadHeights(ctx->landDataNARC, ctx->bdhc, &ctx->bdhcHeader); + BDHCLoader_LoadPlates(ctx->landDataNARC, ctx->bdhc, &ctx->bdhcHeader); + BDHCLoader_LoadStrips(ctx->landDataNARC, ctx->bdhc, &ctx->bdhcHeader); + BDHCLoader_LoadAccessList(ctx->landDataNARC, ctx->bdhc, &ctx->bdhcHeader); + + subTaskCompleted = TRUE; + break; + + case BDHC_LOADER_SUBTASK_END_TASK: + *ctx->unk_DC = 0; + + Heap_FreeToHeap((void *)sysTaskParam); + SysTask_Done(sysTask); + + return; + } + + if (subTaskCompleted == TRUE) { + ctx->currentSubTask++; + + if (ctx->currentSubTask == BDHC_LOADER_SUBTASK_END_TASK) { + ctx->bdhc->loaded = TRUE; + } + } +} + +BDHC *BDHC_New(void) +{ + BDHC *bdhc = Heap_AllocFromHeap(HEAP_ID_FIELD, sizeof(BDHC)); + + bdhc->points = NULL; + bdhc->slopes = NULL; + bdhc->plates = NULL; + bdhc->strips = NULL; + bdhc->accessList = NULL; + bdhc->accessList = NULL; + bdhc->loaded = FALSE; + bdhc->stripsSize = 0; + + return bdhc; +} + +void BDHCLoader_Load(NARC *narc, const int bdhcSize, BDHC *bdhc, u8 *buffer) +{ + BDHCHeader *bdhcHeader = Heap_AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(BDHCHeader)); + + BDHCLoader_LoadHeader(narc, bdhcHeader); + bdhc->stripsSize = bdhcHeader->stripsSize; + BDHCLoader_PrepareBuffers(bdhcHeader, bdhc, (void **)&buffer); + + BDHCLoader_LoadPoints(narc, bdhc, bdhcHeader); + BDHCLoader_LoadSlopes(narc, bdhc, bdhcHeader); + BDHCLoader_LoadHeights(narc, bdhc, bdhcHeader); + BDHCLoader_LoadPlates(narc, bdhc, bdhcHeader); + BDHCLoader_LoadStrips(narc, bdhc, bdhcHeader); + BDHCLoader_LoadAccessList(narc, bdhc, bdhcHeader); + + Heap_FreeToHeap(bdhcHeader); + bdhc->loaded = TRUE; +} + +void BDHC_Free(BDHC *bdhc) +{ + if (bdhc == NULL) { + return; + } + + Heap_FreeToHeap(bdhc); + bdhc = NULL; +} + +void BDHC_Reset(BDHC *bdhc) +{ + if (bdhc == NULL) { + return; + } + + bdhc->loaded = FALSE; + bdhc->points = NULL; + bdhc->slopes = NULL; + bdhc->plates = NULL; + bdhc->strips = NULL; + bdhc->accessList = NULL; +} + +SysTask *BDHCLoader_StartTask(NARC *landDataNARC, const int param1, BDHC *bdhc, int *param3, u8 **buffer, int *param5) +{ + BDHCLoaderTaskContext *ctx = Heap_AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(BDHCLoaderTaskContext)); + + ctx->currentSubTask = BDHC_LOADER_SUBTASK_PREPARE_FILE_LOAD; + ctx->landDataNARC = landDataNARC; + ctx->unk_E4 = param1; + ctx->bdhc = bdhc; + ctx->unk_DC = param3; + ctx->forceExit = FALSE; + ctx->unk_C8 = FALSE; + ctx->unk_AC = 0; + ctx->buffer = *buffer; + ctx->unk_E8 = param5; + + return SysTask_Start(BDHCLoader_RunTask, (void *)ctx, 1); +} + +void BDHCLoader_ForceExitTask(SysTask *sysTask) +{ + BDHCLoaderTaskContext *ctx = SysTask_GetParam(sysTask); + ctx->forceExit = TRUE; +} + +void BDHCLoader_MarkBDHCNotLoaded(BDHC *bdhc) +{ + bdhc->loaded = FALSE; +} diff --git a/src/overlay005/ov5_021E779C.c b/src/overlay005/ov5_021E779C.c index e5a271679e..1578dce951 100644 --- a/src/overlay005/ov5_021E779C.c +++ b/src/overlay005/ov5_021E779C.c @@ -4,17 +4,17 @@ #include #include "field/field_system.h" +#include "overlay005/bdhc.h" +#include "overlay005/bdhc_loader.h" #include "overlay005/funcptr_ov5_021E9630.h" #include "overlay005/ov5_021D521C.h" #include "overlay005/ov5_021E15F4.h" #include "overlay005/ov5_021EEAC8.h" -#include "overlay005/ov5_021EEF34.h" #include "overlay005/ov5_021EF75C.h" #include "overlay005/struct_ov5_021D3CAC_decl.h" #include "overlay005/struct_ov5_021D5894.h" #include "overlay005/struct_ov5_021E1608_decl.h" #include "overlay005/struct_ov5_021EEB48_decl.h" -#include "overlay005/struct_ov5_021EF13C_decl.h" #include "overlay005/struct_ov5_021EF76C_decl.h" #include "easy3d.h" @@ -35,8 +35,8 @@ typedef struct { u16 unk_00[1024]; NNSG3dRenderObj unk_800; NNSG3dResFileHeader *unk_854; - u8 *unk_858; - UnkStruct_ov5_021EF13C *unk_85C; + u8 *bdhcBuffer; + BDHC *bdhc; int unk_860; BOOL unk_864; UnkStruct_ov5_021E1608 *unk_868; @@ -215,7 +215,7 @@ static void ov5_021E77E4(UnkStruct_ov5_021E8F60 *param0, const u8 param1) } if (param0->unk_04[param1].unk_00.unk_10.unk_04 != 0) { - ov5_021EF23C(param0->unk_04[param1].unk_00.unk_0C); + BDHCLoader_ForceExitTask(param0->unk_04[param1].unk_00.unk_0C); } param0->unk_04[param1].unk_00.unk_24 = 1; @@ -228,7 +228,7 @@ static void ov5_021E7814(UnkStruct_ov5_021E7814 *param0) } if (param0->unk_10.unk_04 != 0) { - ov5_021EF23C(param0->unk_0C); + BDHCLoader_ForceExitTask(param0->unk_0C); } param0->unk_10.unk_00 = 0; @@ -356,7 +356,7 @@ static void ov5_021E79A8(UnkStruct_ov5_021E8F60 *param0) param0->unk_84[v0]->unk_864 = 0; ov5_021EEB84(v0, param0->unk_00, (void **)&(param0->unk_84[v0]->unk_854)); - ov5_021EEB90(v0, param0->unk_00, (void **)&(param0->unk_84[v0]->unk_858)); + ov5_021EEB90(v0, param0->unk_00, (void **)&(param0->unk_84[v0]->bdhcBuffer)); if (param0->unk_FC == 0) { param0->unk_84[v0]->unk_868 = ov5_021E15F4(4); @@ -500,7 +500,7 @@ static void ov5_021E7C00(const u8 param0, UnkStruct_ov5_021EF76C *const param1, { param6->unk_10.unk_04++; - param6->unk_0C = ov5_021EF1F0(param5->unk_EC, v3.unk_08, param6->unk_00[param0]->unk_85C, ¶m6->unk_10.unk_04, ¶m6->unk_00[param0]->unk_858, ¶m6->unk_10.unk_00); + param6->unk_0C = BDHCLoader_StartTask(param5->unk_EC, v3.unk_08, param6->unk_00[param0]->bdhc, ¶m6->unk_10.unk_04, ¶m6->unk_00[param0]->bdhcBuffer, ¶m6->unk_10.unk_00); } } @@ -610,7 +610,7 @@ static void ov5_021E7E28(const int param0, const u8 param1, UnkStruct_ov5_021EF7 } { - ov5_021EF158(param7->unk_EC, v2.unk_08, param7->unk_84[param1]->unk_85C, param7->unk_84[param1]->unk_858); + BDHCLoader_Load(param7->unk_EC, v2.unk_08, param7->unk_84[param1]->bdhc, param7->unk_84[param1]->bdhcBuffer); } param7->unk_84[param1]->unk_860 = param0; @@ -691,7 +691,7 @@ static void ov5_021E7FF0(const int param0, const u8 param1, UnkStruct_ov5_021EF7 NARC_Seek(param7->unk_EC, v1.unk_04); { - ov5_021EF158(param7->unk_EC, v1.unk_08, param7->unk_84[param1]->unk_85C, param7->unk_84[param1]->unk_858); + BDHCLoader_Load(param7->unk_EC, v1.unk_08, param7->unk_84[param1]->bdhc, param7->unk_84[param1]->bdhcBuffer); } param7->unk_84[param1]->unk_860 = param0; @@ -943,7 +943,7 @@ static void ov5_021E8558(const int param0, const int param1, const u8 param2, co static void ov5_021E8614(const u8 param0, UnkStruct_ov5_021E8F60 *param1) { param1->unk_84[param0]->unk_864 = 0; - ov5_021EF1DC(param1->unk_84[param0]->unk_85C); + BDHC_Reset(param1->unk_84[param0]->bdhc); if (param1->unk_84[param0]->unk_868 != NULL) { ov5_021E1610( @@ -1441,9 +1441,9 @@ static void ov5_021E8E28(UnkStruct_ov5_021E8F60 *param0, const int param1, const ov5_021E7838(param0->unk_F8, param1, param2, param3, param4, param0->unk_B4, param0->unk_B8, param5, v1); for (v0 = 0; v0 < 4; v0++) { - param0->unk_84[v0]->unk_85C = ov5_021EF13C(); + param0->unk_84[v0]->bdhc = BDHC_New(); - ov5_021EF248(param0->unk_84[v0]->unk_85C); + BDHCLoader_MarkBDHCNotLoaded(param0->unk_84[v0]->bdhc); ov5_021E7E28(v1[v0], v0, param0->unk_AC, param0->unk_B0, param0->unk_B4, param0->unk_B8, ov5_021EFAC0(param0->unk_AC), param0); } } @@ -1457,7 +1457,7 @@ static void ov5_021E8ECC(UnkStruct_ov5_021E8F60 *param0, const int param1, const ov5_021E7838(param0->unk_F8, param1, param2, param3, param4, param0->unk_B4, param0->unk_B8, param5, v1); for (v0 = 0; v0 < 4; v0++) { - param0->unk_84[v0]->unk_85C = NULL; + param0->unk_84[v0]->bdhc = NULL; ov5_021E7F1C(v1[v0], v0, param0->unk_AC, param0->unk_B0, param0->unk_B4, param0->unk_B8, ov5_021EFAC0(param0->unk_AC), param0); } } @@ -1628,7 +1628,7 @@ void ov5_021E924C(UnkStruct_ov5_021E8F60 *param0) for (v0 = 0; v0 < 4; v0++) { param0->unk_84[v0]->unk_864 = 0; - ov5_021EF1D0(param0->unk_84[v0]->unk_85C); + BDHC_Free(param0->unk_84[v0]->bdhc); if (param0->unk_84[v0]->unk_868 != NULL) { ov5_021E1608(param0->unk_84[v0]->unk_868); @@ -1813,9 +1813,9 @@ BOOL ov5_021E9580(const UnkStruct_ov5_021E8F60 *param0, const int param1, const } } -const UnkStruct_ov5_021EF13C *ov5_021E9610(const UnkStruct_ov5_021E8F60 *param0, const u8 param1) +const BDHC *ov5_021E9610(const UnkStruct_ov5_021E8F60 *param0, const u8 param1) { - return param0->unk_84[param1]->unk_85C; + return param0->unk_84[param1]->bdhc; } u16 const *ov5_021E9624(const UnkStruct_ov5_021E8F60 *param0, const u8 param1) @@ -2085,7 +2085,7 @@ static void ov5_021E9A14(UnkStruct_ov5_021E8F60 *param0, const int param1, const ov5_021E7838(param0->unk_F8, param1, param2, param0->unk_100, param0->unk_108, param0->unk_B4, param0->unk_B8, param5, v1); for (v0 = 0; v0 < 4; v0++) { - param0->unk_84[v0]->unk_85C = NULL; + param0->unk_84[v0]->bdhc = NULL; ov5_021E9B70(v1[v0], v0, param0->unk_AC, param0->unk_B0, param0->unk_B4, param0->unk_B8, ov5_021EFAC0(param0->unk_AC), param0); } } @@ -2104,7 +2104,7 @@ void ov5_021E9AAC(UnkStruct_ov5_021E8F60 *param0, const int param1, const int pa void ov5_021E9B10(UnkStruct_ov5_021E8F60 *param0, int param1, int param2) { - param0->unk_84[param1]->unk_85C = NULL; + param0->unk_84[param1]->bdhc = NULL; ov5_021E9B70(param2, param1, param0->unk_AC, param0->unk_B0, param0->unk_B4, param0->unk_B8, ov5_021EFAC0(param0->unk_AC), param0); param0->unk_84[param1]->unk_864 = 0; } @@ -2234,7 +2234,7 @@ void ov5_021E9D3C(MapMatrix *param0, UnkStruct_ov5_021EF76C *param1, UnkStruct_o for (v0 = 0; v0 < 4; v0++) { v1[v0] = param3->unk_84[v0]->unk_860; - ov5_021EF248(param3->unk_84[v0]->unk_85C); + BDHCLoader_MarkBDHCNotLoaded(param3->unk_84[v0]->bdhc); } for (v0 = 0; v0 < 4; v0++) { @@ -2481,12 +2481,12 @@ void ov5_021EA5E0(UnkStruct_ov5_021E8F60 *param0, int param1, int param2) { param0->unk_84[param1]->unk_864 = 0; ov5_021EEB84(param1, param0->unk_00, (void **)&(param0->unk_84[param1]->unk_854)); - ov5_021EEB90(param1, param0->unk_00, (void **)&(param0->unk_84[param1]->unk_858)); + ov5_021EEB90(param1, param0->unk_00, (void **)&(param0->unk_84[param1]->bdhcBuffer)); param0->unk_84[param1]->unk_860 = -1; MI_CpuFillFast(param0->unk_84[param1]->unk_00, 0xffffffff, 2 * 32 * 32); - ov5_021EF248(param0->unk_84[param1]->unk_85C); + BDHCLoader_MarkBDHCNotLoaded(param0->unk_84[param1]->bdhc); ov5_021E7E28(param2, param1, param0->unk_AC, param0->unk_B0, param0->unk_B4, param0->unk_B8, ov5_021EFAC0(param0->unk_AC), param0); } diff --git a/src/overlay005/ov5_021EEC68.c b/src/overlay005/ov5_021EEC68.c index 5b529a49da..f77e75e24c 100644 --- a/src/overlay005/ov5_021EEC68.c +++ b/src/overlay005/ov5_021EEC68.c @@ -3,56 +3,54 @@ #include #include -#include "overlay005/struct_ov5_021EEC68.h" +#include "overlay005/bdhc.h" #include "overlay005/struct_ov5_021EED20.h" -#include "overlay005/struct_ov5_021EED38.h" -#include "overlay005/struct_ov5_021EF13C.h" #include "fx_util.h" -static BOOL ov5_021EED38(const UnkStruct_ov5_021EED38 *param0, const u16 param1, const fx32 param2, u16 *param3); +static BOOL ov5_021EED38(const BDHCStrip *param0, const u16 param1, const fx32 param2, u16 *param3); -static BOOL ov5_021EEC68(const UnkStruct_ov5_021EEC68 *param0, const UnkStruct_ov5_021EEC68 *param1, const UnkStruct_ov5_021EEC68 *param2) +static BOOL ov5_021EEC68(const BDHCPoint *param0, const BDHCPoint *param1, const BDHCPoint *param2) { const fx32 *v0, *v1, *v2, *v3; - if (param0->unk_00 <= param1->unk_00) { - v0 = ¶m0->unk_00; - v1 = ¶m1->unk_00; + if (param0->x <= param1->x) { + v0 = ¶m0->x; + v1 = ¶m1->x; } else { - v0 = ¶m1->unk_00; - v1 = ¶m0->unk_00; + v0 = ¶m1->x; + v1 = ¶m0->x; } - if (param0->unk_04 <= param1->unk_04) { - v2 = ¶m0->unk_04; - v3 = ¶m1->unk_04; + if (param0->y <= param1->y) { + v2 = ¶m0->y; + v3 = ¶m1->y; } else { - v2 = ¶m1->unk_04; - v3 = ¶m0->unk_04; + v2 = ¶m1->y; + v3 = ¶m0->y; } - if (((*v0 <= param2->unk_00) && (param2->unk_00 <= *v1)) && ((*v2 <= param2->unk_04) && (param2->unk_04 <= *v3))) { + if (((*v0 <= param2->x) && (param2->x <= *v1)) && ((*v2 <= param2->y) && (param2->y <= *v3))) { return 1; } return 0; } -static void ov5_021EECB8(const UnkStruct_ov5_021EF13C *param0, u16 param1, UnkStruct_ov5_021EEC68 *param2) +static void ov5_021EECB8(const BDHC *param0, u16 param1, BDHCPoint *param2) { - param2[0] = param0->unk_10[param0->unk_00[param1].unk_00]; - param2[1] = param0->unk_10[param0->unk_00[param1].unk_02]; + param2[0] = param0->points[param0->plates[param1].firstPointIndex]; + param2[1] = param0->points[param0->plates[param1].secondPointIndex]; } -static void ov5_021EECE8(const UnkStruct_ov5_021EF13C *param0, u16 param1, VecFx32 *param2) +static void ov5_021EECE8(const BDHC *param0, u16 param1, VecFx32 *param2) { - *param2 = param0->unk_14[param0->unk_00[param1].unk_04]; + *param2 = param0->slopes[param0->plates[param1].normalIndex]; } -static void ov5_021EED08(const UnkStruct_ov5_021EF13C *param0, u16 param1, fx32 *param2) +static void ov5_021EED08(const BDHC *param0, u16 param1, fx32 *param2) { - *param2 = param0->unk_04[param0->unk_00[param1].unk_06]; + *param2 = param0->heights[param0->plates[param1].heightIndex]; } static void ov5_021EED20(UnkStruct_ov5_021EED20 *param0) @@ -66,7 +64,7 @@ static void ov5_021EED20(UnkStruct_ov5_021EED20 *param0) } } -static BOOL ov5_021EED38(const UnkStruct_ov5_021EED38 *param0, const u16 param1, const fx32 param2, u16 *param3) +static BOOL ov5_021EED38(const BDHCStrip *param0, const u16 param1, const fx32 param2, u16 *param3) { int v0, v1; u32 v2; @@ -84,7 +82,7 @@ static BOOL ov5_021EED38(const UnkStruct_ov5_021EED38 *param0, const u16 param1, v2 = v1 / 2; do { - v3 = param0[v2].unk_00; + v3 = param0[v2].lowerBound; if (v3 > param2) { if (v1 - 1 > v0) { @@ -108,10 +106,10 @@ static BOOL ov5_021EED38(const UnkStruct_ov5_021EED38 *param0, const u16 param1, return 0; } -BOOL ov5_021EED9C(const fx32 param0, const fx32 param1, const fx32 param2, const UnkStruct_ov5_021EF13C *param3, fx32 *param4) +BOOL ov5_021EED9C(const fx32 param0, const fx32 param1, const fx32 param2, const BDHC *param3, fx32 *param4) { - UnkStruct_ov5_021EEC68 v0[2]; - UnkStruct_ov5_021EEC68 v1; + BDHCPoint v0[2]; + BDHCPoint v1; VecFx32 v2; fx32 v3, v4; BOOL v5; @@ -125,31 +123,31 @@ BOOL ov5_021EED9C(const fx32 param0, const fx32 param1, const fx32 param2, const u16 v19; u16 v20; u16 v21; - const UnkStruct_ov5_021EED38 *v22; + const BDHCStrip *v22; - if (param3->unk_18 == 0) { + if (param3->loaded == 0) { return 0; } v5 = 0; - v1.unk_00 = param1; - v1.unk_04 = param2; + v1.x = param1; + v1.y = param2; v10 = 0; ov5_021EED20(v15); - v11 = param3->unk_1C; - v22 = param3->unk_08; + v11 = param3->stripsSize; + v22 = param3->strips; - if (ov5_021EED38(v22, v11, v1.unk_04, &v20) == 0) { + if (ov5_021EED38(v22, v11, v1.y, &v20) == 0) { return 0; } - v21 = v22[v20].unk_04; - v18 = v22[v20].unk_06; + v21 = v22[v20].accessListElementCount; + v18 = v22[v20].accessListStartIndex; for (v6 = 0; v6 < v21; v6++) { - v7 = param3->unk_0C[v18 + v6]; + v7 = param3->accessList[v18 + v6]; ov5_021EECB8(param3, v7, v0); v5 = ov5_021EEC68(&v0[0], &v0[1], &v1); @@ -157,7 +155,7 @@ BOOL ov5_021EED9C(const fx32 param0, const fx32 param1, const fx32 param2, const ov5_021EECE8(param3, v7, &v2); ov5_021EED08(param3, v7, &v8); - v9 = -(FX_Mul(v2.x, v1.unk_00) + FX_Mul(v2.z, v1.unk_04) + v8); + v9 = -(FX_Mul(v2.x, v1.x) + FX_Mul(v2.z, v1.y) + v8); v9 = FX_Div(v9, v2.y); v15[v10].unk_00 = v9; v10++; diff --git a/src/overlay005/ov5_021EEF34.c b/src/overlay005/ov5_021EEF34.c deleted file mode 100644 index 9d040ae8c1..0000000000 --- a/src/overlay005/ov5_021EEF34.c +++ /dev/null @@ -1,307 +0,0 @@ -#include "overlay005/ov5_021EEF34.h" - -#include -#include - -#include "overlay005/struct_ov5_021EEC68.h" -#include "overlay005/struct_ov5_021EED38.h" -#include "overlay005/struct_ov5_021EF13C.h" -#include "overlay005/struct_ov5_021EF13C_sub1.h" - -#include "heap.h" -#include "narc.h" -#include "sys_task.h" -#include "sys_task_manager.h" - -typedef struct { - int unk_00; - int unk_04; - int unk_08; - int unk_0C; - int unk_10; - int unk_14; -} UnkStruct_ov5_021EEF98; - -typedef struct { - FSFile unk_00; - int unk_AC; - UnkStruct_ov5_021EEF98 unk_B0; - BOOL unk_C8; - u8 unk_CC; - u8 *unk_D0; - UnkStruct_ov5_021EF13C *unk_D4; - BOOL unk_D8; - int *unk_DC; - NARC *unk_E0; - int unk_E4; - int *unk_E8; -} UnkStruct_ov5_021EF05C; - -static void ov5_021EEF98(const UnkStruct_ov5_021EEF98 *param0, UnkStruct_ov5_021EF13C *param1, void **param2); -static void ov5_021EEFF8(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2); -static void ov5_021EF008(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2); -static void ov5_021EF01C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2); -static void ov5_021EF02C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2); -static void ov5_021EF03C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2); -static void ov5_021EF04C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2); - -static void ov5_021EEF34(NARC *param0, UnkStruct_ov5_021EEF98 *param1) -{ - u16 v0[4]; - - MI_CpuClear32(param1, sizeof(UnkStruct_ov5_021EEF98)); - - NARC_ReadFile(param0, 4, v0); - NARC_ReadFile(param0, 2, ¶m1->unk_00); - NARC_ReadFile(param0, 2, ¶m1->unk_04); - NARC_ReadFile(param0, 2, ¶m1->unk_08); - NARC_ReadFile(param0, 2, ¶m1->unk_0C); - NARC_ReadFile(param0, 2, ¶m1->unk_10); - NARC_ReadFile(param0, 2, ¶m1->unk_14); -} - -static void ov5_021EEF98(const UnkStruct_ov5_021EEF98 *param0, UnkStruct_ov5_021EF13C *param1, void **param2) -{ - void *v0; - int v1; - u8 v2; - - v1 = 0; - - v0 = &((u8 *)(*param2))[0]; - param1->unk_10 = v0; - v1 += (sizeof(UnkStruct_ov5_021EEC68) * param0->unk_00); - - v0 = &((u8 *)(*param2))[v1]; - param1->unk_14 = v0; - v1 += (sizeof(VecFx32) * param0->unk_04); - - v0 = &((u8 *)(*param2))[v1]; - param1->unk_04 = v0; - v1 += (sizeof(fx32) * param0->unk_08); - - v0 = &((u8 *)(*param2))[v1]; - param1->unk_00 = v0; - v1 += (sizeof(UnkStruct_ov5_021EF13C_sub1) * param0->unk_0C); - - v0 = &((u8 *)(*param2))[v1]; - param1->unk_08 = v0; - v1 += sizeof(UnkStruct_ov5_021EED38) * param0->unk_10; - - v0 = &((u8 *)(*param2))[v1]; - param1->unk_0C = v0; - v1 += sizeof(u16) * param0->unk_14; - - GF_ASSERT(v1 <= 0x9000); -} - -static void ov5_021EEFF8(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2) -{ - NARC_ReadFile(param0, sizeof(UnkStruct_ov5_021EEC68) * param2->unk_00, param1->unk_10); -} - -static void ov5_021EF008(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2) -{ - NARC_ReadFile(param0, sizeof(VecFx32) * param2->unk_04, param1->unk_14); -} - -static void ov5_021EF01C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2) -{ - NARC_ReadFile(param0, sizeof(fx32) * param2->unk_08, param1->unk_04); -} - -static void ov5_021EF02C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2) -{ - NARC_ReadFile(param0, sizeof(UnkStruct_ov5_021EF13C_sub1) * param2->unk_0C, param1->unk_00); -} - -static void ov5_021EF03C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2) -{ - NARC_ReadFile(param0, sizeof(UnkStruct_ov5_021EED38) * param2->unk_10, param1->unk_08); -} - -static void ov5_021EF04C(NARC *param0, UnkStruct_ov5_021EF13C *param1, const UnkStruct_ov5_021EEF98 *param2) -{ - NARC_ReadFile(param0, sizeof(u16) * param2->unk_14, param1->unk_0C); -} - -static void ov5_021EF05C(SysTask *param0, void *param1) -{ - BOOL v0; - UnkStruct_ov5_021EF05C *v1; - - v1 = (UnkStruct_ov5_021EF05C *)param1; - - if (v1->unk_D8 == 1) { - v1->unk_CC = 2; - } - - switch (v1->unk_CC) { - case 0: - if (*v1->unk_E8) { - v0 = 0; - break; - } - - ov5_021EEF34(v1->unk_E0, &v1->unk_B0); - v1->unk_D4->unk_1C = v1->unk_B0.unk_10; - ov5_021EEF98(&v1->unk_B0, v1->unk_D4, (void **)&v1->unk_D0); - v0 = 1; - break; - case 1: - ov5_021EEFF8(v1->unk_E0, v1->unk_D4, &v1->unk_B0); - ov5_021EF008(v1->unk_E0, v1->unk_D4, &v1->unk_B0); - ov5_021EF01C(v1->unk_E0, v1->unk_D4, &v1->unk_B0); - ov5_021EF02C(v1->unk_E0, v1->unk_D4, &v1->unk_B0); - ov5_021EF03C(v1->unk_E0, v1->unk_D4, &v1->unk_B0); - ov5_021EF04C(v1->unk_E0, v1->unk_D4, &v1->unk_B0); - v0 = 1; - break; - case 2: - *v1->unk_DC = 0; - Heap_FreeToHeap((void *)param1); - SysTask_Done(param0); - return; - } - - if (v0 == 1) { - v1->unk_CC++; - - if (v1->unk_CC == 2) { - v1->unk_D4->unk_18 = 1; - } - } -} - -UnkStruct_ov5_021EF13C *ov5_021EF13C(void) -{ - UnkStruct_ov5_021EF13C *v0; - - v0 = Heap_AllocFromHeap(4, sizeof(UnkStruct_ov5_021EF13C)); - - v0->unk_10 = NULL; - v0->unk_14 = NULL; - v0->unk_00 = NULL; - v0->unk_08 = NULL; - v0->unk_0C = NULL; - v0->unk_0C = NULL; - v0->unk_18 = 0; - v0->unk_1C = 0; - - return v0; -} - -void ov5_021EF158(NARC *param0, const int param1, UnkStruct_ov5_021EF13C *param2, u8 *param3) -{ - if (1) { - char v0[256]; - UnkStruct_ov5_021EEF98 *v1; - - v1 = Heap_AllocFromHeapAtEnd(4, sizeof(UnkStruct_ov5_021EEF98)); - - ov5_021EEF34(param0, v1); - param2->unk_1C = v1->unk_10; - ov5_021EEF98(v1, param2, (void **)¶m3); - - ov5_021EEFF8(param0, param2, v1); - ov5_021EF008(param0, param2, v1); - ov5_021EF01C(param0, param2, v1); - ov5_021EF02C(param0, param2, v1); - ov5_021EF03C(param0, param2, v1); - ov5_021EF04C(param0, param2, v1); - - { - int v2; - - for (v2 = 0; v2 < v1->unk_00; v2++) { - (void)0; - } - - for (v2 = 0; v2 < v1->unk_04; v2++) { - (void)0; - } - - for (v2 = 0; v2 < v1->unk_08; v2++) { - (void)0; - } - - for (v2 = 0; v2 < v1->unk_0C; v2++) { - (void)0; - } - - for (v2 = 0; v2 < v1->unk_10; v2++) { - (void)0; - } - - for (v2 = 0; v2 < v1->unk_14; v2++) { - (void)0; - } - } - - Heap_FreeToHeap(v1); - param2->unk_18 = 1; - } -} - -void ov5_021EF1D0(UnkStruct_ov5_021EF13C *param0) -{ - if (param0 == NULL) { - return; - } - - Heap_FreeToHeap(param0); - param0 = NULL; -} - -void ov5_021EF1DC(UnkStruct_ov5_021EF13C *param0) -{ - if (param0 == NULL) { - return; - } - - param0->unk_18 = 0; - param0->unk_10 = NULL; - param0->unk_14 = NULL; - param0->unk_00 = NULL; - param0->unk_08 = NULL; - param0->unk_0C = NULL; -} - -SysTask *ov5_021EF1F0(NARC *param0, const int param1, UnkStruct_ov5_021EF13C *param2, int *param3, u8 **param4, int *param5) -{ - SysTask *v0; - UnkStruct_ov5_021EF05C *v1; - - v1 = Heap_AllocFromHeapAtEnd(4, sizeof(UnkStruct_ov5_021EF05C)); - - if (v1 == NULL) { - (void)0; - } - - v1->unk_CC = 0; - v1->unk_E0 = param0; - v1->unk_E4 = param1; - v1->unk_D4 = param2; - v1->unk_DC = param3; - v1->unk_D8 = 0; - v1->unk_C8 = 0; - v1->unk_AC = 0; - v1->unk_D0 = *param4; - v1->unk_E8 = param5; - - v0 = SysTask_Start(ov5_021EF05C, (void *)v1, 1); - return v0; -} - -void ov5_021EF23C(SysTask *param0) -{ - UnkStruct_ov5_021EF05C *v0; - - v0 = (UnkStruct_ov5_021EF05C *)SysTask_GetParam(param0); - v0->unk_D8 = 1; -} - -void ov5_021EF248(UnkStruct_ov5_021EF13C *param0) -{ - param0->unk_18 = 0; -} diff --git a/src/unk_02054D00.c b/src/unk_02054D00.c index 77ed34eec4..fee981366b 100644 --- a/src/unk_02054D00.c +++ b/src/unk_02054D00.c @@ -6,6 +6,7 @@ #include "struct_defs/struct_02055130.h" #include "field/field_system.h" +#include "overlay005/bdhc.h" #include "overlay005/ov5_021E15F4.h" #include "overlay005/ov5_021E779C.h" #include "overlay005/ov5_021EEC68.h" @@ -13,7 +14,6 @@ #include "overlay005/struct_ov5_021E1608_decl.h" #include "overlay005/struct_ov5_021E1890_decl.h" #include "overlay005/struct_ov5_021E8F60_decl.h" -#include "overlay005/struct_ov5_021EF13C_decl.h" #include "map_matrix.h" #include "map_tile_behavior.h" @@ -104,7 +104,7 @@ static const fx32 sub_02054D0C(const FieldSystem *fieldSystem, const fx32 param1 v1 = 0; } else { { - const UnkStruct_ov5_021EF13C *v21 = ov5_021E9610(v18, v8); + const BDHC *v21 = ov5_021E9610(v18, v8); v1 = ov5_021EED9C(v16, v11.x, v11.z, v21, &v11.y); } }