summaryrefslogtreecommitdiff
path: root/src/trainer_card.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/trainer_card.c')
-rwxr-xr-xsrc/trainer_card.c311
1 files changed, 311 insertions, 0 deletions
diff --git a/src/trainer_card.c b/src/trainer_card.c
new file mode 100755
index 000000000..d23413a26
--- /dev/null
+++ b/src/trainer_card.c
@@ -0,0 +1,311 @@
+#include "global.h"
+#include "scanline_effect.h"
+#include "palette.h"
+#include "task.h"
+#include "main.h"
+#include "window.h"
+#include "alloc.h"
+#include "link.h"
+#include "bg.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "overworld.h"
+#include "menu.h"
+#include "text.h"
+
+extern const u8 gText_WaitingTrainerFinishReading[];
+extern const u32 gUnknown_08DD2AE0[];
+extern const u32 gUnknown_08DD21B0[];
+extern const u32 gUnknown_08DD2D30[];
+extern const u32 gUnknown_08DD2010[];
+extern const u32 gUnknown_08DD2B78[];
+extern const u32 gUnknown_08DD228C[];
+extern const u32 gUnknown_08DD2E5C[];
+extern const u32 gUnknown_0856F5CC[];
+extern const u32 gUnknown_0856F814[];
+extern const u32 gEmeraldTrainerCard_Gfx[];
+extern const u32 gFireRedTrainerCard_Gfx[];
+extern const u32 gUnknown_0856F018[];
+extern const u32 gUnknown_08DD1F78[];
+
+/*static*/ void sub_80C2690(void);
+/*static*/ void sub_80C26D4(void);
+/*static*/ void sub_80C48C8(void);
+/*static*/ void sub_80C2710(void);
+/*static*/ void sub_80C2728(u8 task);
+/*static*/ bool8 sub_80C3438(void);
+/*static*/ void sub_80C438C(u8);
+/*static*/ void sub_80C4FF0(void);
+/*static*/ void sub_80C4550(u8*);
+/*static*/ void sub_80C45C0(u8*);
+/*static*/ void sub_80C4630(void);
+/*static*/ void sub_80C3880(void);
+/*static*/ void sub_80C4918(void);
+/*static*/ bool8 sub_80C4940(void);
+/*static*/ bool8 sub_80C2AD8(void);
+/*static*/ void sub_80C2C80(void);
+
+extern struct UnknownStruct{
+ u8 var_0;
+ u8 var_1;
+ u8 var_2;
+ u8 filler3[2];
+ u8 var_5;
+ u8 filler6[3];
+ u8 var_9;
+ u8 fillerA[0x51F];
+ u8 var_529;
+ u8 var_52A;
+ u8 var_52B;
+ u16 var_52C;
+ void (*callback2)(void);
+ u8 filler531[0x64];
+ u8 var_598[0x4B0];
+ u8 var_A48[0x4B0];
+ u8 var_EF8[0x4B0];
+ u8 var_13A8[0x400];
+ u8 var_17A8[0x200];
+ u8 var_19A8[0x200];
+}* gUnknown_02039CE8;
+
+void sub_80C2690(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80C48C8();
+ if(gUnknown_02039CE8->var_9)
+ DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140);
+}
+
+void sub_80C26D4(void)
+{
+ u16 backup;
+ u16 bgVOffset;
+
+ backup = REG_IME;
+ REG_IME = 0;
+ bgVOffset = gScanlineEffectRegBuffers[1][REG_VCOUNT & 0xFF];
+ REG_BG0VOFS = bgVOffset;
+ REG_IME = backup;
+}
+
+void sub_80C2710(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_80C2728(u8 taskId)
+{
+ SetMainCallback2(gUnknown_02039CE8->callback2);
+ FreeAllWindowBuffers();
+ Free(gUnknown_02039CE8);
+ gUnknown_02039CE8 = NULL;
+ DestroyTask(taskId);
+}
+
+void sub_80C2760(u8 taskId)
+{
+ switch(gUnknown_02039CE8->var_0)
+ {
+ case 0:
+ if(!IsDma3ManagerBusyWithBgCopy())
+ {
+ FillWindowPixelBuffer(1, 0);
+ gUnknown_02039CE8->var_0++;
+ }
+ break;
+ case 1:
+ if(sub_80C3438())
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 2:
+ sub_80C438C(1);
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 3:
+ FillWindowPixelBuffer(2, 0);
+ sub_80C4FF0();
+ sub_80C438C(2);
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 4:
+ sub_80C4550(gUnknown_02039CE8->var_EF8);
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 5:
+ sub_80C45C0(gUnknown_02039CE8->var_598);
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 6:
+ sub_80C4630();
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 7:
+ if(gWirelessCommType == TRUE && gReceivedRemoteLinkPlayers == TRUE)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(230, 150);
+ }
+ BlendPalettes(-1, 16, gUnknown_02039CE8->var_52C);
+ BeginNormalPaletteFade(- 1, 0, 16, 0, gUnknown_02039CE8->var_52C);
+ SetVBlankCallback(sub_80C2690);
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 8:
+ if(!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy())
+ {
+ PlaySE(SE_RG_CARD3);
+ gUnknown_02039CE8->var_0 = 10;
+ }
+ break;
+ case 9:
+ if(!IsSEPlaying())
+ gUnknown_02039CE8->var_0++;
+ break;
+ case 10:
+ if(!gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_529)
+ {
+ sub_80C3880();
+ sub_80C438C(1);
+ gUnknown_02039CE8->var_529 = 0;
+ }
+ if(gMain.newKeys & A_BUTTON)
+ {
+ sub_80C4918();
+ PlaySE(SE_RG_CARD1);
+ gUnknown_02039CE8->var_0 = 12;
+ }
+ else if(gMain.newKeys & B_BUTTON)
+ {
+ if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE)
+ gUnknown_02039CE8->var_0 = 15;
+ else
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C);
+ gUnknown_02039CE8->var_0 = 14;
+ }
+ }
+ break;
+ case 12:
+ if(sub_80C4940() && sub_8087598() != TRUE)
+ {
+ PlaySE(SE_RG_CARD3);
+ gUnknown_02039CE8->var_0 = 11;
+ }
+ break;
+ case 11:
+ if(gMain.newKeys & B_BUTTON)
+ {
+ if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE)
+ gUnknown_02039CE8->var_0 = 15;
+ else if(gReceivedRemoteLinkPlayers)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C);
+ gUnknown_02039CE8->var_0 = 14;
+ }
+ else
+ {
+ sub_80C4918();
+ gUnknown_02039CE8->var_0 = 13;
+ PlaySE(SE_RG_CARD1);
+ }
+ }
+ else if(gMain.newKeys & A_BUTTON)
+ {
+ if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE)
+ gUnknown_02039CE8->var_0 = 15;
+ else
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C);
+ gUnknown_02039CE8->var_0 = 14;
+ }
+ }
+ break;
+ case 15:
+ sub_800AC34();
+ NewMenuHelpers_DrawDialogueFrame(0, 1);
+ AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
+ CopyWindowToVram(0, 3);
+ gUnknown_02039CE8->var_0 = 16;
+ break;
+ case 16:
+ if(!gReceivedRemoteLinkPlayers)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C);
+ gUnknown_02039CE8->var_0 = 14;
+ }
+ break;
+ case 14:
+ if(!UpdatePaletteFade())
+ sub_80C2728(taskId);
+ break;
+ case 13:
+ if(sub_80C4940() && sub_8087598() != TRUE)
+ {
+ gUnknown_02039CE8->var_0 = 10;
+ PlaySE(SE_RG_CARD3);
+ }
+ break;
+ }
+}
+
+bool8 sub_80C2AD8(void)
+{
+ switch(gUnknown_02039CE8->var_2)
+ {
+ case 0:
+ if(gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gUnknown_08DD1F78, gUnknown_02039CE8->var_EF8);
+ else
+ LZ77UnCompWram(gUnknown_08DD2AE0, gUnknown_02039CE8->var_EF8);
+ break;
+ case 1:
+ if(gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gUnknown_08DD21B0, gUnknown_02039CE8->var_A48);
+ else
+ LZ77UnCompWram(gUnknown_08DD2D30, gUnknown_02039CE8->var_A48);
+ break;
+ case 2:
+ if(!gUnknown_02039CE8->var_5)
+ {
+ if(gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gUnknown_08DD2010, gUnknown_02039CE8->var_598);
+ else
+ LZ77UnCompWram(gUnknown_08DD2B78, gUnknown_02039CE8->var_598);
+ }
+ else
+ {
+ if(gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gUnknown_08DD228C, gUnknown_02039CE8->var_598);
+ else
+ LZ77UnCompWram(gUnknown_08DD2E5C, gUnknown_02039CE8->var_598);
+ }
+ break;
+ case 3:
+ if(gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gUnknown_0856F5CC, gUnknown_02039CE8->var_13A8);
+ else
+ LZ77UnCompWram(gUnknown_0856F814, gUnknown_02039CE8->var_13A8);
+ break;
+ case 4:
+ if(gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gEmeraldTrainerCard_Gfx, gUnknown_02039CE8->var_19A8);
+ else
+ LZ77UnCompWram(gFireRedTrainerCard_Gfx, gUnknown_02039CE8->var_19A8);
+ break;
+ case 5:
+ if(!gUnknown_02039CE8->var_52A)
+ LZ77UnCompWram(gUnknown_0856F018, gUnknown_02039CE8->var_17A8);
+ break;
+ default:
+ gUnknown_02039CE8->var_2 = 0;
+ return 1;
+ }
+ gUnknown_02039CE8->var_2++;
+ return 0;
+}
+