summaryrefslogtreecommitdiff
path: root/include/m_collision_bg.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/m_collision_bg.h')
-rw-r--r--include/m_collision_bg.h141
1 files changed, 113 insertions, 28 deletions
diff --git a/include/m_collision_bg.h b/include/m_collision_bg.h
index 9401fda..9e5d84e 100644
--- a/include/m_collision_bg.h
+++ b/include/m_collision_bg.h
@@ -8,7 +8,87 @@
struct Actor;
struct PosRot;
-enum BackgroundAttribute { mCoBG_ATTRIBUTE_0, mCOBG_ATTRIBUTE_NONE = 100 };
+// TODO: focus further investigation on attributes WATER, 30, HOLE, WAVE, 59-63, and NONE
+enum BackgroundAttribute {
+ /* 000 */ mCoBG_ATTRIBUTE_GRASS0,
+ /* 001 */ mCoBG_ATTRIBUTE_GRASS1,
+ /* 002 */ mCoBG_ATTRIBUTE_GRASS2,
+ /* 003 */ mCoBG_ATTRIBUTE_GRASS3,
+ /* 004 */ mCoBG_ATTRIBUTE_SOIL0,
+ /* 005 */ mCoBG_ATTRIBUTE_SOIL1,
+ /* 006 */ mCoBG_ATTRIBUTE_SOIL2,
+ /* 007 */ mCoBG_ATTRIBUTE_STONE, // stone path (not individual rocks)
+ /* 008 */ mCoBG_ATTRIBUTE_FLOOR, // seems to occupy all units in bottom row
+ /* 009 */ mCoBG_ATTRIBUTE_BUSH,
+
+ /* 010 */ mCoBG_ATTRIBUTE_HOLE, // unconfirmed (from ac-decomp)
+ /* 011 */ mCoBG_ATTRIBUTE_WAVE, // unconfirmed (from ac-decomp)
+
+ /* 012 */ mCoBG_ATTRIBUTE_WATER, // only used in small pond?
+ /* 013 */ mCoBG_ATTRIBUTE_WATERFALL,
+ /* 014 */ mCoBG_ATTRIBUTE_RIVER_N,
+ /* 015 */ mCoBG_ATTRIBUTE_RIVER_NW,
+ /* 016 */ mCoBG_ATTRIBUTE_RIVER_W,
+ /* 017 */ mCoBG_ATTRIBUTE_RIVER_SW,
+ /* 018 */ mCoBG_ATTRIBUTE_RIVER_S,
+ /* 019 */ mCoBG_ATTRIBUTE_RIVER_SE,
+ /* 020 */ mCoBG_ATTRIBUTE_RIVER_E,
+ /* 021 */ mCoBG_ATTRIBUTE_RIVER_NE,
+
+ /* 022 */ mCoBG_ATTRIBUTE_SAND,
+ /* 023 */ mCoBG_ATTRIBUTE_WOOD, // fences (train tracks/dump), large signs, bridge edges
+ /* 024 */ mCoBG_ATTRIBUTE_SEA, // only seems to appear in row with beach
+ /* 025 */ mCoBG_ATTRIBUTE_SHALLOW0_NW, // shallower diagonal sea shallows, sea to SE
+ /* 026 */ mCoBG_ATTRIBUTE_SHALLOW0_NE, // shallower diagonal sea shallows, sea to SW
+
+ /* 027 */ mCoBG_ATTRIBUTE_BRIDGE_NW, // diagonal bridge, river to NW
+ /* 028 */ mCoBG_ATTRIBUTE_BRIDGE_END, // "bridge" unit that ends above water (i.e. a pier)
+ /* 029 */ mCoBG_ATTRIBUTE_BRIDGE_SE, // diagonal bridge, river to SE
+ /* 030 */ mCoBG_ATTRIBUTE_30,
+ /* 031 */ mCoBG_ATTRIBUTE_BRIDGE_C, // diagonal bridge's central unit
+ /* 032 */ mCoBG_ATTRIBUTE_BRIDGE_N, // horizontal bridge, river/tracks to north (stone?)
+ /* 033 */ mCoBG_ATTRIBUTE_BRIDGE_E, // vertical bridge/steps, river/grass to east
+ /* 034 */ mCoBG_ATTRIBUTE_BRIDGE_W, // vertical bridge/steps, river/grass to west
+ /* 035 */ mCoBG_ATTRIBUTE_BRIDGE_S, // horizontal bridge, river to south
+
+ /* 036 */ mCoBG_ATTRIBUTE_SHALLOW1_S, // deeper horizontal sea shallows, sea to south
+ /* 037 */ mCoBG_ATTRIBUTE_SHALLOW1_NW, // deeper diagonal sea shallows, sea to SE
+ /* 038 */ mCoBG_ATTRIBUTE_SHALLOW1_NE, // deeper diagonal sea shallows, sea to SW
+
+ /* 039 */ mCoBG_ATTRIBUTE_BANK_SE, // diagonal riverbank, river to NW
+ /* 040 */ mCoBG_ATTRIBUTE_BANK_NE, // diagonal riverbank, river to SW
+ /* 041 */ mCoBG_ATTRIBUTE_BANK_NW, // diagonal riverbank, river to SE
+ /* 042 */ mCoBG_ATTRIBUTE_BANK_SW, // diagonal riverbank, river to NE
+ /* 043 */ mCoBG_ATTRIBUTE_BANK_N, // horizontal riverbank, river to north
+ /* 044 */ mCoBG_ATTRIBUTE_BANK_W, // vertical riverbank, river to east
+ /* 045 */ mCoBG_ATTRIBUTE_BANK_E, // vertical riverbank, river to west
+ /* 046 */ mCoBG_ATTRIBUTE_BANK_S, // horizontal riverbank, river to south
+
+ /* 047 */ mCoBG_ATTRIBUTE_CLIFF_S, // vertical cliff edge, valley to north (only in south tunnel wall?)
+ /* 048 */ mCoBG_ATTRIBUTE_CLIFF_W, // vertical cliff edge, valley to west
+ /* 049 */ mCoBG_ATTRIBUTE_CLIFF_E, // vertical cliff edge, valley to west
+ /* 050 */ mCoBG_ATTRIBUTE_CLIFF_N, // horizontal cliff edge, valley to south (also appears in north tunnel wall)
+
+ /* 051 */ mCoBG_ATTRIBUTE_TUNNEL_E_S, // east tunnel entrance, south corner
+ /* 052 */ mCoBG_ATTRIBUTE_TUNNEL_E_N, // east tunnel entrance, north corner
+ /* 053 */ mCoBG_ATTRIBUTE_TUNNEL_W_N, // west tunnel entrance, north corner
+ /* 054 */ mCoBG_ATTRIBUTE_TUNNEL_W_S, // west tunnel entrance, south corner
+
+ /* 055 */ mCoBG_ATTRIBUTE_CLIFF_SE, // diagonal cliff edge, valley to NW
+ /* 056 */ mCoBG_ATTRIBUTE_CLIFF_NE, // diagonal cliff edge, valley to SW
+ /* 057 */ mCoBG_ATTRIBUTE_CLIFF_NW, // diagonal cliff edge, valley to SE
+ /* 058 */ mCoBG_ATTRIBUTE_CLIFF_SW, // diagonal cliff edge, valley to NE
+
+ /* 059 */ mCoBG_ATTRIBUTE_BANK_WN, // corner riverbank, river/pond to north and west (need more data)
+ /* 060 */ mCoBG_ATTRIBUTE_BANK_UNK, // corner riverbank, unsure (found at beach on mini cliff with SAND to west,
+ // BANK_NE to east, BANK_E to north, SHALLOW1_NW to south)
+
+ /* 061 */ mCoBG_ATTRIBUTE_61,
+ /* 062 */ mCoBG_ATTRIBUTE_62,
+ /* 063 */ mCoBG_ATTRIBUTE_63, // appears very sparingly at soil-grass boundaries
+
+ /* 100 */ mCoBG_ATTRIBUTE_NONE = 100, // unconfirmed (from ac-decomp)
+};
// offset table
typedef struct mCoBG_unkStruct2 {
@@ -21,16 +101,18 @@ typedef struct mCoBG_unkStruct2 {
/* 0x06 */ s8 unk6;
} mCoBG_unkStruct2; // size = 0x7
+// clang-format off
// collision bg data
typedef struct mCoBG_unkStruct {
- /* 0x0 */ u32 unk0:1; // [31] shape
- /* 0x0 */ u32 unk1:5; // [30:25] center
- /* 0x0 */ u32 unk2:5; // [25:20] top_left
- /* 0x0 */ u32 unk3:5; // [20:15] bot_left
- /* 0x0 */ u32 unk4:5; // [15:10] top_right
- /* 0x0 */ u32 unk5:5; // [10:5] bot_right
- /* 0x0 */ u32 unk6:6; // [5:0] unit_attribute
+ /* 0x0 */ u32 unk0 : 1; // [31] shape
+ /* 0x0 */ u32 unk1 : 5; // [30:25] center
+ /* 0x0 */ u32 unk2 : 5; // [25:20] top_left
+ /* 0x0 */ u32 unk3 : 5; // [20:15] bot_left
+ /* 0x0 */ u32 unk4 : 5; // [15:10] top_right
+ /* 0x0 */ u32 unk5 : 5; // [10:5] bot_right
+ /* 0x0 */ u32 unitAttribute : 6; // [5:0] unit_attribute
} mCoBG_unkStruct; // size = 0x4
+// clang-format on
typedef union mCoBG_unkStructUnion {
mCoBG_unkStruct data;
@@ -62,30 +144,32 @@ typedef struct mCoBG_WallInfo {
* | ________ ________ ________ ___X____ | 0x1B | unk12
* | ________ ________ ________ ____XXXX | 0x1C | unk13
*/
+// clang-format off
typedef struct mCoBG_CheckResult {
- u32 onGround : 1; // on_ground
- u32 unk1 : 5; // hit_attribute_wall
- u32 hitWall : 5; // hit_wall
- u32 unk3 : 3; // hit_wall_count
- u32 unk4 : 1; // unk_flag0
- u32 unk5 : 6; // unit_attribute
- u32 unk6 : 1; // is_on_move_bg_obj
- u32 inWater : 1; // is_in_water
- u32 unk8 : 1; // unk_flag1
- u32 unk9 : 1; // unk_flag2
- u32 unk10 : 1; // unk_flag3
- u32 unk11 : 1; // unk_flag4
- u32 unk12 : 1; // unk_flag5
- u32 unk13 : 4; // unk_flag6
+ u32 onGround : 1; // on_ground
+ u32 unk1 : 5; // hit_attribute_wall
+ u32 hitWall : 5; // hit_wall
+ u32 unk3 : 3; // hit_wall_count
+ u32 unk4 : 1; // unk_flag0
+ u32 unk5 : 6; // unit_attribute
+ u32 unk6 : 1; // is_on_move_bg_obj
+ u32 inWater : 1; // is_in_water
+ u32 unk8 : 1; // unk_flag1
+ u32 unk9 : 1; // unk_flag2
+ u32 unk10 : 1; // unk_flag3
+ u32 unk11 : 1; // unk_flag4
+ u32 unk12 : 1; // unk_flag5
+ u32 unk13 : 4; // unk_flag6
} mCoBG_CheckResult;
+// clang-format on
-typedef struct mCoBG_Check{
+typedef struct mCoBG_Check {
/* 0x00 */ u8 unk0[0x11];
/* 0x14 */ mCoBG_CheckResult colResult;
/* 0x18 */ u8 unk18[0xC];
/* 0x24 */ mCoBG_WallInfo wallInfo[2];
/* 0x2C */ s16 unk2C;
-}mCoBG_Check; // size = 0x30
+} mCoBG_Check; // size = 0x30
// void func_80067430_jp();
// void func_800674B0_jp();
@@ -172,9 +256,10 @@ typedef struct mCoBG_Check{
// void func_8006B5C0_jp();
// void func_8006B664_jp();
// void func_8006B92C_jp();
-s32 mCoBG_RegistMoveBg(s8 *arg0, struct PosRot *arg1, xyz_t *arg2, s16 *arg3, f32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, s32 arg9, s32 argA, f32 argB);
+s32 mCoBG_RegistMoveBg(s8* arg0, struct PosRot* arg1, xyz_t* arg2, s16* arg3, f32 arg4, s32 arg5, s32 arg6, s32 arg7,
+ s32 arg8, s32 arg9, s32 argA, f32 argB);
// void func_8006BAA8_jp();
-void mCoBG_CrossOffMoveBg(s32 arg0, struct Actor *actor);
+void mCoBG_CrossOffMoveBg(s32 arg0, struct Actor* actor);
void func_8006BB64_jp(void);
// void func_8006BB9C_jp();
// void func_8006BBE8_jp();
@@ -245,7 +330,7 @@ void func_8006C8D0_jp(void);
// void func_80071064_jp();
// void func_800713CC_jp();
// void func_80071460_jp();
-f32 mCoBG_GetShadowBgY_AngleS_FromWpos(s_xyz*, xyz_t,f32);
+f32 mCoBG_GetShadowBgY_AngleS_FromWpos(s_xyz*, xyz_t, f32);
// void func_800715B4_jp();
// void func_80071604_jp();
// void func_80071728_jp();
@@ -259,7 +344,7 @@ void mCoBG_GetBgNorm_FromWpos(xyz_t*, xyz_t);
// void func_800721C8_jp();
// void func_800721E4_jp();
// void func_80072238_jp();
-// void func_80072264_jp();
+s32 mCoBG_Attribute2CheckPlant(u32 attribute, const xyz_t* wpos); // void func_80072264_jp();
// void func_80072340_jp();
// void func_80072398_jp();
// void func_800723C4_jp();