diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-06-27 12:39:36 +0200 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-06-27 12:39:36 +0200 |
commit | 9838c293c547d07bb96c1ad66e21e1c35bc1f56c (patch) | |
tree | a58fd6d6c9d9b10687c62800b0c21987f23f0455 /arm9/src | |
parent | c7b7cb66d44554ea4cd2873826deabbade5a52ae (diff) | |
parent | eb0aacbbaf3876a597d26255a48def2cb43c1d2c (diff) |
Merge branch 'master' into unk_020030E8
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/bag_view.c | 5 | ||||
-rw-r--r-- | arm9/src/save.c | 1 | ||||
-rw-r--r-- | arm9/src/save_arrays.c | 5 | ||||
-rw-r--r-- | arm9/src/timer3.c | 6 | ||||
-rw-r--r-- | arm9/src/unk_0201C6B4.c | 80 | ||||
-rw-r--r-- | arm9/src/unk_0202A1E0.c | 536 | ||||
-rw-r--r-- | arm9/src/unk_0205FA2C.c | 97 |
7 files changed, 672 insertions, 58 deletions
diff --git a/arm9/src/bag_view.c b/arm9/src/bag_view.c index 91bbafd2..31d53861 100644 --- a/arm9/src/bag_view.c +++ b/arm9/src/bag_view.c @@ -7,14 +7,13 @@ #include "player_data.h" #include "script_buffers.h" #include "seal.h" +#include "unk_0202A1E0.h" extern u32 *FUN_0202708C(u32 *); extern u32 FUN_02027168(u32 *); extern u16 FUN_02027184(u32 *); extern u32 *FUN_02027E24(struct SaveBlock2 *sav2); extern u8 FUN_02029E2C(struct SealCase *, u32); -extern u32 FUN_0202A8D8(struct SaveBlock2 *); -extern u16 FUN_0202A3B4(u32, u32, u32); THUMB_FUNC struct BagView *BagView_New(u8 heap_id) { @@ -122,7 +121,7 @@ THUMB_FUNC u32 FUN_0206E3D8(struct SaveBlock2 *sav2) THUMB_FUNC u32 FUN_0206E3E8(struct SaveBlock2 *sav2) { - return FUN_0202A3B4(FUN_0202A8D8(sav2), 0, 0); + return SaveStruct23_Substruct2_SetField_0x0(SaveStruct23_GetSubstruct2(sav2), 0, DATA_GET); } THUMB_FUNC BOOL FUN_0206E3F8(struct SaveBlock2 *sav2, struct String *dest, u32 item_id, u32 heap_id) diff --git a/arm9/src/save.c b/arm9/src/save.c index 89bd8374..7eb523f6 100644 --- a/arm9/src/save.c +++ b/arm9/src/save.c @@ -3,6 +3,7 @@ #include "save_block_2.h" #include "heap.h" #include "CARD_backup.h" +#include "OS_spinLock.h" #pragma thumb on diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index f4b18b86..1969e3f1 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -16,6 +16,7 @@ #include "unk_020139D8.h" #include "unk_02024E64.h" #include "sav_chatot.h" +#include "unk_0202A1E0.h" extern u32 FUN_0202AC20(void); extern u32 FUN_02034D7C(void); @@ -28,7 +29,6 @@ extern u32 FUN_02028980(void); extern u32 FUN_02029A84(void); extern u32 FUN_02029FB0(void); extern u32 Sav2_Chatot_sizeof(void); -extern u32 FUN_0202A89C(void); extern u32 FUN_0202A8F4(void); extern u32 FUN_0202A924(void); extern u32 FUN_0202ABC8(void); @@ -48,7 +48,6 @@ extern void FUN_0202805C(void *); extern void FUN_02028994(void *); extern void FUN_02029A8C(void *); extern void FUN_02029FB8(void *); -extern void FUN_0202A8A4(void *); extern void FUN_0202A8F8(void *); extern void FUN_0202A92C(void *); extern void FUN_0202ABCC(void *); @@ -88,7 +87,7 @@ const struct SaveChunkHeader UNK_020EE700[] = { { 20, 0, (SAVSIZEFN)FUN_02029FB0, (SAVINITFN)FUN_02029FB8 }, { 21, 0, (SAVSIZEFN)Sav2_SealCase_sizeof, (SAVINITFN)Sav2_SealCase_init }, { 22, 0, (SAVSIZEFN)Sav2_Chatot_sizeof, (SAVINITFN)Sav2_Chatot_init }, - { 23, 0, (SAVSIZEFN)FUN_0202A89C, (SAVINITFN)FUN_0202A8A4 }, + { 23, 0, (SAVSIZEFN)SaveStruct23_sizeof, (SAVINITFN)SaveStruct23_Init }, { 24, 0, (SAVSIZEFN)FUN_0202A8F4, (SAVINITFN)FUN_0202A8F8 }, { 25, 0, (SAVSIZEFN)FUN_0202A924, (SAVINITFN)FUN_0202A92C }, { 26, 0, (SAVSIZEFN)FUN_0202ABC8, (SAVINITFN)FUN_0202ABCC }, diff --git a/arm9/src/timer3.c b/arm9/src/timer3.c index d4e8f8a1..4e7b03c7 100644 --- a/arm9/src/timer3.c +++ b/arm9/src/timer3.c @@ -1,5 +1,11 @@ #include "timer3.h" +#include "OS_interrupt.h" +#include "OS_irqTable.h" +#include "OS_timer.h" +#include "OS_system.h" +#include "registers.h" + static BOOL timer3_needReset; static vu64 timer3_counter; diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c new file mode 100644 index 00000000..151a9cd6 --- /dev/null +++ b/arm9/src/unk_0201C6B4.c @@ -0,0 +1,80 @@ +#include "global.h"
+#include "unk_0201C6B4.h"
+
+THUMB_FUNC s32 FUN_0201C6B4(s8 * r0)
+{
+ s32 r2 = 0;
+ while(r0[r2] != 0)
+ {
+ r2++;
+ }
+ return r2;
+}
+
+THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2)
+{
+ for(int r3 = 0; r3 < 0x100; r3++)
+ {
+ r1[r3] = r0[r3];
+ if(r2 == r0[r3] || r0[r3] == 0)
+ {
+ r1[r3] = 0;
+ if(r2 == 0xd && r0[r3 + 1] == 0xa)
+ {
+ return &r0[r3 + 2];
+ }
+ return &r0[r3 + 1];
+ }
+ }
+ return NULL;
+}
+
+THUMB_FUNC s32 FUN_0201C70C(s8 * r4)
+{
+ s32 unk0 = FUN_0201C6B4(r4);
+ s32 r3;
+ s32 r5 = 1;
+ s32 r6 = 0;
+ for(r3 = unk0 - 1; r3 >= 0; r3--)
+ {
+ if(r4[r3] >= 0x30 && r4[r3] <= 0x39)
+ {
+ r6 += (r4[r3] - 0x30) * r5;
+ }
+ else
+ {
+ if(r3 == 0)
+ {
+ if(r4[r3] == 0x2d)
+ {
+ r6 *= -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ r5 *= 0xa;
+ }
+ return r6;
+}
+
+THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4)
+{
+ for(u8 r2 = 0; r2 < 4; r2++)
+ {
+ s32 * unk5 = (s32 *)r5;
+ unk5[r2] = 0;
+ }
+ u8 r0 = (u8)(FUN_0201C6B4(r4));
+ for(u8 r2 = 0; r2 < r0; r2++)
+ {
+ r5[r2] = r4[r2];
+ }
+}
+
+THUMB_FUNC BOOL FUN_0201C78C(u32 r0)
+{
+ return r0 < 0x121;
+}
diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c new file mode 100644 index 00000000..4f32d430 --- /dev/null +++ b/arm9/src/unk_0202A1E0.c @@ -0,0 +1,536 @@ +#include "global.h" +#include "MI_memory.h" +#include "msgdata.h" +#include "heap.h" +#include "unk_0202A1E0.h" + +THUMB_FUNC s32 SaveStruct23_Substruct4_Substruct1_sizeof() +{ + return sizeof(struct SaveStruct23_Substruct4_Substruct1); // 228 +} + +THUMB_FUNC void SaveStruct23_Substruct1_Init(struct SaveStruct23_Substruct1 *substruct1) +{ + MI_CpuFill8(substruct1, 0, sizeof(struct SaveStruct23_Substruct1)); +} + +THUMB_FUNC void SaveStruct23_Substruct2_Init(struct SaveStruct23_Substruct2 *substruct2) +{ + MI_CpuFill8(substruct2, 0, sizeof(struct SaveStruct23_Substruct2)); + substruct2->u_3 = 1; +} + +THUMB_FUNC void SaveStruct23_Messages_Init(struct SaveStruct23_Messages *messages) +{ + MailMsg_init_fromTemplate(&messages->messages[0], 0); + MailMsg_init_fromTemplate(&messages->messages[1], 1); + MailMsg_init_fromTemplate(&messages->messages[2], 2); + MailMsg_init_fromTemplate(&messages->messages[3], 3); +} + +THUMB_FUNC void SaveStruct23_Substruct4_Init(struct SaveStruct23_Substruct4 *substruct4) +{ + MI_CpuFill8(substruct4, 0, sizeof(struct SaveStruct23_Substruct4)); +} + +THUMB_FUNC u32 SaveStruct23_Substruct1_GetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *dst) +{ + switch (field) + { + case FIELD_0x0_2: + return substruct1->u_0_2; + case FIELD_0x2: + return substruct1->u_2; + case FIELD_0x3: + return substruct1->u_3; + case FIELD_0x4: + return substruct1->u_4; + case FIELD_0x6: + return substruct1->u_6; + case FIELD_0x8: + MI_CpuCopy8(&substruct1->u_8, dst, 4); + return 0; + case FIELD_0x2C: + MI_CpuCopy8(&substruct1->u_2C, dst, 16); + return 0; + case FIELD_flag0: + return substruct1->flag0; + case FIELD_0xC: + MI_CpuCopy8(&substruct1->u_C, dst, 28); + return 0; + case FIELD_0x0_5: + return substruct1->u_0_5; + case FIELD_0x28: + return substruct1->u_28; + default: + return 0; + }; +} + +THUMB_FUNC void SaveStruct23_Substruct1_SetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *value) +{ + switch (field) + { + case FIELD_0x0_2: + substruct1->u_0_2 = *(u8 *)value; + break; + case FIELD_0x2: + substruct1->u_2 = *(u8 *)value; + break; + case FIELD_0x3: + substruct1->u_3 = *(u8 *)value; + break; + case FIELD_0x4: + substruct1->u_4 = *(u16 *)value; + break; + case FIELD_0x6: + substruct1->u_6 = *(u16 *)value; + break; + case FIELD_0x8: + MI_CpuCopy8(value, &substruct1->u_8, 4); + break; + case FIELD_0x2C: + MI_CpuCopy8(value, &substruct1->u_2C, 16); + break; + case FIELD_flag0: + substruct1->flag0 = *(u8 *)value; + break; + case FIELD_0xC: + MI_CpuCopy8(value, &substruct1->u_C, 28); + break; + case FIELD_0x28: + substruct1->u_28 = *(u32 *)value; + break; + case FIELD_0x0_5: + substruct1->u_0_5 = *(u8 *)value; + break; + } +} + +THUMB_FUNC void FUN_0202A36C(struct SaveStruct23_Substruct1 *substruct1, s32 arg1, s32 arg2, s32 arg3) +{ + if (substruct1->u_3 + arg1 < 0xff) + { + substruct1->u_3 += arg1; + } + + if (substruct1->u_4 + arg2 < 0xffff) + { + substruct1->u_4 += arg2; + } + + if (substruct1->u_6 + arg3 < 0xffff) + { + substruct1->u_6 += arg3; + } +} + +THUMB_FUNC BOOL SaveStruct23_Substruct1_GetFlag1(struct SaveStruct23_Substruct1 *substruct1) +{ + return substruct1->flag1; +} + +THUMB_FUNC void SaveStruct23_Substruct1_SetFlag1(struct SaveStruct23_Substruct1 *substruct1, BOOL flag) +{ + substruct1->flag1 = flag; +} + +THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0x0(struct SaveStruct23_Substruct2 *substruct2, u16 value, DataSetMode mode) +{ + switch (mode) + { + case DATA_SET: + if (value > 9999) + { + substruct2->u_0 = 9999; + } + else + { + substruct2->u_0 = value; + } + break; + case DATA_ADD: + if (substruct2->u_0 + value > 9999) + { + substruct2->u_0 = 9999; + } + else + { + substruct2->u_0 += value; + } + break; + case DATA_SUBSTRACT: + if (substruct2->u_0 < value) + { + substruct2->u_0 = 0; + } + else + { + substruct2->u_0 -= value; + } + break; + case DATA_GET: + default: + break; + } + return substruct2->u_0; +} + +THUMB_FUNC u8 SaveStruct23_Substruct2_SetField_0x2(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode) +{ + switch (mode) + { + case DATA_RESET: + substruct2->u_2 = 0; + substruct2->flag4 = 0; + break; + case DATA_INCREMENT: + if (substruct2->flag4) + { + substruct2->u_2++; + } + else + { + substruct2->u_2 = 1; + substruct2->flag4 = 1; + } + break; + } + return substruct2->u_2; +} + +THUMB_FUNC u8 SaveStruct23_Substruct2_SetField_0x3(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode) +{ + switch (mode) + { + case DATA_RESET: + substruct2->u_3 = 1; + break; + case DATA_INCREMENT: + if (substruct2->u_3 < 10) + { + substruct2->u_3++; + } + break; + case DATA_DECREMENT: + if (substruct2->u_3 > 1) + { + substruct2->u_3--; + } + break; + } + return substruct2->u_3; +} + +THUMB_FUNC void SaveStruct23_Substruct2_SetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *src) +{ + if (mode == 0) + { + MI_CpuCopy8(src, substruct2->u_C0, 168); + } + else + { + MI_CpuCopy8(src, substruct2->u_18, 168); + } +} + +THUMB_FUNC void SaveStruct23_Substruct2_GetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *dst) +{ + if (mode == 0) + { + MI_CpuCopy8(substruct2->u_C0, dst, 168); + } + else + { + MI_CpuCopy8(substruct2->u_18, dst, 168); + } +} + +THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0x16(struct SaveStruct23_Substruct2 *substruct2, struct Unk0202A4B8 *arg1) +{ + u16 var1, var2, var3, var4, var5, total; + + var1 = (u16) ((arg1->u_2 - 1) * 1000); + var2 = (u16) (arg1->u_4 * 10); + var3 = (u16) (arg1->u_3 * 20); + + if (var2 + var3 > 950) + { + var4 = 0; + } + else + { + var4 = (u16) (950 - (var2 + var3)); + } + + if (arg1->u_6 > 970) + { + var5 = 0; + } + else + { + var5 = (u16) ((1000 - arg1->u_6) / 30); + } + + total = (u16) (var1 + var4 + var5); + substruct2->u_16 = total; + return total; +} + +THUMB_FUNC u16 SaveStruct23_Substruct2_GetField_0x16(struct SaveStruct23_Substruct2 *substruct2) +{ + return substruct2->u_16; +} + +THUMB_FUNC u8 FUN_0202A524(struct SaveStruct23_Substruct2 *substruct2) +{ + return (u8)(substruct2->u_16 / 1000); +} + +THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0xC(struct SaveStruct23_Substruct2 *substruct2, u16 arg1, DataSetMode mode) +{ + if (arg1 == 5) + { + return 0; + } + + switch(mode) { + case DATA_RESET: + substruct2->u_C[arg1] = 0; + break; + case DATA_INCREMENT: + if (substruct2->u_C[arg1] < 0xfffe) { + substruct2->u_C[arg1]++; + } + break; + } + return substruct2->u_C[arg1]; +} + +THUMB_FUNC BOOL SaveStruct23_Substruct2_SetFlag(struct SaveStruct23_Substruct2 *substruct2, u16 flagNumber, DataSetMode mode) +{ + u16 i; + u16 flag = 1; + + for (i = 0; i < flagNumber ; i++) + { + flag <<= 1; + } + + switch (mode) + { + case DATA_RESET: + flag = (u16) (flag ^ 0xffff); + substruct2->flags &= flag; + break; + case DATA_SET: + substruct2->flags |= flag; + break; + case DATA_GET: + return (BOOL) ((substruct2->flags >> flagNumber) & 1); + } + + return FALSE; +} + + +THUMB_FUNC void SaveStruct23_Substruct2_SetField_0x4(struct SaveStruct23_Substruct2 *substruct2, u32 value) +{ + substruct2->u_4 = value; +} + +THUMB_FUNC u32 SaveStruct23_Substruct2_GetField_0x4(struct SaveStruct23_Substruct2 *substruct2) +{ + return substruct2->u_4; +} + + +THUMB_FUNC void SaveStruct23_SetMessage(struct SaveBlock2 *sav2, u32 index, struct MailMessage *message) +{ + struct SaveStruct23 *data = SavArray_get(sav2, 23); + MailMsg_copy(&data->messages.messages[index], message); +} + +THUMB_FUNC struct MailMessage *SaveStruct23_GetMessage(struct SaveBlock2 *sav2, u32 index) +{ + struct SaveStruct23 *data = SavArray_get(sav2, 23); + return &data->messages.messages[index]; +} + +THUMB_FUNC void SaveStruct23_Substruct4_SetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) { + + u8 flag = 1; + + if (arg2 == 0 || arg2 > 200) + { + return; + } + + if (arg1 == 0 || arg1 > 10) + { + return; + } + + u16 var1 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var1 / 8); + u8 remainder = (u8) (var1 % 8); + flag <<= remainder; + + substruct4->flags[index] |= flag; + substruct4->u_0 = (arg3->u_0 << 24) | ((arg3->u_4 & 0xff) << 16) | ((arg3->u_8 & 0xff) << 8) | arg3->u_C; +} + +THUMB_FUNC void SaveStruct23_Substruct4_ClearArrayFlags(struct SaveStruct23_Substruct4 *substruct4) +{ + + MI_CpuFill8(substruct4->flags, 0, 250); + MI_CpuFill8(&substruct4->u_0, 0, 4); +} + +THUMB_FUNC BOOL StructUnk0202A68C_Compare(struct Unk0202A68C *struct1, struct Unk0202A68C *struct2) +{ + if (struct1->u_0 > struct2->u_0) { + return TRUE; + } else if (struct1->u_4 > struct2->u_4) { + return TRUE; + } else if (struct1->u_8 > struct2->u_8) { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL SaveStruct23_Substruct4_GetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) +{ + u8 flag = 1; + + if (arg2 > 200 || arg1 > 10) + { + return FALSE; + } + + u32 var0 = substruct4->u_0; + + Unk0202A68C var1; + var1.u_0 = var0 >> 24 & 0xff; + var1.u_4 = var0 >> 16 & 0xff; + var1.u_8 = var0 >> 8 & 0xff; + var1.u_C = var0 & 0xff; + + if (StructUnk0202A68C_Compare(arg3, &var1)) + { + SaveStruct23_Substruct4_ClearArrayFlags(substruct4); + return FALSE; + } + + u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var2 / 8); + u8 remainder = (u8) (var2 % 8); + flag <<= remainder; + + if (substruct4->flags[index] & flag) + { + return TRUE; + } + return FALSE; +} + + +THUMB_FUNC u8 SaveStruct23_Substruct4_GetField_0xFE(struct SaveStruct23_Substruct4 *substruct4) +{ + return substruct4->u_FE; +} + +THUMB_FUNC u8 SaveStruct23_Substruct4_GetField_0xFF(struct SaveStruct23_Substruct4 *substruct4) +{ + return substruct4->u_FF; +} + +THUMB_FUNC void SaveStruct23_Substruct4_SetSubstruct1(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct1 *substruct1, u8 arg2, u8 arg3) +{ + MI_CpuCopy8(substruct1, &substruct4->substruct1, sizeof(struct SaveStruct23_Substruct4_Substruct1)*7); + substruct4->u_101 = arg2; + substruct4->u_100 = arg3; + substruct4->u_FE = 1; +} + +THUMB_FUNC void FUN_0202A784(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dst) +{ + dst->u_0 = substruct4->u_101; + dst->u_1 = substruct4->u_100; +} + +THUMB_FUNC void FUN_0202A798(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A798 *arg1, u32 arg2) +{ + struct Unk0202A798_substruct *unk_substruct = &arg1->u_0; + u8 *var1 = arg1->u_30; + struct SaveStruct23_Substruct4_Substruct1 *substruct4_substruct1 = &substruct4->substruct1[arg2]; + struct MsgData *message; + + unk_substruct->u_0 = 10000; + unk_substruct->u_4 = substruct4_substruct1->u_C9; + + if(substruct4_substruct1->u_C8_0) + { + message = NewMsgDataFromNarc(0, NARC_MSGDATA_MSG, 17, 11); + ReadMsgDataIntoU16Array(message, (u32) (22 + substruct4_substruct1->u_C8_1), unk_substruct->u_8); + DestroyMsgData(message); + } + else + { + MI_CpuCopy8(substruct4_substruct1->u_A8, unk_substruct->u_8, 16); + } + + MI_CpuCopy8(substruct4_substruct1->u_CA, unk_substruct->u_18, 8); + MI_CpuCopy8(substruct4_substruct1->u_D2, unk_substruct->u_20, 8); + MI_CpuCopy8(substruct4_substruct1->u_DA, unk_substruct->u_28, 8); + MI_CpuCopy8(substruct4_substruct1->u_0, var1, 168); +} + +THUMB_FUNC void FUN_0202A838(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2, u8 arg2, u8 arg3) +{ + MI_CpuCopy8(substruct4_substruct2, &substruct4->substruct2, sizeof(struct SaveStruct23_Substruct4_Substruct2)); + substruct4->u_103 = arg2; + substruct4->u_102 = arg3; + substruct4->u_FF = 1; +} + +THUMB_FUNC void FUN_0202A864(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dst) +{ + dst->u_0 = substruct4->u_103; + dst->u_1 = substruct4->u_102; +} + +THUMB_FUNC struct SaveStruct23_Substruct4_Substruct2 *FUN_0202A878(struct SaveStruct23_Substruct4 *substruct4, u32 heap_id) +{ + struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2 = AllocFromHeap(heap_id, sizeof(struct SaveStruct23_Substruct4_Substruct2) /* 1020 */); + MI_CpuCopy8(&substruct4->substruct2, substruct4_substruct2, sizeof(struct SaveStruct23_Substruct4_Substruct2)); + return substruct4_substruct2; +} + +THUMB_FUNC s32 SaveStruct23_sizeof() +{ + return sizeof(struct SaveStruct23); // 0xD00 (3328) +} + +THUMB_FUNC void SaveStruct23_Init(struct SaveStruct23 *saveStruct23) +{ + SaveStruct23_Substruct1_Init(&saveStruct23->substruct1); + SaveStruct23_Substruct2_Init(&saveStruct23->substruct2); + SaveStruct23_Messages_Init(&saveStruct23->messages); + SaveStruct23_Substruct4_Init(&saveStruct23->substruct4); +} + +THUMB_FUNC struct SaveStruct23_Substruct1 *SaveStruct23_GetSubstruct1(struct SaveBlock2* sav2) +{ + return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct1; +} + +THUMB_FUNC struct SaveStruct23_Substruct2 *SaveStruct23_GetSubstruct2(struct SaveBlock2* sav2) +{ + return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct2; +} + +THUMB_FUNC struct SaveStruct23_Substruct4 *SaveStruct23_GetSubstruct4(struct SaveBlock2* sav2) +{ + return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct4; +}
\ No newline at end of file diff --git a/arm9/src/unk_0205FA2C.c b/arm9/src/unk_0205FA2C.c index cabd756e..a023ad83 100644 --- a/arm9/src/unk_0205FA2C.c +++ b/arm9/src/unk_0205FA2C.c @@ -1,5 +1,6 @@ #include "unk_0205FA2C.h" #include "unk_020337E8.h" +#include "unk_0202A1E0.h" extern void *UNK_020F96DC; extern void *UNK_020FA6E8; @@ -11,17 +12,9 @@ extern u16 *GetVarPointer(struct UnkSavStruct80 *arg, u16); extern u16 MOD06_02244660(struct UnkSavStruct80 *param0, u8 *param1); extern u16 MOD06_022446BC(struct UnkSavStruct80 *param0, u8 *param1); extern u16 MOD06_022446E0(struct UnkSavStruct80 *param0, u8 *param1); -extern void FUN_0202A5CC(u32 param0, u32 param1); -extern u32 FUN_0202A5D0(u32 param0); extern u32 FUN_0202A150(struct UnkStruct_02029FB0 *param0, u32 param1); -extern u32 FUN_0202A8D8(struct SaveBlock2 *sav2); -extern u32 FUN_0202A578(u32 param0, u32 param1, u32 param2); extern u32 FUN_02026CC4(struct SaveBlock2 *sav2); extern u32 FUN_02025D94(u32 param0, u32 param1); -extern u32 FUN_0202A8CC(struct SaveBlock2 *sav2); -extern void FUN_0202A2C4(u32 param0, u32 param1, u32 *param2); -extern u32 FUN_0202A240(u32 param0, u32 param1, u32 param2); -extern int FUN_0202A538(u32 param0, u16 param1, u32 param2); const u8 UNK_020F7454[] = { 0x00, @@ -327,33 +320,33 @@ THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2) return 0; } - u32 res2 = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0); - u8 res4 = (u8)FUN_0202A578(res2, 0, 0); - u8 res5 = (u8)FUN_0202A578(res2, 1, 0); + BOOL flagD = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_GET); + BOOL flag0 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_GET); + BOOL flag1 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_GET); - u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0); - u8 res7 = (u8)FUN_0202A578(res2, 2, 0); - u8 res8 = (u8)FUN_0202A578(res2, 3, 0); + BOOL flagE = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_GET); + BOOL flag2 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_GET); + BOOL flag3 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_GET); - if (res3 != 0 && res4 != 0 && res5 != 0) + if (flagD && flag0 && flag1) { return 0; } u32 res9 = FUN_02026CC4(sav2); - if (res3 == 0) + if (!flagD) { if (FUN_02025D94(res9, 0x55) != 0) { - FUN_0202A578(res2, 0xd, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_SET); return 1; } - if (res6 == 0) + if (!flagE) { - FUN_0202A578(res2, 0xe, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_SET); } return 4; @@ -364,36 +357,36 @@ THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2) return 0; } - if (res4 == 0) + if (!flag0) { if (FUN_02025D94(res9, 0x56) != 0) { - FUN_0202A578(res2, 0, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_SET); return 2; } - if (res7 == 0) + if (!flag2) { - FUN_0202A578(res2, 2, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_SET); } return 4; } - if (res < 100 || res5 != 0) + if (res < 100 || flag1) { return 0; } if (FUN_02025D94(res9, 0x57) != 0) { - FUN_0202A578(res2, 1, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_SET); return 3; } - if (res8 == 0) + if (!flag3) { - FUN_0202A578(res2, 3, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_SET); } return 4; @@ -407,24 +400,24 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) return 0; } - u32 res2 = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0); - u8 res4 = (u8)FUN_0202A578(res2, 0, 0); - u8 res5 = (u8)FUN_0202A578(res2, 1, 0); + BOOL flagD = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_GET); + BOOL flag0 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_GET); + BOOL flag1 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_GET); - u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0); - u8 res7 = (u8)FUN_0202A578(res2, 2, 0); - u8 res8 = (u8)FUN_0202A578(res2, 3, 0); + BOOL flagE = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_GET); + BOOL flag2 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_GET); + BOOL flag3 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_GET); - if (res3 != 0 && res4 != 0 && res5 != 0) + if (flagD && flag0 && flag1) { return 0; } - if (res3 == 0) + if (!flagD) { - if (res6 != 0) + if (flagE) { return 4; } @@ -437,9 +430,9 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) return 0; } - if (res4 == 0) + if (!flag0) { - if (res7 != 0) + if (flag2) { return 5; } @@ -452,12 +445,12 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) return 0; } - if (res5 != 0) + if (flag1) { return 0; } - if (res8 != 0) + if (flag3) { return 6; } @@ -488,42 +481,42 @@ THUMB_FUNC u32 FUN_0206007C(struct SaveBlock2 *sav2) { u32 res = FUN_02060070(FUN_020287A4(FUN_0202881C(sav2))); - FUN_0202A5CC(FUN_0202A8D8(sav2), res); + SaveStruct23_Substruct2_SetField_0x4(SaveStruct23_GetSubstruct2(sav2), res); return res; } THUMB_FUNC u32 FUN_020600A0(struct SaveBlock2 *sav2) { - u32 res = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u32 res2 = FUN_02060070(FUN_0202A5D0(res)); + u32 res2 = FUN_02060070(SaveStruct23_Substruct2_GetField_0x4(saveStruct23_substruct2)); - FUN_0202A5CC(res, res2); + SaveStruct23_Substruct2_SetField_0x4(saveStruct23_substruct2, res2); u32 res3 = FUN_02060064(res2); - FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3); + SaveStruct23_Substruct1_SetField(SaveStruct23_GetSubstruct1(sav2), FIELD_0x28, &res3); return res3; } THUMB_FUNC u32 FUN_020600DC(struct SaveBlock2 *sav2) { - u32 res = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u32 res2 = FUN_0202A8CC(sav2); + struct SaveStruct23_Substruct1 *saveStruct23_substruct1 = SaveStruct23_GetSubstruct1(sav2); - u32 res3 = FUN_02060064(FUN_0202A5D0(res)); + u32 res3 = FUN_02060064(SaveStruct23_Substruct2_GetField_0x4(saveStruct23_substruct2)); int i = 0; - int res4 = FUN_0202A538(res, (u16)FUN_0202A240(res2, 0, 0), 0) * 0x18; + int res4 = SaveStruct23_Substruct2_SetField_0xC(saveStruct23_substruct2, (u16)SaveStruct23_Substruct1_GetField(saveStruct23_substruct1, FIELD_0x0_2, 0), DATA_GET) * 0x18; for (i = 0; i < res4; i++) { res3 = FUN_02060064(res3); } - FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3); + SaveStruct23_Substruct1_SetField(SaveStruct23_GetSubstruct1(sav2), FIELD_0x28, &res3); return res3; } |