Document applause meter code

This commit is contained in:
Phlosioneer 2019-04-03 03:00:06 -04:00
parent 8f13e991d2
commit f82bdb332a
4 changed files with 130 additions and 113 deletions

View File

@ -1,7 +1,10 @@
#ifndef GUARD_CONTEST_H #ifndef GUARD_CONTEST_H
#define GUARD_CONTEST_H #define GUARD_CONTEST_H
#include "palette.h"
#define CONTESTANT_COUNT 4 #define CONTESTANT_COUNT 4
#define APPLAUSE_METER_SIZE 5
#define CONTEST_DEBUG_MODE_OFF 0 #define CONTEST_DEBUG_MODE_OFF 0
// Prints the totalPoints value for each contestant. // Prints the totalPoints value for each contestant.
@ -247,10 +250,10 @@ struct ContestPokemon
struct Shared1A004 struct Shared1A004
{ {
/*0x18004*/ u16 unk18004[16][16]; u16 unk18004[16][16]; // Saved palette data before a move happens?
/*0x18204*/ u16 unk18204[0x200]; u16 unk18204[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferUnfaded
/*0x18604*/ u16 unk18604[0x200]; u16 unk18604[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferFaded
/*0x18A04*/ u8 unk18A04[0x800]; u8 savedJunk[0x800];
}; };
struct ContestStruct_field_18 struct ContestStruct_field_18
@ -274,8 +277,8 @@ struct Contest
u16 unk1920A_2:1; u16 unk1920A_2:1;
u16 unk1920A_3:1; u16 unk1920A_3:1;
u16 unk1920A_4:1; u16 unk1920A_4:1;
u16 unk1920A_5:1; u16 isShowingApplauseMeter:1;
u16 unk1920A_6:1; u16 applauseMeterIsMoving:1;
u16 unk1920A_7:1; u16 unk1920A_7:1;
/*0x7*/ u16 unk1920B_0:1; /*0x7*/ u16 unk1920B_0:1;
u16 unk1920B_1:1; u16 unk1920B_1:1;

View File

@ -4761,8 +4761,8 @@ extern const u32 gContestAudienceGfx[];
extern const u8 gContestApplauseMeterGfx[]; extern const u8 gContestApplauseMeterGfx[];
extern const u8 gContestNextTurnNumbersGfx[]; extern const u8 gContestNextTurnNumbersGfx[];
extern const u8 gContestNextTurnRandomGfx[]; extern const u8 gContestNextTurnRandomGfx[];
extern const u32 gUnknown_08C16FA8[]; extern const u32 gOldContestGfx[];
extern const u32 gUnknown_08C16E90[]; extern const u32 gOldContestPalette[];
extern const u32 gUnknown_08C17170[]; extern const u32 gUnknown_08C17170[];
extern const u32 gUnknown_08C17980[]; extern const u32 gUnknown_08C17980[];
extern const u32 gTiles_8C19450[]; extern const u32 gTiles_8C19450[];

View File

@ -45,6 +45,9 @@
#include "constants/rgb.h" #include "constants/rgb.h"
#include "contest_ai.h" #include "contest_ai.h"
#define CONTESTANT_WINDOW_START 5
#define APPLAUSE_METER_GFX_TAG 0xABE2
// This file's functions. // This file's functions.
static void sub_80D782C(void); static void sub_80D782C(void);
static void sub_80D7C7C(u8 taskId); static void sub_80D7C7C(u8 taskId);
@ -117,8 +120,8 @@ static void sub_80DC7EC(void);
static void ContestDebugDoPrint(void); static void ContestDebugDoPrint(void);
static void sub_80DD04C(void); static void sub_80DD04C(void);
static void ApplyNextTurnOrder(void); static void ApplyNextTurnOrder(void);
static void sub_80DDB0C(void); static void StartMoveApplauseMeterOnscreen(void);
static void sub_80DDBE8(void); static void TryMoveApplauseMeterOffscreen(void);
static void sub_80DE224(void); static void sub_80DE224(void);
static void sub_80DE350(void); static void sub_80DE350(void);
static void sub_80DE424(u8); static void sub_80DE424(u8);
@ -127,7 +130,7 @@ static void sub_80DEA20(void);
static void Contest_StartTextPrinter(const u8 *, u32); static void Contest_StartTextPrinter(const u8 *, u32);
static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16); static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16);
static bool32 Contest_RunTextPrinters(void); static bool32 Contest_RunTextPrinters(void);
static void Contest_SetBgCopyFlags(u32); static void Contest_SetBgCopyFlags(u32 flagIndex);
static void sub_80DBD18(void); static void sub_80DBD18(void);
static void sub_80DD080(u8); static void sub_80DD080(u8);
static void sub_80DE9DC(u8); static void sub_80DE9DC(u8);
@ -148,9 +151,9 @@ static bool8 sub_80DB798(u8);
static void sub_80DB884(void); static void sub_80DB884(void);
static void sub_80DC9B4(u8); static void sub_80DC9B4(u8);
static void sub_80DDED0(s8, s8); static void sub_80DDED0(s8, s8);
static void sub_80DDCDC(s8); static void ShowAndUpdateApplauseMeter(s8 unused);
static void sub_80DDE0C(void); static void sub_80DDE0C(void);
static void sub_80DD940(void); static void UpdateApplauseMeter(void);
static void sub_80DB944(void); static void sub_80DB944(void);
static void sub_80DBA18(void); static void sub_80DBA18(void);
static void sub_80DC3AC(void); static void sub_80DC3AC(void);
@ -169,11 +172,11 @@ static void sub_80DC81C(u8);
static void sub_80DC87C(u8); static void sub_80DC87C(u8);
static void sub_80DCC84(struct Sprite *); static void sub_80DCC84(struct Sprite *);
static void sub_80DCCD8(struct Sprite *sprite); static void sub_80DCCD8(struct Sprite *sprite);
static u8 sub_80DDA20(void); static u8 StartApplauseOverflowAnimation(void);
static void c3_08130B10(u8); static void Task_ApplauseOverflowAnimation(u8);
static void sub_80DDB6C(u8); static void Task_MoveApplauseMeterOnscreen(u8);
static void task08_080CD1CC(u8); static void Task_MoveApplauseMeterOffscreen(u8);
static void sub_80DDD20(u8); static void Task_ShowAndUpdateApplauseMeter(u8);
static void sub_80DDE30(u8); static void sub_80DDE30(u8);
static void sub_80DDF80(u8); static void sub_80DDF80(u8);
static const u8 *GetTurnOrderNumberGfx(u8); static const u8 *GetTurnOrderNumberGfx(u8);
@ -470,20 +473,20 @@ const struct SpriteTemplate gSpriteTemplate_8587B98 =
.callback = SpriteCallbackDummy .callback = SpriteCallbackDummy
}; };
const struct CompressedSpriteSheet gUnknown_08587BB0 = static const struct CompressedSpriteSheet sApplauseMeterSpriteSheet =
{ {
.data = gContestApplauseGfx, .data = gContestApplauseGfx,
.size = 0x400, .size = 0x400,
.tag = 0xABE2 .tag = APPLAUSE_METER_GFX_TAG
}; };
const struct SpritePalette gUnknown_08587BB8 = static const struct SpritePalette sApplauseMeterPalette =
{ {
.data = gContestPal, .data = gContestPal,
.tag = 0xABE2 .tag = APPLAUSE_METER_GFX_TAG
}; };
const struct OamData gOamData_8587BC0 = static const struct OamData sApplauseMeterOamData =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = 0,
@ -500,11 +503,11 @@ const struct OamData gOamData_8587BC0 =
.affineParam = 0 .affineParam = 0
}; };
const struct SpriteTemplate gSpriteTemplate_8587BC8 = static const struct SpriteTemplate sApplauseMeterSpriteTemplate =
{ {
.tileTag = 0xABE2, .tileTag = APPLAUSE_METER_GFX_TAG,
.paletteTag = 0xABE2, .paletteTag = APPLAUSE_METER_GFX_TAG,
.oam = &gOamData_8587BC0, .oam = &sApplauseMeterOamData,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
@ -661,7 +664,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF, .paletteNum = 0xF,
.baseBlock = 0x260 .baseBlock = 0x260
}, },
{ [CONTESTANT_WINDOW_START] = {
.bg = 0, .bg = 0,
.tilemapLeft = 1, .tilemapLeft = 1,
.tilemapTop = 0x1F, .tilemapTop = 0x1F,
@ -893,15 +896,15 @@ void LoadContestBgAfterMoveAnim(void)
LZDecompressVram(gContestMiscGfx, (void *)VRAM); LZDecompressVram(gContestMiscGfx, (void *)VRAM);
LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4)));
CopyToBgTilemapBuffer(3, gUnknown_08C16FA8, 0, 0); CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0);
CopyBgTilemapBufferToVram(3); CopyBgTilemapBufferToVram(3);
LoadCompressedPalette(gUnknown_08C16E90, 0, 0x200); LoadCompressedPalette(gOldContestPalette, 0, 0x200);
sub_80D782C(); sub_80D782C();
for (i = 0; i < MAX_MON_MOVES; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
u32 var = 5 + i; u32 contestantWindowId = CONTESTANT_WINDOW_START + i;
LoadPalette(eUnknownHeap1A004.unk18004[var], 16 * (5 + gContestantTurnOrder[i]), 16 * sizeof(u16)); LoadPalette(eUnknownHeap1A004.unk18004[contestantWindowId], 16 * (CONTESTANT_WINDOW_START + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.unk18004[contestantWindowId])));
} }
} }
@ -1177,21 +1180,22 @@ static u8 sub_80D7E44(u8 *a)
DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnknownHeap18000, 0x2000, 0x1000); DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnknownHeap18000, 0x2000, 0x1000);
break; break;
case 3: case 3:
CopyToBgTilemapBuffer(3, gUnknown_08C16FA8, 0, 0); CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0);
CopyBgTilemapBufferToVram(3); CopyBgTilemapBufferToVram(3);
break; break;
case 4: case 4:
CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0); CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0);
CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(2);
DmaCopy32Defvars(3, gContestResources->ContestantInfoTilemaps[2], eUnknownHeap1A004.unk18A04, 0x800); // This is a bug, and copies random junk. savedJunk is never read.
DmaCopy32Defvars(3, gContestResources->ContestantInfoTilemaps[2], eUnknownHeap1A004.savedJunk, 0x800);
break; break;
case 5: case 5:
LoadCompressedPalette(gUnknown_08C16E90, 0, 0x200); LoadCompressedPalette(gOldContestPalette, 0, 0x200);
CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16)); CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16));
CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16)); CpuCopy32(gPlttBufferUnfaded + (CONTESTANT_WINDOW_START + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16));
CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); CpuCopy32(sp0, gPlttBufferUnfaded + (CONTESTANT_WINDOW_START + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18004, 0x200); DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18004, sizeof(eUnknownHeap1A004.unk18004));
sub_80D782C(); sub_80D782C();
break; break;
case 6: case 6:
@ -1270,13 +1274,13 @@ static void sub_80D8108(u8 taskId)
((struct BgCnt *)&bg2Cnt)->priority = 0; ((struct BgCnt *)&bg2Cnt)->priority = 0;
SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt); SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt); SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
sub_80DDB0C(); StartMoveApplauseMeterOnscreen();
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
break; break;
} }
case 4: case 4:
default: default:
if (eContest.unk1920A_6) if (eContest.applauseMeterIsMoving)
break; break;
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0; gTasks[taskId].data[1] = 0;
@ -1329,7 +1333,7 @@ static void sub_80D833C(u8 taskId)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0; gBattle_BG2_Y = 0;
ContestDebugDoPrint(); ContestDebugDoPrint();
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, 0x400); DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2);
ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_0827D507); StringCopy(gDisplayedStringBattle, gText_0827D507);
@ -1396,8 +1400,8 @@ static void sub_80D8490(u8 taskId)
} }
r5 = StringCopy(r5, gMoveNames[move]); r5 = StringCopy(r5, gMoveNames[move]);
FillWindowPixelBuffer(i + 5, PIXEL_FILL(0)); FillWindowPixelBuffer(i + CONTESTANT_WINDOW_START, PIXEL_FILL(0));
Contest_PrintTextToBg0WindowAt(i + 5, sp8, 5, 1, 7); Contest_PrintTextToBg0WindowAt(i + CONTESTANT_WINDOW_START, sp8, 5, 1, 7);
} }
sub_80D880C(eContest.playerMoveChoice); sub_80D880C(eContest.playerMoveChoice);
@ -1484,10 +1488,10 @@ static void sub_80D8894(u8 taskId)
{ {
if (gIsLinkContest & 1) if (gIsLinkContest & 1)
{ {
u16 var = GetChosenMove(gContestPlayerMonIndex); u16 move = GetChosenMove(gContestPlayerMonIndex);
u8 taskId2; u8 taskId2;
eContestantStatus[gContestPlayerMonIndex].currMove = var; eContestantStatus[gContestPlayerMonIndex].currMove = move;
taskId2 = CreateTask(sub_80FC9F8, 0); taskId2 = CreateTask(sub_80FC9F8, 0);
SetTaskFuncWithFollowupFunc(taskId2, sub_80FC9F8, sub_80D892C); SetTaskFuncWithFollowupFunc(taskId2, sub_80FC9F8, sub_80D892C);
gTasks[taskId].func = TaskDummy1; gTasks[taskId].func = TaskDummy1;
@ -1516,16 +1520,16 @@ static void sub_80D895C(u8 taskId)
gBattle_BG2_Y = 0; gBattle_BG2_Y = 0;
sub_80DC490(FALSE); sub_80DC490(FALSE);
for (i = 0; i < 4; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
FillWindowPixelBuffer(5 + i, PIXEL_FILL(0)); FillWindowPixelBuffer(CONTESTANT_WINDOW_START + i, PIXEL_FILL(0));
PutWindowTilemap(5 + i); PutWindowTilemap(CONTESTANT_WINDOW_START + i);
CopyWindowToVram(5 + i, 2); CopyWindowToVram(CONTESTANT_WINDOW_START + i, 2);
} }
Contest_SetBgCopyFlags(0); Contest_SetBgCopyFlags(0);
// This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE.
DmaCopy32Defvars(3, gPlttBufferFaded, eUnknownHeap1A004.unk18604, 0x400); DmaCopy32Defvars(3, gPlttBufferFaded, eUnknownHeap1A004.unk18604, PLTT_BUFFER_SIZE * 2);
LoadPalette(eUnknownHeap1A004.unk18204, 0, 0x400); LoadPalette(eUnknownHeap1A004.unk18204, 0, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0; gTasks[taskId].data[1] = 0;
gTasks[taskId].func = sub_80D8A04; gTasks[taskId].func = sub_80D8A04;
@ -1538,7 +1542,7 @@ static void sub_80D8A04(u8 taskId)
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
if (++gTasks[taskId].data[1] == 2) if (++gTasks[taskId].data[1] == 2)
{ {
sub_80DDBE8(); TryMoveApplauseMeterOffscreen();
sub_80DE69C(1); sub_80DE69C(1);
gTasks[taskId].func = sub_80D8A50; gTasks[taskId].func = sub_80D8A50;
} }
@ -1547,7 +1551,7 @@ static void sub_80D8A04(u8 taskId)
static void sub_80D8A50(u8 taskId) static void sub_80D8A50(u8 taskId)
{ {
if (!eContest.unk1920A_6 && !eContest.unk1920B_1) if (!eContest.applauseMeterIsMoving && !eContest.unk1920B_1)
gTasks[taskId].func = sub_80D8A88; gTasks[taskId].func = sub_80D8A88;
} }
@ -2088,12 +2092,12 @@ static void sub_80D8B38(u8 taskId)
case 1: case 1:
if (!eContest.unk1920B_0 && !Contest_RunTextPrinters()) if (!eContest.unk1920B_0 && !Contest_RunTextPrinters())
{ {
sub_80DDCDC(-1); ShowAndUpdateApplauseMeter(-1);
gTasks[taskId].data[10]++; gTasks[taskId].data[10]++;
} }
break; break;
case 2: case 2:
if (!eContest.unk1920A_5) if (!eContest.isShowingApplauseMeter)
{ {
if (gTasks[taskId].data[11]++ > 29) if (gTasks[taskId].data[11]++ > 29)
{ {
@ -2128,12 +2132,12 @@ static void sub_80D8B38(u8 taskId)
{ {
sub_80DDE0C(); sub_80DDE0C();
PlaySE(SE_W227B); PlaySE(SE_W227B);
sub_80DDCDC(1); ShowAndUpdateApplauseMeter(1);
gTasks[taskId].data[10]++; gTasks[taskId].data[10]++;
} }
break; break;
case 2: case 2:
if (!eContest.unk1920A_5) if (!eContest.isShowingApplauseMeter)
{ {
if (gTasks[taskId].data[11]++ > 29) if (gTasks[taskId].data[11]++ > 29)
{ {
@ -2211,16 +2215,16 @@ static void sub_80D8B38(u8 taskId)
gTasks[taskId].data[0] = 55; gTasks[taskId].data[0] = 55;
return; return;
case 55: case 55:
sub_80DDBE8(); TryMoveApplauseMeterOffscreen();
gTasks[taskId].data[0] = 56; gTasks[taskId].data[0] = 56;
return; return;
case 56: case 56:
if (!eContest.unk1920A_6) if (!eContest.applauseMeterIsMoving)
{ {
if (eContest.applauseLevel > 4) if (eContest.applauseLevel > 4)
{ {
eContest.applauseLevel = 0; eContest.applauseLevel = 0;
sub_80DD940(); UpdateApplauseMeter();
} }
gTasks[taskId].data[0] = 10; gTasks[taskId].data[0] = 10;
} }
@ -2394,7 +2398,7 @@ static void sub_80DA31C(u8 taskId)
static void sub_80DA348(u8 taskId) static void sub_80DA348(u8 taskId)
{ {
DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, 0x400); DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 2; gTasks[taskId].data[1] = 2;
gTasks[taskId].func = sub_80DA38C; gTasks[taskId].func = sub_80DA38C;
@ -2479,14 +2483,14 @@ static void sub_80DA51C(u8 taskId)
} }
else else
{ {
sub_80DDB0C(); StartMoveApplauseMeterOnscreen();
gTasks[taskId].func = sub_80DA5B4; gTasks[taskId].func = sub_80DA5B4;
} }
} }
static void sub_80DA5B4(u8 taskId) static void sub_80DA5B4(u8 taskId)
{ {
if (!eContest.unk1920A_6) if (!eContest.applauseMeterIsMoving)
gTasks[taskId].func = sub_80D833C; gTasks[taskId].func = sub_80D833C;
} }
@ -3225,7 +3229,7 @@ static void sub_80DB918(void)
{ {
s32 i; s32 i;
for (i = 0; i < 4; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
eContestantStatus[i].currMove = GetChosenMove(i); eContestantStatus[i].currMove = GetChosenMove(i);
} }
@ -3718,7 +3722,7 @@ static void sub_80DC490(bool8 a)
{ {
s32 i; s32 i;
for (i = 0; i < 4; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
if (gContestantTurnOrder[i] > 1) if (gContestantTurnOrder[i] > 1)
{ {
@ -3751,9 +3755,9 @@ static void CreateApplauseMeterSprite(void)
{ {
u8 spriteId; u8 spriteId;
LoadCompressedSpriteSheet(&gUnknown_08587BB0); LoadCompressedSpriteSheet(&sApplauseMeterSpriteSheet);
LoadSpritePalette(&gUnknown_08587BB8); LoadSpritePalette(&sApplauseMeterPalette);
spriteId = CreateSprite(&gSpriteTemplate_8587BC8, 30, 44, 1); spriteId = CreateSprite(&sApplauseMeterSpriteTemplate, 30, 44, 1);
gSprites[spriteId].invisible = TRUE; gSprites[spriteId].invisible = TRUE;
eContest.applauseMeterSpriteId = spriteId; eContest.applauseMeterSpriteId = spriteId;
} }
@ -3790,7 +3794,7 @@ static void sub_80DC6A4(u8 taskId)
{ {
gTasks[eContest.unk19211].data[r4 * 4 + 0] = 0xFF; gTasks[eContest.unk19211].data[r4 * 4 + 0] = 0xFF;
gTasks[eContest.unk19211].data[r4 * 4 + 1] = 0; gTasks[eContest.unk19211].data[r4 * 4 + 1] = 0;
BlendPalette((eContest.prevTurnOrder[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); BlendPalette((eContest.prevTurnOrder[r4] + CONTESTANT_WINDOW_START) * 16 + 6, 2, 0, RGB(31, 31, 18));
DestroyTask(taskId); DestroyTask(taskId);
} }
} }
@ -3815,7 +3819,7 @@ static void sub_80DC728(u8 taskId)
gTasks[taskId].data[r3 + 1] ^= 1; gTasks[taskId].data[r3 + 1] ^= 1;
BlendPalette( BlendPalette(
(eContest.prevTurnOrder[i] + 5) * 16 + 6, (eContest.prevTurnOrder[i] + CONTESTANT_WINDOW_START) * 16 + 6,
2, 2,
gTasks[taskId].data[r3 + 0], gTasks[taskId].data[r3 + 0],
RGB(31, 31, 18)); RGB(31, 31, 18));
@ -3853,12 +3857,12 @@ static void sub_80DC87C(u8 a)
sub_80DC81C(a); sub_80DC81C(a);
r0 = a + 5; r0 = a + CONTESTANT_WINDOW_START;
DmaCopy16Defvars(3, DmaCopy16Defvars(3,
gPlttBufferUnfaded + r0 * 16 + 10, gPlttBufferUnfaded + r0 * 16 + 10,
gPlttBufferFaded + r0 * 16 + 10, gPlttBufferFaded + r0 * 16 + 10,
2); 2);
var = (a + 5) * 16 + 12 + a; var = (a + CONTESTANT_WINDOW_START) * 16 + 12 + a;
DmaCopy16Defvars(3, DmaCopy16Defvars(3,
gPlttBufferUnfaded + var, gPlttBufferUnfaded + var,
gPlttBufferFaded + var, gPlttBufferFaded + var,
@ -3888,8 +3892,8 @@ static void sub_80DC8D0(u8 taskId)
|| gTasks[taskId].data[r3 + 0] == 0) || gTasks[taskId].data[r3 + 0] == 0)
gTasks[taskId].data[r3 + 1] ^= 1; gTasks[taskId].data[r3 + 1] ^= 1;
BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); BlendPalette((i + CONTESTANT_WINDOW_START) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); BlendPalette((i + CONTESTANT_WINDOW_START) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
} }
} }
} }
@ -4200,7 +4204,7 @@ static void sub_80DD04C(void)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
LoadPalette(&gHeap[0x1A004] + (i + 5) * 32, (gContestantTurnOrder[i] + 5) * 16, 32); LoadPalette(&gHeap[0x1A004] + (i + CONTESTANT_WINDOW_START) * 32, (gContestantTurnOrder[i] + CONTESTANT_WINDOW_START) * 16, 32);
} }
sub_80DAEA4(); sub_80DAEA4();
} }
@ -4507,23 +4511,23 @@ static void sub_80DD720(u8 a)
eContest.unk1920A_4 = 1; eContest.unk1920A_4 = 1;
} }
static void sub_80DD940(void) static void UpdateApplauseMeter(void)
{ {
s32 i; s32 i;
for (i = 0; i < 5; i++) for (i = 0; i < APPLAUSE_METER_SIZE; i++)
{ {
const u8 *src; const u8 *src;
if (i < eContest.applauseLevel) if (i < eContest.applauseLevel)
src = gContestApplauseMeterGfx + 64; src = &gContestApplauseMeterGfx[64];
else else
src = gContestApplauseMeterGfx; src = gContestApplauseMeterGfx;
CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32);
CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32);
if (eContest.applauseLevel > 4) if (eContest.applauseLevel > 4)
sub_80DDA20(); StartApplauseOverflowAnimation();
} }
} }
@ -4532,46 +4536,54 @@ s8 Contest_GetMoveExcitement(u16 move)
return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
} }
static u8 sub_80DDA20(void) static u8 StartApplauseOverflowAnimation(void)
{ {
u8 taskId = CreateTask(c3_08130B10, 10); u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10);
gTasks[taskId].data[1] = 1; gTasks[taskId].data[1] = 1;
gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2); gTasks[taskId].data[2] = IndexOfSpritePaletteTag(APPLAUSE_METER_GFX_TAG);
return taskId; return taskId;
} }
static void c3_08130B10(u8 taskId) static void Task_ApplauseOverflowAnimation(u8 taskId)
{ {
// Skip every other frame.
if (++gTasks[taskId].data[0] == 1) if (++gTasks[taskId].data[0] == 1)
{ {
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
// Alternate between normal colors and white.
if (gTasks[taskId].data[3] == 0) if (gTasks[taskId].data[3] == 0)
gTasks[taskId].data[4]++; gTasks[taskId].data[4]++;
else else
gTasks[taskId].data[4]--; gTasks[taskId].data[4]--;
BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31));
BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB_WHITE);
// At the maximum or minimum blending, switch directions.
if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16) if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16)
{ {
gTasks[taskId].data[3] ^= 1; gTasks[taskId].data[3] ^= 1;
// Continue the animation until the applause meter is cleared.
if (eContest.applauseLevel < 5) if (eContest.applauseLevel < 5)
{ {
BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0)); BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB_RED);
DestroyTask(taskId); DestroyTask(taskId);
} }
} }
} }
} }
static void sub_80DDB0C(void) static void StartMoveApplauseMeterOnscreen(void)
{ {
CreateTask(sub_80DDB6C, 10); CreateTask(Task_MoveApplauseMeterOnscreen, 10);
gSprites[eContest.applauseMeterSpriteId].pos2.x = -70; gSprites[eContest.applauseMeterSpriteId].pos2.x = -70;
gSprites[eContest.applauseMeterSpriteId].invisible = FALSE; gSprites[eContest.applauseMeterSpriteId].invisible = FALSE;
eContest.unk1920A_6 = 1; eContest.applauseMeterIsMoving = TRUE;
} }
static void sub_80DDB6C(u8 taskId) static void Task_MoveApplauseMeterOnscreen(u8 taskId)
{ {
struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId]; struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId];
@ -4582,26 +4594,26 @@ static void sub_80DDB6C(u8 taskId)
sprite->pos2.x = 0; sprite->pos2.x = 0;
if (sprite->pos2.x == 0) if (sprite->pos2.x == 0)
{ {
eContest.unk1920A_6 = 0; eContest.applauseMeterIsMoving = FALSE;
DestroyTask(taskId); DestroyTask(taskId);
} }
} }
static void sub_80DDBE8(void) static void TryMoveApplauseMeterOffscreen(void)
{ {
if (gSprites[eContest.applauseMeterSpriteId].invisible == TRUE) if (gSprites[eContest.applauseMeterSpriteId].invisible == TRUE)
{ {
eContest.unk1920A_6 = 0; eContest.applauseMeterIsMoving = FALSE;
} }
else else
{ {
CreateTask(task08_080CD1CC, 10); CreateTask(Task_MoveApplauseMeterOffscreen, 10);
gSprites[eContest.applauseMeterSpriteId].pos2.x = 0; gSprites[eContest.applauseMeterSpriteId].pos2.x = 0;
eContest.unk1920A_6 = 1; eContest.applauseMeterIsMoving = TRUE;
} }
} }
static void task08_080CD1CC(u8 taskId) static void Task_MoveApplauseMeterOffscreen(u8 taskId)
{ {
struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId]; struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId];
@ -4613,29 +4625,29 @@ static void task08_080CD1CC(u8 taskId)
if (sprite->pos2.x == -70) if (sprite->pos2.x == -70)
{ {
sprite->invisible = TRUE; sprite->invisible = TRUE;
eContest.unk1920A_6 = 0; eContest.applauseMeterIsMoving = FALSE;
DestroyTask(taskId); DestroyTask(taskId);
} }
} }
static void sub_80DDCDC(s8 a) static void ShowAndUpdateApplauseMeter(s8 unused)
{ {
u8 taskId = CreateTask(sub_80DDD20, 5); u8 taskId = CreateTask(Task_ShowAndUpdateApplauseMeter, 5);
gTasks[taskId].data[0] = a; gTasks[taskId].data[0] = unused;
eContest.unk1920A_5 = 1; eContest.isShowingApplauseMeter = TRUE;
} }
static void sub_80DDD20(u8 taskId) static void Task_ShowAndUpdateApplauseMeter(u8 taskId)
{ {
switch (gTasks[taskId].data[10]) switch (gTasks[taskId].data[10])
{ {
case 0: case 0:
sub_80DDB0C(); StartMoveApplauseMeterOnscreen();
gTasks[taskId].data[10]++; gTasks[taskId].data[10]++;
break; break;
case 1: case 1:
if (!eContest.unk1920A_6) if (!eContest.applauseMeterIsMoving)
{ {
gTasks[taskId].data[10]++; gTasks[taskId].data[10]++;
} }
@ -4644,21 +4656,23 @@ static void sub_80DDD20(u8 taskId)
if (gTasks[taskId].data[11]++ > 20) if (gTasks[taskId].data[11]++ > 20)
{ {
gTasks[taskId].data[11] = 0; gTasks[taskId].data[11] = 0;
sub_80DD940(); UpdateApplauseMeter();
eContest.unk1920A_5 = 0; eContest.isShowingApplauseMeter = FALSE;
DestroyTask(taskId); DestroyTask(taskId);
} }
break; break;
} }
} }
void unref_sub_80DDDA8(void) // Unused.
void HideApplauseMeterNoAnim(void)
{ {
gSprites[eContest.applauseMeterSpriteId].pos2.x = 0; gSprites[eContest.applauseMeterSpriteId].pos2.x = 0;
gSprites[eContest.applauseMeterSpriteId].invisible = FALSE; gSprites[eContest.applauseMeterSpriteId].invisible = FALSE;
} }
void unref_sub_80DDDE4(void) // Unused.
void ShowApplauseMeterNoAnim(void)
{ {
gSprites[eContest.applauseMeterSpriteId].invisible = TRUE; gSprites[eContest.applauseMeterSpriteId].invisible = TRUE;
} }
@ -5256,9 +5270,9 @@ static bool32 Contest_RunTextPrinters(void)
return IsTextPrinterActive(4); return IsTextPrinterActive(4);
} }
static void Contest_SetBgCopyFlags(u32 var) static void Contest_SetBgCopyFlags(u32 flagIndex)
{ {
sContestBgCopyFlags |= 1 << var; sContestBgCopyFlags |= 1 << flagIndex;
} }
void ResetContestLinkResults(void) void ResetContestLinkResults(void)

