diff --git a/asm/secret_base.s b/asm/secret_base.s index acaea9ff4..2d4fd7eeb 100644 --- a/asm/secret_base.s +++ b/asm/secret_base.s @@ -5,119 +5,6 @@ .text - thumb_func_start sub_80EAE90 -sub_80EAE90: @ 80EAE90 - push {r4,lr} - adds r4, r0, 0 - adds r3, r1, 0 - ldrb r1, [r4, 0x1] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _080EAEAE - adds r0, r4, 0 - adds r1, r3, 0 - bl sub_80EAA64 - adds r0, r4, 0 - bl ClearSecretBase -_080EAEAE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EAE90 - - thumb_func_start sub_80EAEB4 -sub_80EAEB4: @ 80EAEB4 - push {r4-r6,lr} - adds r5, r0, 0 - movs r6, 0 -_080EAEBA: - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 5 - ldr r0, [r5] - adds r0, r4 - ldr r1, [r5, 0x4] - ldr r2, [r5, 0x8] - bl sub_80EAE90 - ldr r0, [r5, 0xC] - adds r0, r4 - ldr r1, [r5, 0x10] - ldr r2, [r5, 0x14] - bl sub_80EAE90 - ldr r0, [r5, 0x18] - adds r0, r4 - ldr r1, [r5, 0x1C] - ldr r2, [r5, 0x20] - bl sub_80EAE90 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x13 - bls _080EAEBA - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80EAEB4 - - thumb_func_start sub_80EAEF4 -sub_80EAEF4: @ 80EAEF4 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r0, [r4] - ldr r1, [r4, 0xC] - ldr r2, [r4, 0x18] - bl DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords - ldr r0, =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, =0x00001a9c - adds r0, r1 - ldr r1, [r4] - ldr r2, [r4, 0xC] - ldr r3, [r4, 0x18] - bl sub_80EAD94 - adds r0, r4, 0 - bl sub_80EAEB4 - ldr r0, [r4] - ldr r1, [r4, 0x4] - ldr r2, [r4, 0x8] - bl sub_80EAA64 - ldr r0, [r4, 0xC] - ldr r1, [r4, 0x10] - ldr r2, [r4, 0x14] - bl sub_80EAA64 - ldr r0, [r4, 0x18] - ldr r1, [r4, 0x1C] - ldr r2, [r4, 0x20] - bl sub_80EAA64 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_80EABA4 - adds r6, r4, 0 - adds r6, 0xC - adds r0, r6, 0 - movs r1, 0x1 - bl sub_80EABA4 - adds r5, r4, 0 - adds r5, 0x18 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_80EABA4 - adds r0, r4, 0 - movs r1, 0 - bl sub_80EABA4 - adds r0, r6, 0 - movs r1, 0 - bl sub_80EABA4 - adds r0, r5, 0 - movs r1, 0 - bl sub_80EABA4 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80EAEF4 - thumb_func_start sub_80EAF80 sub_80EAF80: @ 80EAF80 push {r4-r7,lr} diff --git a/src/secret_base.c b/src/secret_base.c index f21f85937..7a443e91e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -44,6 +44,12 @@ struct SecretBaseListMenuBuffer { u8 names[11][32]; }; +struct SecretBaseRecordMixer { + struct SecretBaseRecord *records; + u32 version; + u32 language; +}; + // Static RAM declarations EWRAM_DATA u8 sCurSecretBaseId = 0; EWRAM_DATA u8 gUnknown_0203A01D = 0; @@ -1600,15 +1606,15 @@ void sub_80EAAF4(void) } } -void sub_80EABA4(u32 *args, u8 b) +void sub_80EABA4(struct SecretBaseRecordMixer *mixer, u8 b) { u16 i; for (i = 1; i < 20; i ++) { - if (((struct SecretBaseRecord *)args[0])[i].sbr_field_1_6 == b) + if (mixer->records[i].sbr_field_1_6 == b) { - sub_80EAA64(&((struct SecretBaseRecord *)args[0])[i], args[1], args[2]); + sub_80EAA64(&mixer->records[i], mixer->version, mixer->language); } } } @@ -1758,3 +1764,40 @@ void sub_80EAD94(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases } } } + +void sub_80EAE90(struct SecretBaseRecord *base, u32 version, u32 language) +{ + if (base->sbr_field_1_0 == 1) + { + sub_80EAA64(base, version, language); + ClearSecretBase(base); + } +} + +void sub_80EAEB4(struct SecretBaseRecordMixer *mixer) +{ + u16 i; + + for (i = 0; i < 20; i ++) + { + sub_80EAE90(&mixer[0].records[i], mixer[0].version, mixer[0].language); + sub_80EAE90(&mixer[1].records[i], mixer[1].version, mixer[1].language); + sub_80EAE90(&mixer[2].records[i], mixer[2].version, mixer[2].language); + } +} + +void sub_80EAEF4(struct SecretBaseRecordMixer *mixer) +{ + DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(mixer[0].records, mixer[1].records, mixer[2].records); + sub_80EAD94(gSaveBlock1Ptr->secretBases, mixer[0].records, mixer[1].records, mixer[2].records); + sub_80EAEB4(mixer); + sub_80EAA64(mixer[0].records, mixer[0].version, mixer[0].language); + sub_80EAA64(mixer[1].records, mixer[1].version, mixer[1].language); + sub_80EAA64(mixer[2].records, mixer[2].version, mixer[2].language); + sub_80EABA4(&mixer[0], 1); + sub_80EABA4(&mixer[1], 1); + sub_80EABA4(&mixer[2], 1); + sub_80EABA4(&mixer[0], 0); + sub_80EABA4(&mixer[1], 0); + sub_80EABA4(&mixer[2], 0); +}