summaryrefslogtreecommitdiff
path: root/src/secret_base.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-10-27 21:55:07 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-10-27 21:55:07 -0400
commitd17ff9430a78f47b8a9472d1e24d8badd09d7ed6 (patch)
treef15a25f0b1ac690853a943390d8a194e347daec6 /src/secret_base.c
parent8634537b8b099f0bb60f15406c2bdfacf715e455 (diff)
sub_80EAF80
Diffstat (limited to 'src/secret_base.c')
-rw-r--r--src/secret_base.c123
1 files changed, 106 insertions, 17 deletions
diff --git a/src/secret_base.c b/src/secret_base.c
index 7a443e91e..d6c4786f1 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -35,6 +35,7 @@
#include "rom6.h"
#include "decoration.h"
#include "decoration_inventory.h"
+#include "link.h"
#include "secret_base.h"
// Static type declarations
@@ -1774,30 +1775,118 @@ void sub_80EAE90(struct SecretBaseRecord *base, u32 version, u32 language)
}
}
-void sub_80EAEB4(struct SecretBaseRecordMixer *mixer)
+void sub_80EAEB4(struct SecretBaseRecordMixer *mixers)
{
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);
+ sub_80EAE90(&mixers[0].records[i], mixers[0].version, mixers[0].language);
+ sub_80EAE90(&mixers[1].records[i], mixers[1].version, mixers[1].language);
+ sub_80EAE90(&mixers[2].records[i], mixers[2].version, mixers[2].language);
}
}
-void sub_80EAEF4(struct SecretBaseRecordMixer *mixer)
+void sub_80EAEF4(struct SecretBaseRecordMixer *mixers)
{
- 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);
+ DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(mixers[0].records, mixers[1].records, mixers[2].records);
+ sub_80EAD94(gSaveBlock1Ptr->secretBases, mixers[0].records, mixers[1].records, mixers[2].records);
+ sub_80EAEB4(mixers);
+ sub_80EAA64(mixers[0].records, mixers[0].version, mixers[0].language);
+ sub_80EAA64(mixers[1].records, mixers[1].version, mixers[1].language);
+ sub_80EAA64(mixers[2].records, mixers[2].version, mixers[2].language);
+ sub_80EABA4(&mixers[0], 1);
+ sub_80EABA4(&mixers[1], 1);
+ sub_80EABA4(&mixers[2], 1);
+ sub_80EABA4(&mixers[0], 0);
+ sub_80EABA4(&mixers[1], 0);
+ sub_80EABA4(&mixers[2], 0);
+}
+
+void sub_80EAF80(void *records, size_t recordSize, u8 linkIdx)
+{
+ struct SecretBaseRecordMixer mixers[3];
+ u16 i;
+
+ if (FlagGet(0x60))
+ {
+ switch (GetLinkPlayerCount())
+ {
+ case 2:
+ memset(records + 2 * recordSize, 0, recordSize);
+ memset(records + 3 * recordSize, 0, recordSize);
+ break;
+ case 3:
+ memset(records + 3 * recordSize, 0, recordSize);
+ break;
+ }
+ switch (linkIdx)
+ {
+ case 0:
+ mixers[0].records = records + 1 * recordSize;
+ mixers[0].version = gLinkPlayers[1].version & 0xFF;
+ mixers[0].language = gLinkPlayers[1].language;
+ mixers[1].records = records + 2 * recordSize;
+ mixers[1].version = gLinkPlayers[2].version & 0xFF;
+ mixers[1].language = gLinkPlayers[2].language;
+ mixers[2].records = records + 3 * recordSize;
+ mixers[2].version = gLinkPlayers[3].version & 0xFF;
+ mixers[2].language = gLinkPlayers[3].language;
+ break;
+ case 1:
+ mixers[0].records = records + 2 * recordSize;
+ mixers[0].version = gLinkPlayers[2].version & 0xFF;
+ mixers[0].language = gLinkPlayers[2].language;
+ mixers[1].records = records + 3 * recordSize;
+ mixers[1].version = gLinkPlayers[3].version & 0xFF;
+ mixers[1].language = gLinkPlayers[3].language;
+ mixers[2].records = records + 0 * recordSize;
+ mixers[2].version = gLinkPlayers[0].version & 0xFF;
+ mixers[2].language = gLinkPlayers[0].language;
+ break;
+ case 2:
+ mixers[0].records = records + 3 * recordSize;
+ mixers[0].version = gLinkPlayers[3].version & 0xFF;
+ mixers[0].language = gLinkPlayers[3].language;
+ mixers[1].records = records + 0 * recordSize;
+ mixers[1].version = gLinkPlayers[0].version & 0xFF;
+ mixers[1].language = gLinkPlayers[0].language;
+ mixers[2].records = records + 1 * recordSize;
+ mixers[2].version = gLinkPlayers[1].version & 0xFF;
+ mixers[2].language = gLinkPlayers[1].language;
+ break;
+ case 3:
+ mixers[0].records = records + 0 * recordSize;
+ mixers[0].version = gLinkPlayers[0].version & 0xFF;
+ mixers[0].language = gLinkPlayers[0].language;
+ mixers[1].records = records + 1 * recordSize;
+ mixers[1].version = gLinkPlayers[1].version & 0xFF;
+ mixers[1].language = gLinkPlayers[1].language;
+ mixers[2].records = records + 2 * recordSize;
+ mixers[2].version = gLinkPlayers[2].version & 0xFF;
+ mixers[2].language = gLinkPlayers[2].language;
+ break;
+ }
+ sub_80EAEF4(mixers);
+ for (i = 1; i < 20; i ++)
+ {
+ if (gSaveBlock1Ptr->secretBases[i].sbr_field_1_0 == 1)
+ {
+ gSaveBlock1Ptr->secretBases[i].sbr_field_1_6 = 1;
+ gSaveBlock1Ptr->secretBases[i].sbr_field_1_0 = 0;
+ }
+ }
+ sub_80EAAF4();
+ for (i = 1; i < 20; i ++)
+ {
+ if (gSaveBlock1Ptr->secretBases[i].sbr_field_1_6 == 2)
+ {
+ gSaveBlock1Ptr->secretBases[i].sbr_field_1_6 = 0;
+ }
+ }
+ if (gSaveBlock1Ptr->secretBases[0].secretBaseId != 0 && gSaveBlock1Ptr->secretBases[0].sbr_field_e != 0xFFFF)
+ {
+ gSaveBlock1Ptr->secretBases[0].sbr_field_e ++;
+ }
+ }
}