View File

@ -446,8 +446,8 @@ const u32 gUnusedTilemap_OldContest[] = INCBIN_U32("graphics/unused/old_contest.
const u32 gUnknownTilemap_C15BC0[] = INCBIN_U32("graphics/unknown/unknown_C15BC0.bin.lz"); const u32 gUnknownTilemap_C15BC0[] = INCBIN_U32("graphics/unknown/unknown_C15BC0.bin.lz");
const u32 gUnusedGfx_OldContest2[] = INCBIN_U32("graphics/unused/old_contest_2.4bpp.lz"); const u32 gUnusedGfx_OldContest2[] = INCBIN_U32("graphics/unused/old_contest_2.4bpp.lz");
const u32 gUnknown_08C16E90[] = INCBIN_U32("graphics/unused/old_contest_2.gbapal.lz"); const u32 gOldContestPalette[] = INCBIN_U32("graphics/unused/old_contest_2.gbapal.lz");
const u32 gUnknown_08C16FA8[] = INCBIN_U32("graphics/unused/old_contest_2.bin.lz"); const u32 gOldContestGfx[] = INCBIN_U32("graphics/unused/old_contest_2.bin.lz");
const u32 gUnknown_08C17170[] = INCBIN_U32("graphics/unknown/unknown_C17170.bin.lz"); const u32 gUnknown_08C17170[] = INCBIN_U32("graphics/unknown/unknown_C17170.bin.lz");