summaryrefslogtreecommitdiff
path: root/src/battle/contest_link_80C2020.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/contest_link_80C2020.c')
-rw-r--r--src/battle/contest_link_80C2020.c2906
1 files changed, 0 insertions, 2906 deletions
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c
deleted file mode 100644
index 8269f424b..000000000
--- a/src/battle/contest_link_80C2020.c
+++ /dev/null
@@ -1,2906 +0,0 @@
-#include "global.h"
-#include "data2.h"
-#include "util.h"
-#include "random.h"
-#include "overworld.h"
-#include "constants/songs.h"
-#include "ewram.h"
-#include "main.h"
-#include "scanline_effect.h"
-#include "decompress.h"
-#include "palette.h"
-#include "blend_palette.h"
-#include "graphics.h"
-#include "strings2.h"
-#include "text.h"
-#include "string_util.h"
-#include "menu.h"
-#include "sound.h"
-#include "pokedex.h"
-#include "pokemon_icon.h"
-#include "tv.h"
-#include "battle.h"
-#include "contest.h"
-#include "link.h"
-#include "field_effect.h"
-#include "field_specials.h"
-#include "contest_link_80C857C.h"
-#include "contest_link_80C2020.h"
-#include "pokemon_storage_system.h"
-#include "event_data.h"
-#include "script.h"
-#include "trig.h"
-
-#define ABS(x) ((x) < 0 ? -(x) : (x))
-
-#define GET_CONTEST_WINNER(var) { \
- for ((var) = 0; (var) < 4; (var)++) \
- { \
- if (gContestFinalStandings[i] == 0) \
- break; \
- } \
-}
-
-struct UnkEwramStruct18000 {
- u8 unk_00;
- u8 unk_01;
- u8 unk_02;
- u8 unk_03;
- u8 unk_04;
- u8 unk_05;
- u8 unk_06;
- u8 unk_07;
- u8 unk_08;
- u8 unk_09;
- u8 unk_0a;
- s16 unk_0c[4];
- u8 unk_14;
-};
-
-struct UnkEwramStruct18018 {
- s32 unk_00;
- s32 unk_04;
- u32 unk_08;
- u32 unk_0c;
- u8 unk_10;
- u8 unk_11;
- u8 unk_12;
-};
-
-#define eContestLink80C2020Struct2018000 (*(struct UnkEwramStruct18000 *)(gSharedMem + 0x18000))
-#define eContestLink80C2020Struct2018018 ((struct UnkEwramStruct18018 *)(gSharedMem + 0x18018))
-#define eContestLink80C2020Struct2018068 (gSharedMem + 0x18068)
-
-static void sub_80C2430(void);
-static void sub_80C2448(void);
-static void sub_80C24F4(u8 taskId);
-static void sub_80C255C(u8 taskId);
-static void sub_80C25A4(u8 taskId);
-static void sub_80C25C0(u8 taskId);
-static void sub_80C2600(u8 taskId);
-static void sub_80C26E4(u8 taskId);
-static void sub_80C2770(u8 taskId);
-static void sub_80C27EC(u8 taskId);
-static void sub_80C2878(u8 taskId);
-static void sub_80C2A8C(u8 taskId);
-static void sub_80C2D1C(u8 taskId);
-static void sub_80C2D80(u8 taskId);
-static void sub_80C2DD8(u8 taskId);
-static void sub_80C2E14(u8 taskId);
-static void sub_80C2EA0(u8 taskId);
-static void sub_80C2F28(u8 taskId);
-static void sub_80C2F64(u8 taskId);
-static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow);
-void sub_80C310C(void);
-void sub_80C3158(const u8 *string, u8 spriteId);
-void sub_80C33DC(void);
-u16 sub_80C34AC(const u8 *string);
-void sub_80C34CC(s16 data4, u16 pos0y, u16 data5, u16 data6);
-void sub_80C3520(u16 a0);
-void sub_80C3588(struct Sprite *sprite);
-void sub_80C35FC(struct Sprite *sprite);
-void sub_80C3630(struct Sprite *sprite);
-void sub_80C3698(const u8 *string);
-void sub_80C3764(void);
-void sub_80C37E4(void);
-u8 sub_80C3990(u8 a0, u8 a1);
-s8 sub_80C39E4(u8 a0, u8 a1);
-void sub_80C3A5C(u8 taskId);
-void sub_80C3BD8(u8 taskId);
-void sub_80C3B30(u8 taskId);
-void sub_80C3C44(struct Sprite *sprite);
-void sub_80C3CB8(struct Sprite *sprite);
-void sub_80C3D04(u8 taskId);
-void sub_80C3DF0(struct Sprite *sprite);
-void sub_80C3E60(u8 a0, u8 a1);
-void sub_80C3EA4(u8 taskId);
-void sub_80C3F00(void);
-void sub_80C40D4(u8 a0, u8 a1);
-void sub_80C42C0(u8 taskId);
-void sub_80C49C4(u8 taskId);
-void sub_80C49F0(u8 taskId);
-void sub_80C4A0C(u8 taskId);
-void sub_80C4A28(u8 taskId);
-void sub_80C4A44(u8 taskId);
-void sub_80C4B0C(u8 taskId);
-void sub_80C4B5C(u8 taskId);
-void sub_80C4BA4(u8 taskId);
-void sub_80C4BCC(u8 taskId);
-
-const u16 gUnknown_083D1624[] = INCBIN_U16("graphics/unknown/unknown_3D1624/0.4bpp");
-const u16 gUnknown_083D1644[] = INCBIN_U16("graphics/unknown/unknown_3D1624/1.4bpp");
-const u16 gUnknown_083D1664[] = INCBIN_U16("graphics/unknown/unknown_3D1624/2.4bpp");
-const u16 gUnknown_083D1684[] = INCBIN_U16("graphics/unknown/unknown_3D1624/3.4bpp");
-const u16 gUnknown_083D16A4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/4.4bpp");
-const u16 gUnknown_083D16C4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/5.4bpp");
-const u16 gUnknown_083D16E4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/6.4bpp");
-const u16 gUnknown_083D1704[] = INCBIN_U16("graphics/unknown/unknown_3D1624/7.4bpp");
-const u16 gMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
-
-const struct OamData gOamData_83D1744 = {
- .shape = ST_OAM_H_RECTANGLE,
- .size = 3,
- .priority = 3,
- .paletteNum = 2
-};
-
-const struct SpriteTemplate gSpriteTemplate_83D174C = {
- 0xbc1,
- 0xbc1,
- &gOamData_83D1744,
- gDummySpriteAnimTable,
- NULL,
- gDummySpriteAffineAnimTable,
- SpriteCallbackDummy
-};
-
-const struct SpriteSheet gUnknown_083D1764[] = {
- {gMiscBlank_Gfx, 0x400, 0xbc1},
- {gMiscBlank_Gfx, 0x400, 0xbc2},
- {gMiscBlank_Gfx, 0x400, 0xbc3},
- {gMiscBlank_Gfx, 0x400, 0xbc4},
- {gMiscBlank_Gfx, 0x400, 0xbc5},
- {gMiscBlank_Gfx, 0x400, 0xbc6},
- {gMiscBlank_Gfx, 0x400, 0xbc7},
- {gMiscBlank_Gfx, 0x400, 0xbc8},
-};
-
-const struct SpritePalette gUnknown_083D17A4 = {
- gMiscBlank_Pal, 0xbc1
-};
-
-const struct OamData gOamData_83D17AC = {};
-
-const struct SpriteTemplate gSpriteTemplate_83D17B4 = {
- 0xbc9,
- 0xbc9,
- &gOamData_83D17AC,
- gDummySpriteAnimTable,
- NULL,
- gDummySpriteAffineAnimTable,
- sub_80C3DF0
-};
-
-const struct CompressedSpriteSheet gUnknown_083D17CC = {gContestConfetti_Gfx, 0x220, 0xbc9};
-
-const struct CompressedSpritePalette gUnknown_083D17D4 = {gContestConfetti_Pal, 0xbc9};
-
-const u8 gUnknown_083D17DC[] = _("{COLOR RED}");
-const u8 gUnknown_083D17E0[] = _("/");
-const u8 gUnknown_083D17E2[] = _("{SIZE 3}{COLOR_HIGHLIGHT_SHADOW WHITE2 DARK_GREY LIGHT_BLUE}");
-
-void sub_80C2020(void)
-{
- REG_DISPCNT = DISPCNT_OBJ_1D_MAP;
- Text_LoadWindowTemplate(&gWindowTemplate_81E6FA0);
- Text_InitWindowWithTemplate(&gMenuWindow, &gWindowTemplate_81E6FA0);
- REG_BG0CNT = BGCNT_WRAP | BGCNT_SCREENBASE(30);
- REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(24);
- REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(28);
- REG_BG3CNT = BGCNT_WRAP | BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(26);
- REG_MOSAIC = 0;
- REG_WININ = 0x3f3f;
- REG_WINOUT = 0x3f2e;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
- REG_DISPCNT |= DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON;
- gBattle_BG0_X = 0;
- gBattle_BG0_Y = 0;
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 0;
- gBattle_BG3_Y = 0;
- gBattle_WIN0H = 0;
- gBattle_WIN0V = 0;
- gBattle_WIN1H = 0;
- gBattle_WIN1V = 0;
-}
-
-void sub_80C2144(void)
-{
- int i;
- int j;
- s8 r7;
- s8 r4;
- u16 r6;
- u16 r3;
-
- DmaFill32Large(3, 0, VRAM, VRAM_SIZE, 0x1000);
- LZDecompressVram(gUnknown_08D1977C, BG_SCREEN_ADDR(0));
- LZDecompressVram(gUnknown_08D1A490, BG_SCREEN_ADDR(26));
- LZDecompressVram(gUnknown_08D1A364, BG_SCREEN_ADDR(28));
- LZDecompressVram(gUnknown_08D1A250, BG_SCREEN_ADDR(30));
- sub_80C37E4();
- LoadCompressedPalette(gUnknown_08D1A618, 0, 0x200);
- LoadFontDefaultPalette(&gWindowTemplate_81E6FA0);
- for (i = 0; i < 4; i++)
- {
- r7 = sub_80C3990(i, 1);
- r4 = sub_80C39E4(i, 1);
- for (j = 0; j < 10; j++)
- {
- r6 = 0x60b2;
- if (j < r7)
- r6 = 0x60b4;
- if (j < ABS(r4))
- {
- r3 = 0x60a4;
- if (r4 < 0)
- r3 = 0x60a6;
- }
- else
- r3 = 0x60a2;
- ((u16 *)BG_VRAM)[i * 0x60 + j + 0x60b3] = r6;
- ((u16 *)BG_VRAM)[i * 0x60 + j + 0x60d3] = r3;
- }
- }
-}
-
-void sub_80C226C(u8 a0)
-{
- u8 *strbuf;
-
- if (a0 == gContestPlayerMonIndex)
- strbuf = StringCopy(gDisplayedStringBattle, gUnknown_083D17DC);
- else
- strbuf = gDisplayedStringBattle;
- strbuf[0] = EXT_CTRL_CODE_BEGIN;
- strbuf[1] = 0x06;
- strbuf[2] = 0x04;
- strbuf += 3;
- strbuf = StringCopy(strbuf, gContestMons[a0].nickname);
- strbuf[0] = EXT_CTRL_CODE_BEGIN;
- strbuf[1] = 0x13;
- strbuf[2] = 0x32;
- strbuf += 3;
- strbuf = StringCopy(strbuf, gUnknown_083D17E0);
- if (gIsLinkContest & 1)
- StringCopy(strbuf, gLinkPlayers[a0].name);
- else
- StringCopy(strbuf, gContestMons[a0].trainerName);
- Text_InitWindowAndPrintText(&gMenuWindow, gDisplayedStringBattle, a0 * 36 + 770, 7, a0 * 3 + 4);
-}
-
-void sub_80C2340(void)
-{
- int i;
-
- for (i = 0; i < 4; i++)
- sub_80C226C(i);
-}
-
-void sub_80C2358(void)
-{
- gPaletteFade.bufferTransferDisabled = TRUE;
- SetVBlankCallback(NULL);
- sub_80C2020();
- ScanlineEffect_Clear();
- ResetPaletteFade();
- ResetSpriteData();
- ResetTasks();
- FreeAllSpritePalettes();
- sub_80C2144();
- sub_80C310C();
- LoadAllContestMonIcons(0, TRUE);
- sub_80C2340();
- eContestLink80C2020Struct2018000 = (struct UnkEwramStruct18000){};
- memset(eContestLink80C2020Struct2018018, 0, 4 * sizeof(struct UnkEwramStruct18018));
- sub_80C33DC();
- BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0);
- gPaletteFade.bufferTransferDisabled = FALSE;
- eContestLink80C2020Struct2018000.unk_02 = CreateTask(sub_80C24F4, 5);
- SetMainCallback2(sub_80C2430);
- gBattle_WIN1H = 0xf0;
- gBattle_WIN1V = 0x80a0;
- CreateTask(sub_80C2F28, 20);
- sub_80C3F00();
- PlayBGM(MUS_CON_K);
- SetVBlankCallback(sub_80C2448);
-}
-
-static void sub_80C2430(void)
-{
- AnimateSprites();
- BuildOamBuffer();
- RunTasks();
- UpdatePaletteFade();
-}
-
-static void sub_80C2448(void)
-{
- REG_BG0HOFS = gBattle_BG0_X;
- REG_BG0VOFS = gBattle_BG0_Y;
- REG_BG1HOFS = gBattle_BG1_X;
- REG_BG1VOFS = gBattle_BG1_Y;
- REG_BG2HOFS = gBattle_BG2_X;
- REG_BG2VOFS = gBattle_BG2_Y;
- REG_BG3HOFS = gBattle_BG3_X;
- REG_BG3VOFS = gBattle_BG3_Y;
- REG_WIN0H = gBattle_WIN0H;
- REG_WIN0V = gBattle_WIN0V;
- REG_WIN1H = gBattle_WIN1H;
- REG_WIN1V = gBattle_WIN1V;
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
- ScanlineEffect_InitHBlankDmaTransfer();
-}
-
-static void sub_80C24F4(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- if (gIsLinkContest & 1)
- {
- sub_80C3698(gOtherText_LinkStandby);
- gTasks[taskId].func = sub_80C255C;
- }
- else
- {
- gTasks[taskId].func = sub_80C2600;
- }
- }
-}
-
-static void sub_80C255C(u8 taskId)
-{
- if (gReceivedRemoteLinkPlayers && GetLinkPlayerCount() == MAX_LINK_PLAYERS)
- {
- CreateTask(sub_80C25A4, 0);
- gTasks[taskId].func = TaskDummy;
- }
-}
-
-static void sub_80C25A4(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0);
-}
-
-static void sub_80C25C0(u8 taskId)
-{
- if (IsLinkTaskFinished())
- {
- DestroyTask(taskId);
- gTasks[eContestLink80C2020Struct2018000.unk_02].func = sub_80C2600;
- sub_80C3764();
- }
-}
-
-static void sub_80C2600(u8 taskId)
-{
- if (gTasks[taskId].data[0] == 0)
- {
- CreateTask(sub_80C2F64, 20);
- sub_80C3158(gContestText_AnnounceResults, eContestLink80C2020Struct2018000.unk_00);
- sub_80C34CC(sub_80C34AC(gContestText_AnnounceResults), 0x90, 0x78, 0x440);
- gTasks[taskId].data[0]++;
- }
- else if (gTasks[taskId].data[0] == 1)
- {
- if (eContestLink80C2020Struct2018000.unk_04 == 0)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- }
- else if (gTasks[taskId].data[0] == 2)
- {
- if (++gTasks[taskId].data[1] == 0x15)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- }
- else if (gTasks[taskId].data[0] == 3)
- {
- sub_80C3158(gContestText_PreliminaryResults, eContestLink80C2020Struct2018000.unk_00);
- sub_80C34CC(sub_80C34AC(gContestText_PreliminaryResults), 0x90, 0xffff, 0x440);
- gTasks[taskId].data[0]++;
- }
- else if (gTasks[taskId].data[0] == 4)
- {
- if (eContestLink80C2020Struct2018000.unk_04 == 2)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80C26E4;
- }
- }
-}
-
-static void sub_80C26E4(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (eContestLink80C2020Struct2018000.unk_0a == 0)
- {
- sub_80C40D4(0, gTasks[taskId].data[2]++);
- if (eContestLink80C2020Struct2018000.unk_14 == 0)
- {
- gTasks[taskId].data[0] = 2;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- }
- break;
- case 1:
- if (eContestLink80C2020Struct2018000.unk_14 == 0)
- {
- gTasks[taskId].data[0] = 0;
- }
- break;
- case 2:
- sub_80C3520(0x440);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80C2770;
- break;
- }
-}
-
-static void sub_80C2770(u8 taskId)
-{
- if (eContestLink80C2020Struct2018000.unk_04 == 0)
- {
- if (++gTasks[taskId].data[1] == 21)
- {
- gTasks[taskId].data[1] = 0;
- sub_80C3158(gContestText_Round2Results, eContestLink80C2020Struct2018000.unk_00);
- sub_80C34CC(sub_80C34AC(gContestText_Round2Results), 0x90, 0xffff, 0x440);
- }
- }
- else if (eContestLink80C2020Struct2018000.unk_04 == 2)
- {
- gTasks[taskId].func = sub_80C27EC;
- }
-}
-
-static void sub_80C27EC(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (eContestLink80C2020Struct2018000.unk_0a == 0)
- {
- sub_80C40D4(1, gTasks[taskId].data[2]++);
- if (eContestLink80C2020Struct2018000.unk_14 == 0)
- {
- gTasks[taskId].data[0] = 2;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- }
- break;
- case 1:
- if (eContestLink80C2020Struct2018000.unk_14 == 0)
- {
- gTasks[taskId].data[0] = 0;
- }
- break;
- case 2:
- sub_80C3520(0x440);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80C2878;
- break;
- }
-}
-
-static void sub_80C2878(u8 taskId)
-{
- int i;
- u8 taskId2;
- u8 strbuf[100];
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (eContestLink80C2020Struct2018000.unk_04 == 0)
- gTasks[taskId].data[0]++;
- break;
- case 1:
- if (++gTasks[taskId].data[1] == 31)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- break;
- case 2:
- for (i = 0; i < 4; i++)
- {
- taskId2 = CreateTask(sub_80C3A5C, 10);
- gTasks[taskId2].data[0] = gContestFinalStandings[i];
- gTasks[taskId2].data[1] = i;
- }
- gTasks[taskId].data[0]++;
- break;
- case 3:
- if (eContestLink80C2020Struct2018000.unk_05 == 4)
- {
- if (++gTasks[taskId].data[1] == 31)
- {
- gTasks[taskId].data[1] = 0;
- CreateTask(sub_80C3B30, 10);
- gTasks[taskId].data[0]++;
- GET_CONTEST_WINNER(i);
- sub_80C3E60(i, 14);
- }
- }
- break;
- case 4:
- if (++gTasks[taskId].data[1] == 21)
- {
- gTasks[taskId].data[1] = 0;
- GET_CONTEST_WINNER(i);
- if (gIsLinkContest & 1)
- {
- StringCopy(gStringVar1, gLinkPlayers[i].name);
- }
- else
- {
- StringCopy(gStringVar1, gContestMons[i].trainerName);
- }
- StringCopy(gStringVar2, gContestMons[i].nickname);
- StringExpandPlaceholders(strbuf, gContestText_PokeWon);
- sub_80C3158(strbuf, eContestLink80C2020Struct2018000.unk_00);
- sub_80C34CC(sub_80C34AC(strbuf), 0x90, 0xffff, 0x440);
- gTasks[taskId].data[0]++;
- }
- break;
- case 5:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80C2A8C;
- break;
- }
-}
-
-static void sub_80C2A8C(u8 taskId)
-{
- int i;
- u8 spriteId;
- u16 species;
- u32 personality;
- u32 otId;
- const struct CompressedSpritePalette *monPal;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- gBattle_WIN0H = 0xf0;
- gBattle_WIN0V = 0x5050;
- GET_CONTEST_WINNER(i);
- species = gContestMons[i].species;
- personality = gContestMons[i].personality;
- otId = gContestMons[i].otId;
- HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (intptr_t)gSharedMem, gUnknown_081FAF4C[1], species, personality);
- monPal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- LoadCompressedObjectPalette(monPal);
- GetMonSpriteTemplate_803C56C(species, 1);
- gUnknown_02024E8C.paletteTag = monPal->tag;
- spriteId = CreateSprite(&gUnknown_02024E8C, 0x110, 0x50, 10);
- gSprites[spriteId].data[1] = species;
- gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].callback = sub_80C3C44;
- eContestLink80C2020Struct2018000.unk_08 = spriteId;
- LoadCompressedObjectPic(&gUnknown_083D17CC);
- LoadCompressedObjectPalette(&gUnknown_083D17D4);
- CreateTask(sub_80C3D04, 10);
- gTasks[taskId].data[0]++;
- break;
- case 1:
- if (++gTasks[taskId].data[3] == 1)
- {
- u8 win0v;
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[2] += 2;
- if (gTasks[taskId].data[2] > 0x20)
- gTasks[taskId].data[2] = 0x20;
- win0v = gTasks[taskId].data[2];
- gBattle_WIN0V = ((0x50 - win0v) << 8) | (0x50 + win0v);
- if (win0v == 0x20)
- {
- gTasks[taskId].data[0]++;
- }
- }
- break;
- case 2:
- if (eContestLink80C2020Struct2018000.unk_06 == 1)
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 3:
- if (++gTasks[taskId].data[1] == 121)
- {
- gTasks[taskId].data[1] = 0;
- gSprites[eContestLink80C2020Struct2018000.unk_08].callback = sub_80C3CB8;
- gTasks[taskId].data[0]++;
- }
- break;
- case 4:
- if (eContestLink80C2020Struct2018000.unk_06 == 2)
- {
- u8 win0v = (gBattle_WIN0V >> 8);
- win0v += 2;
- if (win0v > 0x50)
- win0v = 0x50;
- gBattle_WIN0V = (win0v << 8) | (0xa0 - win0v);
- if (win0v == 0x50)
- {
- gTasks[taskId].data[0]++;
- }
- }
- break;
- case 5:
- if (eContestLink80C2020Struct2018000.unk_06 == 2)
- {
- eContestLink80C2020Struct2018000.unk_09 = 1;
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80C2D1C;
- }
- break;
- }
-}
-
-static void sub_80C2D1C(u8 taskId)
-{
- int i;
-
- if (gMain.newKeys & A_BUTTON)
- {
- if (!(gIsLinkContest & 1))
- {
- for (i = 0; i < 4; i++)
- {
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gContestMons[i].species), FLAG_SET_SEEN);
- }
- }
- gTasks[taskId].func = sub_80C2D80;
- }
-}
-
-static void sub_80C2D80(u8 taskId)
-{
- if (gIsLinkContest & 1)
- {
- sub_80C3698(gOtherText_LinkStandby);
- sub_800832C();
- gTasks[taskId].func = sub_80C2DD8;
- }
- else
- {
- gTasks[taskId].func = sub_80C2E14;
- }
-}
-
-static void sub_80C2DD8(u8 taskId)
-{
- if (gReceivedRemoteLinkPlayers == 0)
- {
- gIsLinkContest = 0;
- sub_80C3764();
- gTasks[taskId].func = sub_80C2E14;
- }
-}
-
-static void sub_80C2E14(u8 taskId)
-{
- sub_80BE284(gContestFinalStandings[gContestPlayerMonIndex]);
- sub_810FB10(2);
- Contest_SaveWinner(gSpecialVar_ContestRank);
- Contest_SaveWinner(0xFE);
- ewram15DDF = 1;
- ewram15DDE = sub_80B2C4C(0xfe, 0);
- BeginHardwarePaletteFade(0xff, 0, 0, 16, 0);
- gTasks[taskId].func = sub_80C2EA0;
-}
-
-static void sub_80C2EA0(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- if (gTasks[taskId].data[1] == 0)
- {
- DestroyTask(eContestLink80C2020Struct2018000.unk_03);
- BlendPalettes(0x0000ffff, 16, 0);
- gTasks[taskId].data[1]++;
- }
- else if (gTasks[taskId].data[1] == 1)
- {
- BlendPalettes(0xffff0000, 16, 0);
- gTasks[taskId].data[1]++;
- }
- else
- {
- REG_BLDCNT = 0;
- REG_BLDY = 0;
- DestroyTask(taskId);
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- }
- }
-}
-
-static void sub_80C2F28(u8 taskId)
-{
- gBattle_BG3_X += 2;
- gBattle_BG3_Y++;
- if (gBattle_BG3_X > 0xff)
- gBattle_BG3_X -= 0xff;
- if (gBattle_BG3_Y > 0xff)
- gBattle_BG3_Y -= 0xff;
-}
-
-static void sub_80C2F64(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 2)
- {
- gTasks[taskId].data[0] = 0;
- if (gTasks[taskId].data[2] == 0)
- gTasks[taskId].data[1]++;
- else
- gTasks[taskId].data[1]--;
- if (gTasks[taskId].data[1] == 16)
- gTasks[taskId].data[2] = 1;
- else if (gTasks[taskId].data[1] == 0)
- gTasks[taskId].data[2] = 0;
- BlendPalette(0x6b, 0x01, gTasks[taskId].data[1], RGB(30, 22, 11));
- BlendPalette(0x68, 0x01, gTasks[taskId].data[1], RGB(31, 31, 31));
- BlendPalette(0x6e, 0x01, gTasks[taskId].data[1], RGB(30, 29, 29));
- }
- if (gTasks[taskId].data[1] == 0)
- eContestLink80C2020Struct2018000.unk_0a = 0;
- else
- eContestLink80C2020Struct2018000.unk_0a = 1;
-}
-
-void sub_80C3024(u16 species, u8 destOffset, u8 srcOffset, bool8 useDmaNow, u32 personality)
-{
- int i;
- int j;
- u16 tile;
- u16 offset;
- u16 var0;
- u16 var1;
-
- if (useDmaNow)
- {
- DmaCopy32Defvars(3, GetMonIconPtr(species, personality) + (srcOffset << 9) + 0x80, BG_CHAR_ADDR(1) + (destOffset << 9), 0x180);
- var0 = ((destOffset + 10) << 12);
- var1 = (destOffset * 16 + 0x200);
- tile = var1 | var0;
- offset = destOffset * 0x60 + 0x83;
- for (i = 0; i < 3; i++)
- {
- for (j = 0; j < 4; j++)
- {
- ((u16 *)BG_CHAR_ADDR(3))[(i << 5) + j + offset] = tile;
- tile++;
- }
- }
- }
- else
- {
- RequestSpriteCopy(GetMonIconPtr(species, personality) + (srcOffset << 9) + 0x80, BG_CHAR_ADDR(1) + (destOffset << 9), 0x180);
- }
-}
-
-static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow)
-{
- int i;
-
- for (i = 0; i < 4; i++)
- {
- sub_80C3024(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality);
- }
-}
-
-void sub_80C310C(void)
-{
- int i;
- register u16 species asm("r0");
-
- for (i = 0; i < 4; i++)
- {
- species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0);
- LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20);
- }
-}
-
-#ifdef NONMATCHING
-void sub_80C3158(const u8 *string, u8 spriteId)
-{
- int i, j;
- u8 width;
- u8 * displayedStringBattle;
- void * dest;
- u8 * d1;
- u8 * d2;
- void *d3;
- void *d4;
- void *d5;
- void *d6;
- int w;
- u16 sp00[4];
- struct Sprite *sprite = &gSprites[spriteId];
- sp00[0] = gSprites[spriteId].oam.tileNum;
- sp00[1] = gSprites[sprite->data[0]].oam.tileNum;
- sp00[2] = gSprites[sprite->data[1]].oam.tileNum;
- sp00[3] = gSprites[sprite->data[2]].oam.tileNum;
-
- for (i = 0; i < 4; i++)
- {
- DmaClear32(3, (void *)VRAM + 0x10000 + 32 * sp00[i], 0x400);
- }
-
- width = Text_GetStringWidthFromWindowTemplate(&gWindowTemplate_81E7278, string);
- displayedStringBattle = gDisplayedStringBattle;
- displayedStringBattle = StringCopy(displayedStringBattle, gUnknown_083D17E2);
- if ((~width + 1) & 7)
- {
- displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN;
- displayedStringBattle[1] = 0x11;
- displayedStringBattle[2] = ((~width + 1) & 7) / 2;
- displayedStringBattle += 3;
- }
-
- width += -8 & (width + 7);
- displayedStringBattle = StringCopy(displayedStringBattle, string);
-
- displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN;
- displayedStringBattle[1] = 0x13;
- displayedStringBattle[2] = width;
- displayedStringBattle[3] = EOS;
-
- sub_80034D4(eContestLink80C2020Struct2018068, gDisplayedStringBattle);
-
- CpuCopy32(&gUnknown_083D1624[0x0], (void *)(VRAM + 0x10000) + 32 * sp00[0], 32);
- CpuCopy32(&gUnknown_083D1624[0x40], (void *)(VRAM + 0x10000) + 32 * sp00[0] + 0x100, 32);
- CpuCopy32(&gUnknown_083D1624[0x40], (void *)(VRAM + 0x10000) + 32 * sp00[0] + 0x200, 32);
- CpuCopy32(&gUnknown_083D1624[0x20], (void *)(VRAM + 0x10000) + 32 * sp00[0] + 0x300, 32);
-
- w = width / 8;
- j = 0;
- if (j <= w)
- {
- d2 = eContestLink80C2020Struct2018068 + 0x20;
- d1 = eContestLink80C2020Struct2018068;
- d3 = (void *)VRAM + 0x0FD20;
- d4 = (void *)VRAM + 0x0FE20;
- d5 = (void *)VRAM + 0x0FF20;
- d6 = (void *)VRAM + 0x10020;
- while (j <= w)
- {
- if (j < 7)
- dest = 32 * sp00[0] + d6;
- else if (j < 15)
- dest = 32 * sp00[1] + d5;
- else if (j < 23)
- dest = 32 * sp00[2] + d4;
- else
- dest = 32 * sp00[3] + d3;
-
- if (j == w)
- break;
-
- CpuCopy32(gUnknown_083D16E4, dest, 32);
- CpuCopy32(gUnknown_083D16E4 + 0x10, dest + 0x300, 32);
- CpuCopy32(j * 0x40 + d2, dest + 0x100, 32);
- CpuCopy32(j * 0x40 + d1, dest + 0x200, 32);
-
- d3 += 0x20;
- d4 += 0x20;
- d5 += 0x20;
- d6 += 0x20;
- j++;
- }
- }
-
- CpuCopy32(gUnknown_083D1644, dest, 32);
- CpuCopy32(gUnknown_083D1644 + 0x40, dest + 0x100, 32);
- CpuCopy32(gUnknown_083D1644 + 0x40, dest + 0x200, 32);
- CpuCopy32(gUnknown_083D1644 + 0x20, dest + 0x300, 32);
-}
-#else
-asm(".include \"constants/gba_constants.inc\"");
-asm(".include \"include/macros.inc\"");
-NAKED
-void sub_80C3158(const u8 * string, u8 spriteId)
-{
- 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, 0x1C\n"
- "\tmov r9, r0\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tlsls r2, r1, 4\n"
- "\tadds r2, r1\n"
- "\tlsls r2, 2\n"
- "\tldr r3, _080C32C0 @ =gSprites\n"
- "\tadds r2, r3\n"
- "\tmov r1, sp\n"
- "\tldrh r0, [r2, 0x4]\n"
- "\tlsls r0, 22\n"
- "\tlsrs r0, 22\n"
- "\tstrh r0, [r1]\n"
- "\tmov r4, sp\n"
- "\tmovs r0, 0x2E\n"
- "\tldrsh r1, [r2, r0]\n"
- "\tlsls r0, r1, 4\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r3\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tlsls r0, 22\n"
- "\tlsrs r0, 22\n"
- "\tstrh r0, [r4, 0x2]\n"
- "\tmovs r0, 0x30\n"
- "\tldrsh r1, [r2, r0]\n"
- "\tlsls r0, r1, 4\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r3\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tlsls r0, 22\n"
- "\tlsrs r0, 22\n"
- "\tstrh r0, [r4, 0x4]\n"
- "\tmovs r0, 0x32\n"
- "\tldrsh r1, [r2, r0]\n"
- "\tlsls r0, r1, 4\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r3\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tlsls r0, 22\n"
- "\tlsrs r0, 22\n"
- "\tstrh r0, [r4, 0x6]\n"
- "\tldr r1, _080C32C4 @ =gWindowTemplate_81E7278\n"
- "\tmov r8, r1\n"
- "\tldr r7, _080C32C8 @ =0x06010000\n"
- "\tldr r2, _080C32CC @ =0x040000d4\n"
- "\tldr r6, _080C32D0 @ =0x85000100\n"
- "\tmov r1, sp\n"
- "\tmovs r5, 0\n"
- "\tadd r3, sp, 0x8\n"
- "\tmovs r4, 0x3\n"
- "_080C31CE:\n"
- "\tldrh r0, [r1]\n"
- "\tlsls r0, 5\n"
- "\tadds r0, r7\n"
- "\tstr r5, [sp, 0x8]\n"
- "\tstr r3, [r2]\n"
- "\tstr r0, [r2, 0x4]\n"
- "\tstr r6, [r2, 0x8]\n"
- "\tldr r0, [r2, 0x8]\n"
- "\tadds r1, 0x2\n"
- "\tsubs r4, 0x1\n"
- "\tcmp r4, 0\n"
- "\tbge _080C31CE\n"
- "\tmov r0, r8\n"
- "\tmov r1, r9\n"
- "\tbl Text_GetStringWidthFromWindowTemplate\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r2, _080C32D4 @ =gDisplayedStringBattle\n"
- "\tldr r1, _080C32D8 @ =gUnknown_083D17E2\n"
- "\tadds r0, r2, 0\n"
- "\tbl StringCopy\n"
- "\tadds r2, r0, 0\n"
- "\tmvns r0, r5\n"
- "\tadds r1, r0, 0x1\n"
- "\tmovs r0, 0x7\n"
- "\tands r1, r0\n"
- "\tcmp r1, 0\n"
- "\tbeq _080C3218\n"
- "\tmovs r0, 0xFC\n"
- "\tstrb r0, [r2]\n"
- "\tmovs r0, 0x11\n"
- "\tstrb r0, [r2, 0x1]\n"
- "\tlsrs r0, r1, 1\n"
- "\tstrb r0, [r2, 0x2]\n"
- "\tadds r2, 0x3\n"
- "_080C3218:\n"
- "\tadds r6, r5, 0x7\n"
- "\tmovs r1, 0x8\n"
- "\tnegs r1, r1\n"
- "\tadds r0, r1, 0\n"
- "\tands r6, r0\n"
- "\tlsls r6, 24\n"
- "\tlsrs r5, r6, 24\n"
- "\tadds r0, r2, 0\n"
- "\tmov r1, r9\n"
- "\tbl StringCopy\n"
- "\tadds r2, r0, 0\n"
- "\tmovs r0, 0xFC\n"
- "\tstrb r0, [r2]\n"
- "\tmovs r0, 0x13\n"
- "\tstrb r0, [r2, 0x1]\n"
- "\tstrb r5, [r2, 0x2]\n"
- "\tmovs r0, 0xFF\n"
- "\tstrb r0, [r2, 0x3]\n"
- "\tldr r0, _080C32DC @ =gSharedMem + 0x18068\n"
- "\tmov r10, r0\n"
- "\tldr r1, _080C32D4 @ =gDisplayedStringBattle\n"
- "\tbl sub_80034D4\n"
- "\tmov r0, sp\n"
- "\tldrh r4, [r0]\n"
- "\tlsls r4, 5\n"
- "\tldr r1, _080C32C8 @ =0x06010000\n"
- "\tadds r7, r4, r1\n"
- "\tldr r0, _080C32E0 @ =gUnknown_083D1624\n"
- "\tmov r9, r0\n"
- "\tldr r1, _080C32E4 @ =REG_BG0CNT\n"
- "\tmov r8, r1\n"
- "\tadds r1, r7, 0\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tmov r5, r9\n"
- "\tadds r5, 0x80\n"
- "\tldr r0, _080C32E8 @ =0x06010100\n"
- "\tadds r1, r4, r0\n"
- "\tadds r0, r5, 0\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tldr r0, _080C32EC @ =0x06010200\n"
- "\tadds r1, r4, r0\n"
- "\tadds r0, r5, 0\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tmov r0, r9\n"
- "\tadds r0, 0x40\n"
- "\tldr r1, _080C32F0 @ =0x06010300\n"
- "\tadds r4, r1\n"
- "\tadds r1, r4, 0\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tlsrs r5, r6, 27\n"
- "\tmovs r4, 0\n"
- "\tcmp r4, r5\n"
- "\tbgt _080C3382\n"
- "\tmov r6, sp\n"
- "\tmov r0, r10\n"
- "\tadds r0, 0x20\n"
- "\tstr r0, [sp, 0xC]\n"
- "\tmov r1, r10\n"
- "\tstr r1, [sp, 0x10]\n"
- "\tldr r0, _080C32F4 @ =0x0600fd20\n"
- "\tstr r0, [sp, 0x14]\n"
- "\tldr r1, _080C32F8 @ =0x0600fe20\n"
- "\tstr r1, [sp, 0x18]\n"
- "\tldr r0, _080C32FC @ =0x0600ff20\n"
- "\tmov r10, r0\n"
- "\tldr r1, _080C3300 @ =0x06010020\n"
- "\tmov r9, r1\n"
- "_080C32B2:\n"
- "\tcmp r4, 0x6\n"
- "\tbgt _080C3304\n"
- "\tldrh r0, [r6]\n"
- "\tlsls r0, 5\n"
- "\tmov r1, r9\n"
- "\tb _080C3322\n"
- "\t.align 2, 0\n"
- "_080C32C0: .4byte gSprites\n"
- "_080C32C4: .4byte gWindowTemplate_81E7278\n"
- "_080C32C8: .4byte 0x06010000\n"
- "_080C32CC: .4byte 0x040000d4\n"
- "_080C32D0: .4byte 0x85000100\n"
- "_080C32D4: .4byte gDisplayedStringBattle\n"
- "_080C32D8: .4byte gUnknown_083D17E2\n"
- "_080C32DC: .4byte gSharedMem + 0x18068\n"
- "_080C32E0: .4byte gUnknown_083D1624\n"
- "_080C32E4: .4byte REG_BG0CNT\n"
- "_080C32E8: .4byte 0x06010100\n"
- "_080C32EC: .4byte 0x06010200\n"
- "_080C32F0: .4byte 0x06010300\n"
- "_080C32F4: .4byte 0x0600fd20\n"
- "_080C32F8: .4byte 0x0600fe20\n"
- "_080C32FC: .4byte 0x0600ff20\n"
- "_080C3300: .4byte 0x06010020\n"
- "_080C3304:\n"
- "\tcmp r4, 0xE\n"
- "\tbgt _080C3310\n"
- "\tldrh r0, [r6, 0x2]\n"
- "\tlsls r0, 5\n"
- "\tmov r1, r10\n"
- "\tb _080C3322\n"
- "_080C3310:\n"
- "\tcmp r4, 0x16\n"
- "\tbgt _080C331C\n"
- "\tldrh r0, [r6, 0x4]\n"
- "\tlsls r0, 5\n"
- "\tldr r1, [sp, 0x18]\n"
- "\tb _080C3322\n"
- "_080C331C:\n"
- "\tldrh r0, [r6, 0x6]\n"
- "\tlsls r0, 5\n"
- "\tldr r1, [sp, 0x14]\n"
- "_080C3322:\n"
- "\tadds r7, r0, r1\n"
- "\tcmp r4, r5\n"
- "\tbeq _080C3382\n"
- "\tldr r0, _080C33D0 @ =gUnknown_083D16E4\n"
- "\tadds r1, r7, 0\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tmovs r0, 0xC0\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r7, r0\n"
- "\tldr r0, _080C33D0 @ =gUnknown_083D16E4\n"
- "\tadds r0, 0x20\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 1\n"
- "\tadds r1, r7, r0\n"
- "\tldr r0, [sp, 0x10]\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r7, r0\n"
- "\tldr r0, [sp, 0xC]\n"
- "\tmov r2, r8\n"
- "\tbl CpuSet\n"
- "\tldr r1, [sp, 0xC]\n"
- "\tadds r1, 0x40\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tldr r0, [sp, 0x10]\n"
- "\tadds r0, 0x40\n"
- "\tstr r0, [sp, 0x10]\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tadds r1, 0x20\n"
- "\tstr r1, [sp, 0x14]\n"
- "\tldr r0, [sp, 0x18]\n"
- "\tadds r0, 0x20\n"
- "\tstr r0, [sp, 0x18]\n"
- "\tmovs r1, 0x20\n"
- "\tadd r10, r1\n"
- "\tadd r9, r1\n"
- "\tadds r4, 0x1\n"
- "\tcmp r4, r5\n"
- "\tble _080C32B2\n"
- "_080C3382:\n"
- "\tldr r4, _080C33D4 @ =gUnknown_083D1644\n"
- "\tldr r5, _080C33D8 @ =REG_BG0CNT\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r7, 0\n"
- "\tadds r2, r5, 0\n"
- "\tbl CpuSet\n"
- "\tadds r6, r4, 0\n"
- "\tadds r6, 0x80\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 1\n"
- "\tadds r1, r7, r0\n"
- "\tadds r0, r6, 0\n"
- "\tadds r2, r5, 0\n"
- "\tbl CpuSet\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r7, r0\n"
- "\tadds r0, r6, 0\n"
- "\tadds r2, r5, 0\n"
- "\tbl CpuSet\n"
- "\tadds r4, 0x40\n"
- "\tmovs r0, 0xC0\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r7, r0\n"
- "\tadds r0, r4, 0\n"
- "\tadds r2, r5, 0\n"
- "\tbl CpuSet\n"
- "\tadd sp, 0x1C\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.align 2, 0\n"
- "_080C33D0: .4byte gUnknown_083D16E4\n"
- "_080C33D4: .4byte gUnknown_083D1644\n"
- "_080C33D8: .4byte REG_BG0CNT");
-}
-#endif //NONMATCHING
-
-void sub_80C33DC(void)
-{
- int i;
- struct SpriteTemplate template;
- u8 spriteIds[8];
-
- template = gSpriteTemplate_83D174C;
- for (i = 0; i <8; i++)
- LoadSpriteSheet(&gUnknown_083D1764[i]);
-
- LoadSpritePalette(&gUnknown_083D17A4);
- for (i = 0; i < 8; i++)
- {
- spriteIds[i] = CreateSprite(&template, 272, 144, 10);
- template.tileTag++;
- }
-
- gSprites[spriteIds[0]].data[0] = spriteIds[1];
- gSprites[spriteIds[0]].data[1] = spriteIds[2];
- gSprites[spriteIds[0]].data[2] = spriteIds[3];
-
- gSprites[spriteIds[4]].data[0] = spriteIds[5];
- gSprites[spriteIds[4]].data[1] = spriteIds[6];
- gSprites[spriteIds[4]].data[2] = spriteIds[7];
-
- eContestLink80C2020Struct2018000.unk_00 = spriteIds[0];
- eContestLink80C2020Struct2018000.unk_04 = 0;
- eContestLink80C2020Struct2018000.unk_01 = spriteIds[4];
- sub_80C3764();
-}
-
-u16 sub_80C34AC(const u8 * string)
-{
- u8 width = (StringLength(string) * 6);
- return 0x70 - (width / 2);
-}
-
-void sub_80C34CC(s16 arg0, u16 y, u16 arg2, u16 arg3)
-{
- struct Sprite *sprite = &gSprites[eContestLink80C2020Struct2018000.unk_00];
- sprite->pos1.x = 272;
- sprite->pos1.y = y;
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- sprite->data[4] = arg0 + 32;
- sprite->data[5] = arg2;
- sprite->data[6] = arg3;
- sprite->data[7] = 0;
- sprite->callback = sub_80C3588;
- eContestLink80C2020Struct2018000.unk_04 = 1;
-}
-
-void sub_80C3520(u16 arg0)
-{
- struct Sprite *sprite = &gSprites[eContestLink80C2020Struct2018000.unk_00];
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- sprite->pos2.y = 0;
- sprite->pos2.x = 0;
- sprite->data[6] = arg0;
- sprite->data[7] = 0;
- sprite->callback = sub_80C3630;
- eContestLink80C2020Struct2018000.unk_04 = 3;
-}
-
-void sub_80C3564(struct Sprite *sprite)
-{
- sprite->pos1.x = 272;
- sprite->pos1.y = 144;
- sprite->pos2.y = 0;
- sprite->pos2.x = 0;
- sprite->callback = SpriteCallbackDummy;
- eContestLink80C2020Struct2018000.unk_04 = 0;
-}
-
-
-void sub_80C3588(struct Sprite *sprite)
-{
- int i;
- s16 var0;
-
- var0 = (u16)sprite->data[7] + (u16)sprite->data[6];
- sprite->pos1.x -= var0 >> 8;
- sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF;
- if (sprite->pos1.x < sprite->data[4])
- sprite->pos1.x = sprite->data[4];
-
- for (i = 0; i < 3; i++)
- {
- struct Sprite *sprite2 = &gSprites[sprite->data[i]];
- sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
- }
-
- if (sprite->pos1.x == sprite->data[4])
- sprite->callback = sub_80C35FC;
-}
-
-void sub_80C35FC(struct Sprite *sprite)
-{
- eContestLink80C2020Struct2018000.unk_04 = 2;
- if ((u16)sprite->data[5] != 0xFFFF)
- {
- if (--sprite->data[5] == -1)
- sub_80C3520(sprite->data[6]);
- }
-}
-
-void sub_80C3630(struct Sprite *sprite)
-{
- int i;
- s16 var0;
-
- var0 = (u16)sprite->data[7] + (u16)sprite->data[6];
- sprite->pos1.x -= var0 >> 8;
- sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF;
- for (i = 0; i < 3; i++)
- {
- struct Sprite *sprite2 = &gSprites[sprite->data[i]];
- sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
- }
-
- if (sprite->pos1.x + sprite->pos2.x < -224)
- sub_80C3564(sprite);
-}
-
-void sub_80C3698(const u8 *text)
-{
- int i;
- u16 x;
- struct Sprite *sprite;
-
- sub_80C3158(text, eContestLink80C2020Struct2018000.unk_01);
- x = sub_80C34AC(text);
- sprite = &gSprites[eContestLink80C2020Struct2018000.unk_01];
- sprite->pos1.x = x + 32;
- sprite->pos1.y = 80;
- sprite->invisible = 0;
- for (i = 0; i < 3; i++)
- {
- gSprites[sprite->data[i]].pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
- gSprites[sprite->data[i]].pos1.y = sprite->pos1.y;
- gSprites[sprite->data[i]].invisible = 0;
- }
-
- gBattle_WIN0H = 0x00F0;
- gBattle_WIN0V = ((sprite->pos1.y - 16) << 8) | (sprite->pos1.y + 16);
- REG_WININ = WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR;
-}
-
-void sub_80C3764(void)
-{
- int i;
- struct Sprite *sprite;
-
- sprite = &gSprites[eContestLink80C2020Struct2018000.unk_01];
- sprite->invisible = 1;
- for (i = 0; i < 3; i++)
- gSprites[sprite->data[i]].invisible = 1;
-
- gBattle_WIN0H = 0;
- gBattle_WIN0V = 0;
- REG_WIN0H = gBattle_WIN0H;
- REG_WIN0V = gBattle_WIN0V;
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR;
-}
-
-#ifdef ENGLISH
-#ifdef NONMATCHING
-static inline s32 de_sub_80C39A8(s32 a0)
-{
- s32 result = 0;
- if (gIsLinkContest & 0x1)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 9, 2, 8, 2);
- result = 8;
- }
- else if (gSpecialVar_ContestRank == 0)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 0, 0, 9, 2);
- result = 9;
- }
- else if (gSpecialVar_ContestRank == 1)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 9, 0, 8, 2);
- result = 8;
- }
- else if (gSpecialVar_ContestRank == 2)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 17, 0, 8, 2);
- result = 8;
- }
- else
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 0, 2, 9, 2);
- result = 9;
- }
- return result;
-}
-
-static inline s32 de_sub_80C3A84(s32 a0, s32 * a1)
-{
- s32 result;
- if (gSpecialVar_ContestCategory == 0)
- {
- *a1 = 0;
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 17, 2, 10, 2);
- result = 10;
- }
- else if (gSpecialVar_ContestCategory == 1)
- {
- *a1 = 1;
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 0, 4, 11, 2);
- result = 11;
- }
- else if (gSpecialVar_ContestCategory == 2)
- {
- *a1 = 2;
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 11, 4, 10, 2);
- result = 10;
- }
- else if (gSpecialVar_ContestCategory == 3)
- {
- *a1 = 3;
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 21, 4, 10, 2);
- result = 10;
- }
- else
- {
- *a1 = 4;
- sub_809D104((void *)(VRAM + 0xE000), a0, 1, gUnknown_08E964B8, 0, 6, 10, 2);
- result = 10;
- }
- return result;
-}
-
-void sub_80C37E4(void)
-{
- s32 sp0;
- s32 i;
- de_sub_80C3A84(de_sub_80C39A8(5) + 5, &sp0);
- for (i = 0; i < 0x80; i++)
- {
- ((vu16 *)(VRAM + 0xE000))[i] &= 0xFFF;
- ((vu16 *)(VRAM + 0xE000))[i] |= sp0 << 12;;
- }
-}
-#else
-NAKED
-void sub_80C37E4(void)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tsub sp, 0x10\n"
- "\tmovs r5, 0x1\n"
- "\tmovs r4, 0\n"
- "\tldr r0, _080C3808 @ =gIsLinkContest\n"
- "\tldrb r0, [r0]\n"
- "\tadds r1, r5, 0\n"
- "\tands r1, r0\n"
- "\tcmp r1, 0\n"
- "\tbeq _080C3814\n"
- "\tldr r0, _080C380C @ =0x0600e000\n"
- "\tldr r3, _080C3810 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0x9\n"
- "\tstr r1, [sp]\n"
- "\tmovs r2, 0x2\n"
- "\tstr r2, [sp, 0x4]\n"
- "\tb _080C386A\n"
- "\t.align 2, 0\n"
- "_080C3808: .4byte gIsLinkContest\n"
- "_080C380C: .4byte 0x0600e000\n"
- "_080C3810: .4byte gUnknown_08E964B8\n"
- "_080C3814:\n"
- "\tldr r0, _080C3830 @ =gSpecialVar_ContestRank\n"
- "\tldrh r2, [r0]\n"
- "\tcmp r2, 0\n"
- "\tbne _080C383C\n"
- "\tmovs r4, 0x1\n"
- "\tldr r0, _080C3834 @ =0x0600e000\n"
- "\tldr r3, _080C3838 @ =gUnknown_08E964B8\n"
- "\tstr r2, [sp]\n"
- "\tstr r2, [sp, 0x4]\n"
- "\tmovs r1, 0x9\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tmovs r1, 0x2\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tb _080C3870\n"
- "\t.align 2, 0\n"
- "_080C3830: .4byte gSpecialVar_ContestRank\n"
- "_080C3834: .4byte 0x0600e000\n"
- "_080C3838: .4byte gUnknown_08E964B8\n"
- "_080C383C:\n"
- "\tcmp r2, 0x1\n"
- "\tbne _080C385C\n"
- "\tldr r0, _080C3854 @ =0x0600e000\n"
- "\tldr r3, _080C3858 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0x9\n"
- "\tstr r1, [sp]\n"
- "\tstr r4, [sp, 0x4]\n"
- "\tmovs r1, 0x8\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tmovs r1, 0x2\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tb _080C3870\n"
- "\t.align 2, 0\n"
- "_080C3854: .4byte 0x0600e000\n"
- "_080C3858: .4byte gUnknown_08E964B8\n"
- "_080C385C:\n"
- "\tcmp r2, 0x2\n"
- "\tbne _080C3884\n"
- "\tldr r0, _080C387C @ =0x0600e000\n"
- "\tldr r3, _080C3880 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0x11\n"
- "\tstr r1, [sp]\n"
- "\tstr r4, [sp, 0x4]\n"
- "_080C386A:\n"
- "\tmovs r1, 0x8\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tstr r2, [sp, 0xC]\n"
- "_080C3870:\n"
- "\tmovs r1, 0x5\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_809D104\n"
- "\tb _080C389E\n"
- "\t.align 2, 0\n"
- "_080C387C: .4byte 0x0600e000\n"
- "_080C3880: .4byte gUnknown_08E964B8\n"
- "_080C3884:\n"
- "\tmovs r4, 0x1\n"
- "\tldr r0, _080C38C0 @ =0x0600e000\n"
- "\tldr r3, _080C38C4 @ =gUnknown_08E964B8\n"
- "\tstr r1, [sp]\n"
- "\tmovs r2, 0x2\n"
- "\tstr r2, [sp, 0x4]\n"
- "\tmovs r1, 0x9\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tstr r2, [sp, 0xC]\n"
- "\tmovs r1, 0x5\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_809D104\n"
- "_080C389E:\n"
- "\tadds r4, 0xD\n"
- "\tldr r0, _080C38C8 @ =gSpecialVar_ContestCategory\n"
- "\tldrh r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _080C38CC\n"
- "\tmovs r6, 0\n"
- "\tldr r0, _080C38C0 @ =0x0600e000\n"
- "\tldr r3, _080C38C4 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0x11\n"
- "\tstr r1, [sp]\n"
- "\tmovs r2, 0x2\n"
- "\tstr r2, [sp, 0x4]\n"
- "\tmovs r1, 0xA\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tstr r2, [sp, 0xC]\n"
- "\tb _080C392A\n"
- "\t.align 2, 0\n"
- "_080C38C0: .4byte 0x0600e000\n"
- "_080C38C4: .4byte gUnknown_08E964B8\n"
- "_080C38C8: .4byte gSpecialVar_ContestCategory\n"
- "_080C38CC:\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080C38EC\n"
- "\tmovs r6, 0x1\n"
- "\tldr r0, _080C38E4 @ =0x0600e000\n"
- "\tldr r3, _080C38E8 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp]\n"
- "\tmovs r1, 0x4\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tmovs r1, 0xB\n"
- "\tb _080C3924\n"
- "\t.align 2, 0\n"
- "_080C38E4: .4byte 0x0600e000\n"
- "_080C38E8: .4byte gUnknown_08E964B8\n"
- "_080C38EC:\n"
- "\tcmp r0, 0x2\n"
- "\tbne _080C3910\n"
- "\tmovs r6, 0x2\n"
- "\tldr r0, _080C3908 @ =0x0600e000\n"
- "\tldr r3, _080C390C @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0xB\n"
- "\tstr r1, [sp]\n"
- "\tmovs r1, 0x4\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tmovs r1, 0xA\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tstr r6, [sp, 0xC]\n"
- "\tb _080C392A\n"
- "\t.align 2, 0\n"
- "_080C3908: .4byte 0x0600e000\n"
- "_080C390C: .4byte gUnknown_08E964B8\n"
- "_080C3910:\n"
- "\tcmp r0, 0x3\n"
- "\tbne _080C393C\n"
- "\tmovs r6, 0x3\n"
- "\tldr r0, _080C3934 @ =0x0600e000\n"
- "\tldr r3, _080C3938 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0x15\n"
- "\tstr r1, [sp]\n"
- "\tmovs r1, 0x4\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tmovs r1, 0xA\n"
- "_080C3924:\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tmovs r1, 0x2\n"
- "\tstr r1, [sp, 0xC]\n"
- "_080C392A:\n"
- "\tadds r1, r4, 0\n"
- "\tadds r2, r5, 0\n"
- "\tbl sub_809D104\n"
- "\tb _080C395A\n"
- "\t.align 2, 0\n"
- "_080C3934: .4byte 0x0600e000\n"
- "_080C3938: .4byte gUnknown_08E964B8\n"
- "_080C393C:\n"
- "\tmovs r6, 0x4\n"
- "\tldr r0, _080C3984 @ =0x0600e000\n"
- "\tldr r3, _080C3988 @ =gUnknown_08E964B8\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp]\n"
- "\tmovs r1, 0x6\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tmovs r1, 0xA\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tmovs r1, 0x2\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tadds r1, r4, 0\n"
- "\tadds r2, r5, 0\n"
- "\tbl sub_809D104\n"
- "_080C395A:\n"
- "\tldr r5, _080C398C @ =0x00000fff\n"
- "\tlsls r4, r6, 12\n"
- "\tldr r2, _080C3984 @ =0x0600e000\n"
- "\tmovs r3, 0x7F\n"
- "_080C3962:\n"
- "\tldrh r1, [r2]\n"
- "\tadds r0, r5, 0\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r2]\n"
- "\tldrh r1, [r2]\n"
- "\tadds r0, r4, 0\n"
- "\torrs r0, r1\n"
- "\tstrh r0, [r2]\n"
- "\tadds r2, 0x2\n"
- "\tsubs r3, 0x1\n"
- "\tcmp r3, 0\n"
- "\tbge _080C3962\n"
- "\tadd sp, 0x10\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080C3984: .4byte 0x0600e000\n"
- "_080C3988: .4byte gUnknown_08E964B8\n"
- "_080C398C: .4byte 0x00000fff");
-}
-#endif // NONMATCHING
-
-#elif defined(GERMAN)
-s16 de_sub_80C39A8(s32 a0)
-{
- s16 result;
- if (gIsLinkContest & 1)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 11, 3, 8, 3);
- result = 8;
- }
- else if (gSpecialVar_ContestRank == 0)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 0, 0, 11, 3);
- result = 11;
- }
- else if (gSpecialVar_ContestRank == 1)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 11, 0, 10, 3);
- result = 10;
- }
- else if (gSpecialVar_ContestRank == 2)
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 21, 0, 10, 3);
- result = 10;
- }
- else
- {
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 0, 3, 11, 3);
- result = 11;
- }
- return result;
-}
-
-s16 de_sub_80C3A84(s32 a0, s32 * a1)
-{
- s16 result;
- if (gSpecialVar_ContestCategory == 0)
- {
- *a1 = 0;
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 19, 3, 7, 3);
- result = 7;
- }
- else if (gSpecialVar_ContestCategory == 1)
- {
- *a1 = 1;
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 0, 6, 7, 3);
- result = 7;
- }
- else if (gSpecialVar_ContestCategory == 2)
- {
- *a1 = 2;
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 7, 6, 4, 3);
- result = 4;
- }
- else if (gSpecialVar_ContestCategory == 3)
- {
- *a1 = 3;
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 11, 6, 6, 3);
- result = 6;
- }
- else
- {
- *a1 = 4;
- sub_809D104((void *)(VRAM + 0xE000), a0, 0, gUnknown_08E964B8, 17, 6, 5, 3);
- result = 5;
- }
- return result;
-}
-
-void sub_80C37E4(void)
-{
- s32 sp0;
- s32 i;
- de_sub_80C3A84(de_sub_80C39A8(6) + 6, &sp0);
- for (i = 0; i < 0x80; i++)
- {
- ((vu16 *)(VRAM + 0xE000))[i] &= 0xFFF;
- ((vu16 *)(VRAM + 0xE000))[i] |= sp0 << 12;;
- }
-}
-#endif
-
-// fakematching?
-u8 sub_80C3990(u8 monIndex, u8 arg1)
-{
- u32 var0;
- u32 var1;
-
- var0 = gContestMonConditions[monIndex] << 16;
- var1 = var0 / 0x3F;
- if (var1 & 0xFFFF)
- var1 += 0x10000;
-
- var1 >>= 16;
- if (var1 == 0 && var0)
- var1 = 1;
-
- if (arg1 && var1 > 10)
- var1 = 10;
-
- return var1;
-}
-
-s8 sub_80C39E4(u8 arg0, u8 arg1)
-{
- u32 r4;
- u32 r2;
- s16 val;
- s8 ret;
-
- val = gUnknown_02038688[arg0];
- if (val < 0)
- r4 = -val << 16;
- else
- r4 = val << 16;
- r2 = r4 / 80;
- if (r2 & 0xFFFF)
- r2 += 0x10000;
-
- r2 >>= 16;
- if (r2 == 0 && r4 != 0)
- r2 = 1;
-
- if (arg1 != 0 && r2 > 10)
- r2 = 10;
-
- if (gUnknown_02038688[arg0] < 0)
- ret = -r2;
- else
- ret = r2;
-
- return ret;
-}
-
-void sub_80C3A5C(u8 taskId)
-{
- u16 firstTileNum;
-
- if (gTasks[taskId].data[10] == 0)
- {
- gTasks[taskId].data[11] = (3 - gTasks[taskId].data[0]) * 40;
- gTasks[taskId].data[10]++;
- }
- else if (gTasks[taskId].data[10] == 1)
- {
- if (--gTasks[taskId].data[11] == -1)
- {
- firstTileNum = gTasks[taskId].data[0] * 2 + 0x5043;
- *(vu16 *)((VRAM + 0xE142) + gTasks[taskId].data[1] * 192) = firstTileNum + 0x00;
- *(vu16 *)((VRAM + 0xE144) + gTasks[taskId].data[1] * 192) = firstTileNum + 0x01;
- *(vu16 *)((VRAM + 0xE182) + gTasks[taskId].data[1] * 192) = firstTileNum + 0x10;
- *(vu16 *)((VRAM + 0xE184) + gTasks[taskId].data[1] * 192) = firstTileNum + 0x11;
- eContestLink80C2020Struct2018000.unk_05++;
- DestroyTask(taskId);
- PlaySE(SE_JYUNI);
- }
- }
-}
-
-#ifdef NONMATCHING
-void sub_80C3B30(u8 taskId)
-{
- int i, j, k;
-
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
- ;
-
- for (j = 0; j < 3; j++)
- {
- for (k = 0; k < 30; k++)
- {
- ((u16 *)((VRAM + 0xE100) + 2 * (96 * i + 32 * j)))[k] &= 0x0FFF;
- ((u16 *)((VRAM + 0xE100) + 2 * (96 * i + 32 * j)))[k] |= 0x9000;
- }
- }
- gTasks[taskId].data[10] = i;
- gTasks[taskId].data[12] = 1;
- gTasks[taskId].func = sub_80C3BD8;
- eContestLink80C2020Struct2018000.unk_03 = taskId;
-}
-#else
-NAKED
-void sub_80C3B30(u8 taskId)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r12, r0\n"
- "\tmovs r5, 0\n"
- "\tldr r1, _080C3BC0 @ =gContestFinalStandings\n"
- "\tldrb r0, [r1]\n"
- "\tldr r2, _080C3BC4 @ =gTasks\n"
- "\tmov r10, r2\n"
- "\tcmp r0, 0\n"
- "\tbeq _080C3B5C\n"
- "_080C3B4E:\n"
- "\tadds r5, 0x1\n"
- "\tcmp r5, 0x3\n"
- "\tbgt _080C3B5C\n"
- "\tadds r0, r5, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _080C3B4E\n"
- "_080C3B5C:\n"
- "\tmovs r1, 0\n"
- "\tlsls r0, r5, 1\n"
- "\tmov r2, r12\n"
- "\tlsls r2, 2\n"
- "\tmov r9, r2\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 5\n"
- "\tmov r8, r0\n"
- "\tldr r7, _080C3BC8 @ =0x00000fff\n"
- "\tmovs r0, 0x90\n"
- "\tlsls r0, 8\n"
- "\tadds r6, r0, 0\n"
- "_080C3B74:\n"
- "\tlsls r0, r1, 5\n"
- "\tadds r4, r1, 0x1\n"
- "\tadd r0, r8\n"
- "\t@ the next two instructions are swapped\n"
- "\tmovs r3, 0x1D\n"
- "\tlsls r0, 1\n"
- "\tldr r1, _080C3BCC @ =0x0600e100\n"
- "\tadds r2, r0, r1\n"
- "_080C3B82:\n"
- "\tldrh r1, [r2]\n"
- "\tadds r0, r7, 0\n"
- "\tands r0, r1\n"
- "\torrs r0, r6\n"
- "\tstrh r0, [r2]\n"
- "\tadds r2, 0x2\n"
- "\tsubs r3, 0x1\n"
- "\tcmp r3, 0\n"
- "\tbge _080C3B82\n"
- "\tadds r1, r4, 0\n"
- "\tcmp r1, 0x2\n"
- "\tble _080C3B74\n"
- "\tmov r0, r9\n"
- "\tadd r0, r12\n"
- "\tlsls r0, 3\n"
- "\tadd r0, r10\n"
- "\tstrh r5, [r0, 0x1C]\n"
- "\tmovs r1, 0x1\n"
- "\tstrh r1, [r0, 0x20]\n"
- "\tldr r2, _080C3BD0 @ =sub_80C3BD8\n"
- "\tstr r2, [r0]\n"
- "\tmov r1, r12\n"
- "\tldr r0, _080C3BD4 @ =gSharedMem + 0x18000\n"
- "\tstrb r1, [r0, 0x3]\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.align 2, 0\n"
- "_080C3BC0: .4byte gContestFinalStandings\n"
- "_080C3BC4: .4byte gTasks\n"
- "_080C3BC8: .4byte 0x00000fff\n"
- "_080C3BCC: .4byte 0x0600e100\n"
- "_080C3BD0: .4byte sub_80C3BD8\n"
- "_080C3BD4: .4byte gSharedMem + 0x18000");
-}
-#endif //NONMATCHING
-
-void sub_80C3BD8(u8 taskId)
-{
- if (++gTasks[taskId].data[11] == 1)
- {
- gTasks[taskId].data[11] = 0;
- BlendPalette(0x91, 1, gTasks[taskId].data[12], RGB(13, 28, 27));
- if (gTasks[taskId].data[13] == 0)
- {
- if (++gTasks[taskId].data[12] == 16)
- gTasks[taskId].data[13] = 1;
- }
- else
- {
- if (--gTasks[taskId].data[12] == 0)
- gTasks[taskId].data[13] = 0;
- }
- }
-}
-
-void sub_80C3C44(struct Sprite *sprite)
-{
- if (sprite->data[0] < 10)
- {
- if (++sprite->data[0] == 10)
- {
- PlayCry1(sprite->data[1], 0);
- sprite->data[1] = 0;
- }
- }
- else
- {
- s16 delta = (u16)sprite->data[1] + 0x600;
- sprite->pos1.x -= delta >> 8;
- sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF;
- if (sprite->pos1.x < 120)
- sprite->pos1.x = 120;
-
- if (sprite->pos1.x == 120)
- {
- sprite->callback = SpriteCallbackDummy;
- sprite->data[1] = 0;
- eContestLink80C2020Struct2018000.unk_06 = 1;
- }
- }
-}
-
-void sub_80C3CB8(struct Sprite *sprite)
-{
- s16 delta = (u16)sprite->data[1] + 0x600;
- sprite->pos1.x -= delta >> 8;
- sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF;
- if (sprite->pos1.x < -32)
- {
- sprite->callback = SpriteCallbackDummy;
- sprite->invisible = 1;
- eContestLink80C2020Struct2018000.unk_06 = 2;
- }
-}
-
-void sub_80C3D04(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 5)
- {
- gTasks[taskId].data[0] = 0;
- if (eContestLink80C2020Struct2018000.unk_07 < 40)
- {
- u8 spriteId = CreateSprite(&gSpriteTemplate_83D17B4, (Random() % 240) - 20, 44, 5);
- gSprites[spriteId].data[0] = Random() % 512;
- gSprites[spriteId].data[1] = (Random() % 24) + 16;
- gSprites[spriteId].data[2] = (Random() % 256) + 48;
- gSprites[spriteId].oam.tileNum += Random() % 17;
- eContestLink80C2020Struct2018000.unk_07++;
- }
- }
-
- if (eContestLink80C2020Struct2018000.unk_09)
- DestroyTask(taskId);
-}
-
-void sub_80C3DF0(struct Sprite *sprite)
-{
- register s16 var0 asm("r1");
-
- sprite->data[3] += sprite->data[0];
- sprite->pos2.x = Sin(sprite->data[3] >> 8, sprite->data[1]);
- var0 = sprite->data[4] + sprite->data[2];
- sprite->pos1.x += var0 >> 8;
- var0 = var0 & 0xFF;
- sprite->data[4] = var0;
- sprite->pos1.y++;
- if (eContestLink80C2020Struct2018000.unk_09)
- sprite->invisible = 1;
-
- if (sprite->pos1.x > 248 || sprite->pos1.y > 116)
- {
- DestroySprite(sprite);
- eContestLink80C2020Struct2018000.unk_07--;
- }
-}
-
-void sub_80C3E60(u8 monIndex, u8 numFrames)
-{
- u8 taskId = CreateTask(sub_80C3EA4, 8);
- gTasks[taskId].data[0] = monIndex;
- gTasks[taskId].data[1] = numFrames;
- gTasks[taskId].data[2] = gContestMons[monIndex].species;
-}
-
-void sub_80C3EA4(u8 taskId)
-{
- u8 monIndex = gTasks[taskId].data[0];
- if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
- {
- gTasks[taskId].data[10] = 0;
- sub_80C3024(gTasks[taskId].data[2], monIndex, gTasks[taskId].data[11], FALSE, gContestMons[monIndex].personality);
- gTasks[taskId].data[11] ^= 1;
- }
-}
-
-void sub_80C3F00(void)
-{
- s32 i;
- s16 r2 = gUnknown_02038678[0];
- s32 r4;
- u32 r5;
- s8 r0;
-
- for (i = 1; i < 4; i++)
- {
- if (r2 < gUnknown_02038678[i])
- r2 = gUnknown_02038678[i];
- }
-
- if (r2 < 0)
- {
- r2 = gUnknown_02038678[0];
-
- for (i = 1; i < 4; i++)
- {
- if (r2 > gUnknown_02038678[i])
- r2 = gUnknown_02038678[i];
- }
- }
-
- for (i = 0; i < 4; i++)
- {
- r4 = 1000 * gContestMonConditions[i] / ABS(r2);
- if ((r4 % 10) >= 5)
- r4 += 10;
- eContestLink80C2020Struct2018018[i].unk_00 = r4 / 10;
-
- r4 = 1000 * ABS(gUnknown_02038688[i]) / ABS(r2);
- if ((r4 % 10) >= 5)
- r4 += 10;
- eContestLink80C2020Struct2018018[i].unk_04 = r4 / 10;
-
- if (gUnknown_02038688[i] < 0)
- eContestLink80C2020Struct2018018[i].unk_10 = 1;
-
- r5 = 22528 * eContestLink80C2020Struct2018018[i].unk_00 / 100;
- if ((r5 % 256) >= 128)
- r5 += 256;
- eContestLink80C2020Struct2018018[i].unk_08 = r5 / 256;
-
- r5 = eContestLink80C2020Struct2018018[i].unk_04 * 22528 / 100;
- if ((r5 % 256) >= 128)
- r5 += 256;
- eContestLink80C2020Struct2018018[i].unk_0c = r5 / 256;
-
- eContestLink80C2020Struct2018018[i].unk_11 = sub_80C3990(i, 1);
- r0 = sub_80C39E4(i, 1);
- eContestLink80C2020Struct2018018[i].unk_12 = ABS(r0);
-
- if (gContestFinalStandings[i])
- {
- s16 r2__ = eContestLink80C2020Struct2018018[i].unk_08;
- s16 r1__ = eContestLink80C2020Struct2018018[i].unk_0c;
- if (eContestLink80C2020Struct2018018[i].unk_10)
- r1__ = -r1__;
- if (r2__ + r1__ == 88)
- {
- if (r1__ > 0)
- eContestLink80C2020Struct2018018[i].unk_0c--;
- else if (r2__ > 0)
- eContestLink80C2020Struct2018018[i].unk_08--;
- }
- }
- }
-}
-
-#ifdef NONMATCHING
-void sub_80C40D4(u8 arg0, u8 arg1)
-{
- int i;
- u8 taskId;
- u8 sp8, spC;
-
- sp8 = 0;
- spC = 0;
- if (!arg0)
- {
- u32 var0;
- for (i = 0; i < 4; i++)
- {
- u8 var1 = eContestLink80C2020Struct2018018[i].unk_11;
- if (arg1 < var1)
- {
- int x = var1 + 19;
- x += 32 * (i * 3 + 5);
- x -= arg1;
- x--;
- *(vu16 *)((VRAM + 0xC000) + 2 * x) = 0x60B3;
- taskId = CreateTask(sub_80C42C0, 10);
- var0 = ((eContestLink80C2020Struct2018018[i].unk_08 << 16) / eContestLink80C2020Struct2018018[i].unk_11) * (arg1 + 1);
- if ((var0 % 0x10000) >= 0x8000)
- var0 += 0x10000;
-
- gTasks[taskId].data[0] = i;
- gTasks[taskId].data[1] = var0 >> 16;
- eContestLink80C2020Struct2018000.unk_14++;
- sp8++;
- }
- }
- }
- else
- {
- u32 var0;
- for (i = 0; i < 4; i++)
- {
- int tile;
- s8 var1 = eContestLink80C2020Struct2018018[i].unk_12;
- tile = eContestLink80C2020Struct2018018[i].unk_10 ? 0x60A5 : 0x60A3;
- if (arg1 < var1)
- {
- int x = var1 + 19;
- x += 32 * (i * 3 + 6);
- x -= arg1;
- x--;
- *(vu16 *)((VRAM + 0xC000) + 2 * x) = tile;
- taskId = CreateTask(sub_80C42C0, 10);
- var0 = ((eContestLink80C2020Struct2018018[i].unk_0c << 16) / eContestLink80C2020Struct2018018[i].unk_12) * (arg1 + 1);
- if ((var0 % 0x10000) >= 0x8000)
- var0 += 0x10000;
-
- gTasks[taskId].data[0] = i;
- if (eContestLink80C2020Struct2018018[i].unk_10)
- {
- gTasks[taskId].data[2] = 1;
- spC++;
- }
- else
- {
- sp8++;
- }
-
- if (eContestLink80C2020Struct2018018[i].unk_10)
- gTasks[taskId].data[1] = -(var0 >> 16) + eContestLink80C2020Struct2018018[i].unk_08;
- else
- gTasks[taskId].data[1] = (var0 >> 16) + eContestLink80C2020Struct2018018[i].unk_08;
-
- eContestLink80C2020Struct2018000.unk_14++;
- }
- }
- }
-
- if (spC)
- PlaySE(SE_BOO);
-
- if (sp8)
- PlaySE(SE_PIN);
-}
-#else
-// Assorted register differences
-NAKED
-void sub_80C40D4(u8 arg0, u8 arg1)
-{
- 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, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsls r1, 24\n"
- "\tlsrs r7, r1, 24\n"
- "\tmovs r1, 0\n"
- "\tmov r10, r1\n"
- "\tmovs r2, 0\n"
- "\tstr r2, [sp]\n"
- "\tcmp r0, 0\n"
- "\tbne _080C4198\n"
- "\tmov r8, r2\n"
- "\tldr r0, _080C417C @ =gSharedMem + 0x18018\n"
- "\tsubs r1, 0x18\n"
- "\tadds r1, r0\n"
- "\tmov r9, r1\n"
- "\tadds r4, r0, 0\n"
- "\tadds r4, 0x8\n"
- "\tmovs r6, 0xA0\n"
- "_080C4102:\n"
- "\tldrb r0, [r4, 0x9]\n"
- "\tcmp r7, r0\n"
- "\tbcs _080C416A\n"
- "\tadds r0, 0x13\n"
- "\tadds r0, r6, r0\n"
- "\tsubs r0, r7\n"
- "\tlsls r0, 1\n"
- "\tldr r2, _080C4180 @ =0x0600bffe\n"
- "\tadds r0, r2\n"
- "\tldr r2, _080C4184 @ =0x000060b3\n"
- "\tadds r1, r2, 0\n"
- "\tstrh r1, [r0]\n"
- "\tldr r0, _080C4188 @ =sub_80C42C0\n"
- "\tmovs r1, 0xA\n"
- "\tbl CreateTask\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r0, [r4]\n"
- "\tlsls r0, 16\n"
- "\tldrb r1, [r4, 0x9]\n"
- "\tbl __udivsi3\n"
- "\tadds r1, r7, 0x1\n"
- "\tadds r3, r0, 0\n"
- "\tmuls r3, r1\n"
- "\tldr r0, _080C418C @ =0x0000ffff\n"
- "\tands r0, r3\n"
- "\tldr r1, _080C4190 @ =0x00007fff\n"
- "\tcmp r0, r1\n"
- "\tbls _080C4146\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 9\n"
- "\tadds r3, r0\n"
- "_080C4146:\n"
- "\tldr r1, _080C4194 @ =gTasks\n"
- "\tlsls r0, r5, 2\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r1\n"
- "\tmov r1, r8\n"
- "\tstrh r1, [r0, 0x8]\n"
- "\tlsrs r1, r3, 16\n"
- "\tstrh r1, [r0, 0xA]\n"
- "\tmov r2, r9\n"
- "\tldrb r0, [r2, 0x14]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r2, 0x14]\n"
- "\tmov r0, r10\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r10, r0\n"
- "_080C416A:\n"
- "\tadds r4, 0x14\n"
- "\tadds r6, 0x60\n"
- "\tmovs r0, 0x1\n"
- "\tadd r8, r0\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0x3\n"
- "\tble _080C4102\n"
- "\tb _080C4292\n"
- "\t.align 2, 0\n"
- "_080C417C: .4byte gSharedMem + 0x18018\n"
- "_080C4180: .4byte 0x0600bffe\n"
- "_080C4184: .4byte 0x000060b3\n"
- "_080C4188: .4byte sub_80C42C0\n"
- "_080C418C: .4byte 0x0000ffff\n"
- "_080C4190: .4byte 0x00007fff\n"
- "_080C4194: .4byte gTasks\n"
- "_080C4198:\n"
- "\tmovs r2, 0\n"
- "\tmov r8, r2\n"
- "\tldr r0, _080C4220 @ =gSharedMem + 0x18018\n"
- "\tmov r12, r0\n"
- "\tmov r9, r2\n"
- "\tmovs r1, 0xC0\n"
- "\tstr r1, [sp, 0x4]\n"
- "_080C41A6:\n"
- "\tmov r6, r9\n"
- "\tadd r6, r12\n"
- "\tldrb r1, [r6, 0x12]\n"
- "\tldrb r0, [r6, 0x10]\n"
- "\tldr r2, _080C4224 @ =0x000060a3\n"
- "\tcmp r0, 0\n"
- "\tbeq _080C41B6\n"
- "\tadds r2, 0x2\n"
- "_080C41B6:\n"
- "\tlsls r0, r1, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r7, r0\n"
- "\tbge _080C427E\n"
- "\tadds r0, 0x13\n"
- "\tldr r1, [sp, 0x4]\n"
- "\tadds r0, r1, r0\n"
- "\tsubs r0, r7\n"
- "\tlsls r0, 1\n"
- "\tldr r1, _080C4228 @ =0x0600bffe\n"
- "\tadds r0, r1\n"
- "\tstrh r2, [r0]\n"
- "\tldr r0, _080C422C @ =sub_80C42C0\n"
- "\tmovs r1, 0xA\n"
- "\tbl CreateTask\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r0, [r6, 0xC]\n"
- "\tlsls r0, 16\n"
- "\tldrb r1, [r6, 0x12]\n"
- "\tbl __udivsi3\n"
- "\tadds r1, r7, 0x1\n"
- "\tadds r3, r0, 0\n"
- "\tmuls r3, r1\n"
- "\tldr r0, _080C4230 @ =0x0000ffff\n"
- "\tands r0, r3\n"
- "\tldr r1, _080C4234 @ =0x00007fff\n"
- "\tcmp r0, r1\n"
- "\tbls _080C41FA\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 9\n"
- "\tadds r3, r2\n"
- "_080C41FA:\n"
- "\tldr r1, _080C4238 @ =gTasks\n"
- "\tlsls r2, r5, 2\n"
- "\tadds r0, r2, r5\n"
- "\tlsls r0, 3\n"
- "\tadds r4, r0, r1\n"
- "\tmov r0, r8\n"
- "\tstrh r0, [r4, 0x8]\n"
- "\tldrb r0, [r6, 0x10]\n"
- "\tadds r6, r1, 0\n"
- "\tcmp r0, 0\n"
- "\tbeq _080C423C\n"
- "\tmovs r0, 0x1\n"
- "\tstrh r0, [r4, 0xC]\n"
- "\tldr r0, [sp]\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstr r0, [sp]\n"
- "\tb _080C4246\n"
- "\t.align 2, 0\n"
- "_080C4220: .4byte gSharedMem + 0x18018\n"
- "_080C4224: .4byte 0x000060a3\n"
- "_080C4228: .4byte 0x0600bffe\n"
- "_080C422C: .4byte sub_80C42C0\n"
- "_080C4230: .4byte 0x0000ffff\n"
- "_080C4234: .4byte 0x00007fff\n"
- "_080C4238: .4byte gTasks\n"
- "_080C423C:\n"
- "\tmov r0, r10\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r10, r0\n"
- "_080C4246:\n"
- "\tldr r0, _080C4264 @ =gSharedMem + 0x18018\n"
- "\tmov r1, r9\n"
- "\tadds r4, r1, r0\n"
- "\tldrb r1, [r4, 0x10]\n"
- "\tmov r12, r0\n"
- "\tcmp r1, 0\n"
- "\tbeq _080C4268\n"
- "\tadds r0, r2, r5\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r6\n"
- "\tlsrs r2, r3, 16\n"
- "\tldr r1, [r4, 0x8]\n"
- "\tsubs r1, r2\n"
- "\tb _080C4274\n"
- "\t.align 2, 0\n"
- "_080C4264: .4byte gSharedMem + 0x18018\n"
- "_080C4268:\n"
- "\tadds r0, r2, r5\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r6\n"
- "\tlsrs r2, r3, 16\n"
- "\tldr r1, [r4, 0x8]\n"
- "\tadds r1, r2\n"
- "_080C4274:\n"
- "\tstrh r1, [r0, 0xA]\n"
- "\tldr r1, _080C42BC @ =gSharedMem + 0x18000\n"
- "\tldrb r0, [r1, 0x14]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r1, 0x14]\n"
- "_080C427E:\n"
- "\tmovs r2, 0x14\n"
- "\tadd r9, r2\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tadds r0, 0x60\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tmovs r1, 0x1\n"
- "\tadd r8, r1\n"
- "\tmov r2, r8\n"
- "\tcmp r2, 0x3\n"
- "\tble _080C41A6\n"
- "_080C4292:\n"
- "\tldr r0, [sp]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080C429E\n"
- "\tmovs r0, 0x16\n"
- "\tbl PlaySE\n"
- "_080C429E:\n"
- "\tmov r1, r10\n"
- "\tcmp r1, 0\n"
- "\tbeq _080C42AA\n"
- "\tmovs r0, 0x15\n"
- "\tbl PlaySE\n"
- "_080C42AA:\n"
- "\tadd sp, 0x8\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.align 2, 0\n"
- "_080C42BC: .4byte gSharedMem + 0x18000");
-}
-#endif //NONMATCHING
-
-void sub_80C42C0(u8 taskId /*r12*/)
-{
- bool32 r6 = FALSE;
- bool32 r9 = FALSE;
- u8 r5 = gTasks[taskId].data[0];
- s16 r7 = gTasks[taskId].data[1];
- s16 r1 = gTasks[taskId].data[2];
- s32 i;
-
- if (r1 != 0)
- {
- if (eContestLink80C2020Struct2018000.unk_0c[r5] <= 0)
- r6 = TRUE;
- }
- else
- {
- if (eContestLink80C2020Struct2018000.unk_0c[r5] >= 88)
- r6 = TRUE;
- }
- if (eContestLink80C2020Struct2018000.unk_0c[r5] == r7)
- r9 = TRUE;
-
- if (!r9)
- {
- if (r6)
- {
- eContestLink80C2020Struct2018000.unk_0c[r5] = r7;
- }
- else if (r1 != 0)
- {
- eContestLink80C2020Struct2018000.unk_0c[r5]--;
- }
- else
- {
- eContestLink80C2020Struct2018000.unk_0c[r5]++;
- }
- }
- if (!r6)
- {
- if (!r9)
- {
- for (i = 0; i < 11; i++)
- {
- u8 r0;
- u16 tile;
- if (eContestLink80C2020Struct2018000.unk_0c[r5] >= 8 * (i + 1))
- {
- r0 = 8;
- }
- else if (eContestLink80C2020Struct2018000.unk_0c[r5] >= 8 * i)
- {
- r0 = eContestLink80C2020Struct2018000.unk_0c[r5] % 8;
- }
- else
- {
- r0 = 0;
- }
- if (r0 < 4)
- tile = 0x504C + r0;
- else
- tile = 0x5057 + r0;
- *(vu16 *)((VRAM + 0xE18E) + 2 * (96 * r5 + i)) = tile;
- }
- }
- }
- if (r9)
- {
- eContestLink80C2020Struct2018000.unk_14--;
- DestroyTask(taskId);
- }
-}
-
-void ScrSpecial_CheckSelectedMonAndInitContest(void)
-{
- u8 result = CanMonParticipateInContest(&gPlayerParty[gContestMonPartyIndex]);
- if (result != 0)
- {
- Contest_InitAllPokemon(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
- InitContestMonConditions(gSpecialVar_ContestCategory);
- }
- gSpecialVar_Result = result;
-}
-
-u16 ScrSpecial_CanMonParticipateInSelectedLinkContest(void)
-{
- u16 result = 0;
- struct Pokemon *mon = &gPlayerParty[gContestMonPartyIndex];
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- if (GetMonData(mon, MON_DATA_COOL_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- if (GetMonData(mon, MON_DATA_BEAUTY_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
- break;
- case CONTEST_CATEGORY_CUTE:
- if (GetMonData(mon, MON_DATA_CUTE_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
- break;
- case CONTEST_CATEGORY_SMART:
- if (GetMonData(mon, MON_DATA_SMART_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
- break;
- case CONTEST_CATEGORY_TOUGH:
- if (GetMonData(mon, MON_DATA_TOUGH_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
- break;
- }
-
- return result;
-}
-
-
-void ScrSpecial_GiveContestRibbon(void)
-{
- u8 ribbonData;
-
- if (gContestFinalStandings[gContestPlayerMonIndex] != 0)
- return;
-
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData);
- }
- break;
- case CONTEST_CATEGORY_BEAUTY:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData);
- }
- break;
- case CONTEST_CATEGORY_CUTE:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData);
- }
- break;
- case CONTEST_CATEGORY_SMART:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData);
- }
- break;
- case CONTEST_CATEGORY_TOUGH:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData);
- }
- break;
- }
-}
-
-void Contest_CopyAndConvertTrainerName_Intl(u8 * dest, const u8 * src)
-{
- StringCopy(dest, src);
- if (dest[0] == EXT_CTRL_CODE_BEGIN && dest[1] == 0x15)
- ConvertInternationalString(dest, LANGUAGE_JAPANESE);
-}
-
-void Contest_CopyAndConvertNicknameI_Intl(u8 * dest, u8 idx)
-{
- StringCopy(dest, gContestMons[idx].nickname);
- if (gIsLinkContest & 1)
- {
- if (gLinkPlayers[idx].language == LANGUAGE_JAPANESE)
- {
- ConvertInternationalString(dest, GetStringLanguage(dest));
- }
- }
-}
-
-void Contest_GetTrainerNameI_StringVar1(void)
-{
- if (gIsLinkContest & 1)
- {
- Contest_CopyAndConvertTrainerName_Intl(gStringVar1, gLinkPlayers[gSpecialVar_0x8006].name);
- }
- else
- {
- Contest_CopyAndConvertTrainerName_Intl(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName);
- }
-}
-
-void Contest_GetNicknameI_StringVar1(void)
-{
- Contest_CopyAndConvertNicknameI_Intl(gStringVar3, gSpecialVar_0x8006);
-}
-
-void ScrSpecial_CountContestMonsWithBetterCondition(void)
-{
- u8 i;
- u8 count;
-
- for (i = 0, count = 0; i < 4; i++)
- {
- if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
- count++;
- }
-
- gSpecialVar_0x8004 = count;
-}
-
-void ScrSpecial_GetMonCondition(void)
-{
- gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
-}
-
-void ScrSpecial_GetContestWinnerIdx(void)
-{
- u8 i;
-
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
- ;
-
- gSpecialVar_0x8005 = i;
-}
-
-void ScrSpecial_GetContestWinnerTrainerName(void)
-{
- u8 i;
-
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
- ;
-
- if (gIsLinkContest & 1)
- {
- Contest_CopyAndConvertTrainerName_Intl(gStringVar3, gLinkPlayers[i].name);
- }
- else
- {
- Contest_CopyAndConvertTrainerName_Intl(gStringVar3, gContestMons[i].trainerName);
- }
-}
-
-void ScrSpecial_GetContestWinnerNick(void)
-{
- u8 i;
-
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
- ;
-
- Contest_CopyAndConvertNicknameI_Intl(gStringVar1, i);
-}
-
-void sub_80C488C(void)
-{
- SetMainCallback2(CB2_StartContest);
-}
-
-void sub_80C489C(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- DestroyTask(taskId);
- SetMainCallback2(sub_80C488C);
- }
-}
-
-void sub_80C48C8(void)
-{
- ScriptContext2_Enable();
- CreateTask(sub_80C489C, 10);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
-}
-
-void sub_80C48F4(void)
-{
- gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species;
-}
-
-void sub_80C4914(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- DestroyTask(taskId);
- SetMainCallback2(sub_80C2358);
- }
-}
-
-void sub_80C4940(void)
-{
- ScriptContext2_Enable();
- CreateTask(sub_80C4914, 10);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
-}
-
-void ScrSpecial_GetContestPlayerMonIdx(void)
-{
- gSpecialVar_0x8004 = gContestPlayerMonIndex;
-}
-
-void sub_80C4980(u8 taskId)
-{
- u8 taskId2;
- ScriptContext2_Enable();
- taskId2 = CreateTask(sub_80C8604, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80C8604, sub_80C49C4);
- gTasks[taskId2].data[9] = taskId;
-}
-
-void sub_80C49C4(u8 taskId)
-{
- Contest_CreatePlayerMon(gContestMonPartyIndex);
- SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80C49F0);
-}
-
-void sub_80C49F0(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80C4A0C);
-}
-
-void sub_80C4A0C(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80C4A28);
-}
-
-void sub_80C4A28(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80C8938, sub_80C4A44);
-}
-
-void sub_80C4A44(u8 taskId)
-{
- u8 i;
- u8 sp0[4];
- u8 sp4[4];
-
- for (i = 0; i < 4; i++)
- sp0[i] = gTasks[taskId].data[i + 1];
-
- for (i = 0; i < 4; i++)
- {
- if (sp0[0] != sp0[i])
- break;
- }
-
- if (i == 4)
- gSpecialVar_0x8004 = 0;
- else
- gSpecialVar_0x8004 = 1;
-
- for (i = 0; i < 4; i++)
- sp4[i] = gTasks[taskId].data[i + 5];
-
- gUnknown_0203869B = sub_80C4B34(sp4);
- InitContestMonConditions(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80C4B0C);
-}
-
-void sub_80C4B0C(u8 taskId)
-{
- sub_80B0F28(0);
- SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80C4B5C);
-}
-
-u8 sub_80C4B34(u8 * a0)
-{
- s32 i;
- u8 result = 0;
-
- for (i = 1; i < 4; i++)
- {
- if (a0[result] < a0[i])
- result = i;
- }
-
- return result;
-}
-
-void sub_80C4B5C(u8 taskId)
-{
- if (gSpecialVar_0x8004 == 1)
- {
- if (IsLinkTaskFinished())
- gTasks[taskId].func = sub_80C4BA4;
- }
- else
- {
- DestroyTask(taskId);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
- }
-}
-
-void sub_80C4BA4(u8 taskId)
-{
- sub_800832C();
- gTasks[taskId].func = sub_80C4BCC;
-}
-
-void sub_80C4BCC(u8 taskId)
-{
- if (!gReceivedRemoteLinkPlayers)
- {
- DestroyTask(taskId);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
- }
-}