summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/m_collision_bg.h141
-rw-r--r--include/m_common_data.h8
-rw-r--r--include/m_field_info.h17
-rw-r--r--include/m_field_make.h46
-rw-r--r--include/m_random_field.h44
-rw-r--r--include/segment_symbols.h2
-rw-r--r--include/tables/dmatables/dmadata_table_jp.h6
7 files changed, 209 insertions, 55 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();
diff --git a/include/m_common_data.h b/include/m_common_data.h
index 23836cd..5223795 100644
--- a/include/m_common_data.h
+++ b/include/m_common_data.h
@@ -19,6 +19,14 @@
#include "m_scene.h"
#include "m_demo.h"
+#define COMMON_GET(name) (common_data.name)
+#define COMMON_GET_POINTER(name) (&common_data.name)
+#define COMMON_SET(name, value) (common_data.name = (value))
+
+#define SAVE_GET(name) (COMMON_GET(save.name))
+#define SAVE_GET_POINTER(name) (COMMON_GET_POINTER(save.name))
+#define SAVE_SET(name, value) (COMMON_SET(save.name, value))
+
typedef enum Season {
/* 0 */ SPRING,
/* 1 */ SUMMER,
diff --git a/include/m_field_info.h b/include/m_field_info.h
index a061f1a..56c13d6 100644
--- a/include/m_field_info.h
+++ b/include/m_field_info.h
@@ -40,6 +40,7 @@ struct Game;
#define FI_BK_WORLDSIZE_HALF_X_F (FI_BK_WORLDSIZE_X_F / 2.0f)
#define FI_BK_WORLDSIZE_HALF_Z_F (FI_BK_WORLDSIZE_Z_F / 2.0f)
+#define mFI_NUM_SOUND_SOURCES 6
typedef enum FieldType {
/* 0 */ FI_FIELDTYPE_FG,
@@ -49,10 +50,10 @@ typedef enum FieldType {
/* 4 */ FI_FIELDTYPE_NPC_ROOM,
/* 5 */ FI_FIELDTYPE_DEMO,
/* 6 */ FI_FIELDTYPE_PLAYER_ROOM,
+
/* 7 */ FI_FIELDTYPE_NUM
} FieldType;
-
#define FI_TO_FIELD_ID(type, index) (((type) << 12) | (index))
#define FI_GET_TYPE(id) ((id) & 0xF000)
@@ -83,6 +84,16 @@ typedef enum FieldDirection {
/* 5 */ FI_MOVEDIR_MAX
} FieldDirection;
+// TODO: confirm 0 through 2 (POND and NUM confirmed)
+typedef enum FieldSoundSource {
+ /* 0 */ mFI_SOUND_SOURCE_NONE,
+ /* 1 */ mFI_SOUND_SOURCE_RIVER,
+ /* 2 */ mFI_SOUND_SOURCE_OCEAN,
+ /* 3 */ mFI_SOUND_SOURCE_POND,
+
+ /* 4 */ mFI_SOUND_SOURCE_NUM
+} FieldSoundSource;
+
#define FI_GET_PLAYER_ROOM_NO(fieldId) (((fieldId)-FI_FIELD_PLAYER0_ROOM) & 3)
#define FI_IS_PLAYER_ROOM(fieldId) \
((fieldId) == FI_FIELD_PLAYER0_ROOM || (fieldId) == FI_FIELD_PLAYER1_ROOM || \
@@ -151,10 +162,10 @@ mCoBG_unkStructUnion* mFI_UtNum2UtCol(s32 utX, s32 utZ);
// void func_80089698_jp();
// void func_80089704_jp();
// void func_800897D0_jp();
-// void func_80089888_jp();
+mCoBG_unkStructUnion* mFI_GetUnitCol(xyz_t wpos);
// void func_800898F4_jp();
// void func_800899CC_jp();
-// void func_80089A34_jp();
+struct FieldMakeBGSoundSource* mFI_GetSoundSourcePBlockNum(s32 blockX, s32 blockZ);
// void func_80089AAC_jp();
// void func_80089B1C_jp();
// void func_80089B94_jp();
diff --git a/include/m_field_make.h b/include/m_field_make.h
index 695418d..45cf282 100644
--- a/include/m_field_make.h
+++ b/include/m_field_make.h
@@ -4,6 +4,8 @@
#include "ultra64.h"
#include "unk.h"
#include "m_collision_bg.h"
+#include "m_field_info.h"
+#include "other_types.h"
struct Game;
@@ -20,6 +22,10 @@ struct Game;
#define UT_Z_NUM UT_BASE_NUM /* Spaces per block (acre) in z direction */
#define UT_TOTAL_NUM (UT_X_NUM * UT_Z_NUM)
+#define mFM_SOUND_SOURCE_NUM 6
+#define mFM_MOVE_ACTOR_NUM 16
+#define mFM_HANIWA_STEP_NUM 4
+
/*
* Naming convention for `RIVER`/`POOL`: directions indicated are flow of river
* (e.g. `RIVER_SOUTH` indicates a river that flows south through entire block,
@@ -124,10 +130,21 @@ typedef enum FieldMakeBlockType {
extern u8* g_block_type_p;
extern u32* g_block_kind_p; // s32 in ac-decomp--if problems arise, try changing type
+typedef struct FieldMakeCombination {
+ /* 0x0 */ u16 combinationType : 14; /* acre type index into `data_combi_table` */
+ /* 0x0 */ u16 height : 2; /* 0, 1, 2, or 3 (unused) */
+} FieldMakeCombination; // size = 0x2
+
typedef struct Foreground {
/* 0x000 */ u16 items[UT_Z_NUM][UT_X_NUM];
} Foreground; // size = 0x200
+typedef struct FieldMakeComboInfo {
+ /* 0x00 */ u16 bgId; // perhaps should be `bgName`?
+ /* 0x02 */ u16 fgId; // perhaps should be `fgName`?
+ /* 0x05 */ u8 blockType;
+} FieldMakeComboInfo; // size = 0x6
+
typedef struct FieldMakeMoveActor {
/* 0x0 */ u16 nameId;
/* 0x2 */ s8 utX;
@@ -142,19 +159,36 @@ typedef struct FieldMakeFGData {
/* 0x202 */ UNK_TYPE1 unk_202[4];
} FieldMakeFGData; // size = 0x206
+typedef struct FieldMakeBGSoundSource {
+ /* 0x0 */ s16 kind;
+ /* 0x4 */ xyz_t pos;
+} FieldMakeBGSoundSource; // size = 0x10
+
typedef struct FieldMakeFGInfo {
/* 0x00 */ u16 fgId;
/* 0x04 */ u16* itemsPtr;
- /* 0x08 */ UNK_TYPE1 unk_08[0x8C];
+ /* 0x08 */ UNK_PTR unk_08; // ac-decomp: u16* deposit_p
+ /* 0x0C */ FieldMakeMoveActor moveActors[mFM_MOVE_ACTOR_NUM];
+ /* 0x8C */ UNK_TYPE2 unk_08C; // ac-decomp: u16 move_actor_bit_data
+ /* 0x8E */ u8 haniwaStep[mFM_HANIWA_STEP_NUM];
} FieldMakeFGInfo; // size = 0x94
+// TODO: come up with better names to disambiguate the union `bgId` (which contains height data)
+// from the plain u16 `bgId` used in `FieldMakeComboInfo`
typedef struct FieldMakeBGInfo {
- /* 0x000 */ UNK_TYPE1 unk_000[0x14];
+ /* 0x000 */ FieldMakeCombination bgId; // stores `bgName` + height of corresponding block type from `data_combi_table`
+ /* 0x004 */ UNK_PTR unk_004; // ac-decomp: Gfx* opaque_gfx
+ /* 0x008 */ UNK_PTR unk_008; // ac-decomp: Gfx* translucent_gfx
+ /* 0x00C */ UNK_PTR unk_00C; // ac-decomp: EvwAnimeData* animation
+ /* 0x010 */ UNK_TYPE1 unk_010; // ac-decomp: s8 animation_count
+ /* 0x011 */ u8 blockType;
/* 0x014 */ u32 blockKind;
- /* 0x018 */ UNK_TYPE1 unk_018[0x08];
+ /* 0x018 */ RomOffset romStartAddr;
+ /* 0x01C */ s32 romSize;
/* 0x020 */ mCoBG_unkStructUnion collision[UT_Z_NUM][UT_X_NUM];
- /* 0x420 */ UNK_TYPE1 unk_024[0x160];
-} FieldMakeBGInfo; // size >= 0x57d
+ /* 0x420 */ u8 unk_420[UT_Z_NUM][UT_X_NUM]; // ac-decomp: u8 keep_h (holds `center` bitfield from corresponding `collision` entries)
+ /* 0x520 */ FieldMakeBGSoundSource soundSource[mFM_SOUND_SOURCE_NUM];
+} FieldMakeBGInfo; // size = 0x580
typedef struct FieldMakeBlockInfo {
/* 0x000 */ FieldMakeBGInfo bgInfo;
@@ -164,7 +198,7 @@ typedef struct FieldMakeBlockInfo {
typedef struct FieldMakeInfo {
/* 0x000 */ u16 fieldId;
/* 0x002 */ UNK_TYPE1 unk_000[0x146];
- /* 0x148 */ FieldMakeBlockInfo* blockInfo;
+ /* 0x148 */ FieldMakeBlockInfo* blockInfo; // length: BLOCK_TOTAL_NUM
/* 0x14C */ UNK_TYPE1 unk_14C[0x1A];
/* 0x166 */ u8 blockXMax;
/* 0x167 */ u8 blockZMax;
diff --git a/include/m_random_field.h b/include/m_random_field.h
index 256edbb..3a9bdc6 100644
--- a/include/m_random_field.h
+++ b/include/m_random_field.h
@@ -2,6 +2,9 @@
#define M_RANDOM_FIELD_H
#include "ultra64.h"
+#include "m_collision_bg.h"
+#include "game.h"
+#include "m_field_make.h"
#define RANDOM_FIELD_DIRECT_ERROR 100
@@ -14,6 +17,17 @@ typedef enum RandomFieldDirection {
/* 4 */ RANDOM_FIELD_DIRECT_NUM
} RandomFieldDirection;
+typedef enum RandomFieldGateType {
+ /* 0 */ mRF_GATE_NONE,
+ /* 1 */ mRF_GATE1_TYPE0,
+ /* 2 */ mRF_GATE1_TYPE1,
+ /* 3 */ mRF_GATE2_TYPE0,
+ /* 4 */ mRF_GATE2_TYPE1,
+ /* 5 */ mRF_GATE3_TYPE0,
+
+ /* 6 */ mRF_GATE_TYPE_NUM
+} RandomFieldGateType;
+
typedef struct RandomFieldGate {
/* 0x00 */ s32 ut0;
/* 0x04 */ s32 ut1;
@@ -53,20 +67,20 @@ typedef struct RandomFieldGate {
#define mRF_BLOCKKIND_CLIFF6 (1 << 30) // Bottom part of cliff that juts out, valley on left
#define mRF_BLOCKKIND_31 (1 << 31) // Not used in `mRF_block_info`
-// void func_800BCBA0_jp();
-// void func_800BCBDC_jp();
-// void func_800BCC20_jp();
-// void func_800BCC30_jp();
-// void func_800BCC40_jp();
-// void func_800BCCFC_jp();
-s32 mRF_Type2BlockInfo(u8 type);
-// void func_800BCDFC_jp();
-// void func_800BCE80_jp();
-// void func_800BCEA4_jp();
-// void func_800BCF64_jp();
-// void func_800BCFA4_jp();
-RandomFieldGate* mRF_BlockTypeDirect2GateData(s32*, u8, s32);
-// void func_800BD02C_jp();
-// void func_800BD1E4_jp();
+// void* mRF_Malloc(Game* game, size_t size);
+// void mRF_Free(Game* game, void* ptr);
+s32* mRF_StepNo(void);
+s32* mRF_TryCnt(void);
+// void mRF_PrintDebug(gfxprint* gfxprint);
+void mRF_MakeRandomField(FieldMakeCombination* combi_table, FieldMakeComboInfo* combi_info, s32 combi_count, Game* game);
+u32 mRF_Type2BlockInfo(u8 blockType);
+// u8 mRF_Info2BlockType(u32 blockInfo);
+// s32 mRF_GateType2GateCount(s32 gateType);
+s32 mRF_SearchPond(s32* utX, s32* utZ, s32 blockX, s32 blockZ);
+// s32 mRF_Attr2BeastRoadAttr(s32 attribute);
+// s32 mRF_BlockTypeDirect2GateType(u8 blockType, s32 direct);
+RandomFieldGate* mRF_BlockTypeDirect2GateData(s32* gateCount, u8 blockType, s32 direct);
+// s32 mRF_BlockInf2CheckBeastRoad(u8 blockType, mCoBG_unkStructUnion* collisionData);
+void mRF_CheckBeastRoad();
#endif
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index bdea287..50d0a21 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -96,6 +96,8 @@ DECLARE_SEGMENT(ovl__0079F810);
DECLARE_SEGMENT(ovl__007A10E0);
DECLARE_SEGMENT(catalog_ovl);
+DECLARE_SEGMENT(m_random_field_ovl);
+
DECLARE_SEGMENT(ac_set_ovl_insect);
DECLARE_SEGMENT(ac_set_ovl_gyoei);
diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h
index 733798b..b8df70f 100644
--- a/include/tables/dmatables/dmadata_table_jp.h
+++ b/include/tables/dmatables/dmadata_table_jp.h
@@ -116,8 +116,8 @@ DEFINE_DMA_ENTRY(ovl__00814FA0, "ovl__00814FA0")
DEFINE_DMA_ENTRY(ovl__00814FA0_reloc, "ovl__00814FA0_reloc")
DEFINE_DMA_ENTRY(ovl__00815B70, "ovl__00815B70")
DEFINE_DMA_ENTRY(ovl__00815B70_reloc, "ovl__00815B70_reloc")
-DEFINE_DMA_ENTRY(ovl__0081AA60, "ovl__0081AA60")
-DEFINE_DMA_ENTRY(ovl__0081AA60_reloc, "ovl__0081AA60_reloc")
+DEFINE_DMA_ENTRY(m_random_field_ovl, "m_random_field_ovl")
+DEFINE_DMA_ENTRY(m_random_field_ovl_reloc, "m_random_field_ovl_reloc")
DEFINE_DMA_ENTRY(ovl__0081D9D0, "ovl__0081D9D0")
DEFINE_DMA_ENTRY(ovl__0081D9D0_reloc, "ovl__0081D9D0_reloc")
DEFINE_DMA_ENTRY(ac_set_ovl_insect, "ac_set_ovl_insect")
@@ -2288,7 +2288,7 @@ DEFINE_DMA_ENTRY(segment_01148000, "segment_01148000")
DEFINE_DMA_ENTRY(segment_0114A000, "segment_0114A000")
DEFINE_DMA_ENTRY(segment_01188000, "segment_01188000")
DEFINE_DMA_ENTRY(segment_011AB000, "segment_011AB000")
-DEFINE_DMA_ENTRY(segment_011E2000, "segment_011E2000")
+DEFINE_DMA_ENTRY(data_combi, "data_combi")
DEFINE_DMA_ENTRY(segment_011E3000, "segment_011E3000")
DEFINE_DMA_ENTRY(segment_011E4000, "segment_011E4000")
DEFINE_DMA_ENTRY(segment_011E5000, "segment_011E5000")