summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrakxo <87568477+Prakxo@users.noreply.github.com>2024-03-29 16:42:32 +0100
committerGitHub <noreply@github.com>2024-03-29 08:42:32 -0700
commit770d3c2dca047172c7b947c83f136468cb0dc7e0 (patch)
treee2a739ef9256d1fc71d03a3dd6888caf3053677f
parent540648ef26d6dbdd4277bd4bdd8a38e32e8569ad (diff)
m_all_grow OK (#159)
-rw-r--r--include/6792F0.h20
-rw-r--r--include/6DA460.h2
-rw-r--r--include/m_all_grow.h61
-rw-r--r--include/m_common_data.h7
-rw-r--r--include/m_field_info.h6
-rw-r--r--include/m_field_make.h1
-rw-r--r--include/m_scene_table.h1
-rw-r--r--include/segment_symbols.h3
-rw-r--r--include/tables/dmatables/dmadata_table_jp.h4
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt34
-rw-r--r--linker_scripts/jp/symbol_addrs_overlays.txt2
-rw-r--r--src/code/m_all_grow.c301
-rw-r--r--src/code/m_field_info.c2
-rw-r--r--src/code/m_start_data_init.c15
-rw-r--r--src/overlays/actors/ovl_Weather/ac_weather.c2
-rw-r--r--yamls/jp/code.yaml8
-rw-r--r--yamls/jp/overlays.yaml14
17 files changed, 404 insertions, 79 deletions
diff --git a/include/6792F0.h b/include/6792F0.h
index 8e42fb7..7101adc 100644
--- a/include/6792F0.h
+++ b/include/6792F0.h
@@ -5,25 +5,5 @@
// void func_80055650_jp();
// void func_8005578C_jp();
-// void func_800558B0_jp();
-// void func_800558F8_jp();
-// void func_800559D4_jp();
-// void func_80055A54_jp();
-// void func_80055B84_jp();
-// void mAGrw_PrintFossilHaniwa_debug();
-// void func_80055D94_jp();
-void mAGrw_OrderSetHaniwa(void);
-// void func_80055E34_jp();
-// void func_80055E5C_jp();
-// void func_80055EF8_jp();
-// void func_80055F28_jp();
-// void func_80055F64_jp();
-// void func_8005603C_jp();
-// void func_800560AC_jp();
-// void func_8005611C_jp();
-// void func_8005615C_jp();
-// void func_80056234_jp();
-// void func_80056270_jp();
-void mAGrw_ChangeTree2FruitTree(void);
#endif
diff --git a/include/6DA460.h b/include/6DA460.h
index 5593cd6..83b3cb1 100644
--- a/include/6DA460.h
+++ b/include/6DA460.h
@@ -10,7 +10,7 @@ struct Game_Play;
// void func_800B6838_jp();
s32 mPO_get_keep_mail_sum(void);
// void func_800B690C_jp();
-s32 mPO_receipt_proc(Mail_c*, s32);
+s32 mPO_receipt_proc(struct Mail_c*, s32);
// void func_800B6AC8_jp();
// void func_800B6B94_jp();
// void func_800B6C14_jp();
diff --git a/include/m_all_grow.h b/include/m_all_grow.h
index 99867ed..7e53e16 100644
--- a/include/m_all_grow.h
+++ b/include/m_all_grow.h
@@ -3,28 +3,63 @@
#include "ultra64.h"
-#define mAGrw_DUMP_WIDTH 4
-#define mAGrw_DUMP_HEIGHT 4
+struct Foreground;
+struct gfxprint;
+struct lbRTC_time_c;
+
+#define AGrw_DUMP_WIDTH 4
+#define AGrw_DUMP_HEIGHT 4
typedef enum mAGrw_XMAS_PROC {
- /* 0 */ mAGrw_XMAS_PROC_CLEAR,
- /* 1 */ mAGrw_XMAS_PROC_SET,
+ /* 0 */ AGrw_XMAS_PROC_CLEAR,
+ /* 1 */ AGrw_XMAS_PROC_SET,
/* 2 */ mAGrw_XMAS_PROC_NUM
} mAGrw_XMAS_PROC;
typedef enum mAGrw_FRUIT {
- /* 0 */ mAGrw_FRUIT_APPLE,
- /* 1 */ mAGrw_FRUIT_CHERRY,
- /* 2 */ mAGrw_FRUIT_PEAR,
- /* 3 */ mAGrw_FRUIT_PEACH,
- /* 4 */ mAGrw_FRUIT_ORANGE,
+ /* 0 */ AGrw_FRUIT_APPLE,
+ /* 1 */ AGrw_FRUIT_CHERRY,
+ /* 2 */ AGrw_FRUIT_PEAR,
+ /* 3 */ AGrw_FRUIT_PEACH,
+ /* 4 */ AGrw_FRUIT_ORANGE,
- /* 5 */ mAGrw_FRUIT_NUM
+ /* 5 */ AGrw_FRUIT_NUM
} mAGrw_FRUIT;
-#define mAGrw_XMAS_LIGHTS_MAX_BLOCK 3
-#define mAGrw_CEDAR_BLOCK_Z_MIN 0
-#define mAGrw_CEDAR_BLOCK_Z_MAX 3 // [min, max)
+#define AGrw_XMAS_LIGHTS_MAX_BLOCK 3
+#define AGrw_CEDAR_BLOCK_Z_MIN 0
+#define AGrw_CEDAR_BLOCK_Z_MAX 3 // [min, max)
+#define AGrw_FOSSIL_NUM 5
+#define AGrw_HANIWA_NUM 3
+
+typedef struct AllGrowBlock {
+ /* 0x0 */ u8 blockX;
+ /* 0x1 */ u8 blockZ;
+} AllGrowBlock; // size 0x2
+
+
+void mAGrw_ClearDebugData(void);
+s32 mAGrw_CheckRegistedData_debug(AllGrowBlock* blockInfo, s32 num, s32 blockX, s32 blockZ);
+void mAGrw_SetBlockData_debug(AllGrowBlock* blockInfo, s32 num, s32 blockX, s32 blockZ);
+void mAGrw_SetDebugDataBlock(u16* fgItems, u16* deposit, AllGrowBlock* fossilBlockInfo, s32 fossilMax, s32* fossilNum,
+ AllGrowBlock* haniwaBlockInfo, s32 haniwaMax, s32* haniwaNum, s32 blockX, s32 blockZ);
+void mAGrw_SetDebugData(void);
+void mAGrw_PrintFossilHaniwa_debug(struct gfxprint* gfxprint);
+s32 mAGrw_CheckKabuPeddler(void);
+void mAGrw_OrderSetHaniwa(void);
+u8 func_80055E34_jp(u16* items);
+void mAGrw_ChangeItemBlock(u16* blockItems, u16 newItem, u16 targetItem, u8 possibleNum);
+void mAGrw_ChangeItemBlock2(u16* blockItems, u16 newItem, u8 possibleNum);
+s32 mAGrw_CheckPutXmasTree(struct lbRTC_time_c* time);
+void mAGrw_SetXmasTreeBlock(u16* blockItems);
+void mAGrw_ClearXmasTreeBlock(u16* blockItems);
+void mAGrw_XmasTreeField(s32 type);
+void mAGrw_SetXmasTree(void);
+void mAGrw_RenewalFgItem(struct lbRTC_time_c* time);
+void mAGrw_ChangeTree2OtherBlock(u16* items, u16 other);
+void mAGrw_ChangeTree2FruitTreeLine(struct Foreground* fg, u16 fruitTree);
+void mAGrw_ChangeTree2FruitTree(void);
+
#endif
diff --git a/include/m_common_data.h b/include/m_common_data.h
index e32ea78..a14bc35 100644
--- a/include/m_common_data.h
+++ b/include/m_common_data.h
@@ -82,7 +82,9 @@ typedef struct CommonData {
/* 0x0EDA4 */ EventSaveInfo eventSaveInfo;
/* 0x0EE40 */ u8 unk_0EE40[0x118];
/* 0x0EF58 */ u16 fruit;
- /* 0x0EF5A */ UNK_TYPE1 unk_0EF5A[0x12];
+ /* 0x0EF5A */ UNK_TYPE1 unk_0EF5A[2];
+ /* 0x0EF5C */ lbRTC_time_c allGrowRenewTime;
+ /* 0x0EF60 */ UNK_TYPE1 unk_0EF64[8];
/* 0x0EF6C */ Mail_c unk_0EF6C[5];
/* 0x0F2A0 */ UNK_TYPE1 unk_0F2A0[0x17C];
/* 0x0F41C */ SnowmanData snowmanData[SNOWMAN_SAVE_COUNT];
@@ -106,7 +108,8 @@ typedef struct CommonData {
/* 0x0F8AE */ u8 snowmanMonth; // Month last snowman was built.
/* 0x0F8AF */ u8 snowmanDay; // Day last snowman was built.
/* 0x0F8B0 */ u8 snowmanHour; // Hour last snowman was built.
- /* 0x0F8B1 */ UNK_TYPE1 unk_0F8B1[0x74F];
+ /* 0X0F8B1 */ u8 haniwaScheduled;
+ /* 0x0F8B2 */ UNK_TYPE1 unk_0F8B2[0x74E];
/* 0x10000 */ u8 unk_10000; // named "game_started" in AC GCN decomp
/* 0x10001 */ u8 unk_10001;
/* 0x10002 */ u8 unk_10002[0x1];
diff --git a/include/m_field_info.h b/include/m_field_info.h
index 6dd33d5..8f74895 100644
--- a/include/m_field_info.h
+++ b/include/m_field_info.h
@@ -147,7 +147,7 @@ s32 func_8008B3E8_jp(xyz_t* arg0, UNK_TYPE arg1);
// void func_8008B4C0_jp();
// void func_8008B598_jp();
// void func_8008B66C_jp();
-// void func_8008B774_jp();
+s32 func_8008B774_jp(s32,u16*);
// void func_8008B7F4_jp();
// void func_8008B878_jp();
// void func_8008B9F8_jp();
@@ -171,10 +171,10 @@ u16* mFI_GetDepositP(s32,s32);
// void func_8008C344_jp();
// void func_8008C390_jp();
// void func_8008C3B0_jp();
-// void func_8008C3D4_jp();
+s32 mFI_GetLineDeposit(u16* deposit, s32 utX);
// void func_8008C3E8_jp();
// void func_8008C458_jp();
-void mFI_BlockDepositOFF(u16* deposit, int ut_x, int ut_z);
+void mFI_BlockDepositOFF(u16* deposit, s32 utX, s32 utZ);
// void func_8008C498_jp();
// void func_8008C4B8_jp();
// void func_8008C504_jp();
diff --git a/include/m_field_make.h b/include/m_field_make.h
index 3d2777b..b26862f 100644
--- a/include/m_field_make.h
+++ b/include/m_field_make.h
@@ -2,6 +2,7 @@
#define M_FIELD_MAKE_H
#include "ultra64.h"
+#include "unk.h"
struct Game;
diff --git a/include/m_scene_table.h b/include/m_scene_table.h
index d049a5f..fd31922 100644
--- a/include/m_scene_table.h
+++ b/include/m_scene_table.h
@@ -3,6 +3,7 @@
#include "ultra64.h"
#include "z64math.h"
+#include "unknown_structs.h"
typedef enum SceneTable {
/* 00 */ SCENE_TEST1,
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index f320ec6..26d7801 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -32,6 +32,7 @@
#define SEGMENT_VRAM_START(segment) (segment ## _VRAM)
#define SEGMENT_VRAM_END(segment) (segment ## _VRAM_END)
#define SEGMENT_VRAM_SIZE(segment) ((uintptr_t)SEGMENT_VRAM_END(segment) - (uintptr_t)SEGMENT_VRAM_START(segment))
+#define SEGMENT_VRAM_RESOLVE_ADDR(segment, base, symbol) ((uintptr_t)(base) + (uintptr_t)&(symbol) - (uintptr_t)SEGMENT_VRAM_START(segment))
#define SEGMENT_ROM_START(segment) ((RomOffset)segment ## _ROM_START)
#define SEGMENT_ROM_END(segment) ((RomOffset)segment ## _ROM_END)
@@ -117,4 +118,6 @@ DECLARE_SEGMENT(segment_01409000);
DECLARE_SEGMENT(segment_0140A000);
DECLARE_SEGMENT(segment_0140B000);
+DECLARE_SEGMENT(m_all_grow_ovl);
+
#endif
diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h
index 78b6d2f..cbe1dcd 100644
--- a/include/tables/dmatables/dmadata_table_jp.h
+++ b/include/tables/dmatables/dmadata_table_jp.h
@@ -1844,8 +1844,8 @@ DEFINE_DMA_ENTRY(ovl__00970200, "ovl__00970200")
DEFINE_DMA_ENTRY(ovl__00970200_reloc, "ovl__00970200_reloc")
DEFINE_DMA_ENTRY(ovl_Dummy, "ovl_Dummy")
DEFINE_DMA_ENTRY(ovl_Dummy_reloc, "ovl_Dummy_reloc")
-DEFINE_DMA_ENTRY(ovl__00970920, "ovl__00970920")
-DEFINE_DMA_ENTRY(ovl__00970920_reloc, "ovl__00970920_reloc")
+DEFINE_DMA_ENTRY(m_all_grow_ovl, "m_all_grow_ovl")
+DEFINE_DMA_ENTRY(m_all_grow_ovl_reloc, "m_all_grow_ovl_reloc")
DEFINE_DMA_ENTRY(segment_009757E0, "segment_009757E0")
DEFINE_DMA_ENTRY(segment_009D4000, "segment_009D4000")
DEFINE_DMA_ENTRY(segment_009DF000, "segment_009DF000")
diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt
index 11dc5e9..911175f 100644
--- a/linker_scripts/jp/symbol_addrs_code.txt
+++ b/linker_scripts/jp/symbol_addrs_code.txt
@@ -57,25 +57,25 @@ func_800554D8_jp = 0x800554D8; // type:func
Evw_Anime_Set = 0x80055598; // type:func
func_80055650_jp = 0x80055650; // type:func
func_8005578C_jp = 0x8005578C; // type:func
-func_800558B0_jp = 0x800558B0; // type:func
-func_800558F8_jp = 0x800558F8; // type:func
-func_800559D4_jp = 0x800559D4; // type:func
-func_80055A54_jp = 0x80055A54; // type:func
-func_80055B84_jp = 0x80055B84; // type:func
+mAGrw_ClearDebugData = 0x800558B0; // type:func
+mAGrw_CheckRegistedData_debug = 0x800558F8; // type:func
+mAGrw_SetBlockData_debug = 0x800559D4; // type:func
+mAGrw_SetDebugDataBlock = 0x80055A54; // type:func
+mAGrw_SetDebugData = 0x80055B84; // type:func
mAGrw_PrintFossilHaniwa_debug = 0x80055C74; // type:func
-func_80055D94_jp = 0x80055D94; // type:func
+mAGrw_CheckKabuPeddler = 0x80055D94; // type:func
mAGrw_OrderSetHaniwa = 0x80055E20; // type:func
func_80055E34_jp = 0x80055E34; // type:func
-func_80055E5C_jp = 0x80055E5C; // type:func
-func_80055EF8_jp = 0x80055EF8; // type:func
-func_80055F28_jp = 0x80055F28; // type:func
-func_80055F64_jp = 0x80055F64; // type:func
-func_8005603C_jp = 0x8005603C; // type:func
-func_800560AC_jp = 0x800560AC; // type:func
-func_8005611C_jp = 0x8005611C; // type:func
-func_8005615C_jp = 0x8005615C; // type:func
-func_80056234_jp = 0x80056234; // type:func
-func_80056270_jp = 0x80056270; // type:func
+mAGrw_ChangeItemBlock = 0x80055E5C; // type:func
+mAGrw_ChangeItemBlock2 = 0x80055EF8; // type:func
+mAGrw_CheckPutXmasTree = 0x80055F28; // type:func
+mAGrw_SetXmasTreeBlock = 0x80055F64; // type:func
+mAGrw_ClearXmasTreeBlock = 0x8005603C; // type:func
+mAGrw_XmasTreeField = 0x800560AC; // type:func
+mAGrw_SetXmasTree = 0x8005611C; // type:func
+mAGrw_RenewalFgItem = 0x8005615C; // type:func
+mAGrw_ChangeTree2OtherBlock = 0x80056234; // type:func
+mAGrw_ChangeTree2FruitTreeLine = 0x80056270; // type:func
mAGrw_ChangeTree2FruitTree = 0x80056310; // type:func
func_80056380_jp = 0x80056380; // type:func
projection_pos_set = 0x800563F4; // type:func
@@ -1428,7 +1428,7 @@ mFI_GetDepositP = 0x8008C1E0; // type:func
func_8008C344_jp = 0x8008C344; // type:func
func_8008C390_jp = 0x8008C390; // type:func
func_8008C3B0_jp = 0x8008C3B0; // type:func
-func_8008C3D4_jp = 0x8008C3D4; // type:func
+mFI_GetLineDeposit = 0x8008C3D4; // type:func
func_8008C3E8_jp = 0x8008C3E8; // type:func
func_8008C458_jp = 0x8008C458; // type:func
mFI_BlockDepositOFF = 0x8008C478; // type:func
diff --git a/linker_scripts/jp/symbol_addrs_overlays.txt b/linker_scripts/jp/symbol_addrs_overlays.txt
index 419dac8..9f8e36d 100644
--- a/linker_scripts/jp/symbol_addrs_overlays.txt
+++ b/linker_scripts/jp/symbol_addrs_overlays.txt
@@ -21846,7 +21846,7 @@ func_80AB4988_jp = 0x80AB4988; // type:func
func_80AB4B90_jp = 0x80AB4B90; // type:func
func_80AB4DE4_jp = 0x80AB4DE4; // type:func
func_80AB4E9C_jp = 0x80AB4E9C; // type:func
-func_80AB4F1C_jp = 0x80AB4F1C; // type:func
+mAGrw_RenewalFgItem_ovl = 0x80AB4F1C; // type:func
// .data
diff --git a/src/code/m_all_grow.c b/src/code/m_all_grow.c
new file mode 100644
index 0000000..392aa57
--- /dev/null
+++ b/src/code/m_all_grow.c
@@ -0,0 +1,301 @@
+#include "m_all_grow.h"
+#include "m_time.h"
+#include "m_field_make.h"
+#include "m_field_info.h"
+#include "m_common_data.h"
+#include "libu64/gfxprint.h"
+#include "m_scene_table.h"
+#include "sys_math.h"
+#include "ovlmgr.h"
+#include "m_malloc.h"
+#include "segment_symbols.h"
+
+typedef void (*allGrowOvlUnkFunc)(lbRTC_time_c*, s32*);
+
+extern void mAGrw_RenewalFgItem_ovl(lbRTC_time_c* time, s32* haniwaDeposit);
+
+u16 l_tree_max_table[] = {
+ 0x80C, 0x82C, 0x824, 0x81C, 0x814, 0x804,
+};
+
+allGrowOvlUnkFunc D_80100C5C_jp = NULL;
+
+s32 l_fossil_num_debug = 0;
+s32 l_haniwa_num_debug = 0;
+
+AllGrowBlock l_fossil_block[AGrw_FOSSIL_NUM];
+AllGrowBlock l_haniwa_block[AGrw_HANIWA_NUM];
+
+void mAGrw_ClearDebugData() {
+ l_fossil_num_debug = 0;
+ l_haniwa_num_debug = 0;
+
+ bzero(l_fossil_block, AGrw_FOSSIL_NUM * sizeof(AllGrowBlock));
+ bzero(l_haniwa_block, AGrw_HANIWA_NUM * sizeof(AllGrowBlock));
+}
+
+s32 mAGrw_CheckRegistedData_debug(AllGrowBlock* blockInfo, s32 num, s32 blockX, s32 blockZ) {
+ s32 res = FALSE;
+ s32 i;
+
+ for (i = 0; i < num; i++) {
+ if (blockInfo->blockX == blockX && blockInfo->blockZ == blockZ) {
+ res = TRUE;
+ }
+
+ blockInfo++;
+ }
+
+ return res;
+}
+
+void mAGrw_SetBlockData_debug(AllGrowBlock* blockInfo, s32 num, s32 blockX, s32 blockZ) {
+ if (mAGrw_CheckRegistedData_debug(blockInfo, num, blockX, blockZ) == FALSE) {
+ s32 i;
+
+ for (i = 0; i < num; i++) {
+ if (blockInfo->blockX == 0 && blockInfo->blockZ == 0) {
+ blockInfo->blockX = blockX;
+ blockInfo->blockZ = blockZ;
+ break;
+ }
+
+ blockInfo++;
+ }
+ }
+}
+
+void mAGrw_SetDebugDataBlock(u16* fgItems, u16* deposit, AllGrowBlock* fossilBlockInfo, s32 fossilMax, s32* fossilNum,
+ AllGrowBlock* haniwaBlockInfo, s32 haniwaMax, s32* haniwaNum, s32 blockX, s32 blockZ) {
+ s32 ut_z;
+ s32 ut_x;
+ for (ut_z = 0; ut_z < UT_Z_NUM; ut_z++) {
+ for (ut_x = 0; ut_x < UT_X_NUM; ut_x++) {
+ if (mFI_GetLineDeposit(deposit, ut_x) == TRUE) {
+ if (*fgItems == 0x2511) {
+ mAGrw_SetBlockData_debug(fossilBlockInfo, fossilMax, blockX, blockZ);
+ (*fossilNum)++;
+ } else if ((*fgItems >= 0x15B0 && *fgItems < 0x17AC)) {
+ mAGrw_SetBlockData_debug(haniwaBlockInfo, haniwaMax, blockX, blockZ);
+ (*haniwaNum)++;
+ }
+ }
+ fgItems++;
+ }
+ deposit++;
+ }
+}
+
+void mAGrw_SetDebugData() {
+ Foreground* fgItems = common_data.foreground[0];
+ u16* deposit = common_data.deposit[0];
+ s32 blockZ;
+
+ mAGrw_ClearDebugData();
+
+ for (blockZ = 0; blockZ < FG_BLOCK_Z_NUM; blockZ++) {
+ s32 blockX;
+ for (blockX = 0; blockX < FG_BLOCK_X_NUM; blockX++) {
+ mAGrw_SetDebugDataBlock(fgItems[0].items[0], deposit, l_fossil_block, AGrw_FOSSIL_NUM, &l_fossil_num_debug,
+ l_haniwa_block, AGrw_HANIWA_NUM, &l_haniwa_num_debug, blockX + 1, blockZ + 1);
+ fgItems++;
+ deposit += UT_Z_NUM;
+ }
+ }
+}
+
+void mAGrw_PrintFossilHaniwa_debug(gfxprint* gfxprint) {
+ gfxprint_color(gfxprint, 240, 50, 50, 255);
+ gfxprint_locate8x8(gfxprint, 3, 17);
+
+ gfxprint_printf(gfxprint, "%4d %1d%1d %1d%1d %1d%1d %1d%1d ", l_fossil_num_debug, l_fossil_block[0].blockX,
+ l_fossil_block[0].blockZ, l_fossil_block[1].blockX, l_fossil_block[1].blockZ,
+ l_fossil_block[2].blockX, l_fossil_block[2].blockZ, l_fossil_block[3].blockX,
+ l_fossil_block[3].blockZ);
+
+ gfxprint_locate8x8(gfxprint, 20, 17);
+
+ gfxprint_printf(gfxprint, "%1d%1d %4d %1d%1d %1d%1d %1d%1d", l_fossil_block[4].blockX, l_fossil_block[4].blockZ,
+ l_haniwa_num_debug, l_haniwa_block[0].blockX, l_haniwa_block[0].blockZ, l_haniwa_block[1].blockX,
+ l_haniwa_block[1].blockZ, l_haniwa_block[2].blockX, l_haniwa_block[2].blockZ);
+}
+
+s32 mAGrw_CheckKabuPeddler() {
+ lbRTC_time_c* rtcTime = &common_data.time.rtcTime;
+ lbRTC_time_c* renewTime = &common_data.allGrowRenewTime;
+ lbRTC_time_c peddlerSpawnTime;
+ s32 res = FALSE;
+
+ if (rtcTime->weekday == lbRTC_SUNDAY) {
+ lbRTC_TimeCopy(&peddlerSpawnTime, rtcTime);
+ peddlerSpawnTime.hour = 6;
+ peddlerSpawnTime.min = 0;
+ peddlerSpawnTime.sec = 0;
+
+ if (lbRTC_IsOverTime(&peddlerSpawnTime, renewTime) == lbRTC_OVER ||
+ lbRTC_IsEqualTime(&mTM_rtcTime_clear_code, renewTime, lbRTC_CHECK_ALL) == TRUE) {
+ res = TRUE;
+ }
+ }
+
+ return res;
+}
+
+void mAGrw_OrderSetHaniwa() {
+ common_data.haniwaScheduled = TRUE;
+}
+
+u8 func_80055E34_jp(u16* items) {
+ return func_8008B774_jp(0x804, items);
+}
+
+void mAGrw_ChangeItemBlock(u16* blockItems, u16 newItem, u16 targetItem, u8 possibleNum) {
+ s32 selected = RANDOM(possibleNum);
+ s32 i;
+
+ for (i = 0; i < UT_TOTAL_NUM; i++) {
+ if (targetItem == *blockItems) {
+ if (selected <= 0) {
+ *blockItems = newItem;
+ break;
+ }
+ selected--;
+ }
+ blockItems++;
+ }
+}
+
+void mAGrw_ChangeItemBlock2(u16* blockItems, u16 newItem, u8 possibleNum) {
+ mAGrw_ChangeItemBlock(blockItems, newItem, 0x804, possibleNum);
+}
+
+s32 mAGrw_CheckPutXmasTree(lbRTC_time_c* time) {
+ s32 res = 0;
+
+ if (time->month == lbRTC_DECEMBER && time->day >= 10 && time->day < 25) {
+ res = 1;
+ }
+
+ return res;
+}
+
+void mAGrw_SetXmasTreeBlock(u16* blockItems) {
+ u8 existNum = 0;
+ u8 possibleNum = 0;
+ s32 i;
+
+ for (i = 0; i < UT_TOTAL_NUM; i++) {
+ if (*blockItems == 0x804) {
+ possibleNum++;
+ } else if (*blockItems == 0x60) {
+ existNum++;
+ }
+
+ blockItems++;
+ }
+
+ blockItems = blockItems - UT_TOTAL_NUM;
+
+ if (possibleNum > 0) {
+
+ s32 spawnNum = 3 - existNum;
+
+ if (spawnNum > 0) {
+ if (possibleNum < spawnNum) {
+ spawnNum = possibleNum;
+ }
+
+ for (i = 0; i < spawnNum; i++, possibleNum--) {
+ mAGrw_ChangeItemBlock2(blockItems, 0x60, possibleNum);
+ }
+ }
+ }
+}
+
+void mAGrw_ClearXmasTreeBlock(u16* blockItems) {
+ s32 i;
+
+ for (i = 0; i < UT_TOTAL_NUM; i++) {
+ if (*blockItems == 0x60) {
+ *blockItems = 0x804;
+ }
+
+ blockItems++;
+ }
+}
+
+typedef void (*xmasProcFunc)(u16*);
+
+void mAGrw_XmasTreeField(s32 type) {
+ static xmasProcFunc xmas_proc[] = { &mAGrw_ClearXmasTreeBlock, &mAGrw_SetXmasTreeBlock };
+
+ Foreground* block = common_data.foreground[0];
+ s32 i;
+
+ for (i = 0; i < FG_BLOCK_TOTAL_NUM; i++) {
+ (*xmas_proc[type])(block[0].items[0]);
+ block++;
+ }
+}
+
+void mAGrw_SetXmasTree() {
+ if (common_data.sceneNo == SCENE_FG) {
+ s32 type = mAGrw_CheckPutXmasTree(&common_data.time.rtcTime);
+ mAGrw_XmasTreeField(type);
+ }
+}
+
+void mAGrw_RenewalFgItem(lbRTC_time_c* time) {
+ u32 ovlSize = SEGMENT_VRAM_SIZE(m_all_grow_ovl);
+ allGrowOvlUnkFunc func;
+
+ if (common_data.sceneNo == SCENE_FG) {
+ s32 schedHaniwa = common_data.haniwaScheduled;
+ D_80100C5C_jp = zelda_malloc(ovlSize);
+
+ if (D_80100C5C_jp != NULL) {
+ ovlmgr_Load(SEGMENT_ROM_START(m_all_grow_ovl), SEGMENT_ROM_END(m_all_grow_ovl),
+ SEGMENT_VRAM_START(m_all_grow_ovl), SEGMENT_VRAM_END(m_all_grow_ovl), D_80100C5C_jp);
+ func = (allGrowOvlUnkFunc)SEGMENT_VRAM_RESOLVE_ADDR(m_all_grow_ovl, D_80100C5C_jp, mAGrw_RenewalFgItem_ovl);
+ (*func)(time, &schedHaniwa);
+ common_data.haniwaScheduled = schedHaniwa;
+ zelda_free(D_80100C5C_jp);
+ }
+
+ mAGrw_SetDebugData();
+ }
+}
+
+void mAGrw_ChangeTree2OtherBlock(u16* items, u16 other) {
+ u8 count = func_80055E34_jp(items);
+
+ if (count > 0) {
+ mAGrw_ChangeItemBlock2(items, other, count);
+ }
+}
+
+void mAGrw_ChangeTree2FruitTreeLine(Foreground* fg, u16 fruitTree) {
+ s32 block0;
+ s32 block1;
+
+ block0 = RANDOM(FG_BLOCK_X_NUM);
+ block1 = RANDOM(FG_BLOCK_X_NUM - 1);
+
+ if (block0 == block1) {
+ block1++;
+ }
+
+ mAGrw_ChangeTree2OtherBlock((fg + block0)->items[0], fruitTree);
+ mAGrw_ChangeTree2OtherBlock((fg + block1)->items[0], fruitTree);
+}
+
+void mAGrw_ChangeTree2FruitTree() {
+ s32 fruit = common_data.fruit - 0x2800;
+ u16 fruitTree;
+ s32 blockZ;
+
+ fruitTree = l_tree_max_table[fruit];
+ for (blockZ = 0; blockZ < FG_BLOCK_Z_NUM; blockZ++) {
+ mAGrw_ChangeTree2FruitTreeLine(common_data.foreground[blockZ], fruitTree);
+ }
+}
diff --git a/src/code/m_field_info.c b/src/code/m_field_info.c
index 6284156..906ed63 100644
--- a/src/code/m_field_info.c
+++ b/src/code/m_field_info.c
@@ -269,7 +269,7 @@
#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/mFI_GetLineDeposit.s")
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_field_info/func_8008C3E8_jp.s")
diff --git a/src/code/m_start_data_init.c b/src/code/m_start_data_init.c
index a50fc80..1fe8c87 100644
--- a/src/code/m_start_data_init.c
+++ b/src/code/m_start_data_init.c
@@ -1,43 +1,42 @@
#include "m_start_data_init.h"
-#include "6792F0.h"
-#include "m_cockroach.h"
#include "69CB30.h"
#include "6A83A0.h"
#include "6B81C0.h"
-#include "m_land.h"
#include "6BA500.h"
#include "6C0690.h"
#include "6C97F0.h"
-#include "m_npc_schedule.h"
#include "6D9D80.h"
#include "6DA460.h"
-#include "m_quest.h"
#include "6E30B0.h"
#include "6E7AD0.h"
#include "6ECD90.h"
#include "6EDD10.h"
-#include "lb_rtc.h"
#include "global.h"
+#include "lb_rtc.h"
#include "libc64/qrand.h"
#include "m_all_grow.h"
+#include "m_cockroach.h"
#include "m_common_data.h"
#include "m_event.h"
#include "m_field_info.h"
#include "m_field_make.h"
+#include "m_flashrom.h"
#include "m_handbill.h"
#include "m_home.h"
#include "m_house.h"
#include "m_kankyo.h"
+#include "m_land.h"
#include "m_lib.h"
#include "m_msg_main.h"
#include "m_name_table.h"
#include "m_npc.h"
+#include "m_npc_schedule.h"
+#include "m_quest.h"
#include "m_scene_table.h"
#include "m_snowman.h"
#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.famicomEmuCommonData;
@@ -63,7 +62,7 @@ void famicom_emu_initial_common_data(void) {
}
void decide_fruit(u16* fruit) {
- u16 n = mAGrw_FRUIT_NUM;
+ u16 n = AGrw_FRUIT_NUM;
*fruit = ITM_FOOD_START | (u16)RANDOM_F(n);
}
diff --git a/src/overlays/actors/ovl_Weather/ac_weather.c b/src/overlays/actors/ovl_Weather/ac_weather.c
index d99d01a..b918724 100644
--- a/src/overlays/actors/ovl_Weather/ac_weather.c
+++ b/src/overlays/actors/ovl_Weather/ac_weather.c
@@ -14,7 +14,7 @@
#include "m_kankyo.h"
#include "6EDD10.h"
#include "m_event.h"
-#include "6792F0.h"
+#include "m_all_grow.h"
#include "683030.h"
#include "segment_symbols.h"
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index a245bbc..eb1f85a 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -9,6 +9,7 @@
- [0x675720, c, code/c_keyframe]
- [0x678660, asm, code/evw_anime]
- [0x6792F0, asm, code/6792F0]
+ - [0x679550, c, code/m_all_grow]
- [0x67A020, c, code/m_actor]
- [0x67C6B0, c, code/m_actor_dlftbls]
- [0x67C890, c, code/m_actor_shadow]
@@ -137,7 +138,8 @@
- [0x723010, data, code/rsp/723010]
- - [0x7248D0, data, code/7248D0]
+ - [0x7248D0, data, code/evw_anime]
+ - [0x7248F0, .data, code/m_all_grow]
- [0x724910, .data, code/m_actor]
- [0x724930, .data, code/m_actor_dlftbls]
- [0x726260, .data, code/m_actor_shadow]
@@ -184,7 +186,7 @@
- [0x733A10, data, code/733A10]
- [0x739DB0, .rodata, code/c_keyframe]
- - [0x739E00, rodata, code/739E00]
+ - [0x739E00, .rodata, code/m_all_grow]
- [0x739E50, .rodata, code/m_actor]
- [0x739EA0, .rodata, code/m_actor_dlftbls]
- [0x739EF0, .rodata, code/m_actor_shadow]
@@ -266,7 +268,7 @@
- [0x73C7C0, rodata, code/73C7C0] # rodata of code/71A140 starts here
- [0x73CEE0, rodata, code/73CEE0]
- - { start: 0x73F4D0, type: bss, vram: 0x8011B830, name: code/8011B830 }
+ - { start: 0x73F4D0, type: .bss, vram: 0x8011B830, name: code/m_all_grow }
- { start: 0x73F4D0, type: .bss, vram: 0x8011B850, name: code/m_actor }
- { start: 0x73F4D0, type: .bss, vram: 0x8011B890, name: code/m_actor_dlftbls }
- { start: 0x73F4D0, type: bss, vram: 0x8011B8B0, name: code/8011B8B0 }
diff --git a/yamls/jp/overlays.yaml b/yamls/jp/overlays.yaml
index 8a9b44b..d4c2cdf 100644
--- a/yamls/jp/overlays.yaml
+++ b/yamls/jp/overlays.yaml
@@ -17340,7 +17340,7 @@
subsegments:
- [0x9708F0, data, overlays/actors/ovl_Dummy/ac_dummy_reloc]
- - name: ovl__00970920
+ - name: m_all_grow_ovl
type: code
start: 0x970920
vram: 0x80AB07C0
@@ -17348,14 +17348,14 @@
compress: True
bss_size: 0x420
subsegments:
- - [0x970920, asm, overlays/other_ovl/ovl__00970920/ovl__00970920]
- - [0x975330, data, overlays/other_ovl/ovl__00970920/ovl__00970920]
- - { start: 0x9754A0, type: bss, vram: 0x80AB5340, name: overlays/other_ovl/ovl__00970920/ovl__00970920 }
- - name: ovl__00970920_reloc
+ - [0x970920, asm, overlays/other_ovl/m_all_grow_ovl/m_all_grow_ovl]
+ - [0x975330, data, overlays/other_ovl/m_all_grow_ovl/m_all_grow_ovl]
+ - { start: 0x9754A0, type: bss, vram: 0x80AB5340, name: overlays/other_ovl/m_all_grow_ovl/m_all_grow_ovl }
+ - name: m_all_grow_ovl_reloc
type: code
start: 0x9754A0
vram: 0x80AB5760
- follows_vram: ovl__00970920
+ follows_vram: m_all_grow_ovl
compress: True
subsegments:
- - [0x9754A0, data, overlays/other_ovl/ovl__00970920/ovl__00970920_reloc]
+ - [0x9754A0, data, overlays/other_ovl/m_all_grow_ovl/m_all_grow_ovl_reloc]