Skip to content

Commit

Permalink
Document map 3D objects
Browse files Browse the repository at this point in the history
This mainly documents the `ov5_021E15F4.c` file, which is in charge of
reading 3D map objects from the land data NARC, managing them, and
rendering them.

A "3D map object" is defined here as a 3D model that is separate from
the map 3D model, and that can be positioned, rotated, and scaled
independently. For instance, they are usually used to place buildings on
the various maps.

Signed-off-by: Kuruyia <[email protected]>
  • Loading branch information
Kuruyia committed Feb 13, 2025
1 parent d634ed4 commit 605397b
Show file tree
Hide file tree
Showing 31 changed files with 675 additions and 707 deletions.
11 changes: 11 additions & 0 deletions include/constants/building.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#ifndef POKEPLATINUM_CONSTANTS_BUILDING_H
#define POKEPLATINUM_CONSTANTS_BUILDING_H

enum BuildingId {
BUILDING_ID_HONEY_TREE = 26,
BUILDING_ID_UNK_242 = 242,
BUILDING_ID_UNK_258 = 258,
BUILDING_ID_UNK_475 = 475,
};

#endif // POKEPLATINUM_CONSTANTS_BUILDING_H
4 changes: 2 additions & 2 deletions include/field/field_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
#include "struct_defs/struct_0204AFC4.h"

