From ca2bc94c2be5d7b915e5ab913ef026aa12b8fc0f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Nov 2017 20:59:29 -0400 Subject: through sub_80E6BF8 --- src/record_mixing.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 151835e5e..ade4d6e8c 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1,6 +1,9 @@ // Includes #include "global.h" +#include "task.h" +#include "cable_club.h" +#include "record_mixing.h" // Static type declarations @@ -9,10 +12,10 @@ IWRAM_DATA bool8 gUnknown_03001130; IWRAM_DATA struct SecretBaseRecord *gUnknown_03001134; IWRAM_DATA TVShow *gUnknown_03001138; -IWRAM_DATA struct UnknownSaveStruct2ABC *gUnknown_0300113C; +IWRAM_DATA PokeNews *gUnknown_0300113C; IWRAM_DATA OldMan *gUnknown_03001140; IWRAM_DATA struct EasyChatPair *gUnknown_03001144; -IWRAM_DATA struct DaycareData *gUnknown_03001148; +IWRAM_DATA struct DayCareMailRecordMixing *gUnknown_03001148; IWRAM_DATA void *gUnknown_0300114C; // gSaveBlock2Ptr->field_64C IWRAM_DATA LilycoveLady *gUnknown_03001150; IWRAM_DATA void *gUnknown_03001154; // gSaveBlock2Ptr->field_0DC; @@ -21,8 +24,37 @@ IWRAM_DATA u32 gUnknown_0300115C; IWRAM_DATA u8 gUnknown_03001160[8]; IWRAM_DATA u32 gUnknown_03001168[3]; +EWRAM_DATA struct DayCareMailRecordMixing gUnknown_02039F9C[2] = {}; +EWRAM_DATA struct { + /*0x0000*/ u8 filler_0000[0x5110]; +} *gUnknown_0203A014 = NULL; +EWRAM_DATA struct { + /*0x0000*/ u8 filler_0000[0x1444]; +} *gUnknown_0203A018 = NULL; + // Static ROM declarations +void sub_80E715C(u8 taskId); + // .rodata // .text + +void sub_80E6BE8(void) +{ + sub_80B37D4(sub_80E715C); +} + +void sub_80E6BF8(void) +{ + gUnknown_03001134 = gSaveBlock1Ptr->secretBases; + gUnknown_03001138 = gSaveBlock1Ptr->tvShows; + gUnknown_0300113C = gSaveBlock1Ptr->pokeNews; + gUnknown_03001140 = &gSaveBlock1Ptr->oldMan; + gUnknown_03001144 = gSaveBlock1Ptr->easyChatPairs; + gUnknown_03001148 = gUnknown_02039F9C; + gUnknown_0300114C = gSaveBlock2Ptr->field_64C; + gUnknown_03001150 = &gSaveBlock1Ptr->lilycoveLady; + gUnknown_03001154 = gSaveBlock2Ptr->field_0DC; + gUnknown_03001158 = gSaveBlock2Ptr->field_64C; +} -- cgit v1.2.3 From f8486b31c531dd9622e748e1382ab9e4b8a5fc5c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Nov 2017 21:56:18 -0400 Subject: sub_80E6CA0 --- src/record_mixing.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index ade4d6e8c..06cf1ab2e 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -3,10 +3,26 @@ #include "global.h" #include "task.h" #include "cable_club.h" +#include "link.h" +#include "tv.h" +#include "battle_tower.h" +#include "mystery_event_script.h" #include "record_mixing.h" // Static type declarations +struct RecordMixingData { + struct SecretBaseRecord secretBases[20]; + TVShow tvShows[25]; + PokeNews pokeNews[16]; + OldMan oldMan; + struct EasyChatPair easyChatPair[5]; + u8 unk_10ac[0x78]; + u8 unk_1124[0xa4]; + u16 unk_11c8; + u8 unk_11ca[0x27a]; +}; + // Static RAM declarations IWRAM_DATA bool8 gUnknown_03001130; @@ -28,13 +44,12 @@ EWRAM_DATA struct DayCareMailRecordMixing gUnknown_02039F9C[2] = {}; EWRAM_DATA struct { /*0x0000*/ u8 filler_0000[0x5110]; } *gUnknown_0203A014 = NULL; -EWRAM_DATA struct { - /*0x0000*/ u8 filler_0000[0x1444]; -} *gUnknown_0203A018 = NULL; +EWRAM_DATA struct RecordMixingData *gUnknown_0203A018 = NULL; // Static ROM declarations void sub_80E715C(u8 taskId); +void sub_80E89F8(void *dest); // .rodata @@ -58,3 +73,19 @@ void sub_80E6BF8(void) gUnknown_03001154 = gSaveBlock2Ptr->field_0DC; gUnknown_03001158 = gSaveBlock2Ptr->field_64C; } + +void sub_80E6CA0(struct RecordMixingData *dest) +{ + memcpy(dest->secretBases, gUnknown_03001134, sizeof(struct SecretBaseRecord) * 20); + memcpy(dest->tvShows, gUnknown_03001138, sizeof(TVShow) * 25); + sub_80F14F8(dest->tvShows); + memcpy(dest->pokeNews, gUnknown_0300113C, sizeof(PokeNews) * 16); + memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); + memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); + sub_80E89F8(dest->unk_10ac); + sub_81659DC(gUnknown_0300114C, dest->unk_1124); + if (GetMultiplayerId() == 0) + { + dest->unk_11c8 = sub_81539D4(); + } +} -- cgit v1.2.3 From 20ebcf71699a3463e130b68b1c2c2a3f984c8db8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Nov 2017 22:07:36 -0400 Subject: sub_80E6D54 --- src/record_mixing.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 06cf1ab2e..5b1f1c0c8 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -7,6 +7,8 @@ #include "tv.h" #include "battle_tower.h" #include "mystery_event_script.h" +#include "secret_base.h" +#include "mauville_old_man.h" #include "record_mixing.h" // Static type declarations @@ -50,6 +52,8 @@ EWRAM_DATA struct RecordMixingData *gUnknown_0203A018 = NULL; void sub_80E715C(u8 taskId); void sub_80E89F8(void *dest); +void sub_80E8A54(void *src); +void TaskDummy4(void *src); // .rodata @@ -89,3 +93,23 @@ void sub_80E6CA0(struct RecordMixingData *dest) dest->unk_11c8 = sub_81539D4(); } } + +void sub_80E6D54(struct RecordMixingData *dest) +{ + memcpy(dest->secretBases, gUnknown_03001134, sizeof(struct SecretBaseRecord) * 20); + sub_80EB18C(dest->secretBases); + memcpy(dest->tvShows, gUnknown_03001138, sizeof(TVShow) * 25); + sub_80F1208(dest->tvShows); + memcpy(dest->pokeNews, gUnknown_0300113C, sizeof(PokeNews) * 16); + memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); + sub_8120B70(&dest->oldMan); + memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); + sub_80E89F8(dest->unk_10ac); + sub_80E8A54(dest->unk_10ac); + sub_81659DC(gUnknown_0300114C, dest->unk_1124); + TaskDummy4(dest->unk_1124); + if (GetMultiplayerId() == 0) + { + dest->unk_11c8 = sub_81539D4(); + } +} -- cgit v1.2.3 From 1c3e7f169f26d471280a0f7aa1043dbd68e981c7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Nov 2017 22:26:12 -0400 Subject: sub_80E6E24 --- src/record_mixing.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 5b1f1c0c8..c8259e117 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); + } +} -- cgit v1.2.3 From f5c1e190d1e8a50e9a5d27f2489d12167c193b61 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 09:39:41 -0400 Subject: sub_80E6F60 --- src/record_mixing.c | 80 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index c8259e117..4853afb29 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -14,20 +14,19 @@ // Static type declarations struct RecordMixingData { - struct SecretBaseRecord secretBases[20]; - TVShow tvShows[25]; - PokeNews pokeNews[16]; - OldMan oldMan; - struct EasyChatPair easyChatPair[5]; - u8 unk_10ac[0x78]; - u8 unk_1124[0xa4]; - u16 unk_11c8; - u8 filler_11ca[0x46]; - u16 unk_1210; - u8 filler_1212[0x2]; - LilycoveLady lilycoveLady; - u8 unk_1254[0x88]; - u8 unk_12dc[0x168]; + /* 0x0000 */ struct SecretBaseRecord secretBases[20]; + /* 0x0c80 */ TVShow tvShows[25]; + /* 0x1004 */ PokeNews pokeNews[16]; + /* 0x1044 */ OldMan oldMan; + /* 0x1084 */ struct EasyChatPair easyChatPair[5]; + /* 0x10ac */ u8 unk_10ac[0x78]; + /* 0x1124 */ u8 unk_1124[0xa4]; + /* 0x11c8 */ u16 unk_11c8; + /* 0x11ca */ u8 filler_11ca[0x46]; + /* 0x1210 */ u16 unk_1210; + /* 0x1214 */ LilycoveLady lilycoveLady; + /* 0x1254 */ u8 unk_1254[0x88]; + /* 0x12dc */ u8 unk_12dc[0x168]; }; // 1444 // Static RAM declarations @@ -48,19 +47,29 @@ IWRAM_DATA u8 gUnknown_03001160[8]; IWRAM_DATA u32 gUnknown_03001168[3]; EWRAM_DATA struct DayCareMailRecordMixing gUnknown_02039F9C[2] = {}; -EWRAM_DATA struct { - /*0x0000*/ u8 filler_0000[0x5110]; -} *gUnknown_0203A014 = NULL; +EWRAM_DATA struct RecordMixingData *gUnknown_0203A014 = NULL; EWRAM_DATA struct RecordMixingData *gUnknown_0203A018 = NULL; // Static ROM declarations void sub_80E715C(u8 taskId); +void sub_80E78C4(OldMan *, size_t, u8); +void sub_80E7948(void *, size_t, u8); +void sub_80E7A14(LilycoveLady *, size_t, u8); +void sub_80E7B2C(TVShow *); +void sub_80E7B60(void *, size_t, u8, TVShow *); +void sub_80E7F68(void *, u8); +void sub_80E8110(void *, void *); +void sub_80E8468(void *, size_t, u8); +void sub_80E89AC(void *, size_t, u8); void sub_80E89F8(void *dest); void sub_80E8A54(void *src); -void TaskDummy4(void *src); void sub_80E8AC0(void *); -void sub_80E8110(void *, void *); +void sub_80EAF80(struct SecretBaseRecord *, size_t, u8); +void sub_80F01E8(void *, size_t, u8); +void sub_80F0C7C(PokeNews *, size_t, u8); +void sub_812287C(struct EasyChatPair *, size_t, u8); +void TaskDummy4(void *src); // .rodata @@ -156,3 +165,36 @@ void sub_80E6E24(void) sub_80E8260(gUnknown_0203A018->unk_12dc); } } + +void sub_80E6F60(u32 a0) +{ + if (sub_800A064()) + { + // Ruby/Sapphire + sub_80E7B2C(gUnknown_0203A014[0].tvShows); + sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1230, a0); + sub_80E7B60(gUnknown_0203A014[0].unk_10ac, 0x1230, a0, gUnknown_0203A014[0].tvShows); + sub_80E7948(gUnknown_0203A014[0].unk_1124, 0x1230, a0); + sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1230, a0); + sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1230, a0); + sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1230, a0); + sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1230, a0); + sub_80E7F68(&gUnknown_0203A014[0].unk_11c8, a0); + } + else + { + // Emerald + sub_80E7B2C(gUnknown_0203A014[0].tvShows); + sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1444, a0); + sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1444, a0); + sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1444, a0); + sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1444, a0); + sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1444, a0); + sub_80E7B60(gUnknown_0203A014[0].unk_10ac, 0x1444, a0, gUnknown_0203A014[0].tvShows); + sub_80E7948(gUnknown_0203A014[0].unk_1124, 0x1444, a0); + sub_80E7F68(&gUnknown_0203A014[0].unk_1210, a0); + sub_80E7A14(&gUnknown_0203A014[0].lilycoveLady, 0x1444, a0); + sub_80E8468(gUnknown_0203A014[0].unk_1254, 0x1444, a0); + sub_80E89AC(gUnknown_0203A014[0].unk_12dc, 0x1444, a0); + } +} -- cgit v1.2.3 From c05444679059e0692275781d065d36e79610cc4c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 10:15:58 -0400 Subject: through sub_80E715C --- src/record_mixing.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 106 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 4853afb29..902dcde1d 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1,19 +1,30 @@ // Includes #include "global.h" +#include "malloc.h" #include "task.h" #include "cable_club.h" #include "link.h" #include "tv.h" #include "battle_tower.h" +#include "new_menu_helpers.h" +#include "window.h" #include "mystery_event_script.h" #include "secret_base.h" #include "mauville_old_man.h" +#include "sound.h" +#include "songs.h" +#include "overworld.h" +#include "field_screen.h" +#include "fldeff_80F9BCC.h" +#include "script.h" +#include "event_data.h" +#include "strings.h" #include "record_mixing.h" // Static type declarations -struct RecordMixingData { +struct PlayerRecords { /* 0x0000 */ struct SecretBaseRecord secretBases[20]; /* 0x0c80 */ TVShow tvShows[25]; /* 0x1004 */ PokeNews pokeNews[16]; @@ -47,18 +58,20 @@ IWRAM_DATA u8 gUnknown_03001160[8]; IWRAM_DATA u32 gUnknown_03001168[3]; EWRAM_DATA struct DayCareMailRecordMixing gUnknown_02039F9C[2] = {}; -EWRAM_DATA struct RecordMixingData *gUnknown_0203A014 = NULL; -EWRAM_DATA struct RecordMixingData *gUnknown_0203A018 = NULL; +EWRAM_DATA struct PlayerRecords *gUnknown_0203A014 = NULL; +EWRAM_DATA struct PlayerRecords *gUnknown_0203A018 = NULL; // Static ROM declarations -void sub_80E715C(u8 taskId); +static void sub_80E715C(u8 taskId); +void sub_80E7324(u8 taskId); void sub_80E78C4(OldMan *, size_t, u8); void sub_80E7948(void *, size_t, u8); void sub_80E7A14(LilycoveLady *, size_t, u8); void sub_80E7B2C(TVShow *); void sub_80E7B60(void *, size_t, u8, TVShow *); void sub_80E7F68(void *, u8); +void sub_80E7FF8(u8 taskId); void sub_80E8110(void *, void *); void sub_80E8468(void *, size_t, u8); void sub_80E89AC(void *, size_t, u8); @@ -94,7 +107,7 @@ void sub_80E6BF8(void) gUnknown_03001158 = gSaveBlock2Ptr->field_64C; } -void sub_80E6CA0(struct RecordMixingData *dest) +void sub_80E6CA0(struct PlayerRecords *dest) { memcpy(dest->secretBases, gUnknown_03001134, sizeof(struct SecretBaseRecord) * 20); memcpy(dest->tvShows, gUnknown_03001138, sizeof(TVShow) * 25); @@ -110,7 +123,7 @@ void sub_80E6CA0(struct RecordMixingData *dest) } } -void sub_80E6D54(struct RecordMixingData *dest) +void sub_80E6D54(struct PlayerRecords *dest) { memcpy(dest->secretBases, gUnknown_03001134, sizeof(struct SecretBaseRecord) * 20); sub_80EB18C(dest->secretBases); @@ -135,7 +148,7 @@ void sub_80E6E24(void) sub_80E9914(); sub_80F0BB8(); sub_80E6BF8(); - if (sub_800A064()) + if (Link_AnyPartnersPlayingRubyOrSapphrie()) { if (sub_800A03C() == FALSE) { @@ -168,7 +181,7 @@ void sub_80E6E24(void) void sub_80E6F60(u32 a0) { - if (sub_800A064()) + if (Link_AnyPartnersPlayingRubyOrSapphrie()) { // Ruby/Sapphire sub_80E7B2C(gUnknown_0203A014[0].tvShows); @@ -198,3 +211,88 @@ void sub_80E6F60(u32 a0) sub_80E89AC(gUnknown_0203A014[0].unk_12dc, 0x1444, a0); } } + +void sub_80E70F4(const u8 *src) +{ + sub_81973C4(0, 0); + PrintTextOnWindow(0, 1, src, 0, 1, 0, NULL); + CopyWindowToVram(0, 3); +} + +void sub_80E7128(u8 taskId) +{ + if (++ gTasks[taskId].data[0] == 50) + { + PlaySE(SE_W213); + gTasks[taskId].data[0] = 0; + } +} + +static void sub_80E715C(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + switch (data[0]) + { + case 0: + gUnknown_0203A018 = malloc(sizeof(struct PlayerRecords)); + gUnknown_0203A014 = malloc(sizeof(struct PlayerRecords) * 4); + sub_8009628(gSpecialVar_0x8005); + VarSet(VAR_0x4000, 1); + gUnknown_03001130 = FALSE; + sub_80E6E24(); + sub_80FB00C(); + data[0] = 1; + data[10] = CreateTask(sub_80E7324, 80); + data[15] = CreateTask(sub_80E7128, 81); + break; + case 1: + if (!gTasks[data[10]].isActive) + { + data[0] = 2; + FlagSet(SYS_MIX_RECORD); + sub_80FB074(); + DestroyTask(data[15]); + } + break; + case 2: + data[10] = CreateTask(sub_80E7FF8, 10); + data[0] = 3; + PlaySE(SE_W226); + break; + case 3: + if (!gTasks[data[10]].isActive) + { + data[0] = 4; + if (!gLinkVSyncDisabled) + { + data[10] = sub_80B3050(); + } + sub_80E70F4(gText_RecordMixingComplete); + data[8] = 0; + } + break; + case 4: + if (++ data[8] > 60) + { + data[0] = 5; + } + break; + case 5: + if (!gTasks[data[10]].isActive) + { + free(gUnknown_0203A014); + free(gUnknown_0203A018); + sub_808729C(); + if (gLinkVSyncDisabled) + { + CreateTask(sub_80AF2B4, 10); + } + sub_8197434(0, 1); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} -- cgit v1.2.3 From 411cb29f4ab513da00d15ff16fc98fed8b31dfdb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 10:55:39 -0400 Subject: sub_80E7324 --- src/record_mixing.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 902dcde1d..c57dc9dae 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -20,6 +20,7 @@ #include "script.h" #include "event_data.h" #include "strings.h" +#include "string_util.h" #include "record_mixing.h" // Static type declarations @@ -64,7 +65,11 @@ EWRAM_DATA struct PlayerRecords *gUnknown_0203A018 = NULL; // Static ROM declarations static void sub_80E715C(u8 taskId); -void sub_80E7324(u8 taskId); +static void sub_80E7324(u8 taskId); +void sub_80E756C(u8 taskId); +void sub_80E7630(u8 taskId); +u8 sub_80E7810(void); +void sub_80E7808(struct PlayerRecords *records, s16 *a1); void sub_80E78C4(OldMan *, size_t, u8); void sub_80E7948(void *, size_t, u8); void sub_80E7A14(LilycoveLady *, size_t, u8); @@ -296,3 +301,103 @@ static void sub_80E715C(u8 taskId) break; } } + +static void sub_80E7324(u8 taskId) +{ + u8 r4; + u8 taskId2; + struct Task *task; + + task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + sub_80E70F4(gText_MixingRecords); + task->data[8] = 0x708; + task->data[0] = 400; + sub_8009FAC(); + break; + case 100: + if (++ task->data[12] > 20) + { + task->data[12] = 0; + task->data[0] = 101; + } + break; + case 101: + r4 = sub_800ABAC(); + if (sub_800ABBC() == TRUE) + { + if (r4 == sub_800AA48()) + { + PlaySE(SE_PIN); + task->data[0] = 201; + task->data[12] = 0; + } + } + else + { + PlaySE(SE_BOO); + task->data[0] = 301; + } + break; + case 201: + if (sub_800AA48() == sub_800ABAC() && ++ task->data[12] > (sub_800ABAC() * 30)) + { + sub_800A620(); + task->data[0] = 1; + } + break; + case 301: + if (sub_800AA48() == sub_800ABAC()) + { + task->data[0] = 1; + } + break; + case 400: + if (++ task->data[12] > 20) + { + task->data[0] = 1; + task->data[12] = 0; + } + break; + case 1: + if (gReceivedRemoteLinkPlayers != 0) + { + ConvertIntToDecimalStringN(gStringVar1, sub_80E7810(), STR_CONV_MODE_LEADING_ZEROS, 2); + task->data[0] = 5; + } + break; + case 2: + task->data[6] = sub_800ABAC(); + task->data[0] = 0; + task->data[5] = sub_80E7810(); + task->func = sub_80E756C; + if (Link_AnyPartnersPlayingRubyOrSapphrie()) + { + sub_80E7808(gUnknown_0203A018, &task->data[2]); + taskId2 = CreateTask(sub_80E7630, 80); + task->data[10] = taskId2; + gTasks[taskId2].data[0] = taskId; + sub_80E7808(gUnknown_0203A014, &gTasks[taskId2].data[5]); + gUnknown_0300115C = 0x1230; + } + else + { + sub_80E7808(gUnknown_0203A018, &task->data[2]); + taskId2 = CreateTask(sub_80E7630, 80); + task->data[10] = taskId2; + gTasks[taskId2].data[0] = taskId; + sub_80E7808(gUnknown_0203A014, &gTasks[taskId2].data[5]); + gUnknown_0300115C = 0x1444; + } + break; + case 5: + if (++ task->data[10] > 60) + { + task->data[10] = 0; + task->data[0] = 2; + } + break; + } +} -- cgit v1.2.3 From 6c746425ed48ba6d4d6519959b13914192da95b7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 11:16:07 -0400 Subject: sub_80E756C --- src/record_mixing.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index c57dc9dae..9dd3be0fe 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -66,8 +66,10 @@ EWRAM_DATA struct PlayerRecords *gUnknown_0203A018 = NULL; static void sub_80E715C(u8 taskId); static void sub_80E7324(u8 taskId); -void sub_80E756C(u8 taskId); +static void sub_80E756C(u8 taskId); void sub_80E7630(u8 taskId); +void sub_80E77D4(u8 taskId); +void *sub_80E77FC(s16 *asShort); u8 sub_80E7810(void); void sub_80E7808(struct PlayerRecords *records, s16 *a1); void sub_80E78C4(OldMan *, size_t, u8); @@ -401,3 +403,45 @@ static void sub_80E7324(u8 taskId) break; } } + +static void sub_80E756C(u8 taskId) +{ + struct Task *task; + void *dest; + + task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + dest = sub_80E77FC(&task->data[2]) + task->data[4] * 200; + memcpy(gBlockSendBuffer, dest, 200); + task->data[0] ++; + break; + case 1: + if (GetMultiplayerId() == 0) + { + sub_800A4D8(1); + } + task->data[0] ++; + break; + case 2: + break; + case 3: + task->data[4] ++; + if (task->data[4] == gUnknown_0300115C / 200 + 1) + { + task->data[0] ++; + } + else + { + task->data[0] = 0; + } + break; + case 4: + if (!gTasks[task->data[10]].isActive) + { + task->func = sub_80E77D4; + } + break; + } +} -- cgit v1.2.3 From d921e555d20151c420eb0dab03913125a7bbf1fb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 11:39:23 -0400 Subject: sub_80E7630 --- src/record_mixing.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 9dd3be0fe..d00634212 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -67,10 +67,11 @@ EWRAM_DATA struct PlayerRecords *gUnknown_0203A018 = NULL; static void sub_80E715C(u8 taskId); static void sub_80E7324(u8 taskId); static void sub_80E756C(u8 taskId); -void sub_80E7630(u8 taskId); +static void sub_80E7630(u8 taskId); void sub_80E77D4(u8 taskId); void *sub_80E77FC(s16 *asShort); u8 sub_80E7810(void); +void *sub_80E7820(u8); void sub_80E7808(struct PlayerRecords *records, s16 *a1); void sub_80E78C4(OldMan *, size_t, u8); void sub_80E7948(void *, size_t, u8); @@ -445,3 +446,47 @@ static void sub_80E756C(u8 taskId) break; } } + +static void sub_80E7630(u8 taskId) +{ + struct Task *task; + u8 status; + u8 counter; + u8 i; + void *dest; + void *src; + + task = &gTasks[taskId]; + status = GetBlockReceivedStatus(); + counter = 0; + if (status == sub_800A9D8()) + { + for (i = 0; i < GetLinkPlayerCount(); i ++) + { + if ((status >> i) & 0x01) + { + dest = sub_80E77FC(&task->data[5]) + task->data[i + 1] * 200 + gUnknown_0300115C * i; + src = sub_80E7820(i); + if ((task->data[i + 1] + 1) * 200 > gUnknown_0300115C) + { + memcpy(dest, src, gUnknown_0300115C - task->data[i + 1] * 200); + } + else + { + memcpy(dest, src, 200); + } + ResetBlockReceivedFlag(i); + task->data[i + 1] ++; + if (task->data[i + 1] == gUnknown_0300115C / 200 + 1) + { + counter ++; + } + } + } + gTasks[task->data[0]].data[0] ++; + } + if (counter == GetLinkPlayerCount()) + { + DestroyTask(taskId); + } +} -- cgit v1.2.3 From cd4aa5efe5e3ca9ad96ceee0462ff69c99d3fc92 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 11:49:28 -0400 Subject: through sub_80E7820 --- src/record_mixing.c | 71 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index d00634212..01b19cbb3 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -68,11 +68,11 @@ static void sub_80E715C(u8 taskId); static void sub_80E7324(u8 taskId); static void sub_80E756C(u8 taskId); static void sub_80E7630(u8 taskId); -void sub_80E77D4(u8 taskId); -void *sub_80E77FC(s16 *asShort); -u8 sub_80E7810(void); -void *sub_80E7820(u8); -void sub_80E7808(struct PlayerRecords *records, s16 *a1); +static void sub_80E77D4(u8 taskId); +static void *sub_80E77FC(const u16 *asShort); +static void sub_80E7808(void *records, u16 *a1); +static u8 sub_80E7810(void); +static void *sub_80E7820(u8); void sub_80E78C4(OldMan *, size_t, u8); void sub_80E7948(void *, size_t, u8); void sub_80E7A14(LilycoveLady *, size_t, u8); @@ -378,20 +378,20 @@ static void sub_80E7324(u8 taskId) task->func = sub_80E756C; if (Link_AnyPartnersPlayingRubyOrSapphrie()) { - sub_80E7808(gUnknown_0203A018, &task->data[2]); + sub_80E7808(gUnknown_0203A018, (u16 *)&task->data[2]); taskId2 = CreateTask(sub_80E7630, 80); task->data[10] = taskId2; gTasks[taskId2].data[0] = taskId; - sub_80E7808(gUnknown_0203A014, &gTasks[taskId2].data[5]); + sub_80E7808(gUnknown_0203A014, (u16 *)&gTasks[taskId2].data[5]); gUnknown_0300115C = 0x1230; } else { - sub_80E7808(gUnknown_0203A018, &task->data[2]); + sub_80E7808(gUnknown_0203A018, (u16 *)&task->data[2]); taskId2 = CreateTask(sub_80E7630, 80); task->data[10] = taskId2; gTasks[taskId2].data[0] = taskId; - sub_80E7808(gUnknown_0203A014, &gTasks[taskId2].data[5]); + sub_80E7808(gUnknown_0203A014, (u16 *)&gTasks[taskId2].data[5]); gUnknown_0300115C = 0x1444; } break; @@ -465,7 +465,7 @@ static void sub_80E7630(u8 taskId) { if ((status >> i) & 0x01) { - dest = sub_80E77FC(&task->data[5]) + task->data[i + 1] * 200 + gUnknown_0300115C * i; + dest = sub_80E77FC((u16 *)&task->data[5]) + task->data[i + 1] * 200 + gUnknown_0300115C * i; src = sub_80E7820(i); if ((task->data[i + 1] + 1) * 200 > gUnknown_0300115C) { @@ -490,3 +490,54 @@ static void sub_80E7630(u8 taskId) DestroyTask(taskId); } } + +static void sub_80E776C(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + if (!gTasks[task->data[10]].isActive) + { + DestroyTask(taskId); + } +} + +static void sub_80E77A0(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + task->func = sub_80E776C; + if (gUnknown_03001130 == TRUE) + { + sub_80E6F60(task->data[5]); + } +} + +static void sub_80E77D4(u8 taskId) +{ + gTasks[taskId].func = sub_80E77A0; + gUnknown_03001130 = TRUE; +} + + +static void *sub_80E77FC(const u16 *asShort) +{ + return (void *)(asShort[0] | (asShort[1] << 16)); +} + +static void sub_80E7808(void *data, u16 *asShort) +{ + asShort[0] = (u32)data; + asShort[1] = ((u32)data >> 16); +} + +static u8 sub_80E7810(void) +{ + return GetMultiplayerId(); +} + +static void *sub_80E7820(u8 id) +{ + return gBlockRecvBuffer[id]; +} -- cgit v1.2.3 From fb9e5cb3a411a1186a029e089ee63a3f9928457b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 12:03:50 -0400 Subject: sub_80E7830 --- src/record_mixing.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 01b19cbb3..14afd57ce 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -94,6 +94,10 @@ void TaskDummy4(void *src); // .rodata +extern const u8 gUnknown_0858CF8C[]; +extern const u8 gUnknown_0858CF8E[][3]; +extern const u8 gUnknown_0858CF94[][4]; + // .text void sub_80E6BE8(void) @@ -541,3 +545,33 @@ static void *sub_80E7820(u8 id) { return gBlockRecvBuffer[id]; } + +void sub_80E7830(u32 *data) +{ + u32 i; + u32 linkTrainerId; + + switch ((u32)GetLinkPlayerCount()) + { + case 2: + for (i = 0; i < 2; i ++) + { + data[i] = gUnknown_0858CF8C[i]; + } + break; + case 3: + linkTrainerId = GetLinkPlayerTrainerId(0) % 2; + for (i = 0; i < 3; i ++) + { + data[i] = gUnknown_0858CF8E[linkTrainerId][i]; + } + break; + case 4: + linkTrainerId = GetLinkPlayerTrainerId(0) % 9; + for (i = 0; i < 4; i ++) + { + data[i] = gUnknown_0858CF94[linkTrainerId][i]; + } + break; + } +} -- cgit v1.2.3 From 158e9ff7623a8eba3e00c962e1050c6937bf535a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 12:20:40 -0400 Subject: sub_80E78C4 --- src/record_mixing.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 14afd57ce..6670663f4 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -160,7 +160,7 @@ void sub_80E6E24(void) sub_80E9914(); sub_80F0BB8(); sub_80E6BF8(); - if (Link_AnyPartnersPlayingRubyOrSapphrie()) + if (Link_AnyPartnersPlayingRubyOrSapphire()) { if (sub_800A03C() == FALSE) { @@ -193,7 +193,7 @@ void sub_80E6E24(void) void sub_80E6F60(u32 a0) { - if (Link_AnyPartnersPlayingRubyOrSapphrie()) + if (Link_AnyPartnersPlayingRubyOrSapphire()) { // Ruby/Sapphire sub_80E7B2C(gUnknown_0203A014[0].tvShows); @@ -380,7 +380,7 @@ static void sub_80E7324(u8 taskId) task->data[0] = 0; task->data[5] = sub_80E7810(); task->func = sub_80E756C; - if (Link_AnyPartnersPlayingRubyOrSapphrie()) + if (Link_AnyPartnersPlayingRubyOrSapphire()) { sub_80E7808(gUnknown_0203A018, (u16 *)&task->data[2]); taskId2 = CreateTask(sub_80E7630, 80); @@ -575,3 +575,26 @@ void sub_80E7830(u32 *data) break; } } + +void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which) +{ + u8 version; + u16 language; + OldMan *dest; + u32 data[4]; + + sub_80E7830(data); + dest = (OldMan *)((void *)oldMan + recordSize * data[which]); + version = gLinkPlayers[data[which]].version; + language = gLinkPlayers[data[which]].language; + if (Link_AnyPartnersPlayingRubyOrSapphire()) + { + sub_8120D34(dest, version, language); + } + else + { + sub_8120CD0(dest, version, language); + } + memcpy(gUnknown_03001140, (OldMan *)((void *)oldMan + recordSize * data[which]), sizeof(OldMan)); + sub_8120670(); +} -- cgit v1.2.3 From f2e723660bba8432f398784f9a1ea0d609e24e8d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 18:48:13 -0400 Subject: sub_80E7948 --- src/record_mixing.c | 88 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 6670663f4..6f09e30e2 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -3,6 +3,8 @@ #include "global.h" #include "malloc.h" #include "task.h" +#include "species.h" +#include "pokemon.h" #include "cable_club.h" #include "link.h" #include "tv.h" @@ -32,9 +34,7 @@ struct PlayerRecords { /* 0x1044 */ OldMan oldMan; /* 0x1084 */ struct EasyChatPair easyChatPair[5]; /* 0x10ac */ u8 unk_10ac[0x78]; - /* 0x1124 */ u8 unk_1124[0xa4]; - /* 0x11c8 */ u16 unk_11c8; - /* 0x11ca */ u8 filler_11ca[0x46]; + /* 0x1124 */ union BattleTowerRecord battleTowerRecord; /* 0x1210 */ u16 unk_1210; /* 0x1214 */ LilycoveLady lilycoveLady; /* 0x1254 */ u8 unk_1254[0x88]; @@ -73,8 +73,8 @@ static void *sub_80E77FC(const u16 *asShort); static void sub_80E7808(void *records, u16 *a1); static u8 sub_80E7810(void); static void *sub_80E7820(u8); -void sub_80E78C4(OldMan *, size_t, u8); -void sub_80E7948(void *, size_t, 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); void sub_80E7B2C(TVShow *); void sub_80E7B60(void *, size_t, u8, TVShow *); @@ -85,12 +85,12 @@ void sub_80E8468(void *, size_t, u8); void sub_80E89AC(void *, size_t, u8); void sub_80E89F8(void *dest); void sub_80E8A54(void *src); -void sub_80E8AC0(void *); +void sub_80E8AC0(union BattleTowerRecord *); void sub_80EAF80(struct SecretBaseRecord *, size_t, u8); void sub_80F01E8(void *, size_t, u8); void sub_80F0C7C(PokeNews *, size_t, u8); void sub_812287C(struct EasyChatPair *, size_t, u8); -void TaskDummy4(void *src); +void TaskDummy4(union BattleTowerRecord *src); // .rodata @@ -128,10 +128,10 @@ void sub_80E6CA0(struct PlayerRecords *dest) memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); sub_80E89F8(dest->unk_10ac); - sub_81659DC(gUnknown_0300114C, dest->unk_1124); + sub_81659DC(gUnknown_0300114C, &dest->battleTowerRecord); if (GetMultiplayerId() == 0) { - dest->unk_11c8 = sub_81539D4(); + dest->battleTowerRecord.ruby_sapphire.unk_11c8 = sub_81539D4(); } } @@ -147,11 +147,11 @@ void sub_80E6D54(struct PlayerRecords *dest) memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); sub_80E89F8(dest->unk_10ac); sub_80E8A54(dest->unk_10ac); - sub_81659DC(gUnknown_0300114C, dest->unk_1124); - TaskDummy4(dest->unk_1124); + sub_81659DC(gUnknown_0300114C, &dest->battleTowerRecord); + TaskDummy4(&dest->battleTowerRecord); if (GetMultiplayerId() == 0) { - dest->unk_11c8 = sub_81539D4(); + dest->battleTowerRecord.ruby_sapphire.unk_11c8 = sub_81539D4(); } } @@ -180,8 +180,8 @@ void sub_80E6E24(void) 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); + memcpy(&gUnknown_0203A018->battleTowerRecord, gUnknown_0300114C, 0xec); + sub_80E8AC0(&gUnknown_0203A018->battleTowerRecord); if (GetMultiplayerId() == 0) { gUnknown_0203A018->unk_1210 = sub_81539D4(); @@ -199,12 +199,12 @@ void sub_80E6F60(u32 a0) sub_80E7B2C(gUnknown_0203A014[0].tvShows); sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1230, a0); sub_80E7B60(gUnknown_0203A014[0].unk_10ac, 0x1230, a0, gUnknown_0203A014[0].tvShows); - sub_80E7948(gUnknown_0203A014[0].unk_1124, 0x1230, a0); + sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, 0x1230, a0); sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1230, a0); sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1230, a0); sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1230, a0); sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1230, a0); - sub_80E7F68(&gUnknown_0203A014[0].unk_11c8, a0); + sub_80E7F68(&gUnknown_0203A014[0].battleTowerRecord.ruby_sapphire.unk_11c8, a0); } else { @@ -216,7 +216,7 @@ void sub_80E6F60(u32 a0) sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1444, a0); sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1444, a0); sub_80E7B60(gUnknown_0203A014[0].unk_10ac, 0x1444, a0, gUnknown_0203A014[0].tvShows); - sub_80E7948(gUnknown_0203A014[0].unk_1124, 0x1444, a0); + sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, 0x1444, a0); sub_80E7F68(&gUnknown_0203A014[0].unk_1210, a0); sub_80E7A14(&gUnknown_0203A014[0].lilycoveLady, 0x1444, a0); sub_80E8468(gUnknown_0203A014[0].unk_1254, 0x1444, a0); @@ -530,10 +530,10 @@ static void *sub_80E77FC(const u16 *asShort) return (void *)(asShort[0] | (asShort[1] << 16)); } -static void sub_80E7808(void *data, u16 *asShort) +static void sub_80E7808(void *records, u16 *asShort) { - asShort[0] = (u32)data; - asShort[1] = ((u32)data >> 16); + asShort[0] = (u32)records; + asShort[1] = ((u32)records >> 16); } static u8 sub_80E7810(void) @@ -576,17 +576,17 @@ void sub_80E7830(u32 *data) } } -void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which) +static void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which) { u8 version; u16 language; OldMan *dest; - u32 data[4]; + u32 mixIndices[4]; - sub_80E7830(data); - dest = (OldMan *)((void *)oldMan + recordSize * data[which]); - version = gLinkPlayers[data[which]].version; - language = gLinkPlayers[data[which]].language; + sub_80E7830(mixIndices); + dest = (OldMan *)((void *)oldMan + recordSize * mixIndices[which]); + version = gLinkPlayers[mixIndices[which]].version; + language = gLinkPlayers[mixIndices[which]].language; if (Link_AnyPartnersPlayingRubyOrSapphire()) { sub_8120D34(dest, version, language); @@ -595,6 +595,40 @@ void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which) { sub_8120CD0(dest, version, language); } - memcpy(gUnknown_03001140, (OldMan *)((void *)oldMan + recordSize * data[which]), sizeof(OldMan)); + memcpy(gUnknown_03001140, (OldMan *)((void *)oldMan + recordSize * mixIndices[which]), sizeof(OldMan)); sub_8120670(); } + +static void sub_80E7948(union BattleTowerRecord *battleTowerRecord, size_t recordSize, u8 which) +{ + union BattleTowerRecord *r6; + struct UnknownPokemonStruct *btPokemon; + u32 mixIndices[4]; + s32 i; + + sub_80E7830(mixIndices); + if (Link_AnyPartnersPlayingRubyOrSapphire()) + { + if (sub_816587C((union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * mixIndices[which]), (union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which)) == TRUE) + { + r6 = (union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which); + r6->emerald.language = gLinkPlayers[mixIndices[which]].language; + sub_8164F70(r6); + } + } + 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); + for (i = 0; i < 4; i ++) + { + btPokemon = &r6->emerald.party[i]; + if (btPokemon->species != SPECIES_NONE && IsStringJapanese(btPokemon->nickname)) + { + ConvertInternationalString(btPokemon->nickname, LANGUAGE_JAPANESE); + } + } + sub_8164F70(r6); + } + sub_81628A0((union BattleTowerRecord *)((void *)battleTowerRecord + recordSize * which)); +} -- cgit v1.2.3 From 8d05aeccec2efb8943823124aaca79277d5ed305 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Nov 2017 19:03:41 -0400 Subject: sub_80E7A14 --- src/lilycove_lady.c | 10 +++++----- src/record_mixing.c | 56 ++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 48 insertions(+), 18 deletions(-) (limited to 'src') 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)); } -- cgit v1.2.3 From 0a17fc98f6cc08151aab395064185815e41ab898 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 6 Nov 2017 23:03:11 -0500 Subject: nonmatching sub_80E7B60 --- src/record_mixing.c | 779 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 764 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 9157597dd..66972b650 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -2,6 +2,10 @@ // Includes #include "global.h" #include "malloc.h" +#include "rng.h" +#include "items.h" +#include "text.h" + #include "task.h" #include "species.h" #include "pokemon.h" @@ -34,7 +38,7 @@ struct PlayerRecords { /* 0x1004 */ PokeNews pokeNews[16]; /* 0x1044 */ OldMan oldMan; /* 0x1084 */ struct EasyChatPair easyChatPair[5]; - /* 0x10ac */ u8 unk_10ac[0x78]; + /* 0x10ac */ struct UnkStruct_80E7B60 unk_10ac; /* 0x1124 */ union BattleTowerRecord battleTowerRecord; /* 0x1210 */ u16 unk_1210; /* 0x1214 */ LilycoveLady lilycoveLady; @@ -50,16 +54,17 @@ IWRAM_DATA TVShow *gUnknown_03001138; IWRAM_DATA PokeNews *gUnknown_0300113C; IWRAM_DATA OldMan *gUnknown_03001140; IWRAM_DATA struct EasyChatPair *gUnknown_03001144; -IWRAM_DATA struct DayCareMailRecordMixing *gUnknown_03001148; +IWRAM_DATA struct UnkStruct_80E7B60 *gUnknown_03001148; IWRAM_DATA void *gUnknown_0300114C; // gSaveBlock2Ptr->field_64C IWRAM_DATA LilycoveLady *gUnknown_03001150; IWRAM_DATA void *gUnknown_03001154; // gSaveBlock2Ptr->field_0DC; IWRAM_DATA void *gUnknown_03001158; // gSaveBlock2Ptr->field_64C IWRAM_DATA u32 gUnknown_0300115C; -IWRAM_DATA u8 gUnknown_03001160[8]; +IWRAM_DATA u8 gUnknown_03001160; +IWRAM_DATA u32 filler_03001164; IWRAM_DATA u32 gUnknown_03001168[3]; -EWRAM_DATA struct DayCareMailRecordMixing gUnknown_02039F9C[2] = {}; +EWRAM_DATA struct UnkStruct_80E7B60 gUnknown_02039F9C = {}; EWRAM_DATA struct PlayerRecords *gUnknown_0203A014 = NULL; EWRAM_DATA struct PlayerRecords *gUnknown_0203A018 = NULL; @@ -77,8 +82,8 @@ static void *sub_80E7820(u8); static void sub_80E78C4(OldMan *, size_t, u8); static void sub_80E7948(union BattleTowerRecord *, size_t, u8); static void sub_80E7A14(LilycoveLady *, size_t, u8); -void sub_80E7B2C(TVShow *); -void sub_80E7B60(void *, size_t, u8, TVShow *); +static void sub_80E7B2C(const u8 *); +static void sub_80E7B60(struct UnkStruct_80E7B60 *, size_t, u8, TVShow *); void sub_80E7F68(void *, u8); void sub_80E7FF8(u8 taskId); void sub_80E8110(void *, void *); @@ -99,6 +104,9 @@ extern const u8 gUnknown_0858CF8C[]; extern const u8 gUnknown_0858CF8E[][3]; extern const u8 gUnknown_0858CF94[][4]; +extern const u8 gUnknown_0858CFB8[3][2]; +extern const u8 gUnknown_0858CFBE[3][4]; + // .text void sub_80E6BE8(void) @@ -113,7 +121,7 @@ void sub_80E6BF8(void) gUnknown_0300113C = gSaveBlock1Ptr->pokeNews; gUnknown_03001140 = &gSaveBlock1Ptr->oldMan; gUnknown_03001144 = gSaveBlock1Ptr->easyChatPairs; - gUnknown_03001148 = gUnknown_02039F9C; + gUnknown_03001148 = &gUnknown_02039F9C; gUnknown_0300114C = gSaveBlock2Ptr->field_64C; gUnknown_03001150 = &gSaveBlock1Ptr->lilycoveLady; gUnknown_03001154 = gSaveBlock2Ptr->field_0DC; @@ -128,7 +136,7 @@ void sub_80E6CA0(struct PlayerRecords *dest) memcpy(dest->pokeNews, gUnknown_0300113C, sizeof(PokeNews) * 16); memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); - sub_80E89F8(dest->unk_10ac); + sub_80E89F8(&dest->unk_10ac); sub_81659DC(gUnknown_0300114C, &dest->battleTowerRecord); if (GetMultiplayerId() == 0) { @@ -146,8 +154,8 @@ void sub_80E6D54(struct PlayerRecords *dest) memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); sub_8120B70(&dest->oldMan); memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); - sub_80E89F8(dest->unk_10ac); - sub_80E8A54(dest->unk_10ac); + sub_80E89F8(&dest->unk_10ac); + sub_80E8A54(&dest->unk_10ac); sub_81659DC(gUnknown_0300114C, &dest->battleTowerRecord); TaskDummy4(&dest->battleTowerRecord); if (GetMultiplayerId() == 0) @@ -180,7 +188,7 @@ void sub_80E6E24(void) 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); + sub_80E89F8(&gUnknown_0203A018->unk_10ac); memcpy(&gUnknown_0203A018->battleTowerRecord, gUnknown_0300114C, 0xec); sub_80E8AC0(&gUnknown_0203A018->battleTowerRecord); if (GetMultiplayerId() == 0) @@ -197,9 +205,9 @@ void sub_80E6F60(u32 a0) if (Link_AnyPartnersPlayingRubyOrSapphire()) { // Ruby/Sapphire - sub_80E7B2C(gUnknown_0203A014[0].tvShows); + sub_80E7B2C((void *)gUnknown_0203A014[0].tvShows); sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1230, a0); - sub_80E7B60(gUnknown_0203A014[0].unk_10ac, 0x1230, a0, gUnknown_0203A014[0].tvShows); + sub_80E7B60(&gUnknown_0203A014[0].unk_10ac, 0x1230, a0, gUnknown_0203A014[0].tvShows); sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, 0x1230, a0); sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1230, a0); sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1230, a0); @@ -210,13 +218,13 @@ void sub_80E6F60(u32 a0) else { // Emerald - sub_80E7B2C(gUnknown_0203A014[0].tvShows); + sub_80E7B2C((void *)gUnknown_0203A014[0].tvShows); sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1444, a0); sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1444, a0); sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1444, a0); sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1444, a0); sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1444, a0); - sub_80E7B60(gUnknown_0203A014[0].unk_10ac, 0x1444, a0, gUnknown_0203A014[0].tvShows); + sub_80E7B60(&gUnknown_0203A014[0].unk_10ac, 0x1444, a0, gUnknown_0203A014[0].tvShows); sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, 0x1444, a0); sub_80E7F68(&gUnknown_0203A014[0].unk_1210, a0); sub_80E7A14(&gUnknown_0203A014[0].lilycoveLady, 0x1444, a0); @@ -662,3 +670,744 @@ static void sub_80E7A14(LilycoveLady *lilycoveLady, size_t recordSize, u8 which) free(dest); } } + +static u8 sub_80E7A9C(struct DayCareMailRecordMixing *rmMail) +{ + return rmMail->mail.itemId; +} + +static void sub_80E7AA4(struct UnkStruct_80E7B60 *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) +{ + struct DayCareMailRecordMixing buffer; + struct UnkStruct_80E7B60 *_src1; + struct UnkStruct_80E7B60 *_src2; + + _src1 = (void *)src + recordSize * idxs[which0][0]; + memcpy(&buffer, &_src1->unk_00[idxs[which0][1]], sizeof(struct DayCareMailRecordMixing)); + _src2 = (void *)src + recordSize * idxs[which1][0]; + memcpy(&_src1->unk_00[idxs[which0][1]], &_src2->unk_00[idxs[which1][1]], sizeof(struct DayCareMailRecordMixing)); + memcpy(&_src2->unk_00[idxs[which1][1]], &buffer, sizeof(struct DayCareMailRecordMixing)); +} + +static void sub_80E7B2C(const u8 *src) +{ + u8 sum; + int i; + + sum = 0; + for (i = 0; i < 256; i ++) + { + sum += src[i]; + } + gUnknown_03001160 = sum; +} + +static u8 sub_80E7B54(void) +{ + return gUnknown_03001160; +} + +#ifdef NONMATCHING +static void sub_80E7B60(struct UnkStruct_80E7B60 *src, size_t recordSize, u8 which, TVShow *shows) +{ + // r9 = which + u16 i; + u16 j; + u8 linkPlayerCount; + u16 language; + u16 otNameLanguage; + u16 nicknameLanguage; + u32 version; + u8 dcMail1; + u8 dcMail2; + u8 r1_80e7b54; + struct DayCareMailRecordMixing *recordMixingMail; + struct UnkStruct_80E7B60 *_src; + u8 sp04[4]; + u8 sp08[4]; + struct UnkStruct_80E7B60 *sp0c[4]; // -> sp+48 + u8 sp1c[4][2]; // [][0] -> sp+4c, [][1] -> sp+50 + u8 sp24[4][2]; + // sp+2c = src + // sp+30 = recordSize + u8 sp34; + u16 oldSeed; + bool32 anyRS; // sp+3c + + oldSeed = Random2(); + SeedRng2(gLinkPlayers[0].trainerId); + linkPlayerCount = GetLinkPlayerCount(); + for (i = 0; i < 4; i ++) + { + sp04[i] = 0xFF; + sp08[i] = 0; + sp1c[i][0] = 0; + sp1c[i][1] = 0; + } + anyRS = Link_AnyPartnersPlayingRubyOrSapphire(); + for (i = 0; i < GetLinkPlayerCount(); i ++) // r8 = i + { + // sp+54 = linkPlayerCount << 16 + // sp+44 = which * recordSize + _src = (void *)src + i * recordSize; // r7 + language = gLinkPlayers[i].language; // r9 + version = (u8)gLinkPlayers[i].version; // sp+40 + for (j = 0; j < _src->unk_70; j ++) + { + // r10 = ~0x10 + recordMixingMail = &_src->unk_00[j]; + if (recordMixingMail->mail.itemId != ITEM_NONE) + { + if (anyRS) + { + if (StringLength(recordMixingMail->OT_name) <= 5) + { + otNameLanguage = LANGUAGE_JAPANESE; + } + else + { + StripExtCtrlCodes(recordMixingMail->OT_name); + otNameLanguage = language; + } + if (recordMixingMail->monName[0] == EXT_CTRL_CODE_BEGIN && recordMixingMail->monName[1] == EXT_CTRL_CODE_JPN) + { + StripExtCtrlCodes(recordMixingMail->monName); + nicknameLanguage = LANGUAGE_JAPANESE; + } + else + { + nicknameLanguage = language; + } + if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + { + recordMixingMail->language_maybe = otNameLanguage; + recordMixingMail->unknown = nicknameLanguage; + } + } + else if (language == LANGUAGE_JAPANESE) + { + if (IsStringJapanese(recordMixingMail->OT_name)) + { + recordMixingMail->language_maybe = LANGUAGE_JAPANESE; + } + else + { + recordMixingMail->language_maybe = GAME_LANGUAGE; + } + if (IsStringJapanese(recordMixingMail->monName)) + { + recordMixingMail->unknown = LANGUAGE_JAPANESE; + } + else + { + recordMixingMail->unknown = GAME_LANGUAGE; + } + } + } + } + } + sp34 = 0; + for (i = 0; i < linkPlayerCount; i ++) + { + _src = (void *)src + i * recordSize; // r7 + if (_src->unk_70 != 0) + { + for (j = 0; j < _src->unk_70; j ++) + { + if (_src->unk_74[j] == 0) + { + sp1c[i][j] = 1; + } + } + } + } + i = 0; + for (j = 0; j < linkPlayerCount; j ++) + { + _src = (void *)src + j * recordSize; + if (sp1c[j][0] == TRUE || sp1c[j][1] == TRUE) + { + sp34 ++; + } + if (sp1c[j][0] == TRUE && sp1c[j][1] == FALSE) + { + sp24[i][0] = j; + sp24[i][1] = 0; + i ++; + } + else if (sp1c[j][0] == FALSE && sp1c[j][1] == TRUE) + { + sp24[i][0] = j; + sp24[i][1] = 0; + i ++; + } + else if (sp1c[j][0] == TRUE && sp1c[j][1] == TRUE) + { + sp24[i][0] = j; + dcMail1 = sub_80E7A9C(&_src->unk_00[0]); + dcMail2 = sub_80E7A9C(&_src->unk_00[1]); + if (!dcMail1 && dcMail2) + { + sp24[i][1] = 1; + } + else if ((dcMail1 && dcMail2) || (!dcMail1 && !dcMail2)) + { + sp24[i][1] = Random2() % 2; + } + else + { + sp24[i][1] = 0; + } + i ++; + } + } + for (i = 0; i < 4; i ++) + { + _src = &src[which * recordSize]; + sp0c[i] = _src; + } + r1_80e7b54 = sub_80E7B54() % 3; + switch (sp34) + { + case 2: + sub_80E7AA4(src, recordSize, sp24, 0, 1); + break; + case 3: + sub_80E7AA4(src, recordSize, sp24, gUnknown_0858CFB8[r1_80e7b54][0], gUnknown_0858CFB8[r1_80e7b54][1]); + break; + case 4: + sub_80E7AA4(src, recordSize, sp24, gUnknown_0858CFBE[r1_80e7b54][0], gUnknown_0858CFBE[r1_80e7b54][1]); + sub_80E7AA4(src, recordSize, sp24, gUnknown_0858CFBE[r1_80e7b54][2], gUnknown_0858CFBE[r1_80e7b54][3]); + break; + } + _src = (void *)src + which * recordSize; + memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->unk_00[0], sizeof(struct DayCareMailRecordMixing)); + memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->unk_00[1], sizeof(struct DayCareMailRecordMixing)); + SeedRng(oldSeed); +} +#else +__attribute__((naked)) static void sub_80E7B60(struct UnkStruct_80E7B60 *src, size_t recordSize, u8 which, TVShow *shows) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x58\n" + "\tstr r0, [sp, 0x2C]\n" + "\tstr r1, [sp, 0x30]\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tmov r9, r2\n" + "\tbl Random2\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tstr r0, [sp, 0x38]\n" + "\tldr r0, =gLinkPlayers\n" + "\tldrh r0, [r0, 0x4]\n" + "\tbl SeedRng2\n" + "\tbl GetLinkPlayerCount\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tmovs r0, 0\n" + "\tmov r8, r0\n" + "\tmov r1, sp\n" + "\tadds r1, 0x1C\n" + "\tstr r1, [sp, 0x4C]\n" + "\tmov r2, sp\n" + "\tadds r2, 0x1D\n" + "\tstr r2, [sp, 0x50]\n" + "\tmov r3, sp\n" + "\tadds r3, 0xC\n" + "\tstr r3, [sp, 0x48]\n" + "\tmovs r7, 0xFF\n" + "\tadd r3, sp, 0x8\n" + "\tmovs r2, 0\n" + "\tadds r6, r1, 0\n" + "\tldr r5, [sp, 0x50]\n" + "_080E7BB0:\n" + "\tmov r1, sp\n" + "\tadd r1, r8\n" + "\tadds r1, 0x4\n" + "\tldrb r0, [r1]\n" + "\torrs r0, r7\n" + "\tstrb r0, [r1]\n" + "\tmov r1, r8\n" + "\tadds r0, r3, r1\n" + "\tstrb r2, [r0]\n" + "\tlsls r1, 1\n" + "\tadds r0, r6, r1\n" + "\tstrb r2, [r0]\n" + "\tadds r1, r5, r1\n" + "\tstrb r2, [r1]\n" + "\tmov r0, r8\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "\tcmp r0, 0x3\n" + "\tbls _080E7BB0\n" + "\tbl Link_AnyPartnersPlayingRubyOrSapphire\n" + "\tstr r0, [sp, 0x3C]\n" + "\tmovs r2, 0\n" + "\tmov r8, r2\n" + "\tlsls r4, 16\n" + "\tstr r4, [sp, 0x54]\n" + "\tldr r0, [sp, 0x30]\n" + "\tmov r3, r9\n" + "\tmuls r3, r0\n" + "\tstr r3, [sp, 0x44]\n" + "\tb _080E7D04\n" + "\t.pool\n" + "_080E7BF8:\n" + "\tldr r1, [sp, 0x30]\n" + "\tmov r0, r8\n" + "\tmuls r0, r1\n" + "\tldr r2, [sp, 0x2C]\n" + "\tadds r7, r2, r0\n" + "\tldr r1, =gLinkPlayers\n" + "\tmov r3, r8\n" + "\tlsls r0, r3, 3\n" + "\tsubs r0, r3\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0, 0x1A]\n" + "\tmov r9, r1\n" + "\tldrb r0, [r0]\n" + "\tstr r0, [sp, 0x40]\n" + "\tmovs r6, 0\n" + "\tldr r0, [r7, 0x70]\n" + "\tcmp r6, r0\n" + "\tbcs _080E7CFA\n" + "\tmovs r2, 0x10\n" + "\tnegs r2, r2\n" + "\tmov r10, r2\n" + "_080E7C24:\n" + "\tlsls r0, r6, 3\n" + "\tsubs r0, r6\n" + "\tlsls r0, 3\n" + "\tadds r5, r7, r0\n" + "\tldrh r0, [r5, 0x20]\n" + "\tcmp r0, 0\n" + "\tbeq _080E7CEE\n" + "\tldr r3, [sp, 0x3C]\n" + "\tcmp r3, 0\n" + "\tbeq _080E7C9A\n" + "\tadds r4, r5, 0\n" + "\tadds r4, 0x24\n" + "\tadds r0, r4, 0\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x5\n" + "\tbhi _080E7C54\n" + "\tmovs r4, 0x1\n" + "\tb _080E7C5C\n" + "\t.pool\n" + "_080E7C54:\n" + "\tadds r0, r4, 0\n" + "\tbl StripExtCtrlCodes\n" + "\tmov r4, r9\n" + "_080E7C5C:\n" + "\tldrh r1, [r5, 0x2C]\n" + "\tldr r0, =0x000015fc\n" + "\tcmp r1, r0\n" + "\tbne _080E7C74\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x2C\n" + "\tbl StripExtCtrlCodes\n" + "\tmovs r1, 0x1\n" + "\tb _080E7C76\n" + "\t.pool\n" + "_080E7C74:\n" + "\tmov r1, r9\n" + "_080E7C76:\n" + "\tldr r0, [sp, 0x40]\n" + "\tsubs r0, 0x1\n" + "\tcmp r0, 0x1\n" + "\tbhi _080E7CEE\n" + "\tadds r2, r5, 0\n" + "\tadds r2, 0x37\n" + "\tmovs r0, 0xF\n" + "\tands r4, r0\n" + "\tldrb r0, [r2]\n" + "\tmov r3, r10\n" + "\tands r0, r3\n" + "\torrs r0, r4\n" + "\tlsls r1, 4\n" + "\tmovs r3, 0xF\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrb r0, [r2]\n" + "\tb _080E7CEE\n" + "_080E7C9A:\n" + "\tmov r0, r9\n" + "\tcmp r0, 0x1\n" + "\tbne _080E7CEE\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x24\n" + "\tbl IsStringJapanese\n" + "\tcmp r0, 0\n" + "\tbeq _080E7CBA\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x37\n" + "\tldrb r1, [r0]\n" + "\tmov r2, r10\n" + "\tands r1, r2\n" + "\tmovs r2, 0x1\n" + "\tb _080E7CC6\n" + "_080E7CBA:\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x37\n" + "\tldrb r1, [r0]\n" + "\tmov r3, r10\n" + "\tands r1, r3\n" + "\tmovs r2, 0x2\n" + "_080E7CC6:\n" + "\torrs r1, r2\n" + "\tstrb r1, [r0]\n" + "\tadds r4, r0, 0\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x2C\n" + "\tbl IsStringJapanese\n" + "\tcmp r0, 0\n" + "\tbeq _080E7CE2\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0xF\n" + "\tands r1, r0\n" + "\tmovs r0, 0x10\n" + "\tb _080E7CEA\n" + "_080E7CE2:\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0xF\n" + "\tands r1, r0\n" + "\tmovs r0, 0x20\n" + "_080E7CEA:\n" + "\torrs r1, r0\n" + "\tstrb r1, [r4]\n" + "_080E7CEE:\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tldr r0, [r7, 0x70]\n" + "\tcmp r6, r0\n" + "\tbcc _080E7C24\n" + "_080E7CFA:\n" + "\tmov r0, r8\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "_080E7D04:\n" + "\tbl GetLinkPlayerCount\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r8, r0\n" + "\tbcs _080E7D12\n" + "\tb _080E7BF8\n" + "_080E7D12:\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x34]\n" + "\tmov r8, r0\n" + "\tldr r1, [sp, 0x54]\n" + "\tlsrs r0, r1, 16\n" + "\tldr r2, [sp, 0x34]\n" + "\tcmp r2, r0\n" + "\tbcs _080E7D70\n" + "\tadds r5, r0, 0\n" + "_080E7D24:\n" + "\tldr r3, [sp, 0x30]\n" + "\tmov r0, r8\n" + "\tmuls r0, r3\n" + "\tldr r1, [sp, 0x2C]\n" + "\tadds r7, r1, r0\n" + "\tldr r0, [r7, 0x70]\n" + "\tcmp r0, 0\n" + "\tbeq _080E7D62\n" + "\tmovs r6, 0\n" + "\tcmp r6, r0\n" + "\tbcs _080E7D62\n" + "\tadds r3, r7, 0\n" + "\tadds r3, 0x74\n" + "\tldr r2, [sp, 0x4C]\n" + "\tmov r0, r8\n" + "\tlsls r1, r0, 1\n" + "\tmovs r4, 0x1\n" + "_080E7D46:\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r3, r0\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _080E7D56\n" + "\tadds r0, r6, r1\n" + "\tadds r0, r2, r0\n" + "\tstrb r4, [r0]\n" + "_080E7D56:\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tldr r0, [r7, 0x70]\n" + "\tcmp r6, r0\n" + "\tbcc _080E7D46\n" + "_080E7D62:\n" + "\tmov r0, r8\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "\tcmp r8, r5\n" + "\tbcc _080E7D24\n" + "_080E7D70:\n" + "\tmovs r6, 0\n" + "\tmov r8, r6\n" + "\tldr r1, [sp, 0x54]\n" + "\tcmp r1, 0\n" + "\tbeq _080E7E64\n" + "\tadd r2, sp, 0x24\n" + "\tmov r10, r2\n" + "\tmovs r3, 0x25\n" + "\tadd r3, sp\n" + "\tmov r9, r3\n" + "_080E7D84:\n" + "\tldr r1, [sp, 0x30]\n" + "\tmov r0, r8\n" + "\tmuls r0, r1\n" + "\tldr r2, [sp, 0x2C]\n" + "\tadds r7, r2, r0\n" + "\tmov r3, r8\n" + "\tlsls r1, r3, 1\n" + "\tldr r2, [sp, 0x4C]\n" + "\tadds r0, r2, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbeq _080E7DA6\n" + "\tldr r3, [sp, 0x50]\n" + "\tadds r0, r3, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbne _080E7DB0\n" + "_080E7DA6:\n" + "\tldr r0, [sp, 0x34]\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x34]\n" + "_080E7DB0:\n" + "\tldr r2, [sp, 0x4C]\n" + "\tadds r0, r2, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbne _080E7DD4\n" + "\tldr r3, [sp, 0x50]\n" + "\tadds r0, r3, r1\n" + "\tldrb r2, [r0]\n" + "\tcmp r2, 0\n" + "\tbne _080E7DD4\n" + "_080E7DC4:\n" + "\tlsls r1, r6, 1\n" + "\tmov r3, r10\n" + "\tadds r0, r3, r1\n" + "\tmov r3, r8\n" + "\tstrb r3, [r0]\n" + "\tadd r1, r9\n" + "\tstrb r2, [r1]\n" + "\tb _080E7E4E\n" + "_080E7DD4:\n" + "\tldr r2, [sp, 0x4C]\n" + "\tadds r0, r2, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _080E7DE8\n" + "\tldr r3, [sp, 0x50]\n" + "\tadds r0, r3, r1\n" + "\tldrb r2, [r0]\n" + "\tcmp r2, 0x1\n" + "\tbeq _080E7DC4\n" + "_080E7DE8:\n" + "\tldr r2, [sp, 0x4C]\n" + "\tadds r0, r2, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbne _080E7E54\n" + "\tldr r3, [sp, 0x50]\n" + "\tadds r0, r3, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbne _080E7E54\n" + "\tlsls r5, r6, 1\n" + "\tmov r1, r10\n" + "\tadds r0, r1, r5\n" + "\tmov r2, r8\n" + "\tstrb r2, [r0]\n" + "\tadds r0, r7, 0\n" + "\tbl sub_80E7A9C\n" + "\tadds r4, r0, 0\n" + "\tlsls r4, 24\n" + "\tlsrs r4, 24\n" + "\tadds r0, r7, 0\n" + "\tadds r0, 0x38\n" + "\tbl sub_80E7A9C\n" + "\tlsls r0, 24\n" + "\tlsrs r1, r0, 24\n" + "\tcmp r4, 0\n" + "\tbne _080E7E30\n" + "\tcmp r1, 0\n" + "\tbeq _080E7E34\n" + "\tmov r3, r9\n" + "\tadds r1, r3, r5\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tb _080E7E4E\n" + "_080E7E30:\n" + "\tcmp r1, 0\n" + "\tbeq _080E7E48\n" + "_080E7E34:\n" + "\tbl Random2\n" + "\tmov r1, r9\n" + "\tadds r2, r1, r5\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0x1\n" + "\tands r0, r1\n" + "\tstrb r0, [r2]\n" + "\tb _080E7E4E\n" + "_080E7E48:\n" + "\tmov r2, r9\n" + "\tadds r0, r2, r5\n" + "\tstrb r1, [r0]\n" + "_080E7E4E:\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "_080E7E54:\n" + "\tmov r0, r8\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tmov r8, r3\n" + "\tldr r1, [sp, 0x54]\n" + "\tcmp r0, r1\n" + "\tbcc _080E7D84\n" + "_080E7E64:\n" + "\tmovs r2, 0\n" + "\tmov r8, r2\n" + "\tldr r3, [sp, 0x44]\n" + "\tlsls r0, r3, 4\n" + "\tsubs r0, r3\n" + "\tlsls r0, 3\n" + "\tldr r1, [sp, 0x2C]\n" + "\tadds r7, r1, r0\n" + "\tldr r1, [sp, 0x48]\n" + "_080E7E76:\n" + "\tmov r2, r8\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r1, r0\n" + "\tstr r7, [r0]\n" + "\tmov r0, r8\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "\tcmp r0, 0x3\n" + "\tbls _080E7E76\n" + "\tbl sub_80E7B54\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmovs r1, 0x3\n" + "\tbl __umodsi3\n" + "\tlsls r0, 24\n" + "\tlsrs r1, r0, 24\n" + "\tldr r3, [sp, 0x34]\n" + "\tcmp r3, 0x3\n" + "\tbeq _080E7EC8\n" + "\tcmp r3, 0x3\n" + "\tbgt _080E7EAE\n" + "\tcmp r3, 0x2\n" + "\tbeq _080E7EB6\n" + "\tb _080E7F1C\n" + "_080E7EAE:\n" + "\tldr r0, [sp, 0x34]\n" + "\tcmp r0, 0x4\n" + "\tbeq _080E7EE8\n" + "\tb _080E7F1C\n" + "_080E7EB6:\n" + "\tadd r2, sp, 0x24\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp]\n" + "\tldr r0, [sp, 0x2C]\n" + "\tldr r1, [sp, 0x30]\n" + "\tmovs r3, 0\n" + "\tbl sub_80E7AA4\n" + "\tb _080E7F1C\n" + "_080E7EC8:\n" + "\tldr r0, =gUnknown_0858CFB8\n" + "\tlsls r1, 1\n" + "\tadds r2, r1, r0\n" + "\tldrb r3, [r2]\n" + "\tadds r0, 0x1\n" + "\tadds r1, r0\n" + "\tldrb r0, [r1]\n" + "\tadd r2, sp, 0x24\n" + "\tstr r0, [sp]\n" + "\tldr r0, [sp, 0x2C]\n" + "\tldr r1, [sp, 0x30]\n" + "\tbl sub_80E7AA4\n" + "\tb _080E7F1C\n" + "\t.pool\n" + "_080E7EE8:\n" + "\tadd r6, sp, 0x24\n" + "\tldr r4, =gUnknown_0858CFBE\n" + "\tlsls r5, r1, 2\n" + "\tadds r0, r5, r4\n" + "\tldrb r3, [r0]\n" + "\tadds r0, r4, 0x1\n" + "\tadds r0, r5, r0\n" + "\tldrb r0, [r0]\n" + "\tstr r0, [sp]\n" + "\tldr r0, [sp, 0x2C]\n" + "\tldr r1, [sp, 0x30]\n" + "\tadds r2, r6, 0\n" + "\tbl sub_80E7AA4\n" + "\tadds r0, r4, 0x2\n" + "\tadds r0, r5, r0\n" + "\tldrb r3, [r0]\n" + "\tadds r4, 0x3\n" + "\tadds r5, r4\n" + "\tldrb r0, [r5]\n" + "\tstr r0, [sp]\n" + "\tldr r0, [sp, 0x2C]\n" + "\tldr r1, [sp, 0x30]\n" + "\tadds r2, r6, 0\n" + "\tbl sub_80E7AA4\n" + "_080E7F1C:\n" + "\tldr r1, [sp, 0x2C]\n" + "\tldr r2, [sp, 0x44]\n" + "\tadds r7, r1, r2\n" + "\tldr r4, =gSaveBlock1Ptr\n" + "\tldr r0, [r4]\n" + "\tmovs r3, 0xC2\n" + "\tlsls r3, 6\n" + "\tadds r0, r3\n" + "\tadds r1, r7, 0\n" + "\tmovs r2, 0x38\n" + "\tbl memcpy\n" + "\tldr r0, [r4]\n" + "\tldr r1, =0x0000310c\n" + "\tadds r0, r1\n" + "\tadds r1, r7, 0\n" + "\tadds r1, 0x38\n" + "\tmovs r2, 0x38\n" + "\tbl memcpy\n" + "\tldr r0, [sp, 0x38]\n" + "\tbl SeedRng\n" + "\tadd sp, 0x58\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.pool"); +} +#endif // NONMATCHING -- cgit v1.2.3 From 8d6007256f2d59765c89c41af4f3487e283e9381 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 6 Nov 2017 23:20:11 -0500 Subject: sub_80E7F68 --- src/item.c | 9 ------ src/record_mixing.c | 89 ++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 60 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/item.c b/src/item.c index 0114676b6..845c0109c 100644 --- a/src/item.c +++ b/src/item.c @@ -16,15 +16,6 @@ extern const u8 gUnknown_085897E4[][28]; // not sure what this one is bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); -enum -{ - ITEMS_POCKET, - BALLS_POCKET, - TMHM_POCKET, - BERRIES_POCKET, - KEYITEMS_POCKET -}; - u16 GetBagItemQuantity(u16* quantity) { return gSaveBlock2Ptr->encryptionKey ^ *quantity; diff --git a/src/record_mixing.c b/src/record_mixing.c index 66972b650..e8a61a223 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -5,7 +5,7 @@ #include "rng.h" #include "items.h" #include "text.h" - +#include "item.h" #include "task.h" #include "species.h" #include "pokemon.h" @@ -32,13 +32,24 @@ // Static type declarations +struct PlayerRecordsRS { + struct SecretBaseRecord secretBases[20]; + TVShow tvShows[25]; + PokeNews pokeNews[16]; + OldMan oldMan; + struct EasyChatPair easyChatPairs[5]; + struct UnkStruct_80E7B60 dayCareMail; + struct RSBattleTowerRecord battleTowerRecord; + u16 filler11C8[0x32]; +}; + struct PlayerRecords { /* 0x0000 */ struct SecretBaseRecord secretBases[20]; /* 0x0c80 */ TVShow tvShows[25]; /* 0x1004 */ PokeNews pokeNews[16]; /* 0x1044 */ OldMan oldMan; /* 0x1084 */ struct EasyChatPair easyChatPair[5]; - /* 0x10ac */ struct UnkStruct_80E7B60 unk_10ac; + /* 0x10ac */ struct UnkStruct_80E7B60 dayCareMail; /* 0x1124 */ union BattleTowerRecord battleTowerRecord; /* 0x1210 */ u16 unk_1210; /* 0x1214 */ LilycoveLady lilycoveLady; @@ -84,7 +95,7 @@ static void sub_80E7948(union BattleTowerRecord *, size_t, u8); static void sub_80E7A14(LilycoveLady *, size_t, u8); static void sub_80E7B2C(const u8 *); static void sub_80E7B60(struct UnkStruct_80E7B60 *, size_t, u8, TVShow *); -void sub_80E7F68(void *, u8); +void sub_80E7F68(u16 *item, u8 which); void sub_80E7FF8(u8 taskId); void sub_80E8110(void *, void *); void sub_80E8468(void *, size_t, u8); @@ -136,7 +147,7 @@ void sub_80E6CA0(struct PlayerRecords *dest) memcpy(dest->pokeNews, gUnknown_0300113C, sizeof(PokeNews) * 16); memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); - sub_80E89F8(&dest->unk_10ac); + sub_80E89F8(&dest->dayCareMail); sub_81659DC(gUnknown_0300114C, &dest->battleTowerRecord); if (GetMultiplayerId() == 0) { @@ -154,8 +165,8 @@ void sub_80E6D54(struct PlayerRecords *dest) memcpy(&dest->oldMan, gUnknown_03001140, sizeof(OldMan)); sub_8120B70(&dest->oldMan); memcpy(dest->easyChatPair, gUnknown_03001144, sizeof(struct EasyChatPair) * 5); - sub_80E89F8(&dest->unk_10ac); - sub_80E8A54(&dest->unk_10ac); + sub_80E89F8(&dest->dayCareMail); + sub_80E8A54(&dest->dayCareMail); sub_81659DC(gUnknown_0300114C, &dest->battleTowerRecord); TaskDummy4(&dest->battleTowerRecord); if (GetMultiplayerId() == 0) @@ -188,7 +199,7 @@ void sub_80E6E24(void) 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); + sub_80E89F8(&gUnknown_0203A018->dayCareMail); memcpy(&gUnknown_0203A018->battleTowerRecord, gUnknown_0300114C, 0xec); sub_80E8AC0(&gUnknown_0203A018->battleTowerRecord); if (GetMultiplayerId() == 0) @@ -200,36 +211,36 @@ void sub_80E6E24(void) } } -void sub_80E6F60(u32 a0) +void sub_80E6F60(u32 which) { if (Link_AnyPartnersPlayingRubyOrSapphire()) { // Ruby/Sapphire sub_80E7B2C((void *)gUnknown_0203A014[0].tvShows); - sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1230, a0); - sub_80E7B60(&gUnknown_0203A014[0].unk_10ac, 0x1230, a0, gUnknown_0203A014[0].tvShows); - sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, 0x1230, a0); - sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1230, a0); - sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1230, a0); - sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1230, a0); - sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1230, a0); - sub_80E7F68(&gUnknown_0203A014[0].battleTowerRecord.ruby_sapphire.unk_11c8, a0); + sub_80EAF80(gUnknown_0203A014[0].secretBases, sizeof(struct PlayerRecordsRS), which); + sub_80E7B60(&gUnknown_0203A014[0].dayCareMail, sizeof(struct PlayerRecordsRS), which, gUnknown_0203A014[0].tvShows); + sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, sizeof(struct PlayerRecordsRS), which); + sub_80F01E8(gUnknown_0203A014[0].tvShows, sizeof(struct PlayerRecordsRS), which); + sub_80F0C7C(gUnknown_0203A014[0].pokeNews, sizeof(struct PlayerRecordsRS), which); + sub_80E78C4(&gUnknown_0203A014[0].oldMan, sizeof(struct PlayerRecordsRS), which); + sub_812287C(gUnknown_0203A014[0].easyChatPair, sizeof(struct PlayerRecordsRS), which); + sub_80E7F68(&gUnknown_0203A014[0].battleTowerRecord.ruby_sapphire.unk_11c8, which); } else { // Emerald sub_80E7B2C((void *)gUnknown_0203A014[0].tvShows); - sub_80EAF80(gUnknown_0203A014[0].secretBases, 0x1444, a0); - sub_80F01E8(gUnknown_0203A014[0].tvShows, 0x1444, a0); - sub_80F0C7C(gUnknown_0203A014[0].pokeNews, 0x1444, a0); - sub_80E78C4(&gUnknown_0203A014[0].oldMan, 0x1444, a0); - sub_812287C(gUnknown_0203A014[0].easyChatPair, 0x1444, a0); - sub_80E7B60(&gUnknown_0203A014[0].unk_10ac, 0x1444, a0, gUnknown_0203A014[0].tvShows); - sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, 0x1444, a0); - sub_80E7F68(&gUnknown_0203A014[0].unk_1210, a0); - sub_80E7A14(&gUnknown_0203A014[0].lilycoveLady, 0x1444, a0); - sub_80E8468(gUnknown_0203A014[0].unk_1254, 0x1444, a0); - sub_80E89AC(gUnknown_0203A014[0].unk_12dc, 0x1444, a0); + sub_80EAF80(gUnknown_0203A014[0].secretBases, sizeof(struct PlayerRecords), which); + sub_80F01E8(gUnknown_0203A014[0].tvShows, sizeof(struct PlayerRecords), which); + sub_80F0C7C(gUnknown_0203A014[0].pokeNews, sizeof(struct PlayerRecords), which); + sub_80E78C4(&gUnknown_0203A014[0].oldMan, sizeof(struct PlayerRecords), which); + sub_812287C(gUnknown_0203A014[0].easyChatPair, sizeof(struct PlayerRecords), which); + sub_80E7B60(&gUnknown_0203A014[0].dayCareMail, sizeof(struct PlayerRecords), which, gUnknown_0203A014[0].tvShows); + sub_80E7948(&gUnknown_0203A014[0].battleTowerRecord, sizeof(struct PlayerRecords), which); + sub_80E7F68(&gUnknown_0203A014[0].unk_1210, which); + sub_80E7A14(&gUnknown_0203A014[0].lilycoveLady, sizeof(struct PlayerRecords), which); + sub_80E8468(gUnknown_0203A014[0].unk_1254, sizeof(struct PlayerRecords), which); + sub_80E89AC(gUnknown_0203A014[0].unk_12dc, sizeof(struct PlayerRecords), which); } } @@ -396,7 +407,7 @@ static void sub_80E7324(u8 taskId) task->data[10] = taskId2; gTasks[taskId2].data[0] = taskId; sub_80E7808(gUnknown_0203A014, (u16 *)&gTasks[taskId2].data[5]); - gUnknown_0300115C = 0x1230; + gUnknown_0300115C = sizeof(struct PlayerRecordsRS); } else { @@ -405,7 +416,7 @@ static void sub_80E7324(u8 taskId) task->data[10] = taskId2; gTasks[taskId2].data[0] = taskId; sub_80E7808(gUnknown_0203A014, (u16 *)&gTasks[taskId2].data[5]); - gUnknown_0300115C = 0x1444; + gUnknown_0300115C = sizeof(struct PlayerRecords); } break; case 5: @@ -1411,3 +1422,23 @@ __attribute__((naked)) static void sub_80E7B60(struct UnkStruct_80E7B60 *src, si "\t.pool"); } #endif // NONMATCHING + +static void sub_80E7F68(u16 *item, u8 which) +{ + if (which != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == KEYITEMS_POCKET + 1) + { + if (!CheckBagHasItem(*item, 1) && !CheckPCHasItem(*item, 1) && AddBagItem(*item, 1)) + { + VarSet(VAR_0x4001, *item); + StringCopy(gStringVar1, gLinkPlayers[0].name); + if (*item == ITEM_EON_TICKET) + { + FlagSet(SYS_HAS_EON_TICKET); + } + } + else + { + VarSet(VAR_0x4001, ITEM_NONE); + } + } +} -- cgit v1.2.3 From bc063b45d05716d1eab283f6d474bcdc601cafde Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 6 Nov 2017 23:33:39 -0500 Subject: sub_80E7FF8 --- src/record_mixing.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index e8a61a223..afaa091eb 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -8,6 +8,8 @@ #include "item.h" #include "task.h" #include "species.h" +#include "save.h" +#include "load_save.h" #include "pokemon.h" #include "cable_club.h" #include "link.h" @@ -95,8 +97,8 @@ static void sub_80E7948(union BattleTowerRecord *, size_t, u8); static void sub_80E7A14(LilycoveLady *, size_t, u8); static void sub_80E7B2C(const u8 *); static void sub_80E7B60(struct UnkStruct_80E7B60 *, size_t, u8, TVShow *); -void sub_80E7F68(u16 *item, u8 which); -void sub_80E7FF8(u8 taskId); +static void sub_80E7F68(u16 *item, u8 which); +static void sub_80E7FF8(u8 taskId); void sub_80E8110(void *, void *); void sub_80E8468(void *, size_t, u8); void sub_80E89AC(void *, size_t, u8); @@ -1442,3 +1444,83 @@ static void sub_80E7F68(u16 *item, u8 which) } } } + +static void sub_80E7FF8(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[0] ++; + break; + case 1: + if (Link_AnyPartnersPlayingRubyOrSapphire()) + { + task->data[0] ++; + } + else + { + task->data[0] = 6; + } + break; + case 2: + sub_8076D5C(); + sub_8153430(); + task->data[0] ++; + break; + case 3: + if (sub_8153474()) + { + sav2_gender2_inplace_and_xFE(); + task->data[0] = 4; + task->data[1] = 0; + } + break; + case 4: + if (++ task->data[1] > 10) + { + sub_800AC34(); + task->data[0] ++; + } + break; + case 5: + if (gReceivedRemoteLinkPlayers == 0) + { + DestroyTask(taskId); + } + break; + case 6: + if (!sub_801048C(0)) + { + CreateTask(sub_8153688, 5); + task->data[0] ++; + } + break; + case 7: + if (!FuncIsActiveTask(sub_8153688)) + { + if (gLinkVSyncDisabled) + { + sub_801048C(1); + task->data[0] = 8; + } + else + { + task->data[0] = 4; + } + } + break; + case 8: + sub_800ADF8(); + task->data[0] ++; + break; + case 9: + if (sub_800A520()) + { + DestroyTask(taskId); + } + break; + } +} -- cgit v1.2.3 From db898d0e4854c70a356d037919ea48aed1f62816 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 12 Feb 2018 08:16:28 -0500 Subject: Minor edit to make it possible to build when trying to match the nonmatching fn --- src/record_mixing.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index ff4d64f08..79db07bf0 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -894,8 +894,8 @@ static void sub_80E7B60(struct UnkStruct_80E7B60 *src, size_t recordSize, u8 whi break; } _src = (void *)src + which * recordSize; - memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->unk_00[0], sizeof(struct DayCareMailRecordMixing)); - memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->unk_00[1], sizeof(struct DayCareMailRecordMixing)); + memcpy(&gSaveBlock1Ptr->daycare.mons[0].misc.mail, &_src->unk_00[0], sizeof(struct DayCareMailRecordMixing)); + memcpy(&gSaveBlock1Ptr->daycare.mons[1].misc.mail, &_src->unk_00[1], sizeof(struct DayCareMailRecordMixing)); SeedRng(oldSeed); } #else -- cgit v1.2.3