summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/secret_base.s113
-rw-r--r--src/secret_base.c49
2 files changed, 46 insertions, 116 deletions
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);
+}