summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/record_mixing.s62
-rw-r--r--include/lilycove_lady.h2
-rw-r--r--src/lilycove_lady.c10
-rw-r--r--src/record_mixing.c56
4 files changed, 49 insertions, 81 deletions
diff --git a/asm/record_mixing.s b/asm/record_mixing.s
index cd4704245..7d439292e 100644
--- a/asm/record_mixing.s
+++ b/asm/record_mixing.s
@@ -5,68 +5,6 @@
.text
- thumb_func_start sub_80E7A14
-sub_80E7A14: @ 80E7A14
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- mov r8, r0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r5, r2, 24
- mov r0, sp
- bl sub_80E7830
- adds r0, r7, 0
- muls r0, r5
- add r0, r8
- ldr r6, =gUnknown_03001150
- ldr r1, [r6]
- movs r2, 0x40
- bl memcpy
- bl GetLilycoveLadyId
- lsls r0, 24
- cmp r0, 0
- bne _080E7A60
- movs r0, 0x40
- bl Alloc
- adds r4, r0, 0
- cmp r4, 0
- beq _080E7A8A
- ldr r1, [r6]
- movs r2, 0x40
- bl memcpy
- b _080E7A62
- .pool
-_080E7A60:
- movs r4, 0
-_080E7A62:
- ldr r0, =gUnknown_03001150
- ldr r0, [r0]
- lsls r1, r5, 2
- add r1, sp
- ldr r1, [r1]
- muls r1, r7
- add r1, r8
- movs r2, 0x40
- bl memcpy
- bl sub_818DA78
- cmp r4, 0
- beq _080E7A8A
- adds r0, r4, 0
- bl sub_818E570
- adds r0, r4, 0
- bl Free
-_080E7A8A:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80E7A14
-
thumb_func_start sub_80E7A9C
sub_80E7A9C: @ 80E7A9C
ldrh r0, [r0, 0x20]
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
index c7776131b..66922273e 100644
--- a/include/lilycove_lady.h
+++ b/include/lilycove_lady.h
@@ -6,7 +6,7 @@ void SetLilycoveLady(void);
void sub_818DA78(void);
void sub_818DEF4(void);
void sub_818E564(void);
-void sub_818E570(const struct LilycoveLadyQuiz *quiz);
+void sub_818E570(const LilycoveLady *lilycoveLady);
bool8 sub_818E704(struct Pokeblock *pokeblock);
void sub_818E7E0(u8 *dest1, u8 *dest2);
void sub_818E81C(u8 *dest);
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index 3b7ae49f2..64e28ecc9 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -879,26 +879,26 @@ void sub_818E564(void)
EnableBothScriptContexts();
}
-void sub_818E570(const struct LilycoveLadyQuiz *quiz)
+void sub_818E570(const LilycoveLady *lilycoveLady)
{
u8 i;
gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (quiz->unk_02c < 16 && gUnknown_0203CD68->id == LILYCOVE_LADY_QUIZ)
+ if (lilycoveLady->quiz.unk_02c < 16 && gUnknown_0203CD68->id == LILYCOVE_LADY_QUIZ)
{
for (i = 0; i < 4; i ++)
{
- if (quiz->unk_02c != gUnknown_0203CD68->unk_02b)
+ if (lilycoveLady->quiz.unk_02c != gUnknown_0203CD68->unk_02b)
{
break;
}
gUnknown_0203CD68->unk_02b = Random() % 16;
}
- if (quiz->unk_02c == gUnknown_0203CD68->unk_02b)
+ if (lilycoveLady->quiz.unk_02c == gUnknown_0203CD68->unk_02b)
{
gUnknown_0203CD68->unk_02b = (gUnknown_0203CD68->unk_02b + 1) % 16;
}
- gUnknown_0203CD68->unk_02c = quiz->unk_02c;
+ gUnknown_0203CD68->unk_02c = lilycoveLady->quiz.unk_02c;
}
}
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 6f09e30e2..9157597dd 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -21,6 +21,7 @@
#include "fldeff_80F9BCC.h"
#include "script.h"
#include "event_data.h"
+#include "lilycove_lady.h"
#include "strings.h"
#include "string_util.h"
#include "record_mixing.h"
@@ -75,7 +76,7 @@ static u8 sub_80E7810(void);
static void *sub_80E7820(u8);
static void sub_80E78C4(OldMan *, size_t, u8);
static void sub_80E7948(union BattleTowerRecord *, size_t, u8);
-void sub_80E7A14(LilycoveLady *, size_t, u8);
+static void sub_80E7A14(LilycoveLady *, size_t, u8);
void sub_80E7B2C(TVShow *);
void sub_80E7B60(void *, size_t, u8, TVShow *);
void sub_80E7F68(void *, u8);
@@ -584,7 +585,7 @@ static void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which)
u32 mixIndices[4];
sub_80E7830(mixIndices);
- dest = (OldMan *)((void *)oldMan + recordSize * mixIndices[which]);
+ dest = (void *)oldMan + recordSize * mixIndices[which];
version = gLinkPlayers[mixIndices[which]].version;
language = gLinkPlayers[mixIndices[which]].language;
if (Link_AnyPartnersPlayingRubyOrSapphire())
@@ -595,13 +596,13 @@ static void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which)
{
sub_8120CD0(dest, version, language);
}
- memcpy(gUnknown_03001140, (OldMan *)((void *)oldMan + recordSize * mixIndices[which]), sizeof(OldMan));
+ memcpy(gUnknown_03001140, (void *)oldMan + recordSize * mixIndices[which], sizeof(OldMan));
sub_8120670();
}
static void sub_80E7948(union BattleTowerRecord *battleTowerRecord, size_t recordSize, u8 which)
{
- union BattleTowerRecord *r6;
+ union BattleTowerRecord *dest;
struct UnknownPokemonStruct *btPokemon;
u32 mixIndices[4];
s32 i;
@@ -609,26 +610,55 @@ static void sub_80E7948(union BattleTowerRecord *battleTowerRecord, size_t recor
sub_80E7830(mixIndices);
if (Link_AnyPartnersPlayingRubyOrSapphire())
{
- if (sub_816587C((union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * mixIndices[which]), (union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which)) == TRUE)
+ if (sub_816587C((void *)battleTowerRecord + recordSize * mixIndices[which], (void *)battleTowerRecord + recordSize * which) == TRUE)
{
- r6 = (union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which);
- r6->emerald.language = gLinkPlayers[mixIndices[which]].language;
- sub_8164F70(r6);
+ dest = (void *)battleTowerRecord + recordSize * which;
+ dest->emerald.language = gLinkPlayers[mixIndices[which]].language;
+ sub_8164F70(dest);
}
}
else
{
- memcpy((union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which), (union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * mixIndices[which]), sizeof(union BattleTowerRecord));
- r6 = (union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which);
+ memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(union BattleTowerRecord));
+ dest = (void *)battleTowerRecord + recordSize * which;
for (i = 0; i < 4; i ++)
{
- btPokemon = &r6->emerald.party[i];
+ btPokemon = &dest->emerald.party[i];
if (btPokemon->species != SPECIES_NONE && IsStringJapanese(btPokemon->nickname))
{
ConvertInternationalString(btPokemon->nickname, LANGUAGE_JAPANESE);
}
}
- sub_8164F70(r6);
+ sub_8164F70(dest);
+ }
+ sub_81628A0((void *)battleTowerRecord + recordSize * which);
+}
+
+static void sub_80E7A14(LilycoveLady *lilycoveLady, size_t recordSize, u8 which)
+{
+ LilycoveLady *dest;
+ u32 mixIndices[4];
+
+ sub_80E7830(mixIndices);
+ memcpy((void *)lilycoveLady + recordSize * which, gUnknown_03001150, sizeof(LilycoveLady));
+ if (GetLilycoveLadyId() == 0)
+ {
+ dest = malloc(sizeof(LilycoveLady));
+ if (dest == NULL)
+ {
+ return;
+ }
+ memcpy(dest, gUnknown_03001150, sizeof(LilycoveLady));
+ }
+ else
+ {
+ dest = NULL;
+ }
+ memcpy(gUnknown_03001150, (void *)lilycoveLady + recordSize * mixIndices[which], sizeof(LilycoveLady));
+ sub_818DA78();
+ if (dest != NULL)
+ {
+ sub_818E570(dest);
+ free(dest);
}
- sub_81628A0((union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which));
}