diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/sfx.c | 6 | ||||
-rw-r--r-- | src/battle_anim_effects_3.c | 13 | ||||
-rw-r--r-- | src/battle_gfx_sfx_util.c | 8 | ||||
-rw-r--r-- | src/contest.c | 136 | ||||
-rw-r--r-- | src/contest_2.c | 466 | ||||
-rw-r--r-- | src/contest_ai.c | 4 | ||||
-rw-r--r-- | src/contest_link.c | 2 | ||||
-rw-r--r-- | src/debug/start_menu_debug.c | 4 | ||||
-rw-r--r-- | src/debug/watanabe_debug_menu.c | 20 | ||||
-rw-r--r-- | src/pokemon_2.c | 6 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 42 |
11 files changed, 373 insertions, 334 deletions
diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 9bc88e258..a22e96428 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -137,7 +137,7 @@ static void sub_812B108(u8 taskId) } } -// #define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) +// #define gContestResources__moveAnim (*(struct ContestMoveAnim *)(gSharedMem + 0x19348)) // #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) // used in 3 moves: @@ -150,7 +150,7 @@ void sub_812B18C(u8 taskId) if (IsContest()) { if (!gBattleAnimArgs[0]) - species = shared19348.unk0; + species = gContestResources__moveAnim.species; else DestroyAnimVisualTask(taskId); } @@ -200,7 +200,7 @@ void sub_812B2B8(u8 taskId) s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER_NEG); if (IsContest()) - species = shared19348.unk0; + species = gContestResources__moveAnim.species; else species = gAnimSpeciesByBanks[gBattleAnimAttacker]; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 51cc90ee6..3df51d5df 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -32,8 +32,8 @@ extern u16 gBattle_BG2_Y; extern u16 gWeatherMoveAnim; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220; -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[]; -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; +extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[]; +extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[]; extern const u32 gUnknown_08D2AA98[]; extern const u32 gUnknown_08D2A9E0[]; extern const u16 gUnknown_08D2AA80[]; @@ -2327,9 +2327,11 @@ void sub_812D7E8(u8 taskId) ptr = EWRAM_19348; if (IsSpeciesNotUnown(ptr[1])) - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = + gAffineAnims_BattleSpriteContest; else - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7BEC; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = + gAffineAnims_BattleSpriteOpponentSide; StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); } @@ -4667,7 +4669,8 @@ void sub_81312E4(u8 taskId) refresh_graphics_maybe(gBattleAnimAttacker, 0, spriteId); if (IsContest()) { - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = + gAffineAnims_BattleSpriteContest; StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d6822ac6a..ea8e61409 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -654,9 +654,9 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) if (IsContest()) { r10 = 0; - species = shared19348.unk2; - personalityValue = shared19348.unk8; - otId = shared19348.unkC; + species = gContestResources__moveAnim.unk2; + personalityValue = gContestResources__moveAnim.personality; + otId = gContestResources__moveAnim.otId; HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -664,7 +664,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) eVoidSharedArr2, gMonSpriteGfx_Sprite_ptr[0], species, - shared19348.unk10); + gContestResources__moveAnim.unk10); } else { diff --git a/src/contest.c b/src/contest.c index 10a152f58..4f8c25063 100644 --- a/src/contest.c +++ b/src/contest.c @@ -40,7 +40,7 @@ extern u8 gUnknown_020297ED; extern void sub_80C8A38(u8); extern void sub_80C8AD0(u8); -extern void sub_80C8C80(u8); +extern void Task_LinkContest_CommunicateAppealsState(u8); extern u8 gBattleMonForms[]; extern u8 gDisplayedStringBattle[]; @@ -195,7 +195,7 @@ void ClearContestVars(void) for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = 0xFF; - sContest.unk19218[i] = gContestantTurnOrder[i]; + sContest.prevTurnOrder[i] = gContestantTurnOrder[i]; } ApplyNextTurnOrder(); } @@ -233,7 +233,7 @@ void CB2_StartContest(void) gMain.state++; break; case 3: - sub_80B2184(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; BeginFastPaletteFade(2); @@ -328,10 +328,10 @@ u8 sub_80AB70C(u8 *a) break; case 6: DrawContestantWindows(); - sub_80AFA5C(); + FillContestantWindowBgs(); SwapMoveDescAndContestTilemaps(); sContest.unk19216 = CreateJudgeSpeechBubbleSprite(); - sub_80AFE30(); + CreateSliderHeartSprites(); sub_80B0034(); CreateApplauseMeterSprite(); sub_80B0324(); @@ -344,7 +344,7 @@ u8 sub_80AB70C(u8 *a) gBattlerAttacker = 2; gBattlerTarget = 3; gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite(); - sub_80B292C(); + CreateInvisibleBattleTargetSprite(); break; default: *a = 0; @@ -383,7 +383,7 @@ void sub_80AB9A0(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - sub_80B2280(); + UpdateContestantBoxOrder(); gTasks[taskId].data[0]++; break; case 3: @@ -712,7 +712,7 @@ void debug_sub_80BA054(u8 taskId) case 0: for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; - memset(&shared19348, 0, sizeof(shared19348)); + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); sub_80B28F0(gContestPlayerMonIndex); r6 = CreateContestantSprite( gContestMons[gContestPlayerMonIndex].species, @@ -724,7 +724,7 @@ void debug_sub_80BA054(u8 taskId) gBattlerSpriteIds[gBattlerAttacker] = r6; gTasks[taskId].data[3] = 0; gTasks[taskId].data[0]++; - sContest.unk1925E = 0; + sContest.moveAnimTurnCount = 0; break; case 1: r6 = gTasks[taskId].data[2]; @@ -744,7 +744,7 @@ void debug_sub_80BA054(u8 taskId) if (!gAnimScriptActive) { sub_80B28CC(gContestPlayerMonIndex); - if (sContest.unk1925E != 0) + if (sContest.moveAnimTurnCount != 0) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 20; @@ -815,7 +815,7 @@ void sub_80AC0C8(u8 taskId) } else { - sub_80AF1B8(); + GetAllChosenMoves(); gTasks[taskId].func = sub_80AC188; } } @@ -847,7 +847,7 @@ void sub_80AC204(u8 taskId) if (++gTasks[taskId].data[1] == 2) { SlideApplauseMeterOut(); - sub_80B25E4(1); + AnimateSliderHearts(1); gTasks[taskId].func = sub_80AC250; } } @@ -855,7 +855,7 @@ void sub_80AC204(u8 taskId) void sub_80AC250(u8 taskId) { - if (!sContest.applauseMeterIsMoving && !sContest.unk1920B_1) + if (!sContest.applauseMeterIsMoving && !sContest.sliderHeartsAnimating) gTasks[taskId].func = sub_80AC284; } @@ -889,11 +889,12 @@ void sub_80AC2CC(u8 taskId) { u8 taskId2; - sContest.unk1920B_2 = 1; + sContest.waitForLink = 1; if (IsPlayerLinkLeader()) CalculateAppealMoveImpact(sContest.unk19215); - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } @@ -904,7 +905,7 @@ void sub_80AC2CC(u8 taskId) } return; case 1: - if (!sContest.unk1920B_2) + if (!sContest.waitForLink) gTasks[taskId].data[0] = 2; return; case 2: @@ -916,7 +917,7 @@ void sub_80AC2CC(u8 taskId) else { ContestClearGeneralTextWindow(); - sub_80B0CDC(r7, 0); + Unused_EndBlinkingState(r7, 0); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 3; } @@ -924,8 +925,8 @@ void sub_80AC2CC(u8 taskId) case 3: for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; - memset(&shared19348, 0, sizeof(shared19348)); - sub_80B28F0(sContest.unk19215); + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + SetMoveAnimAttackerData(sContest.unk19215); spriteId = CreateContestantSprite( gContestMons[sContest.unk19215].species, gContestMons[sContest.unk19215].otId, @@ -966,7 +967,7 @@ void sub_80AC2CC(u8 taskId) case 6: if (Text_UpdateWindowInContest(&gMenuWindow) != 0) { - sContest.unk1925E = 0; + sContest.moveAnimTurnCount = 0; gTasks[taskId].data[0] = 7; } return; @@ -974,8 +975,8 @@ void sub_80AC2CC(u8 taskId) { u16 move = SanitizeMove(sContestantStatus[sContest.unk19215].currMove); - sub_80B2790(sContest.unk19215); - sub_80B28F0(sContest.unk19215); + SetMoveSpecificAnimData(sContest.unk19215); + SetMoveAnimAttackerData(sContest.unk19215); SelectContestMoveBankTarget(move); DoMoveAnim(move); gTasks[taskId].data[0] = 8; @@ -985,8 +986,8 @@ void sub_80AC2CC(u8 taskId) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_80B28CC(r7); - if (sContest.unk1925E != 0) + ClearMoveAnimData(r7); + if (sContest.moveAnimTurnCount != 0) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 9; @@ -995,7 +996,7 @@ void sub_80AC2CC(u8 taskId) { if (!sContestantStatus[r7].hasJudgesAttention) sub_80B03A8(r7); - sub_80B20C4(); + DrawUnnervedSymbols(); gTasks[taskId].data[0] = 23; } } @@ -1070,15 +1071,15 @@ void sub_80AC2CC(u8 taskId) gTasks[taskId].data[0] = 47; return; case 47: - sub_80B1FD0(TRUE); + ShowHideNextTurnGfx(TRUE); gTasks[taskId].data[0] = 12; return; case 12: - sub_80AFBA0(0, sContestantStatus[r7].appeal, r7); + UpdateAppealHearts(0, sContestantStatus[r7].appeal, r7); gTasks[taskId].data[0] = 13; return; case 13: - if (!eContestGfxState[sContest.unk19215].unk2_2) + if (!eContestGfxState[sContest.unk19215].updatingAppealHearts) gTasks[taskId].data[0] = 35; return; case 35: @@ -1160,13 +1161,14 @@ void sub_80AC2CC(u8 taskId) case 28: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - sub_80AFBA0(sContestantStatus[i].appeal + sContestantStatus[i].jam, -sContestantStatus[i].jam, i); + UpdateAppealHearts( + sContestantStatus[i].appeal + sContestantStatus[i].jam, -sContestantStatus[i].jam, i); gTasks[taskId].data[0] = 29; return; case 29: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (!eContestGfxState[i].unk2_2) + if (!eContestGfxState[i].updatingAppealHearts) gTasks[taskId].data[0] = 39; return; case 39: @@ -1271,10 +1273,8 @@ void sub_80AC2CC(u8 taskId) { if (!sContestantStatus[r7].hasJudgesAttention) { - sub_80AFBA0( - sContestantStatus[r7].appeal, - sContestantStatus[r7].comboAppealBonus, - r7); + UpdateAppealHearts( + sContestantStatus[r7].appeal, sContestantStatus[r7].comboAppealBonus, r7); sContestantStatus[r7].appeal += sContestantStatus[r7].comboAppealBonus; } gTasks[taskId].data[0] = 16; @@ -1282,7 +1282,7 @@ void sub_80AC2CC(u8 taskId) } return; case 16: - if (!eContestGfxState[r7].unk2_2) + if (!eContestGfxState[r7].updatingAppealHearts) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 17; @@ -1311,14 +1311,14 @@ void sub_80AC2CC(u8 taskId) case 19: if (Text_UpdateWindowInContest(&gMenuWindow) != 0) { - sub_80AFBA0(sContestantStatus[r7].appeal, -sContestantStatus[r7].unk18, r7); + UpdateAppealHearts(sContestantStatus[r7].appeal, -sContestantStatus[r7].unk18, r7); sContestantStatus[r7].appeal -= sContestantStatus[r7].unk18; gTasks[taskId].data[0] = 18; } return; case 18: ContestDebugDoPrint(); - if (!eContestGfxState[r7].unk2_2) + if (!eContestGfxState[r7].updatingAppealHearts) { gTasks[taskId].data[10] = 0; ContestClearGeneralTextWindow(); @@ -1378,12 +1378,12 @@ void sub_80AC2CC(u8 taskId) switch (gTasks[taskId].data[10]) { case 0: - sub_80B1EA8(-1, 1); + BlendAudienceBackground(-1, 1); PlayFanfare(MUS_TOO_BAD); gTasks[taskId].data[10]++; break; case 1: - if (!sContest.unk1920B_0 && Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (!sContest.waitForAudienceBlend && Text_UpdateWindowInContest(&gMenuWindow) != 0) { ShowAndUpdateApplauseMeter(-1); gTasks[taskId].data[10]++; @@ -1395,7 +1395,7 @@ void sub_80AC2CC(u8 taskId) if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80B1EA8(-1, -1); + BlendAudienceBackground(-1, -1); gTasks[taskId].data[10]++; } } @@ -1416,12 +1416,12 @@ void sub_80AC2CC(u8 taskId) case 0: if (Text_UpdateWindowInContest(&gMenuWindow) != 0) { - sub_80B1EA8(1, 1); + BlendAudienceBackground(1, 1); gTasks[taskId].data[10]++; } break; case 1: - if (!sContest.unk1920B_0) + if (!sContest.waitForAudienceBlend) { AnimateAudience(); PlaySE(SE_M_ENCORE2); @@ -1435,18 +1435,19 @@ void sub_80AC2CC(u8 taskId) if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80AFBA0(sContestantStatus[r7].appeal, eContestExcitement.excitementAppealBonus, r7); + UpdateAppealHearts( + sContestantStatus[r7].appeal, eContestExcitement.excitementAppealBonus, r7); sContestantStatus[r7].appeal += eContestExcitement.excitementAppealBonus; gTasks[taskId].data[10]++; } } break; case 3: - if (!eContestGfxState[r7].unk2_2) + if (!eContestGfxState[r7].updatingAppealHearts) { if (!sContest.animatingAudience) { - sub_80B1EA8(1, -1); + BlendAudienceBackground(1, -1); gTasks[taskId].data[10]++; } } @@ -1462,7 +1463,7 @@ void sub_80AC2CC(u8 taskId) } return; case 43: - if (!eContestGfxState[r7].unk2_2) + if (!eContestGfxState[r7].updatingAppealHearts) { ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 55; @@ -1538,7 +1539,7 @@ void sub_80AC2CC(u8 taskId) return; case 20: for (i = 0; i < 4; i++) - sub_80B0CDC(i, 1); + Unused_EndBlinkingState(i, 1); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 21; return; @@ -1577,9 +1578,9 @@ void sub_80AC2CC(u8 taskId) } } -void sub_80AD8DC(u8 taskId) +void Task_EndWaitForLink(u8 taskId) { - sContest.unk1920B_2 = 0; + sContest.waitForLink = 0; DestroyTask(taskId); } @@ -1618,26 +1619,27 @@ void sub_80AD960(u8 taskId) { u8 taskId2; - sContest.unk1920B_2 = 1; + sContest.waitForLink = 1; if (IsPlayerLinkLeader()) { - sub_80AF2FC(); - sub_80AF3C0(); + RankContestants(); + SetAttentionLevels(); } - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } else { - sub_80AF2FC(); - sub_80AF3C0(); + RankContestants(); + SetAttentionLevels(); gTasks[taskId].data[0] = 2; } break; case 1: - if (!sContest.unk1920B_2) + if (!sContest.waitForLink) gTasks[taskId].data[0] = 2; break; case 2: @@ -1649,7 +1651,7 @@ void sub_80AD960(u8 taskId) void sub_80ADA1C(u8 taskId) { - sub_80B1FD0(FALSE); + ShowHideNextTurnGfx(FALSE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].func = sub_80ADA4C; @@ -1662,13 +1664,13 @@ void sub_80ADA4C(u8 taskId) case 0: if (++gTasks[taskId].data[1] > 20) { - sub_80B25E4(2); + AnimateSliderHearts(2); gTasks[taskId].data[1] = 0; gTasks[taskId].data[0]++; } break; case 1: - if (!sContest.unk1920B_1) + if (!sContest.sliderHeartsAnimating) { if (++gTasks[taskId].data[1] > 20) { @@ -1752,13 +1754,13 @@ void sub_80ADC84(u8 taskId) void sub_80ADCB4(u8 taskId) { - sub_80B2184(); - gTasks[taskId].func = sub_80B237C; + SetBgForCurtainDrop(); + gTasks[taskId].func = Task_StartDropCurtainAtRoundEnd; } -void sub_80ADCDC(u8 taskId) +void Task_UpdateContestantBoxOrder(u8 taskId) { - sub_80B2280(); + UpdateContestantBoxOrder(); gTasks[taskId].func = sub_80ADD04; } @@ -1790,7 +1792,7 @@ void sub_80ADDA4(u8 taskId) gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; for (i = 0; i < 4; i++) - gContestMonAppealPointTotals[i] = sContestantStatus[i].unk4; + gContestMonAppealPointTotals[i] = sContestantStatus[i].pointTotal; CalculateFinalScores(); ContestClearGeneralTextWindow(); sub_80BE23C(sContestantStatus[gContestPlayerMonIndex].prevMove); @@ -1805,7 +1807,7 @@ void sub_80ADE54(u8 taskId) { if (Text_UpdateWindowInContest(&gMenuWindow) == 1) { - sub_80B2184(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 160; PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); diff --git a/src/contest_2.c b/src/contest_2.c index e86de000e..08cd4c802 100644 --- a/src/contest_2.c +++ b/src/contest_2.c @@ -29,8 +29,8 @@ #include "contest_internal.h" -extern void sub_80C8C80(u8); -extern void sub_80ADCDC(u8 taskId); +extern void Task_LinkContest_CommunicateAppealsState(u8 taskId); +extern void Task_UpdateContestantBoxOrder(u8 taskId); extern struct MusicPlayerInfo gMPlayInfo_SE1; extern u8 gBattleMonForms[]; @@ -45,10 +45,10 @@ extern const u8 gUnknown_083CA308[][2]; extern const u8 gUnknown_083CA310[][2]; extern const u8 gUnknown_083CA318[][2]; extern const u8 gUnknown_083CA330[][2]; -extern const u8 gUnknown_083CA338[]; +extern const u8 sSliderHeartYPositions[]; extern const u8 gUnknown_083CA33C[]; -extern const struct SpriteSheet gUnknown_083CA350; -extern const struct SpriteTemplate gSpriteTemplate_83CA3AC; +extern const struct SpriteSheet sSpriteSheet_SliderHeart; +extern const struct SpriteTemplate sSpriteTemplate_SliderHeart; extern const struct CompressedSpriteSheet gUnknown_083CA3C4[]; extern const struct SpritePalette gUnknown_083CA3E4; extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[]; @@ -74,7 +74,7 @@ extern const u8 gUnknown_083CC2EC[]; extern const u8 gUnknown_083CC59C[]; extern const u8 gText_Slash[]; extern const u16 gUnknown_083CC5A4[]; -extern const struct ContestWinner gUnknown_083CC5D0[]; +extern const struct ContestWinner gDefaultContestWinners[]; extern const u8 gUnknownText_MissedTurn[]; extern const u8 gUnknownText_LinkStandbyAndWinner[]; extern void (*const gContestEffectFuncs[])(void); @@ -462,7 +462,7 @@ u8 unref_sub_80AE908(void) 30); gSprites[spriteId].oam.paletteNum = 1; gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest; StartSpriteAffineAnim(&gSprites[spriteId], 0); return spriteId; } @@ -484,7 +484,7 @@ u8 CreateContestantSprite(u16 species, u32 otId, u32 personality) lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality); LoadCompressedPalette(lzPaletteData, 0x120, 32); GetMonSpriteTemplate_803C56C(species, 0); - spriteId = CreateSprite(&gUnknown_02024E8C, 112, sub_8077E44(2, species, 0), 30); + spriteId = CreateSprite(&gUnknown_02024E8C, 112, GetBattlerSpriteFinal_Y(2, species, 0), 30); gSprites[spriteId].oam.paletteNum = 2; gSprites[spriteId].oam.priority = 2; gSprites[spriteId].subpriority = GetBattlerSubpriority(2); @@ -492,9 +492,9 @@ u8 CreateContestantSprite(u16 species, u32 otId, u32 personality) gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum; gSprites[spriteId].data[2] = species; if (IsSpeciesNotUnown(species)) - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest; else - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC; + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteOpponentSide; StartSpriteAffineAnim(&gSprites[spriteId], 0); return spriteId; } @@ -507,6 +507,9 @@ bool8 IsSpeciesNotUnown(u16 species) return TRUE; } +// The contestant info windows and general-purpose text box are drawn on one half, while +// the moves and move description windows are drawn on another screen. Only the first 32 * 20 +// tiles are actually drawn on screen. void SwapMoveDescAndContestTilemaps(void) { __copy_tilemap((void *)(VRAM + 0xC000)); @@ -800,7 +803,7 @@ u16 GetChosenMove(u8 a) } } -void sub_80AF1B8(void) +void GetAllChosenMoves(void) { u8 i; @@ -857,7 +860,7 @@ void unref_sub_80AF2E0(void) sub_80AF2A0(i); } -void sub_80AF2FC(void) +void RankContestants(void) { u8 i; u8 j; @@ -865,9 +868,11 @@ void sub_80AF2FC(void) for (i = 0; i < 4; i++) { - sContestantStatus[i].unk4 += sContestantStatus[i].appeal; - arr[i] = sContestantStatus[i].unk4; + sContestantStatus[i].pointTotal += sContestantStatus[i].appeal; + arr[i] = sContestantStatus[i].pointTotal; } + + // Sort the point totals using bubble-sort. for (i = 0; i < 3; i++) { for (j = 3; j > i; j--) @@ -881,11 +886,21 @@ void sub_80AF2FC(void) } } } + + // For each contestant, find the best rank with their point total. + // Normally, each point total is different, and this will output the + // rankings as expected. However, if two pokemon are tied, then they + // both get the best rank for that point total. + // + // For example if the point totals are [100, 80, 80, 50], the ranks will + // be [1, 2, 2, 4]. The pokemon with a point total of 80 stop looking + // when they see the first 80 in the array, so they both share the '2' + // rank. for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { - if (sContestantStatus[i].unk4 == arr[j]) + if (sContestantStatus[i].pointTotal == arr[j]) { sContestantStatus[i].ranking = j; break; @@ -896,7 +911,7 @@ void sub_80AF2FC(void) ApplyNextTurnOrder(); } -void sub_80AF3C0(void) +void SetAttentionLevels(void) { s32 i; @@ -929,7 +944,7 @@ bool8 ContestantCanUseTurn(u8 a) return TRUE; } -void sub_80AF438(void) +void SetContestantStatusesForNextRound(void) { u8 i; @@ -951,7 +966,7 @@ void sub_80AF438(void) sContestantStatus[i].effectStringId = CONTEST_STRING_NONE; sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; sContestantStatus[i].conditionMod = 0; - sContestantStatus[i].unk15_2 = sContestantStatus[i].disappointedRepeat; + sContestantStatus[i].repeatedPrevMove = sContestantStatus[i].disappointedRepeat; sContestantStatus[i].disappointedRepeat = FALSE; sContestantStatus[i].turnOrderModAction = 0; sContestantStatus[i].appealTripleCondition = 0; @@ -1131,11 +1146,11 @@ u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d) s8 r4; u16 r0; - eContestGfxState[d].unk2_2 = 1; + eContestGfxState[d].updatingAppealHearts = 1; taskId = CreateTask(sub_80AF94C, 20); - r5 = sub_80AFB74(a); - r4 = sub_80AFB74(a + b) - r5; - r0 = sub_80AFB40(d); + r5 = GetNumHeartsFromAppealPoints(a); + r4 = GetNumHeartsFromAppealPoints(a + b) - r5; + r0 = GetAppealHeartTileOffset(d); gTasks[taskId].data[0] = r5; gTasks[taskId].data[1] = r4; gTasks[taskId].data[2] = r0 + c; @@ -1153,7 +1168,7 @@ void sub_80AF94C(u8 taskId) { nullsub_19(r5); DestroyTask(taskId); - eContestGfxState[r5].unk2_2 = 0; + eContestGfxState[r5].updatingAppealHearts = 0; } else if (++gTasks[taskId].data[10] > 29) { @@ -1199,7 +1214,7 @@ void sub_80AF94C(u8 taskId) } } -void sub_80AFA5C(void) +void FillContestantWindowBgs(void) { u8 i; @@ -1212,7 +1227,7 @@ void sub_80AFA5C(void) void unref_sub_80AFAB8(s16 a, u8 b) { - u8 r5 = sub_80AFB74(a); + u8 r5 = GetNumHeartsFromAppealPoints(a); u16 r2; u8 i; u16 arr[9]; @@ -1237,7 +1252,7 @@ void unref_sub_80AFAB8(s16 a, u8 b) DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr)); } -u16 sub_80AFB40(u8 a) +u16 GetAppealHeartTileOffset(u8 a) { u16 var; @@ -1252,7 +1267,7 @@ u16 sub_80AFB40(u8 a) return var + 1; } -s8 sub_80AFB74(s16 a) +s8 GetNumHeartsFromAppealPoints(s16 a) { s8 retVal = a / 10; @@ -1263,126 +1278,126 @@ s8 sub_80AFB74(s16 a) return retVal; } -u8 sub_80AFBA0(s16 a, s16 b, u8 c) +u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant) { u8 taskId; - s8 r4; - s8 r5; - - eContestGfxState[c].unk2_2 = 1; - taskId = CreateTask(sub_80AFC74, 20); - r4 = sub_80AFB74(a); - r5 = sub_80AFB74(a + b) - r4; - sub_80AFB40(c); // unused return value - gTasks[taskId].data[0] = abs(r4); - gTasks[taskId].data[1] = r5; - if (r4 > 0 || (r4 == 0 && r5 > 0)) + s8 startHearts; + s8 heartsDelta; + + eContestGfxState[contestant].updatingAppealHearts = 1; + taskId = CreateTask(Task_UpdateAppealHearts, 20); + startHearts = GetNumHeartsFromAppealPoints(startAppeal); + heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + appealDelta) - startHearts; + GetAppealHeartTileOffset(contestant); // unused return value + gTasks[taskId].data[0] = abs(startHearts); + gTasks[taskId].data[1] = heartsDelta; + if (startHearts > 0 || (startHearts == 0 && heartsDelta > 0)) gTasks[taskId].data[2] = 1; else gTasks[taskId].data[2] = -1; - gTasks[taskId].data[3] = c; - if (b < 0) - nullsub_19(c); + gTasks[taskId].data[3] = contestant; + if (appealDelta < 0) + nullsub_19(contestant); return taskId; } -void sub_80AFC74(u8 taskId) +void Task_UpdateAppealHearts(u8 taskId) { - u8 r7 = gTasks[taskId].data[3]; - s16 r3 = gTasks[taskId].data[0]; - s16 r1 = gTasks[taskId].data[1]; + u8 contestant = gTasks[taskId].data[3]; + s16 startHearts = gTasks[taskId].data[0]; + s16 heartsDelta = gTasks[taskId].data[1]; if (++gTasks[taskId].data[10] > 14) { - u16 r6; - u8 r5; - u8 r10; + u16 heartOffset; + u8 newNumHearts; + u8 pitchMod; gTasks[taskId].data[10] = 0; if (gTasks[taskId].data[1] == 0) { - nullsub_19(r7); + nullsub_19(contestant); DestroyTask(taskId); - eContestGfxState[r7].unk2_2 = 0; + eContestGfxState[contestant].updatingAppealHearts = 0; return; } - else if (r3 == 0) + else if (startHearts == 0) { - if (r1 < 0) + if (heartsDelta < 0) { - r6 = sub_80AFB40(r7) + 2; + heartOffset = GetAppealHeartTileOffset(contestant) + 2; gTasks[taskId].data[1]++; } else { - r6 = sub_80AFB40(r7); + heartOffset = GetAppealHeartTileOffset(contestant); gTasks[taskId].data[1]--; } - r5 = gTasks[taskId].data[0]++; + newNumHearts = gTasks[taskId].data[0]++; } else { if (gTasks[taskId].data[2] < 0) { - if (r1 < 0) + if (heartsDelta < 0) { - r5 = gTasks[taskId].data[0]++; + newNumHearts = gTasks[taskId].data[0]++; gTasks[taskId].data[1]++; - r6 = sub_80AFB40(r7) + 2; + heartOffset = GetAppealHeartTileOffset(contestant) + 2; } else { - r5 = --gTasks[taskId].data[0]; - r6 = 0; + newNumHearts = --gTasks[taskId].data[0]; + heartOffset = 0; gTasks[taskId].data[1]--; } } else { - if (r1 < 0) + if (heartsDelta < 0) { - r5 = --gTasks[taskId].data[0]; - r6 = 0; + newNumHearts = --gTasks[taskId].data[0]; + heartOffset = 0; gTasks[taskId].data[1]++; } else { - r5 = gTasks[taskId].data[0]++; + newNumHearts = gTasks[taskId].data[0]++; gTasks[taskId].data[1]--; - r6 = sub_80AFB40(r7); + heartOffset = GetAppealHeartTileOffset(contestant); } } } - r10 = r5; - if (r5 > 7) - r5 += 24; + pitchMod = newNumHearts; + if (newNumHearts >= 8) + newNumHearts += 32 - 8; // jump to second line // Seriously, a 2-byte CpuFill? Why? - CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gContestantTurnOrder[r7] * 160) * 2), 2); - if (r1 > 0) + CpuFill16(heartOffset, (void *)(VRAM + 0xC000 + (0x56 + newNumHearts + gContestantTurnOrder[contestant] * 160) * 2), 2); + if (heartsDelta > 0) // Appeal { PlaySE(SE_CONTEST_HEART); m4aMPlayImmInit(&gMPlayInfo_SE1); - m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256); + m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256); } - else + else // Jam { PlaySE(SE_BOO); } - if (r5 == 0 && r6 == 0) + if (newNumHearts == 0 && heartOffset == 0) gTasks[taskId].data[2] = -gTasks[taskId].data[2]; } } -void sub_80AFE30(void) +void CreateSliderHeartSprites(void) { s32 i; - LoadSpriteSheet(&gUnknown_083CA350); + LoadSpriteSheet(&sSpriteSheet_SliderHeart); for (i = 0; i < 4; i++) { - u8 y = gUnknown_083CA338[gContestantTurnOrder[i]]; + u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]]; - eContestGfxState[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1); + eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1); } } @@ -1392,8 +1407,8 @@ void sub_80AFE78(u8 a) s16 r5; eContestGfxState[a].unk2_0 = 1; - spriteId = eContestGfxState[a].unk0; - r5 = sContestantStatus[a].unk4 / 10 * 2; + spriteId = eContestGfxState[a].sliderHeartSpriteId; + r5 = sContestantStatus[a].pointTotal / 10 * 2; if (r5 > 56) r5 = 56; else if (r5 < 0) @@ -1444,12 +1459,12 @@ void sub_80AFF60(struct Sprite *sprite) } } -void sub_80AFFA0(void) +void UpdateSliderHeartSpriteYPositions(void) { s32 i; for (i = 0; i < 4; i++) - gSprites[eContestGfxState[i].unk0].pos1.y = gUnknown_083CA338[gContestantTurnOrder[i]]; + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]]; } void sub_80AFFE0(bool8 a) @@ -1461,9 +1476,9 @@ void sub_80AFFE0(bool8 a) if (gContestantTurnOrder[i] > 1) { if (!a) - gSprites[eContestGfxState[i].unk0].pos1.x = 180; + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180; else - gSprites[eContestGfxState[i].unk0].pos1.x = 256; + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256; } } } @@ -1618,7 +1633,7 @@ void sub_80B03D8(u8 taskId) { gTasks[sContest.unk19211].data[r4 * 4 + 0] = 0xFF; gTasks[sContest.unk19211].data[r4 * 4 + 1] = 0; - BlendPalette((sContest.unk19218[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); + BlendPalette((sContest.prevTurnOrder[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); DestroyTask(taskId); } } @@ -1643,7 +1658,7 @@ void sub_80B0458(u8 taskId) gTasks[taskId].data[r3 + 1] ^= 1; BlendPalette( - (sContest.unk19218[i] + 5) * 16 + 6, + (sContest.prevTurnOrder[i] + 5) * 16 + 6, 2, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); @@ -1666,7 +1681,7 @@ void sub_80B0548(u8 a) gTasks[sContest.unk19212].data[a * 4 + 1] = 0; } -void sub_80B0588(void) +void UpdateBlendTaskContestantsData(void) { u8 i; @@ -2282,7 +2297,7 @@ void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite) ResetBlendForContestantBoxBlink(); } -void sub_80B0CDC(u8 a, int unused) +void Unused_EndBlinkingState(u8 a, int unused) { eContestGfxState[a].boxBlinking = 0; } @@ -2335,7 +2350,7 @@ void ContestDebugDoPrint(void) } for (i = 0; i < 4; i++) { - r2 = sContestantStatus[i].unk4; + r2 = sContestantStatus[i].pointTotal; if (r2 < 0) { r2 = -r2; @@ -3018,49 +3033,51 @@ void Task_AnimateAudience(u8 taskId) #define tBlendColor data[0] #define tBlendCoeff data[1] -void sub_80B1EA8(s8 a, s8 b) +void BlendAudienceBackground(s8 excitementDir, s8 blendDir) { - u8 taskId = CreateTask(sub_80B1F4C, 10); + u8 taskId = CreateTask(Task_BlendAudienceBackground, 10); u16 blendColor; u8 blendCoeff; - u8 r3; + u8 targetBlendCoeff; - if (a > 0) + if (excitementDir > 0) { blendColor = RGB(30, 27, 8); - if (b > 0) + if (blendDir > 0) { blendCoeff = 0; - r3 = sContest.applauseLevel * 3; + targetBlendCoeff = sContest.applauseLevel * 3; } else { blendCoeff = sContest.applauseLevel * 3; - r3 = 0; + targetBlendCoeff = 0; } } else { blendColor = 0; - if (b > 0) + if (blendDir > 0) { blendCoeff = 0; - r3 = 12; + targetBlendCoeff = 12; } else { blendCoeff = 12; - r3 = 0; + targetBlendCoeff = 0; } } gTasks[taskId].tBlendColor = blendColor; gTasks[taskId].tBlendCoeff = blendCoeff; - gTasks[taskId].data[2] = b; - gTasks[taskId].data[3] = r3; - sContest.unk1920B_0 = 0; + gTasks[taskId].data[2] = blendDir; + gTasks[taskId].data[3] = targetBlendCoeff; + // Because this isn't set to TRUE here, the main task doesn't wait for the color blend + // Unclear if this was intentional or not (perhaps waiting added too much delay). In any case it does nothing now + sContest.waitForAudienceBlend = 0; } -void sub_80B1F4C(u8 taskId) +void Task_BlendAudienceBackground(u8 taskId) { if (gTasks[taskId].data[10]++ >= 0) { @@ -3074,7 +3091,7 @@ void sub_80B1F4C(u8 taskId) if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) { DestroyTask(taskId); - sContest.unk1920B_0 = 0; + sContest.waitForAudienceBlend = 0; } } } @@ -3082,7 +3099,7 @@ void sub_80B1F4C(u8 taskId) #undef tBlendColor #undef tBlendCoeff -void sub_80B1FD0(bool8 a) +void ShowHideNextTurnGfx(bool8 a) { s32 i; @@ -3112,7 +3129,7 @@ const u8 *GetTurnOrderNumberGfx(u8 contestant) return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64; } -void sub_80B20C4(void) +void DrawUnnervedSymbols(void) { s32 i; @@ -3132,15 +3149,15 @@ void sub_80B20C4(void) } } -bool8 IsContestantAllowedToCombo(u8 a) +bool8 IsContestantAllowedToCombo(u8 contestant) { - if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous) + if (sContestantStatus[contestant].disappointedRepeat || sContestantStatus[contestant].nervous) return FALSE; else return TRUE; } -void sub_80B2184(void) +void SetBgForCurtainDrop(void) { s32 i; @@ -3160,7 +3177,7 @@ void sub_80B2184(void) for (i = 0; i < 4; i++) { - gSprites[eContestGfxState[i].unk0].oam.priority = 1; + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1; gSprites[eContestGfxState[i].unk1].oam.priority = 1; } @@ -3169,7 +3186,7 @@ void sub_80B2184(void) ((vBgCnt *)®_BG1CNT)->screenSize = 2; } -void sub_80B2280(void) +void UpdateContestantBoxOrder(void) { s32 i; @@ -3186,20 +3203,20 @@ void sub_80B2280(void) for (i = 0; i < 4; i++) { - gSprites[eContestGfxState[i].unk0].oam.priority = 0; + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0; gSprites[eContestGfxState[i].unk1].oam.priority = 0; } } -void sub_80B237C(u8 taskId) +void Task_StartDropCurtainAtRoundEnd(u8 taskId) { gBattle_BG1_X = 0; gBattle_BG1_Y = DISPLAY_HEIGHT; PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); - gTasks[taskId].func = sub_80B23BC; + gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd; } -void sub_80B23BC(u8 taskId) +void Task_UpdateCurtainDropAtRoundEnd(u8 taskId) { if ((s16)(gBattle_BG1_Y -= 7) < 0) gBattle_BG1_Y = 0; @@ -3208,11 +3225,11 @@ void sub_80B23BC(u8 taskId) gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80B2400; + gTasks[taskId].func = Task_ResetForNextRound; } } -void sub_80B2400(u8 taskId) +void Task_ResetForNextRound(u8 taskId) { s32 i; @@ -3220,13 +3237,13 @@ void sub_80B2400(u8 taskId) { case 0: for (i = 0; i < 4; i++) - sContest.unk19218[i] = gContestantTurnOrder[i]; - sub_80AFA5C(); - sub_80B0588(); + sContest.prevTurnOrder[i] = gContestantTurnOrder[i]; + FillContestantWindowBgs(); + UpdateBlendTaskContestantsData(); DrawConditionStars(); DrawContestantWindows(); - sub_80B1FD0(TRUE); - sub_80AFFA0(); + ShowHideNextTurnGfx(TRUE); + UpdateSliderHeartSpriteYPositions(); gTasks[taskId].data[0] = 1; break; case 1: @@ -3234,40 +3251,41 @@ void sub_80B2400(u8 taskId) { u8 taskId2; - sContest.unk1920B_2 = 1; + sContest.waitForLink = 1; if (IsPlayerLinkLeader()) - sub_80AF438(); - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); + SetContestantStatusesForNextRound(); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 2; } else { - sub_80AF438(); + SetContestantStatusesForNextRound(); gTasks[taskId].data[0] = 3; } break; case 2: - if (!sContest.unk1920B_2) + if (!sContest.waitForLink) gTasks[taskId].data[0] = 3; break; case 3: DrawStatusSymbols(); SwapMoveDescAndContestTilemaps(); gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80B253C; + gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd; break; } } -void sub_80B2508(u8 taskId) +void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId) { if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) - gTasks[taskId].func = sub_80ADCDC; + gTasks[taskId].func = Task_UpdateContestantBoxOrder; } -void sub_80B253C(u8 taskId) +void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId) { if (gTasks[taskId].data[2] < 10) { @@ -3288,7 +3306,7 @@ void sub_80B253C(u8 taskId) { gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80B25A4; + gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd; } else { @@ -3298,7 +3316,7 @@ void sub_80B253C(u8 taskId) } } -void sub_80B25A4(u8 taskId) +void Task_StartRaiseCurtainAtRoundEnd(u8 taskId) { if (gTasks[taskId].data[2] < 10) { @@ -3308,45 +3326,45 @@ void sub_80B25A4(u8 taskId) { gTasks[taskId].data[2] = 0; PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0); - gTasks[taskId].func = sub_80B2508; + gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd; } } -void sub_80B25E4(u8 a) +void AnimateSliderHearts(u8 animId) { s32 i; u8 taskId; for (i = 0; i < 4; i++) { - gSprites[eContestGfxState[i].unk0].oam.matrixNum = AllocOamMatrix(); - gSprites[eContestGfxState[i].unk0].oam.affineMode = 1; - StartSpriteAffineAnim(&gSprites[eContestGfxState[i].unk0], a); - if (a == 2) + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix(); + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.affineMode = 1; + StartSpriteAffineAnim(&gSprites[eContestGfxState[i].sliderHeartSpriteId], animId); + if (animId == 2) { - AnimateSprite(&gSprites[eContestGfxState[i].unk0]); - gSprites[eContestGfxState[i].unk0].invisible = FALSE; + AnimateSprite(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE; } } - taskId = CreateTask(sub_80B26C8, 5); - gTasks[taskId].data[0] = a; - sContest.unk1920B_1 = 1; + taskId = CreateTask(Task_WaitForSliderHeartAnim, 5); + gTasks[taskId].data[0] = animId; + sContest.sliderHeartsAnimating = 1; } -void sub_80B26C8(u8 taskId) +void Task_WaitForSliderHeartAnim(u8 taskId) { s32 i; - if (gSprites[eContestGfxState[0].unk0].affineAnimEnded) + if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded) { if ((u8)gTasks[taskId].data[0] == 1) { for (i = 0; i < 4; i++) - gSprites[eContestGfxState[i].unk0].invisible = TRUE; + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE; } for (i = 0; i < 4; i++) - FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].unk0]); - sContest.unk1920B_1 = 0; + FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); + sContest.sliderHeartsAnimating = 0; DestroyTask(taskId); } } @@ -3365,14 +3383,14 @@ u16 SanitizeSpecies(u16 species) return species; } -void sub_80B2790(u8 a) +void SetMoveSpecificAnimData(u8 contestant) { s32 i; - u16 move = SanitizeMove(sContestantStatus[a].currMove); - u16 species = SanitizeSpecies(gContestMons[a].species); + u16 move = SanitizeMove(sContestantStatus[contestant].currMove); + u16 species = SanitizeSpecies(gContestMons[contestant].species); u8 r5_2; - memset(&shared19348, 0, sizeof(shared19348)); + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); ClearBattleAnimationVars(); for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; @@ -3386,10 +3404,10 @@ void sub_80B2790(u8 a) break; case MOVE_TRANSFORM: case MOVE_ROLE_PLAY: - r5_2 = sContestantStatus[a].unk1B; - shared19348.unk2 = SanitizeSpecies(gContestMons[r5_2].species); - shared19348.unk10 = gContestMons[r5_2].personality; - shared19348.unk4_0 = 1; + r5_2 = sContestantStatus[contestant].unk1B; + gContestResources__moveAnim.unk2 = SanitizeSpecies(gContestMons[r5_2].species); + gContestResources__moveAnim.unk10 = gContestMons[r5_2].personality; + gContestResources__moveAnim.unk4_0 = 1; break; case MOVE_RETURN: gAnimFriendship = 0xFF; @@ -3401,9 +3419,9 @@ void sub_80B2790(u8 a) case MOVE_RAZOR_WIND: case MOVE_SKULL_BASH: case MOVE_SKY_ATTACK: - if (sContest.unk1925E == 0) + if (sContest.moveAnimTurnCount == 0) { - sContest.unk1925E = 2; + sContest.moveAnimTurnCount = 2; gAnimMoveTurn = 0; } else @@ -3412,32 +3430,32 @@ void sub_80B2790(u8 a) } break; } - sub_80B2968(); + SetBattleTargetSpritePosition(); } -void sub_80B28CC(int unused) +void ClearMoveAnimData(UNUSED u8 contestant) { - memset(&shared19348, 0, sizeof(shared19348)); - if (sContest.unk1925E != 0) - sContest.unk1925E--; + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + if (sContest.moveAnimTurnCount != 0) + sContest.moveAnimTurnCount--; } -void sub_80B28F0(u8 a) +void SetMoveAnimAttackerData(u8 contestant) { - shared19348.unk5 = a; - shared19348.unk0 = SanitizeSpecies(gContestMons[a].species); - shared19348.unk8 = gContestMons[a].personality; - shared19348.unkC = gContestMons[a].otId; + gContestResources__moveAnim.contestant = contestant; + gContestResources__moveAnim.species = SanitizeSpecies(gContestMons[contestant].species); + gContestResources__moveAnim.personality = gContestMons[contestant].personality; + gContestResources__moveAnim.otId = gContestMons[contestant].otId; } -void sub_80B292C(void) +void CreateInvisibleBattleTargetSprite(void) { gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]); - sub_80B2968(); + SetBattleTargetSpritePosition(); } -void sub_80B2968(void) +void SetBattleTargetSpritePosition(void) { struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]]; @@ -3466,102 +3484,116 @@ void SelectContestMoveBankTarget(u16 move) } } -bool8 Contest_SaveWinner(u8 a) +bool8 Contest_SaveWinner(u8 rank) { s32 i; - u8 r7 = Random() % 3; + u8 captionId = Random() % 3; + // Get the index of the winner among the contestants for (i = 0; i < 3; i++) { if (gContestFinalStandings[i] == 0) break; } - if (a == 0xFF && i != gContestPlayerMonIndex) + + // Exit if attempting to save a Pokémon other than the player's to the museum + if (rank == CONTEST_SAVE_FOR_MUSEUM && i != gContestPlayerMonIndex) return FALSE; + + // Adjust the random painting caption depending on the category switch (gSpecialVar_ContestCategory) { case CONTEST_CATEGORY_COOL: - r7 += 0; + captionId += 0; break; case CONTEST_CATEGORY_BEAUTY: - r7 += 3; + captionId += 3; break; case CONTEST_CATEGORY_CUTE: - r7 += 6; + captionId += 6; break; case CONTEST_CATEGORY_SMART: - r7 += 9; + captionId += 9; break; case CONTEST_CATEGORY_TOUGH: - r7 += 12; + captionId += 12; break; } - if (a != 0xFE) + if (rank != CONTEST_SAVE_FOR_ARTIST) { - u8 r4 = GetContestWinnerSaveIdx(a, 1); + // Save winner in the saveblock + // Used to save any winner for the Contest Hall or the Museum + // but excludes the temporary save used by the artist + u8 saveIdx = GetContestWinnerSaveIdx(rank, TRUE); - gSaveBlock1.contestWinners[r4].personality = gContestMons[i].personality; - gSaveBlock1.contestWinners[r4].species = gContestMons[i].species; - gSaveBlock1.contestWinners[r4].otId = gContestMons[i].otId; - StringCopy(gSaveBlock1.contestWinners[r4].nickname, gContestMons[i].nickname); - StringCopy(gSaveBlock1.contestWinners[r4].trainerName, gContestMons[i].trainerName); - if (a != 0xFF) - gSaveBlock1.contestWinners[r4].contestCategory = gSpecialVar_ContestCategory; + gSaveBlock1.contestWinners[saveIdx].personality = gContestMons[i].personality; + gSaveBlock1.contestWinners[saveIdx].species = gContestMons[i].species; + gSaveBlock1.contestWinners[saveIdx].otId = gContestMons[i].otId; + StringCopy(gSaveBlock1.contestWinners[saveIdx].nickname, gContestMons[i].nickname); + StringCopy(gSaveBlock1.contestWinners[saveIdx].trainerName, gContestMons[i].trainerName); + if (rank != CONTEST_SAVE_FOR_MUSEUM) + gSaveBlock1.contestWinners[saveIdx].contestCategory = gSpecialVar_ContestCategory; else - gSaveBlock1.contestWinners[r4].contestCategory = r7; + gSaveBlock1.contestWinners[saveIdx].contestCategory = captionId; } else { - shared15DE0.personality = gContestMons[i].personality; - shared15DE0.otId = gContestMons[i].otId; - shared15DE0.species = gContestMons[i].species; - StringCopy(shared15DE0.nickname, gContestMons[i].nickname); + gCurContestWinner.personality = gContestMons[i].personality; + gCurContestWinner.otId = gContestMons[i].otId; + gCurContestWinner.species = gContestMons[i].species; + StringCopy(gCurContestWinner.nickname, gContestMons[i].nickname); if (gIsLinkContest & 1) - StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name); + StringCopy(gCurContestWinner.trainerName, gLinkPlayers[i].name); else - StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName); - shared15DE0.contestCategory = r7; + StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName); + gCurContestWinner.contestCategory = captionId; } return TRUE; } -u8 GetContestWinnerSaveIdx(u8 a, u8 b) +// Rank is either a regular contest rank (for saving winners to show in the Contest Hall) +// Or one of two special IDs listed below (for saving winners to show in Museum, or from the artist) +// If just retrieving the index where the winner *would* go, shift is FALSE +// If actually preparing to insert the winner into the saveblock, shift is TRUE +u8 GetContestWinnerSaveIdx(u8 rank, u8 shift) { s32 i; - switch (a) + switch (rank) { - case 0: - case 1: - return a; - case 2: - if (b != 0) + case CONTEST_RANK_NORMAL: + case CONTEST_RANK_SUPER: + return rank; + case CONTEST_RANK_HYPER: + if (shift) { - for (i = 4; i >= 3; i--) + for (i = CONTEST_WINNER_HYPER_3 - 1; i > CONTEST_WINNER_HYPER_1 - 1; i--) memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); } - return 2; - case 3: - if (b != 0) + return CONTEST_WINNER_HYPER_1 - 1; + case CONTEST_RANK_MASTER: + if (shift) { - for (i = 7; i >= 6; i--) + for (i = CONTEST_WINNER_MASTER_3 - 1; i > CONTEST_WINNER_MASTER_1 - 1; i--) memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); } - return 5; + return CONTEST_WINNER_MASTER_1 - 1; default: +// case CONTEST_SAVE_FOR_MUSEUM: +// case CONTEST_SAVE_FOR_ARTIST: switch (gSpecialVar_ContestCategory) { case CONTEST_CATEGORY_COOL: - return 8; + return CONTEST_WINNER_MUSEUM_COOL - 1; case CONTEST_CATEGORY_BEAUTY: - return 9; + return CONTEST_WINNER_MUSEUM_BEAUTY - 1; case CONTEST_CATEGORY_CUTE: - return 10; + return CONTEST_WINNER_MUSEUM_CUTE - 1; case CONTEST_CATEGORY_SMART: - return 11; + return CONTEST_WINNER_MUSEUM_SMART - 1; case CONTEST_CATEGORY_TOUGH: default: - return 12; + return CONTEST_WINNER_MUSEUM_TOUGH - 1; } } } @@ -3571,6 +3603,6 @@ void Contest_ResetWinners(void) s32 i; for (i = 0; i < 8; i++) - gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i]; + gSaveBlock1.contestWinners[i] = gDefaultContestWinners[i]; } diff --git a/src/contest_ai.c b/src/contest_ai.c index a922156a7..637106811 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -586,7 +586,7 @@ static void ContestAICmd_unk_14(void) static void ContestAICmd_unk_15(void) { - eContestAI->scriptResult = sContestantStatus[eContestAI->unk41].unk4; + eContestAI->scriptResult = sContestantStatus[eContestAI->unk41].pointTotal; gAIScriptPtr += 1; } @@ -1305,7 +1305,7 @@ static void ContestAICmd_unk_59(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = sContestantStatus[var].unk4 - sContestantStatus[eContestAI->unk41].unk4; + eContestAI->scriptResult = sContestantStatus[var].pointTotal - sContestantStatus[eContestAI->unk41].pointTotal; gAIScriptPtr += 2; } diff --git a/src/contest_link.c b/src/contest_link.c index dadbeac40..7a169cf08 100644 --- a/src/contest_link.c +++ b/src/contest_link.c @@ -527,7 +527,7 @@ void sub_80C8AD0(u8 taskId) } } -void sub_80C8C80(u8 taskId) +void Task_LinkContest_CommunicateAppealsState(u8 taskId) { switch (gTasks[taskId].data[0]) { diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c index 4f4eb5a4a..d96615fc1 100644 --- a/src/debug/start_menu_debug.c +++ b/src/debug/start_menu_debug.c @@ -2592,7 +2592,7 @@ struct GameTimeDebugMenuStruct { u16 totalPoints; u16 excitementAppealBonus; u8 round1Points; - u8 unk5; + u8 contestant; }; const struct GameTimeDebugMenuStruct gUnknown_Debug_839C5F4[] = { @@ -2669,7 +2669,7 @@ void DebugMenu_8078F68(u8 taskId) else { const struct GameTimeDebugMenuStruct *r2 = gUnknown_Debug_839C5F4 + data[0]; - if (DebugMenu_8077DD8(data + r2->unk5, r2->totalPoints, r2->excitementAppealBonus, gMain.newAndRepeatedKeys) == TRUE) + if (DebugMenu_8077DD8(data + r2->contestant, r2->totalPoints, r2->excitementAppealBonus, gMain.newAndRepeatedKeys) == TRUE) DebugMenu_8078EB0(data); } } diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c index 405f481c5..dd23ccaea 100644 --- a/src/debug/watanabe_debug_menu.c +++ b/src/debug/watanabe_debug_menu.c @@ -78,7 +78,7 @@ struct WatanabeEwram18000_2 { u8 excitementAppealBonus; u8 unk3; u8 round1Points; - u8 unk5; + u8 contestant; u8 unk6; u8 unk7; u8 random; @@ -2571,7 +2571,7 @@ void InitSeePokemonGraphics(void) gUnknown_Debug_2038A20->totalPoints = 0x115; gUnknown_Debug_2038A20->excitementAppealBonus = 0; gUnknown_Debug_2038A20->unk3 = 0; - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; gUnknown_Debug_2038A20->unk7 = 0; gUnknown_Debug_2038A20->unkA = 0; gUnknown_Debug_2038A20->random = 0; @@ -2744,7 +2744,7 @@ void debug_80C6FA8(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 1; + gUnknown_Debug_2038A20->contestant = 1; REG_WIN0H = 0x51EF; REG_WIN0V = 0x4167; gTasks[taskId].func = debug_80C7294; @@ -3100,14 +3100,14 @@ void debug_80C7294(u8 taskId) { if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; gTasks[taskId].func = debug_80C6EE8; } else if (gMain.newKeys & B_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; CpuCopy16(gUnknown_Debug_2038A20->unk10, gPlttBufferUnfaded + 0x80, 32); @@ -3181,7 +3181,7 @@ void debug_80C74E4(u8 taskId) void debug_80C7584(struct Sprite *sprite) { - if (!gUnknown_Debug_2038A20->unk5) + if (!gUnknown_Debug_2038A20->contestant) sprite->invisible = TRUE; else { @@ -3240,7 +3240,7 @@ void InitSeeTrainers(void) gUnknown_Debug_2038A20->totalPoints = 0; gUnknown_Debug_2038A20->excitementAppealBonus = 0; gUnknown_Debug_2038A20->unk3 = 0; - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; gUnknown_Debug_2038A20->unk7 = 0; gUnknown_Debug_2038A20->unkA = 0; gUnknown_Debug_2038A20->random = 0; @@ -3352,7 +3352,7 @@ void debug_80C7B14(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 1; + gUnknown_Debug_2038A20->contestant = 1; REG_WIN0H = 0x51EF; REG_WIN0V = 0x4167; gTasks[taskId].func = debug_80C7DDC; @@ -3691,14 +3691,14 @@ void debug_80C7DDC(u8 taskId) { if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; gTasks[taskId].func = debug_80C7A54; } else if (gMain.newKeys & B_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; CpuCopy16(gUnknown_Debug_2038A20->unk10, gPlttBufferUnfaded + 0x80, 32); diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 2d0ee9cfb..3cefc0104 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -152,9 +152,11 @@ u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) const struct SpriteTemplate gSpriteTemplate_8208288[] = { {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, - {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, + gAffineAnims_BattleSpriteOpponentSide, oac_poke_opponent}, {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, - {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, + gAffineAnims_BattleSpriteOpponentSide, oac_poke_opponent}, }; void GetMonSpriteTemplate_803C56C(u16 species, u8 a2) diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 036209fbf..f08117e37 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -172,10 +172,10 @@ u8 GetBattlerSpriteCoord(u8 slot, u8 a2) default: if (IsContest()) { - if (shared19348.unk4_0) - species = shared19348.unk2; + if (gContestResources__moveAnim.unk4_0) + species = gContestResources__moveAnim.unk2; else - species = shared19348.unk0; + species = gContestResources__moveAnim.species; } else { @@ -197,9 +197,9 @@ u8 GetBattlerSpriteCoord(u8 slot, u8 a2) } } if (a2 == 3) - var = sub_8077E44(slot, species, 1); + var = GetBattlerSpriteFinal_Y(slot, species, 1); else - var = sub_8077E44(slot, species, 0); + var = GetBattlerSpriteFinal_Y(slot, species, 0); break; } return var; @@ -219,10 +219,10 @@ u8 sub_8077BFC(u8 slot, u16 species) { if (IsContest()) { - if (shared19348.unk4_0) - personality = shared19348.unk10; + if (gContestResources__moveAnim.unk4_0) + personality = gContestResources__moveAnim.unk10; else - personality = shared19348.unk8; + personality = gContestResources__moveAnim.personality; } else { @@ -302,7 +302,7 @@ u8 sub_8077DD8(u8 slot, u16 species) return ret; } -u8 sub_8077E44(u8 slot, u16 species, u8 a3) +u8 GetBattlerSpriteFinal_Y(u8 slot, u16 species, u8 a3) { u16 offset; u8 y; @@ -335,10 +335,10 @@ u8 sub_8077EE4(u8 slot, u8 a2) { if (IsContest()) { - if (shared19348.unk4_0) - species = shared19348.unk2; + if (gContestResources__moveAnim.unk4_0) + species = gContestResources__moveAnim.unk2; else - species = shared19348.unk0; + species = gContestResources__moveAnim.species; } else { @@ -349,9 +349,9 @@ u8 sub_8077EE4(u8 slot, u8 a2) species = transform->species; } if (a2 == 3) - return sub_8077E44(slot, species, 1); + return GetBattlerSpriteFinal_Y(slot, species, 1); else - return sub_8077E44(slot, species, 0); + return GetBattlerSpriteFinal_Y(slot, species, 0); } else { @@ -1756,7 +1756,7 @@ u16 sub_8079B10(u8 sprite) { if (IsContest()) { - species = shared19348.unk0; + species = gContestResources__moveAnim.species; return gMonBackPicCoords[species].y_offset; } else @@ -1974,7 +1974,7 @@ u8 sub_8079F44(u16 species, bool8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a if (IsContest()) { - gSprites[sprite].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[sprite].affineAnims = gAffineAnims_BattleSpriteContest; StartSpriteAffineAnim(&gSprites[sprite], 0); } return sprite; @@ -1997,15 +1997,15 @@ s16 GetBattlerSpriteCoordAttr(u8 slot, u8 a2) if (IsContest()) { - if (shared19348.unk4_0) + if (gContestResources__moveAnim.unk4_0) { - species = shared19348.unk2; - personality = shared19348.unk10; + species = gContestResources__moveAnim.unk2; + personality = gContestResources__moveAnim.unk10; } else { - species = shared19348.unk0; - personality = shared19348.unk8; + species = gContestResources__moveAnim.species; + personality = gContestResources__moveAnim.personality; } if (species == SPECIES_UNOWN) { |