summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_collision_bg.h24
-rw-r--r--include/m_field_info.h48
-rw-r--r--include/m_flashrom.h51
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt2
-rw-r--r--src/code/m_common_data.c2
-rw-r--r--src/code/m_field_info.c429
-rw-r--r--src/code/m_start_data_init.c1
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.c1
-rw-r--r--yamls/jp/code.yaml5
9 files changed, 512 insertions, 51 deletions
diff --git a/include/m_collision_bg.h b/include/m_collision_bg.h
index 896da7c..182ebf3 100644
--- a/include/m_collision_bg.h
+++ b/include/m_collision_bg.h
@@ -3,6 +3,10 @@
#include "ultra64.h"
#include "z64math.h"
+#include "unk.h"
+
+struct Actor;
+struct PosRot;
typedef struct mCoBG_OffsetTable {
/* 0x00 */ u8 unitAttribute;
@@ -14,6 +18,22 @@ typedef struct mCoBG_OffsetTable {
/* 0x06 */ s8 slateSwitch;
} mCoBG_OffsetTable; // size = 0x7
+// 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
+} mCoBG_unkStruct; // size = 0x4
+
+typedef union mCoBG_unkStructUnion {
+ mCoBG_unkStruct data;
+ u32 raw;
+} mCoBG_unkStructUnion;
+
// void func_80067430_jp();
// void func_800674B0_jp();
// void func_800674D8_jp();
@@ -99,7 +119,7 @@ typedef struct mCoBG_OffsetTable {
// void func_8006B5C0_jp();
// void func_8006B664_jp();
// void func_8006B92C_jp();
-s32 mCoBG_RegistMoveBg(s8 *arg0, 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 func_8006BB64_jp(void);
@@ -254,7 +274,7 @@ void mCoBG_SetPluss5PointOffset_file(xyz_t pos, mCoBG_OffsetTable offsetData, ch
// void func_80076270_jp();
// void func_80076280_jp();
// void func_80076290_jp();
-// void func_80076358_jp();
+s32 func_80076358_jp(u32 attribute);
// void func_8007638C_jp();
// void func_800763F0_jp();
// void func_800763FC_jp();
diff --git a/include/m_field_info.h b/include/m_field_info.h
index 755c7c2..52deaa6 100644
--- a/include/m_field_info.h
+++ b/include/m_field_info.h
@@ -3,8 +3,8 @@
#include "ultra64.h"
#include "z64math.h"
+#include "m_collision_bg.h"
-struct CommonData;
struct Game_Play;
// void func_80087C30_jp();
@@ -65,7 +65,7 @@ u8 mFI_BkNum2BlockType(s32,s32);
// void func_80089404_jp();
void mFI_BlockKind2BkNum(s32*,s32*,s32);
// void func_800894D0_jp();
-// void func_80089538_jp();
+mCoBG_unkStructUnion* func_80089538_jp(s32 arg0, s32 arg1);
// void func_800895B8_jp();
// void func_80089698_jp();
// void func_80089704_jp();
@@ -180,7 +180,7 @@ void mFI_Wpos2DepositOFF(xyz_t);
// void func_8008D6E0_jp();
// void func_8008D7B0_jp();
// void func_8008D884_jp();
-// void func_8008D928_jp();
+s32 mFI_GetWaveUtinBlock(s32* arg0, s32* arg1, s32 arg2, s32 arg3);
// void func_8008DA4C_jp();
void func_8008DCF8_jp(void);
// void func_8008DD0C_jp();
@@ -195,47 +195,5 @@ void func_8008E5F4_jp(xyz_t arg0);
// void func_8008E8E0_jp();
// void func_8008E9C4_jp();
// void func_8008EA5C_jp();
-// void func_8008ECA0_jp();
-// void func_8008ECC8_jp();
-// void func_8008ECF0_jp();
-// void func_8008ED14_jp();
-// void func_8008EE24_jp();
-// void func_8008EE5C_jp();
-// void func_8008EE6C_jp();
-// void func_8008EE7C_jp();
-// void func_8008EEB4_jp();
-// void func_8008EEE8_jp();
-// void func_8008EF0C_jp();
-s32 mFRm_CheckSaveData(void);
-void mFRm_ClearSaveCheckData(struct CommonData* common_data);
-// void func_8008EFDC_jp();
-// void func_8008F020_jp();
-// void func_8008F040_jp();
-// void func_8008F0A0_jp();
-// void func_8008F1BC_jp();
-// void func_8008F210_jp();
-// void func_8008F23C_jp();
-// void func_8008F24C_jp();
-// void func_8008F530_jp();
-// void func_8008F5FC_jp();
-// void func_8008F648_jp();
-// void func_8008F768_jp();
-// void func_8008F7C8_jp();
-// void func_8008F8A0_jp();
-// void func_8008F938_jp();
-// void func_8008F968_jp();
-// void func_8008FA28_jp();
-// void func_8008FA50_jp();
-// void func_8008FA74_jp();
-// void func_8008FAB4_jp();
-// void func_8008FAE0_jp();
-// void func_8008FB64_jp();
-// void func_8008FBEC_jp();
-// void func_8008FCE8_jp();
-// void func_8008FDD4_jp();
-// void func_8008FE74_jp();
-// void func_8008FF60_jp();
-// void func_80090044_jp();
-// void func_800900B0_jp();
#endif
diff --git a/include/m_flashrom.h b/include/m_flashrom.h
new file mode 100644
index 0000000..0fdf0ca
--- /dev/null
+++ b/include/m_flashrom.h
@@ -0,0 +1,51 @@
+#ifndef M_FLASHROM_H
+#define M_FLASHROM_H
+
+#include "ultra64.h"
+
+struct CommonData;
+
+// void func_8008ECA0_jp();
+// void func_8008ECC8_jp();
+// void func_8008ECF0_jp();
+// void func_8008ED14_jp();
+// void func_8008EE24_jp();
+// void func_8008EE5C_jp();
+// void func_8008EE6C_jp();
+// void func_8008EE7C_jp();
+// void func_8008EEB4_jp();
+// void func_8008EEE8_jp();
+// void func_8008EF0C_jp();
+s32 mFRm_CheckSaveData(void);
+void mFRm_ClearSaveCheckData(struct CommonData* common_data);
+// void func_8008EFDC_jp();
+// void func_8008F020_jp();
+// void func_8008F040_jp();
+// void func_8008F0A0_jp();
+// void func_8008F1BC_jp();
+// void func_8008F210_jp();
+// void func_8008F23C_jp();
+// void func_8008F24C_jp();
+// void func_8008F530_jp();
+// void func_8008F5FC_jp();
+// void func_8008F648_jp();
+// void func_8008F768_jp();
+// void func_8008F7C8_jp();
+// void func_8008F8A0_jp();
+// void func_8008F938_jp();
+// void func_8008F968_jp();
+// void func_8008FA28_jp();
+// void func_8008FA50_jp();
+// void func_8008FA74_jp();
+// void func_8008FAB4_jp();
+// void func_8008FAE0_jp();
+// void func_8008FB64_jp();
+// void func_8008FBEC_jp();
+// void func_8008FCE8_jp();
+// void func_8008FDD4_jp();
+// void func_8008FE74_jp();
+// void func_8008FF60_jp();
+// void func_80090044_jp();
+// void func_800900B0_jp();
+
+#endif
diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt
index 0ae845d..a546c56 100644
--- a/linker_scripts/jp/symbol_addrs_code.txt
+++ b/linker_scripts/jp/symbol_addrs_code.txt
@@ -1468,7 +1468,7 @@ func_8008D574_jp = 0x8008D574; // type:func
func_8008D6E0_jp = 0x8008D6E0; // type:func
func_8008D7B0_jp = 0x8008D7B0; // type:func
func_8008D884_jp = 0x8008D884; // type:func
-func_8008D928_jp = 0x8008D928; // type:func
+mFI_GetWaveUtinBlock = 0x8008D928; // type:func
func_8008DA4C_jp = 0x8008DA4C; // type:func
func_8008DCF8_jp = 0x8008DCF8; // type:func
func_8008DD0C_jp = 0x8008DD0C; // type:func
diff --git a/src/code/m_common_data.c b/src/code/m_common_data.c
index 31eea11..5fec9cd 100644
--- a/src/code/m_common_data.c
+++ b/src/code/m_common_data.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "m_common_data.h"
-#include "m_field_info.h"
+#include "m_flashrom.h"
#include "68AAF0.h"
CommonData common_data;
diff --git a/src/code/m_field_info.c b/src/code/m_field_info.c
new file mode 100644
index 0000000..d52fc4d
--- /dev/null
+++ b/src/code/m_field_info.c
@@ -0,0 +1,429 @@
+#include "global.h"
+#include "m_field_info.h"
+#include "m_collision_bg.h"
+#include "libc64/qrand.h"
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087C30_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087C40_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087C64_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_GetFieldId.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087C9C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087D30_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087DC8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087E14_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087E58_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087E94_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80087ED0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088018_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088160_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008819C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800881AC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088270_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800882AC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800882FC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088320_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088344_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088458_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800884E0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800885A8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_Wpos2BlockNum.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088780_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008883C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800888AC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088938_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800889D8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088A58_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088B3C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088BC0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088BFC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088C74_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088CBC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088CD0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088CE4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088D00_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088D30_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088D78_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088D9C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088E08_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088E34_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088E74_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088F14_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80088F94_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008902C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008907C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089114_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800891AC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_BkNum2BlockType.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800892CC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008930C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089348_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800893C8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089404_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_BlockKind2BkNum.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800894D0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089538_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800895B8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089698_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089704_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800897D0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089888_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800898F4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_800899CC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089A34_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089AAC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089B1C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089B94_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089C0C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089CA0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089D18_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089D6C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089E84_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_80089EF8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A000_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A33C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A3BC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A410_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A4F8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_GetUnitFG.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A608_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A670_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A74C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A81C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008A960_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_SetFG_common.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008AA98_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008AB14_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008AC74_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008ACA0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008ACBC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008ACD8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008ADCC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008AE70_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B1A0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B200_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B238_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B26C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B29C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B2D0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B300_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B318_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_SetBearActor.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B3E8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B4C0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B598_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B66C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B774_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B7F4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B878_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008B9F8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BA74_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BAEC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BB64_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BBF0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BC64_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BCFC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BD98_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BDCC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BE00_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BE38_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BF34_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008BFC4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C058_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C0FC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C120_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C130_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C1E0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C344_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C390_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C3B0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C3D4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C3E8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C458_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C478_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C498_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C4B8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C504_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C524_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C548_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C56C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C5F0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C610_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C630_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C650_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_Wpos2DepositOFF.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C708_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C764_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C798_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C830_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C84C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C8C4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C938_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C964_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CA14_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CAD8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CC1C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CCFC_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CD24_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CD74_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CE00_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CE38_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CEC0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008CFF4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D12C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D268_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D3A4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D574_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D6E0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D7B0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008D884_jp.s")
+
+s32 mFI_GetWaveUtinBlock(s32* arg0, s32* arg1, s32 arg2, s32 arg3) {
+ UNUSED s32 pad[4];
+ s32 i;
+ s32 ret = 0;
+ s32 var_s2;
+ s32 var_s3 = 0;
+ mCoBG_unkStructUnion* temp_v0;
+ mCoBG_unkStructUnion* var_s1;
+
+ arg0[0] = 0;
+ arg1[0] = 0;
+
+ temp_v0 = var_s1 = func_80089538_jp(arg2, arg3);
+
+ if (temp_v0 != NULL) {
+
+ for (i = 0; i < 0x100; i++) {
+
+ if (func_80076358_jp(var_s1->data.unk6) == 1) {
+ var_s3 += 1;
+ }
+
+ var_s1++;
+ }
+
+ if (var_s3 > 0) {
+ var_s1 = temp_v0;
+ var_s2 = fqrand() * var_s3;
+
+ for (i = 0; i < 0x100; i++) {
+
+ if (func_80076358_jp(var_s1->data.unk6) == 1) {
+
+ if (var_s2 <= 0) {
+ arg0[0] = i & 0xF;
+ arg1[0] = i >> 4;
+ ret = 1;
+ break;
+ }
+
+ var_s2 -= 1;
+ }
+
+ var_s1++;
+ }
+ }
+ }
+
+ return ret;
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008DA4C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008DCF8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008DD0C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008DD3C_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008DDC8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008DF04_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008E058_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008E514_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008E5F4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_PrintNowBGNum.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/mFI_PrintFgAttr.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008E8E0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008E9C4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008EA5C_jp.s")
diff --git a/src/code/m_start_data_init.c b/src/code/m_start_data_init.c
index 519e519..40a16f4 100644
--- a/src/code/m_start_data_init.c
+++ b/src/code/m_start_data_init.c
@@ -38,6 +38,7 @@
#include "m_time.h"
#include "overlays/gamestates/ovl_play/m_play.h"
#include "sys_math.h"
+#include "m_flashrom.h"
void famicom_emu_initial_common_data(void) {
FamicomEmuCommonData* famicom = &common_data.famicom_emu_common_data;
diff --git a/src/overlays/gamestates/ovl_play/m_play.c b/src/overlays/gamestates/ovl_play/m_play.c
index e6c038c..e4f8501 100644
--- a/src/overlays/gamestates/ovl_play/m_play.c
+++ b/src/overlays/gamestates/ovl_play/m_play.c
@@ -40,6 +40,7 @@
#include "6A7D20.h"
#include "m_scene_table.h"
#include "zurumode.h"
+#include "prevent_bss_reordering.h"
void play_main(Game* game);
void Gameplay_Scene_Read(Game_Play* game_play, s16 arg1);
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index 005cad3..f0b19d1 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -35,7 +35,8 @@
- [0x6A8180, asm, code/m_fbdemo_fade]
- [0x6A83A0, asm, code/m_field_assessment]
- [0x6A8B70, asm, code/m_field_make]
- - [0x6AB8D0, asm, code/m_field_info]
+ - [0x6AB8D0, c, code/m_field_info]
+ - [0x6B2940, asm, code/m_flashrom]
- [0x6B3DC0, asm, code/6B3DC0]
- [0x6B6560, asm, code/m_handbill]
- [0x6B81C0, asm, code/m_home]
@@ -192,7 +193,7 @@
- [0x73A9D0, rodata, code/73A9D0]
- [0x73A9E0, rodata, code/73A9E0]
- [0x73AA10, rodata, code/73AA10]
- - [0x73AAE0, rodata, code/73AAE0]
+ - [0x73AAE0, .rodata, code/m_field_info]
- [0x73ABB0, rodata, code/73ABB0]
- [0x73ABD0, rodata, code/73ABD0]
- [0x73AC50, rodata, code/73AC50]