#include "field/field_system_sub2_decl.h"
#include "overlay005/building.h"
#include "overlay005/struct_ov5_021D1A68_decl.h"
#include "overlay005/struct_ov5_021D3CAC_decl.h"
#include "overlay005/struct_ov5_021D41B4_decl.h"
#include "overlay005/struct_ov5_021D538C_decl.h"
#include "overlay005/struct_ov5_021D57D8_decl.h"
#include "overlay005/struct_ov5_021D5894.h"
#include "overlay005/struct_ov5_021DF47C_decl.h"
#include "overlay005/struct_ov5_021E1608_decl.h"
#include "overlay005/struct_ov5_021E1B20_decl.h"
#include "overlay005/struct_ov5_021E8F60_decl.h"
#include "overlay005/struct_ov5_021EB0E0_decl.h"
Expand Down Expand Up @@ -109,7 +109,7 @@ typedef struct FieldSystem_t {
BagCursor *unk_98;
JournalEntry *journalEntry;
UnkStruct_ov5_021EF300 *unk_A0;
UnkStruct_ov5_021E1608 *unk_A4;
BuildingManager *buildingManager;
HoneyTreeShakeList *unk_A8;
UnkStruct_0204AFC4 *unk_AC;
const BattleRegulation *unk_B0;
Expand Down
50 changes: 50 additions & 0 deletions include/overlay005/building.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#ifndef POKEPLATINUM_OV5_BUILDING_H
#define POKEPLATINUM_OV5_BUILDING_H

#include <nitro/fx/fx.h>
#include <nnsys.h>

#include "overlay005/struct_ov5_021D3CAC_decl.h"
#include "overlay005/struct_ov5_021D5894.h"
#include "overlay005/struct_ov5_021EF76C_decl.h"

#include "narc.h"

#define MAX_LOADED_BUILDINGS 32

typedef struct Building {
int id;
BOOL loaded;
BOOL hidden;
BOOL applyRotation;
NNSG3dRenderObj renderObj;
NNSG3dResMdl *model;
VecFx32 position;
VecFx32 rotation;
VecFx32 scale;
} Building;

typedef struct BuildingManager {
Building loadedObjects[MAX_LOADED_BUILDINGS];
} BuildingManager;

BuildingManager *BuildingManager_New(const u8 heapId);
void BuildingManager_Free(BuildingManager *buildingManager);
void BuildingManager_Init(BuildingManager *buildingManager);
void BuildingManager_InitOne(const int index, BuildingManager *buildingManager);
void BuildingManager_Load(NARC *landDataNARC, const int buildingFilesSize, UnkStruct_ov5_021EF76C *const param2, BuildingManager *buildingManager, UnkStruct_ov5_021D3CAC *param4);
void BuildingManager_Render(const VecFx32 *positionOffset, const UnkStruct_ov5_021EF76C *param1, const BOOL param2, UnkStruct_ov5_021D5894 *const param3, BuildingManager *buildingManager);
VecFx32 *Building_GetRotation(Building *building);
VecFx32 Building_GetPosition(const Building *building);
void Building_SetPosition(Building *building, const VecFx32 *position);
void Building_SetHidden(Building *building, const BOOL hidden);
int Building_GetId(const Building *building);
NNSG3dRenderObj *Building_GetRenderObj(const Building *building);
NNSG3dResMdl *Building_GetModel(const Building *building);
Building *BuildingManager_GetLoadedObject(BuildingManager *buildingManager, const u8 index);
Building *BuildingManager_FindLoadedObjectById(BuildingManager *buildingManager, const int id);
Building *BuildingManager_GetLoadedObjectSafely(BuildingManager *buildingManager, const int index);
u8 BuildingManager_LoadOne(BuildingManager *buildingManager, UnkStruct_ov5_021EF76C *const param1, const int id, const VecFx32 *position, const VecFx32 *rotation, UnkStruct_ov5_021D3CAC *param5);
void BuildingManager_Render2(BuildingManager *buildingManager, UnkStruct_ov5_021EF76C *const param1);

#endif // POKEPLATINUM_OV5_BUILDING_H
4 changes: 2 additions & 2 deletions include/overlay005/funcptr_ov5_021E9630.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#ifndef POKEPLATINUM_FUNCPTR_OV5_021E9630_H
#define POKEPLATINUM_FUNCPTR_OV5_021E9630_H

#include "overlay005/struct_ov5_021E1608_decl.h"
#include "overlay005/building.h"

typedef void (*UnkFuncPtr_ov5_021E9630)(void *, const int, UnkStruct_ov5_021E1608 *const);
typedef void (*UnkFuncPtr_ov5_021E9630)(void *, const int, BuildingManager *const);

#endif // POKEPLATINUM_FUNCPTR_OV5_021E9630_H
4 changes: 2 additions & 2 deletions include/overlay005/honey_tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

#include "field/field_system.h"
#include "field/field_system_decl.h"
#include "overlay005/struct_ov5_021E1608_decl.h"
#include "overlay005/building.h"

HoneyTreeShakeList *HoneyTree_ShakeDataInit(void);
void HoneyTree_FreeShakeData(HoneyTreeShakeList **param0);
Expand All @@ -14,7 +14,7 @@ u16 HoneyTree_GetTreeSlatherStatus(FieldSystem *fieldSystem);
void HoneyTree_SlatherTree(FieldSystem *fieldSystem);
void HoneyTree_StopShaking(FieldSystem *fieldSystem);
int HoneyTree_GetSpecies(FieldSystem *fieldSystem);
void ov5_021F0030(void *param0, const int param1, UnkStruct_ov5_021E1608 *const param2);
void ov5_021F0030(void *param0, const int param1, BuildingManager *const buildingManager);
void HoneyTree_Unslather(FieldSystem *fieldSystem);

#endif // POKEPLATINUM_HONEY_TREE_H
34 changes: 0 additions & 34 deletions include/overlay005/ov5_021E15F4.h

This file was deleted.

4 changes: 2 additions & 2 deletions include/overlay005/ov5_021E779C.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

#include "field/field_system_decl.h"
#include "overlay005/bdhc.h"
#include "overlay005/building.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_021EF76C_decl.h"

Expand All @@ -27,7 +27,7 @@ void ov5_021E92E4(UnkStruct_ov5_021E8F60 *param0);
BOOL ov5_021E9300(const UnkStruct_ov5_021E8F60 *param0);
void ov5_021E931C(VecFx32 const *param0, UnkStruct_ov5_021E8F60 *param1);
void ov5_021E9338(UnkStruct_ov5_021E8F60 *param0);
void ov5_021E9340(const u8 param0, const UnkStruct_ov5_021E8F60 *param1, UnkStruct_ov5_021E1608 **param2);
void ov5_021E9340(const u8 param0, const UnkStruct_ov5_021E8F60 *param1, BuildingManager **param2);
u8 ov5_021E9354(const UnkStruct_ov5_021E8F60 *param0);
u8 ov5_021E935C(const u32 param0, const int param1);
u8 ov5_021E9390(const int param0, const u8 param1, const UnkStruct_ov5_021E8F60 *param2);
Expand Down
6 changes: 0 additions & 6 deletions include/overlay005/struct_ov5_021E1608_decl.h

This file was deleted.

6 changes: 0 additions & 6 deletions include/overlay005/struct_ov5_021E1890_decl.h

This file was deleted.

12 changes: 6 additions & 6 deletions include/unk_02054D00.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "struct_defs/struct_02055130.h"

#include "field/field_system_decl.h"
#include "overlay005/struct_ov5_021E1890_decl.h"
#include "overlay005/building.h"

void sub_02054F44(const TerrainCollisionManager **param0, int param1);
BOOL FieldSystem_CheckCollision(const FieldSystem *fieldSystem, const int param1, const int param2);
Expand All @@ -16,11 +16,11 @@ const fx32 sub_02054FBC(const FieldSystem *fieldSystem, const fx32 param1, const
BOOL sub_02055024(const FieldSystem *fieldSystem, const VecFx32 *param1, const int param2, const int param3, s8 *param4);
BOOL sub_0205507C(FieldSystem *fieldSystem, const VecFx32 *param1, const int param2, const int param3, s8 *param4);
void sub_020550F4(const int param0, const int param1, const int param2, const int param3, const u32 param4, const u32 param5, UnkStruct_02055130 *param6);
BOOL sub_02055130(const UnkStruct_ov5_021E1890 *param0, const UnkStruct_02055130 *param1, const VecFx32 *param2);
BOOL sub_02055178(const FieldSystem *fieldSystem, const int param1, const UnkStruct_02055130 *param2, UnkStruct_ov5_021E1890 **param3);
BOOL sub_02055208(const FieldSystem *fieldSystem, const int *param1, const u8 param2, const UnkStruct_02055130 *param3, UnkStruct_ov5_021E1890 **param4, int *param5);
BOOL sub_020552B4(const FieldSystem *fieldSystem, const int param1, UnkStruct_ov5_021E1890 **param2, int *param3);
BOOL sub_02055324(const FieldSystem *fieldSystem, const int *param1, const u8 param2, UnkStruct_ov5_021E1890 **param3, int *param4);
BOOL sub_02055130(const Building *param0, const UnkStruct_02055130 *param1, const VecFx32 *param2);
BOOL sub_02055178(const FieldSystem *fieldSystem, const int param1, const UnkStruct_02055130 *param2, Building **param3);
BOOL sub_02055208(const FieldSystem *fieldSystem, const int *param1, const u8 param2, const UnkStruct_02055130 *param3, Building **param4, int *param5);
BOOL sub_020552B4(const FieldSystem *fieldSystem, const int param1, Building **param2, int *param3);
BOOL sub_02055324(const FieldSystem *fieldSystem, const int *param1, const u8 param2, Building **param3, int *param4);
void sub_020553A4(const int param0, const int param1, VecFx32 *param2);

#endif // POKEPLATINUM_UNK_02054D00_H
2 changes: 1 addition & 1 deletion platinum.us/main.lsf
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ Overlay overlay5
Object main.nef.p/src_overlay005_ov5_021DFB54.c.o
Object main.nef.p/src_overlay005_ov5_021E1154.c.o
Object main.nef.p/src_overlay005_ov5_021E135C.c.o
Object main.nef.p/src_overlay005_ov5_021E15F4.c.o
Object main.nef.p/src_overlay005_building.c.o
Object main.nef.p/src_overlay005_ov5_021E1B08.c.o
Object main.nef.p/src_overlay005_save_info_window.c.o
Object main.nef.p/src_overlay005_motion_blur.c.o
Expand Down
2 changes: 1 addition & 1 deletion src/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ pokeplatinum_c = files(
'overlay005/ov5_021DFB54.c',
'overlay005/ov5_021E1154.c',
'overlay005/ov5_021E135C.c',
'overlay005/ov5_021E15F4.c',
'overlay005/building.c',
'overlay005/ov5_021E1B08.c',
'overlay005/save_info_window.c',
'overlay005/motion_blur.c',
Expand Down
Loading

0 comments on commit 605397b

Please sign in to comment.