diff --git a/asm/record_mixing.s b/asm/record_mixing.s index e7827f8a4e..27aa86a2e9 100644 --- a/asm/record_mixing.s +++ b/asm/record_mixing.s @@ -5,114 +5,6 @@ .text - thumb_func_start sub_80E6E24 -sub_80E6E24: @ 80E6E24 - push {r4,r5,lr} - bl sub_80E9914 - bl sub_80F0BB8 - bl sub_80E6BF8 - bl sub_800A064 - cmp r0, 0 - beq _080E6E60 - bl sub_800A03C - cmp r0, 0 - bne _080E6E50 - ldr r0, =gUnknown_0203A018 - ldr r0, [r0] - bl sub_80E6CA0 - b _080E6F12 - .pool -_080E6E50: - ldr r0, =gUnknown_0203A018 - ldr r0, [r0] - bl sub_80E6D54 - b _080E6F12 - .pool -_080E6E60: - ldr r5, =gUnknown_0203A018 - ldr r0, [r5] - ldr r1, =gUnknown_03001134 - ldr r1, [r1] - movs r4, 0xC8 - lsls r4, 4 - adds r2, r4, 0 - bl memcpy - ldr r0, [r5] - adds r0, r4 - ldr r1, =gUnknown_03001138 - ldr r1, [r1] - movs r2, 0xE1 - lsls r2, 2 - bl memcpy - ldr r0, [r5] - ldr r1, =0x00001004 - adds r0, r1 - ldr r1, =gUnknown_0300113C - ldr r1, [r1] - movs r2, 0x40 - bl memcpy - ldr r0, [r5] - ldr r2, =0x00001044 - adds r0, r2 - ldr r1, =gUnknown_03001140 - ldr r1, [r1] - movs r2, 0x40 - bl memcpy - ldr r0, [r5] - ldr r1, =0x00001214 - adds r0, r1 - ldr r1, =gUnknown_03001150 - ldr r1, [r1] - movs r2, 0x40 - bl memcpy - ldr r0, [r5] - ldr r2, =0x00001084 - adds r0, r2 - ldr r1, =gUnknown_03001144 - ldr r1, [r1] - movs r2, 0x28 - bl memcpy - ldr r0, [r5] - ldr r1, =0x000010ac - adds r0, r1 - bl sub_80E89F8 - ldr r0, [r5] - ldr r4, =0x00001124 - adds r0, r4 - ldr r1, =gUnknown_0300114C - ldr r1, [r1] - movs r2, 0xEC - bl memcpy - ldr r0, [r5] - adds r0, r4 - bl sub_80E8AC0 - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _080E6EFA - bl sub_81539D4 - ldr r1, [r5] - ldr r2, =0x00001210 - adds r1, r2 - strh r0, [r1] -_080E6EFA: - ldr r0, [r5] - ldr r1, =0x00001254 - adds r0, r1 - ldr r1, =gUnknown_03001154 - ldr r1, [r1] - bl sub_80E8110 - ldr r0, [r5] - ldr r2, =0x000012dc - adds r0, r2 - bl sub_80E8260 -_080E6F12: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80E6E24 - thumb_func_start sub_80E6F60 sub_80E6F60: @ 80E6F60 push {r4-r6,lr} diff --git a/include/global.h b/include/global.h index f3c58a3d8c..8343f99f84 100644 --- a/include/global.h +++ b/include/global.h @@ -490,12 +490,13 @@ struct LilycoveLadyContest /*0x00e*/ u8 language; }; -typedef union // TODO +typedef union { struct LilycoveLadyQuiz quiz; struct LilycoveLadyFavour favour; struct LilycoveLadyContest contest; u8 id; + u8 pad[0x40]; } LilycoveLady; struct WaldaPhrase @@ -592,7 +593,7 @@ struct SaveBlock1 /*0x3B14*/ struct RecordMixingGift recordMixingGift; /*0x3B24*/ u8 seen2[52]; /*0x3B58*/ LilycoveLady lilycoveLady; - /*0x3B88*/ u8 filler_3B88[0x1E8]; + /*0x3B98*/ u8 filler_3B88[0x1D8]; /*0x3D70*/ struct WaldaPhrase waldaPhrase; // sizeof: 0x3D88 }; diff --git a/include/link.h b/include/link.h index 7a6563144a..1bcdb047c9 100644 --- a/include/link.h +++ b/include/link.h @@ -192,5 +192,7 @@ void sub_8011BD0(void); u8 sub_800ABAC(void); u8 sub_800ABBC(void); void sub_800AC34(void); +bool32 sub_800A064(void); +bool32 sub_800A03C(void); #endif // GUARD_LINK_H diff --git a/include/record_mixing.h b/include/record_mixing.h index 5ccbdc0ddc..86e4b982e7 100644 --- a/include/record_mixing.h +++ b/include/record_mixing.h @@ -16,4 +16,6 @@ struct DayCareMailRecordMixing { // Exported ROM declarations +void sub_80E8260(void *); + #endif //GUARD_RECORD_MIXING_H diff --git a/include/secret_base.h b/include/secret_base.h index d3ef576533..43ea66ebc8 100644 --- a/include/secret_base.h +++ b/include/secret_base.h @@ -9,5 +9,6 @@ void sub_80E9578(void); void sub_80E980C(void); void sub_80EB18C(struct SecretBaseRecord *dest); +void sub_80E9914(void); #endif //GUARD_SECRET_BASE_H diff --git a/include/tv.h b/include/tv.h index ea5bb726f2..9dc0f77194 100644 --- a/include/tv.h +++ b/include/tv.h @@ -14,5 +14,6 @@ void sub_80EEA70(void); void sub_80F14F8(TVShow *shows); size_t sub_80EF370(int value); void sub_80F1208(TVShow *dest); +void sub_80F0BB8(void); #endif //GUARD_TV_H diff --git a/src/record_mixing.c b/src/record_mixing.c index 5b1f1c0c82..c8259e1170 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -22,8 +22,13 @@ struct RecordMixingData { u8 unk_10ac[0x78]; u8 unk_1124[0xa4]; u16 unk_11c8; - u8 unk_11ca[0x27a]; -}; + u8 filler_11ca[0x46]; + u16 unk_1210; + u8 filler_1212[0x2]; + LilycoveLady lilycoveLady; + u8 unk_1254[0x88]; + u8 unk_12dc[0x168]; +}; // 1444 // Static RAM declarations @@ -54,6 +59,8 @@ void sub_80E715C(u8 taskId); void sub_80E89F8(void *dest); void sub_80E8A54(void *src); void TaskDummy4(void *src); +void sub_80E8AC0(void *); +void sub_80E8110(void *, void *); // .rodata @@ -113,3 +120,39 @@ void sub_80E6D54(struct RecordMixingData *dest) dest->unk_11c8 = sub_81539D4(); } } + +void sub_80E6E24(void) +{ + sub_80E9914(); + sub_80F0BB8(); + sub_80E6BF8(); + if (sub_800A064()) + { + if (sub_800A03C() == FALSE) + { + sub_80E6CA0(gUnknown_0203A018); + } + else + { + sub_80E6D54(gUnknown_0203A018); + } + } + else + { + memcpy(gUnknown_0203A018->secretBases, gUnknown_03001134, sizeof(struct SecretBaseRecord) * 20); + memcpy(gUnknown_0203A018->tvShows, gUnknown_03001138, sizeof(TVShow) * 25); + memcpy(gUnknown_0203A018->pokeNews, gUnknown_0300113C, sizeof(PokeNews) * 16); + memcpy(&gUnknown_0203A018->oldMan, gUnknown_03001140, sizeof(OldMan)); + memcpy(&gUnknown_0203A018->lilycoveLady, gUnknown_03001150, sizeof(LilycoveLady)); + memcpy(gUnknown_0203A018->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); + sub_80E89F8(gUnknown_0203A018->unk_10ac); + memcpy(gUnknown_0203A018->unk_1124, gUnknown_0300114C, 0xec); + sub_80E8AC0(gUnknown_0203A018->unk_1124); + if (GetMultiplayerId() == 0) + { + gUnknown_0203A018->unk_1210 = sub_81539D4(); + } + sub_80E8110(gUnknown_0203A018->unk_1254, gUnknown_03001154); + sub_80E8260(gUnknown_0203A018->unk_12dc); + } +}