diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/record_mixing.c | 114 |
1 files changed, 106 insertions, 8 deletions
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; + } +} |