diff options
Diffstat (limited to 'src')
87 files changed, 14693 insertions, 8876 deletions
diff --git a/src/battle/anim/battle_intro.c b/src/battle/anim/battle_intro.c index c18f5790c..e432701f4 100644 --- a/src/battle/anim/battle_intro.c +++ b/src/battle/anim/battle_intro.c @@ -12,7 +12,7 @@ #include "trig.h" extern u16 gBattleTypeFlags; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gBattleMonForms[]; extern void sub_800FE20(struct Sprite *); @@ -118,7 +118,7 @@ static void BattleIntroTask_ScrollScenery(u8 taskId) gTasks[taskId].tState++; gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -227,7 +227,7 @@ static void BattleIntroTask_FadeScenery(u8 taskId) gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; gTasks[taskId].data[5] = 1; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -323,7 +323,7 @@ static void BattleIntroTask_ScrollAndFadeScenery(u8 taskId) gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; gTasks[taskId].data[5] = 1; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -402,10 +402,10 @@ static void BattleIntroTask_80E4C34(u8 taskId) if (gTasks[taskId].tBgXOffset == 0) { gTasks[taskId].tState++; - gSprites[ewram1608A].oam.objMode = 2; - gSprites[ewram1608A].callback = sub_800FE20; - gSprites[ewram1608B].oam.objMode = 2; - gSprites[ewram1608B].callback = sub_800FE20; + gSprites[gBattleStruct->unk1608A].oam.objMode = 2; + gSprites[gBattleStruct->unk1608A].callback = sub_800FE20; + gSprites[gBattleStruct->unk1608B].oam.objMode = 2; + gSprites[gBattleStruct->unk1608B].callback = sub_800FE20; REG_WININ = 0x3F; REG_WINOUT = 0x3F06; } @@ -419,7 +419,7 @@ static void BattleIntroTask_80E4C34(u8 taskId) gTasks[taskId].tState++; gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -463,7 +463,7 @@ void sub_80E4EF8(u8 left, u8 top, u8 c, u8 paletteNum, u16 e, u8 bgMap, u8 g) s32 y; u8 bank = GetBattlerAtPosition(c); - DmaCopy16(3, gUnknown_081FAF4C[c] + gBattleMonForms[bank] * 0x800, (void *)(VRAM + e), 0x800); + DmaCopy16(3, gMonSpriteGfx_Sprite_ptr[c] + gBattleMonForms[bank] * 0x800, (void *)(VRAM + e), 0x800); tileNum = e / 32 - g * 512; for (y = top; y < top + 8; y++) { @@ -481,7 +481,7 @@ void unref_sub_80E4FDC(u8 left, u8 top, u8 c, u8 form, u8 paletteNum, u16 f, u8 s32 x; s32 y; - DmaCopy16(3, gUnknown_081FAF4C[c] + form * 0x800, (void *)(VRAM + f), 0x800); + DmaCopy16(3, gMonSpriteGfx_Sprite_ptr[c] + form * 0x800, (void *)(VRAM + f), 0x800); tileNum = f / 32 - h * 512; for (y = top; y < top + 8; y++) { diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c index 9053d7844..9be913b70 100644 --- a/src/battle/anim/normal.c +++ b/src/battle/anim/normal.c @@ -1932,8 +1932,8 @@ void sub_80E4300(u8 taskId) } else { - gTasks[taskId].data[0] = ewram17800[gBattleAnimAttacker].invisible; - ewram17800[gBattleAnimAttacker].invisible = TRUE; + gTasks[taskId].data[0] = gBattleSpriteInfo[gBattleAnimAttacker].invisible; + gBattleSpriteInfo[gBattleAnimAttacker].invisible = TRUE; gTasks[taskId].func = sub_80E4368; gAnimVisualTaskCount--; } @@ -1943,7 +1943,7 @@ static void sub_80E4368(u8 taskId) { if (gBattleAnimArgs[7] == 0x1000) { - ewram17800[gBattleAnimAttacker].invisible = gTasks[taskId].data[0] & 1; + gBattleSpriteInfo[gBattleAnimAttacker].invisible = gTasks[taskId].data[0] & 1; DestroyTask(taskId); } } 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_ai_switch_items.c b/src/battle_ai_switch_items.c index f83334be3..9de1e9b1f 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -82,7 +82,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // Unused return value. GetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY); // Unused return value. - + for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), j = 0; j < MAX_MON_MOVES; ++j) { move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j); diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 881f13c97..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[]; @@ -2297,7 +2297,7 @@ void sub_812D7E8(u8 taskId) else position = GetBattlerPosition(gBattleAnimAttacker); - dest = gUnknown_081FAF4C[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); + dest = gMonSpriteGfx_Sprite_ptr[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); src = subStruct.field_0; DmaCopy32(3, dest, src, 0x800); @@ -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_anim_special.c b/src/battle_anim_special.c index e86b9359c..50a5323e3 100755 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -1843,7 +1843,7 @@ void sub_81416C4(u8 taskId) void sub_81417D8(u8 taskId) { - gBattleAnimArgs[7] = ewram17800[gBattleAnimAttacker].substituteSprite; + gBattleAnimArgs[7] = gBattleSpriteInfo[gBattleAnimAttacker].substituteSprite; DestroyAnimVisualTask(taskId); } diff --git a/src/battle_bg.c b/src/battle_bg.c index 6aa22edf6..f9b1e192c 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -19,7 +19,7 @@ extern u16 gBattleTypeFlags; extern u8 gBattleOutcome; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 BattleText_Win[]; extern u8 BattleText_Loss[]; @@ -247,9 +247,9 @@ void sub_800D6D4(void) void ApplyPlayerChosenFrameToBattleMenu(void) { TextWindow_SetBaseTileNum(0x12); - TextWindow_LoadStdFrameGraphicsOverridePal(&gUnknown_03004210, 1); + TextWindow_LoadStdFrameGraphicsOverridePal(&gWindowTemplate_Contest_MoveDescription, 1); TextWindow_SetBaseTileNum(0x22); - TextWindow_LoadStdFrameGraphicsOverridePal(&gUnknown_03004210, 1); + TextWindow_LoadStdFrameGraphicsOverridePal(&gWindowTemplate_Contest_MoveDescription, 1); gPlttBufferUnfaded[92] = 0x7fe0; gPlttBufferUnfaded[93] = 0x2529; gPlttBufferUnfaded[94] = 0x7fff; @@ -416,7 +416,7 @@ static void sub_800DAF8(u8 taskId, u8 windowId, u8 *dest) } CpuSet(src, dest, 3); } else { - if (windowId == gBattleStruct->linkPlayerIndex) { + if (windowId == gBattleStruct->multiplayerId) { r4 = gTasks[taskId].data[3]; } else { r4 = gTasks[taskId].data[4]; @@ -444,8 +444,8 @@ static void sub_800DAF8(u8 taskId, u8 windowId, u8 *dest) #define PRINT_MESSAGE(text, tileDataStartOffset, x) \ { \ - Text_InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ - Text_PrintWindow8002F44(&gUnknown_03004210); \ + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, text, tileDataStartOffset, x, MESSAGE_Y); \ + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); \ } #define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) @@ -468,7 +468,7 @@ static void PrintLinkBattleWinLossTie(void) { // id = player position? - switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].id) + switch (gLinkPlayers[gBattleStruct->multiplayerId].id) { case 0: case 2: @@ -486,7 +486,7 @@ static void PrintLinkBattleWinLossTie(void) else { - switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].id) + switch (gLinkPlayers[gBattleStruct->multiplayerId].id) { case 1: case 3: @@ -508,7 +508,7 @@ static void PrintLinkBattleWinLossTie(void) if (gBattleOutcome == 1) { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id != 0) + if (gLinkPlayers[gBattleStruct->multiplayerId].id != 0) { PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); @@ -521,7 +521,7 @@ static void PrintLinkBattleWinLossTie(void) } else { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id != 0) + if (gLinkPlayers[gBattleStruct->multiplayerId].id != 0) { PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); @@ -535,7 +535,7 @@ static void PrintLinkBattleWinLossTie(void) } -void sub_800DE30(u8 taskId) +void InitLinkBattleVsScreen(u8 taskId) { u8 palette; int i; @@ -559,11 +559,11 @@ void sub_800DE30(u8 taskId) } else { u8 windowId = 4; - u8 playerId = gBattleStruct->linkPlayerIndex; - u8 opponentId = gBattleStruct->linkPlayerIndex ^ 1; + u8 playerId = gBattleStruct->multiplayerId; + u8 opponentId = gBattleStruct->multiplayerId ^ 1; if (gLinkPlayers[playerId].id) { - opponentId = gBattleStruct->linkPlayerIndex; - playerId = gBattleStruct->linkPlayerIndex ^ 1; + opponentId = gBattleStruct->multiplayerId; + playerId = gBattleStruct->multiplayerId ^ 1; } Text_InitWindow8002E4C( diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index d781599e9..6826ac60d 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -44,11 +44,11 @@ extern void (*gAnimScriptCallback)(void); extern u8 gDisplayedStringBattle[]; extern bool8 gDoingBattleAnim; extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gAnimMoveTurn; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gUnknown_0300434C[]; extern u32 gBattleControllerExecFlags; extern MainCallback gPreBattleCallback1; @@ -427,7 +427,7 @@ void sub_8037BBC(void) void sub_8037C2C(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) LinkOpponentBufferExecCompleted(); } @@ -454,7 +454,7 @@ void sub_8037CC0(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_8037D2C; } @@ -519,7 +519,7 @@ void sub_8037F34(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - sub_800832C(); + SetCloseLinkCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_8037EF0; } else @@ -1148,7 +1148,7 @@ void LinkOpponentHandleLoadPokeSprite(void) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), sub_8077F68(gActiveBattler), GetBattlerSubpriority(gActiveBattler)); @@ -1178,7 +1178,7 @@ void sub_8039430(u8 a, u8 b) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[a]], a); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a)); gBattlerSpriteIds[a] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(a, 2), sub_8077F68(a), GetBattlerSubpriority(a)); @@ -1214,7 +1214,7 @@ void sub_8039648(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1250,7 +1250,7 @@ void LinkOpponentHandleTrainerThrow(void) sub_8031A6C(gender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), GetBattlerSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; @@ -1283,7 +1283,7 @@ void LinkOpponentHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -1358,9 +1358,9 @@ void sub_8039B64(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite && !ewram17800[gActiveBattler].unk0_3) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite && !gBattleSpriteInfo[gActiveBattler].flag_x8) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -1378,10 +1378,10 @@ void sub_8039B64(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBattler].substituteSprite) && r7 <= 1) + if ((gBattleSpriteInfo[gActiveBattler].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -1405,7 +1405,8 @@ void LinkOpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_8037C2C; } @@ -1613,7 +1614,7 @@ void LinkOpponentHandleFaintingCry(void) void LinkOpponentHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; LinkOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 67c46c59d..ec6616962 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -38,17 +38,17 @@ extern u32 gBattleControllerExecFlags; extern u16 gBattlerPartyIndexes[]; extern u8 gBattlerSpriteIds[]; extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; extern u8 gDoingBattleAnim; extern u32 gTransformedPersonalities[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern s32 gAnimMoveDmg; extern u16 gAnimMovePower; extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u8 gAnimMoveTurn; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern MainCallback gPreBattleCallback1; extern void (*gBattlerControllerFuncs[])(void); extern u8 gHealthboxSpriteIds[]; @@ -368,7 +368,7 @@ void sub_811DF34(void) void sub_811DFA0(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) LinkPartnerBufferExecCompleted(); } @@ -396,7 +396,7 @@ void sub_811E034(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_811E0A0; } @@ -456,7 +456,7 @@ void sub_811E29C(void) { if (gBattleTypeFlags & 2) { - sub_800832C(); + SetCloseLinkCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_811E258; } else @@ -1088,7 +1088,7 @@ void LinkPartnerHandleLoadPokeSprite(void) GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES), GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), sub_8077F68(gActiveBattler), GetBattlerSubpriority(gActiveBattler)); @@ -1118,7 +1118,7 @@ void sub_811F864(u8 a, u8 b) gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a)); gBattlerSpriteIds[a] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(a, 2), sub_8077F68(a), GetBattlerSubpriority(a)); @@ -1153,7 +1153,7 @@ void sub_811FA5C(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1189,7 +1189,7 @@ void LinkPartnerHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(gender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80 + xOffset, 80 + 4 * (8 - gTrainerBackPicCoords[gender].coords), GetBattlerSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1219,7 +1219,7 @@ void LinkPartnerHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -1294,9 +1294,9 @@ void sub_811FF30(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite && !ewram17800[gActiveBattler].unk0_3) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite && !gBattleSpriteInfo[gActiveBattler].flag_x8) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -1314,10 +1314,10 @@ void sub_811FF30(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBattler].substituteSprite) && r7 <= 1) + if ((gBattleSpriteInfo[gActiveBattler].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -1341,7 +1341,8 @@ void LinkPartnerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_811DFA0; } @@ -1549,7 +1550,7 @@ void LinkPartnerHandleFaintingCry(void) void LinkPartnerHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; LinkPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index b3685806d..6154655ad 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -39,7 +39,7 @@ extern u8 gBattleBufferA[][0x200]; extern u16 gBattlerPartyIndexes[]; extern u8 gBattlerSpriteIds[]; extern u8 gBattleMonForms[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern void (*gBattlerControllerFuncs[])(void); extern u8 gUnknown_0300434C[]; extern u8 gHealthboxSpriteIds[]; @@ -53,12 +53,12 @@ extern u32 gTransformedPersonalities[]; extern u8 gAnimMoveTurn; extern u8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gDisplayedStringBattle[]; extern u8 gBattlerTarget; extern u8 gAbsentBattlerFlags; extern bool8 gDoingBattleAnim; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; extern MainCallback gPreBattleCallback1; extern struct MusicPlayerInfo gMPlayInfo_SE1; @@ -432,7 +432,7 @@ void sub_8033160(void) void sub_80331D0(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) OpponentBufferExecCompleted(); } @@ -459,7 +459,7 @@ void sub_8033264(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_80332D0; } @@ -1119,7 +1119,7 @@ void OpponentHandleLoadPokeSprite(void) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), sub_8077F68(gActiveBattler), GetBattlerSubpriority(gActiveBattler)); @@ -1151,7 +1151,7 @@ void sub_803495C(u8 a, u8 b) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[a]], a); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a)); gBattlerSpriteIds[a] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(a, 2), sub_8077F68(a), GetBattlerSubpriority(a)); @@ -1187,7 +1187,7 @@ void sub_8034B74(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1227,7 +1227,7 @@ void OpponentHandleTrainerThrow(void) sub_8031A6C(trainerPicIndex, gActiveBattler); GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 0xB0, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), GetBattlerSubpriority(gActiveBattler)); @@ -1257,7 +1257,7 @@ void OpponentHandleTrainerSlide(void) sub_8031A6C(trainerPicIndex, gActiveBattler); GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 0xB0, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), 0x1E); @@ -1287,7 +1287,7 @@ void OpponentHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -1362,9 +1362,9 @@ void sub_8035238(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite && !ewram17800[gActiveBattler].unk0_3) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite && !gBattleSpriteInfo[gActiveBattler].flag_x8) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -1382,10 +1382,10 @@ void sub_8035238(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBattler].substituteSprite) && r7 <= 1) + if ((gBattleSpriteInfo[gActiveBattler].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -1409,7 +1409,8 @@ void OpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_80331D0; } @@ -2019,7 +2020,7 @@ void OpponentHandleFaintingCry(void) void OpponentHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 772728295..92a5172d0 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -36,7 +36,7 @@ struct MovePpInfo #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern void (*gBattlerControllerFuncs[])(void); @@ -64,9 +64,9 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u32 gTransformedPersonalities[]; extern u8 gBattleMonForms[]; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gAnimMoveTurn; extern u8 gUnknown_02038470[]; extern u8 gUnknown_03004344; @@ -141,7 +141,7 @@ extern u8 gAbsentBattlerFlags; extern u8 gUnknown_03004344; extern u8 gBattlersCount; extern u16 gBattlerPartyIndexes[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; extern struct BattlePokemon gBattleMons[]; @@ -739,9 +739,9 @@ void sub_802C68C(void) else gUnknown_03004344 = gMoveSelectionCursor[gActiveBattler] + 1; sub_802E3B4(gUnknown_03004344, 27); - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_SwitchWhich, 0x290, 0x17, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_SwitchWhich, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gBattlerControllerFuncs[gActiveBattler] = sub_802CA60; } } @@ -751,34 +751,34 @@ void sub_802C68C(void) const u8 *moveName; s32 i; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x3A); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 16, 0x3A); moveName = gMoveNames[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1)]; - Text_InitWindowAndPrintText(&gUnknown_03004210, moveName, 0x100, 2, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, moveName, 0x100, 2, 0x37); ConvertIntToDecimalStringN( gDisplayedStringBattle, GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1), 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x110, 10, 0x37); - Text_InitWindowAndPrintText(&gUnknown_03004210, gString_TurnJP, 0x116, 1, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x110, 10, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gString_TurnJP, 0x116, 1, 0x39); ConvertIntToDecimalStringN(gDisplayedStringBattle, gAnimMoveTurn, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x11C, 4, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x11C, 4, 0x39); for (i = 0; i < 64; i++) { if (gSprites[i].inUse) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x122, 8, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x122, 8, 0x39); count = GetTaskCount(); ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x126, 11, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x126, 11, 0x39); for (i = 0, count = 0; i < 32; i++) { if (gOamMatrixAllocBitmap & (1 << i)) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x12A, 14, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x12A, 14, 0x39); gBattlerControllerFuncs[gActiveBattler] = debug_sub_8030C24; } #endif @@ -885,9 +885,9 @@ void sub_802CA60(void) gBattlerControllerFuncs[gActiveBattler] = sub_802C68C; gMoveSelectionCursor[gActiveBattler] = gUnknown_03004344; sub_802E3B4(gMoveSelectionCursor[gActiveBattler], 0); - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_PP, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); sub_802E220(); sub_802E2D4(); } @@ -898,9 +898,9 @@ void sub_802CA60(void) sub_802E3B4(gMoveSelectionCursor[gActiveBattler], 0); sub_802E12C(gMoveSelectionCursor[gActiveBattler], BattleText_Format); gBattlerControllerFuncs[gActiveBattler] = sub_802C68C; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_PP, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); sub_802E220(); sub_802E2D4(); } @@ -975,7 +975,7 @@ void sub_802D18C(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - sub_800832C(); + SetCloseLinkCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_802D148; } else @@ -1045,10 +1045,10 @@ void debug_sub_8030C24(void) move = 1; SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1, &move); gBattleMons[gActiveBattler].moves[0] = move; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x38); - Text_InitWindowAndPrintText(&gUnknown_03004210, gMoveNames[move], 0x100, 2, 0x37); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 16, 0x38); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gMoveNames[move], 0x100, 2, 0x37); ConvertIntToDecimalStringN(gDisplayedStringBattle, move, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 272, 10, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 272, 10, 0x37); } break; case L_BUTTON: @@ -1070,10 +1070,10 @@ void debug_sub_8030C24(void) move = 354; SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1, &move); gBattleMons[gActiveBattler].moves[0] = move; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x38); - Text_InitWindowAndPrintText(&gUnknown_03004210, gMoveNames[move], 0x100, 2, 0x37); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 16, 0x38); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gMoveNames[move], 0x100, 2, 0x37); ConvertIntToDecimalStringN(gDisplayedStringBattle, move, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 272, 10, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 272, 10, 0x37); } break; case DPAD_UP: @@ -1083,7 +1083,7 @@ void debug_sub_8030C24(void) else gAnimMoveTurn++; ConvertIntToDecimalStringN(gDisplayedStringBattle, gAnimMoveTurn, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 284, 4, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 284, 4, 0x39); break; } @@ -1098,12 +1098,12 @@ void debug_sub_8030C24(void) move = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i); StringAppend(gDisplayedStringBattle, gMoveNames[move]); Text_InitWindow( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x100 + i * 16, (i & 1) ? 10 : 2, (i < 2) ? 0x37 : 0x39); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } gBattlerControllerFuncs[gActiveBattler] = sub_802C68C; } @@ -1128,11 +1128,11 @@ void debug_sub_803107C(void) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 290, 8, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 290, 8, 0x39); count = GetTaskCount(); ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 294, 11, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 294, 11, 0x39); for (i = 0, count = 0; i < 32; i++) { @@ -1140,7 +1140,7 @@ void debug_sub_803107C(void) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 298, 14, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 298, 14, 0x39); gBattlerControllerFuncs[gActiveBattler] = debug_sub_8030C24; } @@ -1258,7 +1258,7 @@ void sub_802D680(void) ewram17810[gActiveBattler].unk1_0 = 0; FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_802D730; } @@ -1317,7 +1317,7 @@ void bx_t1_healthbar_update(void) void sub_802D90C(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) PlayerBufferExecCompleted(); } @@ -1507,7 +1507,7 @@ void sub_802DEAC(void) // Duplicate of sub_802D90C void sub_802DF18(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) PlayerBufferExecCompleted(); } @@ -1589,12 +1589,12 @@ void sub_802E12C(s32 a, const u8 *b) StringCopy(gDisplayedStringBattle, b); StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); Text_InitWindow( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x300 + a * 20, (a & 1) ? 11 : 1, (a < 2) ? 0x37 : 0x39); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void sub_802E1B0(void) @@ -1603,7 +1603,7 @@ void sub_802E1B0(void) s32 i; gUnknown_03004348 = 0; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 0x14, 0x3A); for (i = 0; i < 4; i++) { nullsub_7(i); @@ -1632,8 +1632,8 @@ void sub_802E220(void) str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBattler]], 1, 2); *str++ = CHAR_SLASH; ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBattler]], 1, 2); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } } @@ -1644,8 +1644,8 @@ void sub_802E2D4(void) { if (gBattleBufferA[gActiveBattler][2] == 1) { - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_ForgetMove, 0x290, 0x13, 0x37); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_ForgetMove, 0x290, 0x13, 0x37); } else { @@ -1654,10 +1654,10 @@ void sub_802E2D4(void) str = StringCopy(str, BattleText_Format); StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBattler]]].type]); - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x39, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); } - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } const u8 gUnknown_081FAE89[][2] = @@ -1728,7 +1728,8 @@ void b_link_standby_message(void) { gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - Text_InitWindow8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2350,7 +2351,7 @@ void sub_802F934(u8 bank, u8 b) gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(bank)); gBattlerSpriteIds[bank] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), sub_8077F68(bank), GetBattlerSubpriority(bank)); @@ -2385,7 +2386,7 @@ void sub_802FB2C(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -2417,7 +2418,7 @@ void PlayerHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, r7 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, GetBattlerSubpriority(gActiveBattler)); @@ -2433,7 +2434,7 @@ void PlayerHandleTrainerSlide(void) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, 30); @@ -2460,7 +2461,7 @@ void PlayerHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -2548,9 +2549,10 @@ void sub_8030190(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite == 1 && ewram17800[gActiveBattler].unk0_3 == 0) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1 && + gBattleSpriteInfo[gActiveBattler].flag_x8 == 0) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -2568,10 +2570,10 @@ void sub_8030190(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBattler].substituteSprite == 1 && r7 < 2) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1 && r7 < 2) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -2593,7 +2595,8 @@ void PlayerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x90, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_802DF18; } @@ -2611,13 +2614,13 @@ void PlayerHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - Text_FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); - Text_FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 10, 2, 15, 27, 18); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 10, 2, 35, 16, 38); gBattlerControllerFuncs[gActiveBattler] = sub_802C098; - Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_MenuOptions, 400, 18, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); for (r4 = 0; r4 < 4; r4++) @@ -2626,8 +2629,8 @@ void PlayerHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(BattleText_OtherMenu); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void PlayerHandlecmd19() @@ -2650,8 +2653,8 @@ void sub_80304A8(void) sub_802E3B4(gMoveSelectionCursor[gActiveBattler], 0); if (gBattleBufferA[gActiveBattler][2] != 1) { - Text_InitWindow(&gUnknown_03004210, BattleText_PP, 656, 23, 55); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_PP, 656, 23, 55); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } sub_802E220(); sub_802E2D4(); @@ -2674,9 +2677,9 @@ void PlayerHandlecmd22(void) gUnknown_0300434C[gActiveBattler] = CreateTask(TaskDummy, 0xFF); gTasks[gUnknown_0300434C[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; - ewram16054 = gBattleBufferA[gActiveBattler][1] >> 4; - EWRAM_1609D = gBattleBufferA[gActiveBattler][2]; - ewram160C0 = gBattleBufferA[gActiveBattler][3]; + gBattleStruct->unk16054 = gBattleBufferA[gActiveBattler][1] >> 4; + gBattleStruct->unk1609D = gBattleBufferA[gActiveBattler][2]; + gBattleStruct->unk160C0 = gBattleBufferA[gActiveBattler][3]; for (i = 0; i < 3; i++) gUnknown_02038470[i] = gBattleBufferA[gActiveBattler][4 + i]; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); @@ -2892,7 +2895,7 @@ void PlayerHandleFaintingCry(void) void PlayerHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; PlayerBufferExecCompleted(); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index c015cb4cf..92dcffa5b 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -15,7 +15,7 @@ #include "util.h" #include "ewram.h" -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gDisplayedStringBattle[]; extern u8 gActionSelectionCursor[]; @@ -27,7 +27,7 @@ extern void *gBattlerControllerFuncs[]; extern u8 gBattleBufferA[][0x200]; extern bool8 gDoingBattleAnim; extern u8 gBattlerSpriteIds[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u16 gBattleTypeFlags; extern u32 gBattleControllerExecFlags; extern u16 gSpecialVar_ItemId; @@ -35,7 +35,7 @@ extern MainCallback gPreBattleCallback1; extern u8 gBankInMenu; extern u8 gHealthboxSpriteIds[]; extern u16 gBattlerPartyIndexes[]; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gBattleOutcome; extern u8 GetBattlerSide(u8); @@ -290,7 +290,7 @@ void sub_812B65C(void) void sub_812B694(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) SafariBufferExecCompleted(); } @@ -396,7 +396,7 @@ void SafariHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, 30); @@ -461,7 +461,8 @@ void SafariHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_812B694; } @@ -479,13 +480,13 @@ void SafariHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - gUnknown_03004210.paletteNum = 0; - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gWindowTemplate_Contest_MoveDescription.paletteNum = 0; + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 35, 16, 36); gBattlerControllerFuncs[gActiveBattler] = bx_battle_menu_t6_2; - Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_MenuOptionsSafari, 400, 18, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); for (i = 0; i < 4; i++) @@ -494,8 +495,8 @@ void SafariHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(BattleText_PlayerMenu); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void SafariHandlecmd19(void) @@ -650,7 +651,7 @@ void SafariHandleFaintingCry(void) void SafariHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; SafariBufferExecCompleted(); } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 50ede7c7d..417706adf 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -49,11 +49,11 @@ extern u8 gDisplayedStringBattle[]; extern u8 gBankInMenu; extern u8 gBattleMonForms[]; extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gAnimMoveTurn; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gUnknown_0300434C[]; extern const u8 BattleText_WallyMenu[]; extern const u8 BattleText_MenuOptions[]; @@ -324,7 +324,7 @@ void sub_813741C(void) void sub_8137454(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) WallyBufferExecCompleted(); } @@ -1098,7 +1098,7 @@ void WallyHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(2, gActiveBattler); GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), 30); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1113,7 +1113,7 @@ void WallyHandleTrainerSlide(void) LoadPlayerTrainerBankSprite(2, gActiveBattler); GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), 30); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1195,7 +1195,7 @@ void sub_81390D0(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite == 1) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1212,7 +1212,7 @@ void sub_81390D0(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBattler].substituteSprite == 1) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); ewram17810[gActiveBattler].unk4 = 3; } @@ -1239,7 +1239,8 @@ void WallyHandlePrintString(void) if (*ptr == 2) DestroyMenuCursor(); BufferStringBattle(*ptr); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x90, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_8137454; } @@ -1257,23 +1258,23 @@ void WallyHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - gUnknown_03004210.paletteNum = 0; - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gWindowTemplate_Contest_MoveDescription.paletteNum = 0; + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 35, 16, 36); gBattlerControllerFuncs[gActiveBattler] = sub_81372BC; - Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_MenuOptions, 400, 18, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); for (i = 0; i < 4; i++) nullsub_8(i); sub_802E3E4(0, 0); BattleStringExpandPlaceholdersToDisplayedString(BattleText_WallyMenu); #ifdef ENGLISH - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 440, 2, 35); #else - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 444, 2, 35); #endif - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void WallyHandlecmd19(void) @@ -1464,7 +1465,7 @@ void WallyHandleFaintingCry(void) void WallyHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; WallyBufferExecCompleted(); } @@ -1496,13 +1497,13 @@ void sub_81398BC(u8 bank) { u16 species; - ewram17800[bank].transformedSpecies = 0; + gBattleSpriteInfo[bank].transformedSpecies = 0; gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(bank)); gBattlerSpriteIds[bank] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), sub_8077F68(bank), GetBattlerSubpriority(bank)); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 104a0eecf..1d45002ca 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -29,10 +29,10 @@ extern u8 gBattlersCount; extern u16 gBattlerPartyIndexes[]; extern u8 gBattlerPositions[]; extern u8 gBattlerSpriteIds[]; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gDoingBattleAnim; extern u32 gTransformedPersonalities[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern void (*gBattlerControllerFuncs[])(void); extern u8 gHealthboxSpriteIds[]; extern u8 gUnknown_0300434C[]; @@ -142,7 +142,7 @@ void unref_sub_8031364(struct Sprite *sprite, bool8 stupid) void sub_80313A0(struct Sprite *sprite) { - if (!(gUnknown_02024DE8 & 1)) + if (!(gIntroSlideFlags & 1)) { sprite->pos2.x += sprite->data[0]; if (sprite->pos2.x == 0) @@ -194,9 +194,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) gBattleMonForms[a] = e & 0x7F; return TRUE; } - if (ewram17800[a].substituteSprite && sub_803163C(d) == 0) + if (gBattleSpriteInfo[a].substituteSprite && sub_803163C(d) == 0) return TRUE; - if (ewram17800[a].substituteSprite && d == 2 && gSprites[gBattlerSpriteIds[a]].invisible) + if (gBattleSpriteInfo[a].substituteSprite && d == 2 && gSprites[gBattlerSpriteIds[a]].invisible) { refresh_graphics_maybe(a, 1, gBattlerSpriteIds[a]); sub_80324E0(a); @@ -296,14 +296,14 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].transformedSpecies; + species = gBattleSpriteInfo[b].transformedSpecies; r7 = gTransformedPersonalities[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); @@ -312,12 +312,12 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[var], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[var], species, r7); paletteOffset = 0x100 + b * 16; - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) lzPaletteData = GetMonSpritePal(pkmn); else lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); @@ -330,7 +330,7 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) LZDecompressWram(lzPaletteData, ewram16400); LoadPalette(ewram16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[b].transformedSpecies != 0) + if (gBattleSpriteInfo[b].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -348,14 +348,14 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].transformedSpecies; + species = gBattleSpriteInfo[b].transformedSpecies; r7 = gTransformedPersonalities[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); @@ -364,12 +364,12 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[var], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[var], species, r7); paletteOffset = 0x100 + b * 16; - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) lzPaletteData = GetMonSpritePal(pkmn); else lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); @@ -382,7 +382,7 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) LZDecompressWram(lzPaletteData, ewram16400); LoadPalette(ewram16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[b].transformedSpecies != 0) + if (gBattleSpriteInfo[b].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -408,9 +408,9 @@ void sub_8031A6C(u16 a, u8 b) gTrainerFrontPicCoords[a].coords, gTrainerFrontPicCoords[a].y_offset, eVoidSharedArr, - gUnknown_081FAF4C[status], + gMonSpriteGfx_Sprite_ptr[status], 0); - spriteSheet.data = gUnknown_081FAF4C[status]; + spriteSheet.data = gMonSpriteGfx_Sprite_ptr[status]; spriteSheet.size = gTrainerFrontPicTable[a].size; spriteSheet.tag = gTrainerFrontPicTable[a].tag; LoadCompressedObjectPic(&spriteSheet); @@ -427,7 +427,7 @@ void LoadPlayerTrainerBankSprite(u16 a, u8 b) gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, eVoidSharedArr, - gUnknown_081FAF4C[status], + gMonSpriteGfx_Sprite_ptr[status], 0); LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); } @@ -611,7 +611,7 @@ void sub_8031EE8(void) void sub_8031F0C(void) { sub_8031EE8(); - memset(ewram17800, 0, 0x10); + memset(gBattleSpriteInfo, 0, 0x10); } void sub_8031F24(void) @@ -619,12 +619,12 @@ void sub_8031F24(void) s32 i; for (i = 0; i < gBattlersCount; i++) - ewram17800[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible; + gBattleSpriteInfo[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible; } void sub_8031F88(u8 a) { - ewram17800[a].invisible = gSprites[gBattlerSpriteIds[a]].invisible; + gBattleSpriteInfo[a].invisible = gSprites[gBattlerSpriteIds[a]].invisible; } void sub_8031FC4(u8 a, u8 b, bool8 c) @@ -642,7 +642,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) paletteOffset = 0x100 + a * 16; LoadPalette(ewram16400 + ewram17840.unk0 * 32, paletteOffset, 32); gBattleMonForms[a] = ewram17840.unk0; - if (ewram17800[a].transformedSpecies != 0) + if (gBattleSpriteInfo[a].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -654,17 +654,17 @@ 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.targetSpecies; + personalityValue = gContestResources__moveAnim.personality; + otId = gContestResources__moveAnim.otId; HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[0], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[0], species, - shared19348.unk10); + gContestResources__moveAnim.unk10); } else { @@ -681,8 +681,8 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[r10], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[r10], species, gTransformedPersonalities[a]); } @@ -694,13 +694,13 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[r10], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[r10], species, gTransformedPersonalities[a]); } } - DmaCopy32Defvars(3, gUnknown_081FAF4C[r10], (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[a]].oam.tileNum * 32), 0x800); + DmaCopy32Defvars(3, gMonSpriteGfx_Sprite_ptr[r10], (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[a]].oam.tileNum * 32), 0x800); paletteOffset = 0x100 + a * 16; lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); LZDecompressWram(lzPaletteData, gSharedMem); @@ -716,7 +716,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); if (!IsContest()) { - ewram17800[a].transformedSpecies = species; + gBattleSpriteInfo[a].transformedSpecies = species; gBattleMonForms[a] = gBattleMonForms[b]; } gSprites[gBattlerSpriteIds[a]].pos1.y = sub_8077F68(a); @@ -739,15 +739,15 @@ void BattleLoadSubstituteSprite(u8 a, u8 b) else r4 = GetBattlerPosition(a); if (IsContest()) - LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); + LZDecompressVram(gSubstituteDollTilemap, gMonSpriteGfx_Sprite_ptr[r4]); else if (GetBattlerSide(a) != 0) - LZDecompressVram(gSubstituteDollGfx, gUnknown_081FAF4C[r4]); + LZDecompressVram(gSubstituteDollGfx, gMonSpriteGfx_Sprite_ptr[r4]); else - LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); + LZDecompressVram(gSubstituteDollTilemap, gMonSpriteGfx_Sprite_ptr[r4]); // There is probably a way to do this without all the temp variables, but I couldn't figure it out. foo = a * 16; gSubstituteDollPal_ = gSubstituteDollPal; - src = gUnknown_081FAF4C[r4]; + src = gMonSpriteGfx_Sprite_ptr[r4]; for (i = 0; i < 3; i++) DmaCopy32(3, src, src + i * 0x800 + 0x800, 0x800); LoadCompressedPalette(gSubstituteDollPal_, 0x100 + foo, 32); @@ -777,12 +777,12 @@ void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) void sub_80324BC(u8 a, u16 b) { if (b == 0xA4) - ewram17800[a].substituteSprite = 1; + gBattleSpriteInfo[a].substituteSprite = 1; } void sub_80324E0(u8 a) { - ewram17800[a].substituteSprite = 0; + gBattleSpriteInfo[a].substituteSprite = 0; } void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b) @@ -792,22 +792,22 @@ void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b) if (GetHPBarLevel(hp, maxHP) == 1) { - if (!ewram17800[b].unk0_1) + if (!gBattleSpriteInfo[b].lowHpSong) { - if (!ewram17800[b ^ 2].unk0_1) + if (!gBattleSpriteInfo[b ^ 2].lowHpSong) PlaySE(SE_LOW_HEALTH); - ewram17800[b].unk0_1 = 1; + gBattleSpriteInfo[b].lowHpSong = 1; } } else { - ewram17800[b].unk0_1 = 0; + gBattleSpriteInfo[b].lowHpSong = 0; if (!IsDoubleBattle()) { m4aSongNumStop(SE_LOW_HEALTH); return; } - if (IsDoubleBattle() && !ewram17800[b ^ 2].unk0_1) + if (IsDoubleBattle() && !gBattleSpriteInfo[b ^ 2].lowHpSong) { m4aSongNumStop(SE_LOW_HEALTH); return; @@ -819,9 +819,9 @@ void BattleStopLowHpSound(void) { u8 r4 = GetBattlerAtPosition(0); - ewram17800[r4].unk0_1 = 0; + gBattleSpriteInfo[r4].lowHpSong = 0; if (IsDoubleBattle()) - ewram17800[r4 ^ 2].unk0_1 = 0; + gBattleSpriteInfo[r4 ^ 2].lowHpSong = 0; m4aSongNumStop(SE_LOW_HEALTH); } @@ -903,9 +903,9 @@ void sub_80328A4(struct Sprite *sprite) } if (gAnimScriptActive || r7->invisible) invisible = TRUE; - else if (ewram17800[r4].transformedSpecies != 0 && gEnemyMonElevation[ewram17800[r4].transformedSpecies] == 0) + else if (gBattleSpriteInfo[r4].transformedSpecies != 0 && gEnemyMonElevation[gBattleSpriteInfo[r4].transformedSpecies] == 0) invisible = TRUE; - if (ewram17800[r4].substituteSprite) + if (gBattleSpriteInfo[r4].substituteSprite) invisible = TRUE; sprite->pos1.x = r7->pos1.x; sprite->pos2.x = r7->pos2.x; @@ -921,8 +921,8 @@ void sub_8032984(u8 a, u16 b) { if (GetBattlerSide(a) != 0) { - if (ewram17800[a].transformedSpecies != 0) - b = ewram17800[a].transformedSpecies; + if (gBattleSpriteInfo[a].transformedSpecies != 0) + b = gBattleSpriteInfo[a].transformedSpecies; if (gEnemyMonElevation[b] != 0) gSprites[ewram17810[a].unk7].callback = sub_80328A4; else @@ -960,7 +960,7 @@ void sub_8032A38(void) void sub_8032AA8(u8 a, u8 b) { - ewram17800[a].transformedSpecies = 0; + gBattleSpriteInfo[a].transformedSpecies = 0; gBattleMonForms[a] = 0; if (b == 0) sub_80324E0(a); diff --git a/src/battle_interface.c b/src/battle_interface.c index c36556f11..be9554bf2 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1048,7 +1048,7 @@ _0804420C: .4byte 0x04000008\n\ // TODO: make this a local variable memcpy(str, gUnknown_0820A89C, sizeof(str)); r4 = gSprites[a].data[6]; - if ((ewram17800[r4].unk0_4) == 0) + if ((gBattleSpriteInfo[r4].hpNumbersNoBars) == 0) return; ptr = str + 6; if (c == 0) @@ -1427,8 +1427,8 @@ void sub_804454C(void) { u8 r6; - ewram17800[i].unk0_4 ^= 1; - r6 = ewram17800[i].unk0_4; + gBattleSpriteInfo[i].hpNumbersNoBars ^= 1; + r6 = gBattleSpriteInfo[i].hpNumbersNoBars; if (GetBattlerSide(i) == 0) { @@ -2702,7 +2702,7 @@ static void sub_8045458(u8 a, u8 b) for (i = 0; i < 3; i++) CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32, 32); - if (!ewram17800[r7].unk0_4) + if (!gBattleSpriteInfo[r7].hpNumbersNoBars) CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 64); sub_8045458(a, 1); @@ -2717,7 +2717,7 @@ static void sub_8045458(u8 a, u8 b) CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32, 96); if (IsDoubleBattle() == TRUE || GetBattlerSide(r7) == TRUE) { - if (!ewram17800[r7].unk0_4) + if (!gBattleSpriteInfo[r7].hpNumbersNoBars) { CpuCopy32(sub_8043CDC(0), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 32); CpuCopy32(sub_8043CDC(0x41), OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32, 32); @@ -2933,7 +2933,7 @@ s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) r5 = ABS(r8 / r5); r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5); } - if (c == 1 || (c == 0 && (!ewram17800[a].unk0_4))) + if (c == 1 || (c == 0 && (!gBattleSpriteInfo[a].hpNumbersNoBars))) sub_8045D58(a, c); if (r6 == -1) ewram17850[a].unk10 = 0; diff --git a/src/battle_main.c b/src/battle_main.c index e41b2a114..5b259b1d1 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -66,7 +66,7 @@ struct UnknownStruct8 extern void sub_802BBD4(); -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern const u8 Str_821F7B8[]; extern u8 gUnknown_02023A14_50; extern const u16 gBattleTextboxPalette[]; @@ -76,7 +76,7 @@ extern const u8 gUnknown_Debug_821F7F3[]; extern const u8 BattleText_YesNo[]; extern u8 gStatStageRatios[][2]; extern u8 gActionsByTurnOrder[4]; -extern struct UnknownPokemonStruct2 gMultiPartnerParty[]; +extern struct MultiBattlePokemonTx gMultiPartnerParty[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBattler; extern u32 gBattleControllerExecFlags; @@ -91,15 +91,15 @@ extern u8 gPotentialItemEffectBattler; extern u8 gAbsentBattlerFlags; extern u8 gMultiHitCounter; extern u8 gActionForBanks[]; -extern u16 gUnknown_02024C2C[]; +extern u16 gLastPrintedMoves[]; extern u16 gLastMoves[]; extern u16 gLastLandedMoves[]; extern u16 gLastHitByType[]; -extern u16 gUnknown_02024C4C[]; +extern u16 gLastResultingMoves[]; extern u16 gLockedMoves[]; extern u16 gChosenMovesByBanks[]; extern u32 gHitMarker; -extern u8 gUnknown_02024C70[]; +extern u8 sUnusedBattlersArray[]; extern u16 gSideStatuses[]; extern u32 gStatuses3[]; //extern u8 gDisableStructs[][0x1C]; @@ -109,7 +109,7 @@ extern u16 gRandomTurnNumber; extern u8 gBattleCommunication[]; extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gActionSelectionCursor[]; extern u8 gMoveSelectionCursor[]; extern u8 gUnknown_02038470[]; @@ -204,7 +204,7 @@ s8 gBattleTerrain; void (*gBattleMainFunc)(void); u32 gUnknown_03004284; -struct Window gUnknown_03004210; +struct Window gWindowTemplate_Contest_MoveDescription; struct Window gUnknown_030041D0; struct Window gUnknown_03004250; @@ -250,7 +250,7 @@ void CB2_InitBattleInternal(void) gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10; } - //ScanlineEffect_SetParams(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + //ScanlineEffect_SetParams(gUnknown_081F9674.totalPoints, gUnknown_081F9674.round1Points, gUnknown_081F9674.random); ScanlineEffect_SetParams(gUnknown_081F9674); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); @@ -270,7 +270,7 @@ void CB2_InitBattleInternal(void) gBattleTerrain = BattleSetup_GetTerrain(); #endif - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); @@ -283,7 +283,7 @@ void CB2_InitBattleInternal(void) SetVBlankCallback(sub_800FCFC); SetUpBattleVarsAndBirchPoochyena(); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - SetMainCallback2(sub_800F298); + SetMainCallback2(CB2_HandleStartMultiBattle); else SetMainCallback2(CB2_HandleStartBattle); if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -301,7 +301,7 @@ void CB2_InitBattleInternal(void) gBattleCommunication[0] = 0; } -void sub_800E9EC(void) +void BufferPartyVsScreenHealth_AtStart(void) { u16 r6 = 0; u16 species; @@ -330,21 +330,21 @@ void sub_800E9EC(void) if (species != SPECIES_EGG && hp == 0) r6 |= 3 << i * 2; } - gBattleStruct->unk2 = r6; - gBattleStruct->unk3 = r6 >> 8; + gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsLo = r6; + gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsHi = r6 >> 8; } static void SetPlayerBerryDataInBattleStruct(void) { s32 i; - struct UnknownStruct8 *_ewram4 = &ewram4; + struct BattleEnigmaBerry * battleBerry = &gBattleStruct->multiBuffer.linkPartnerHeader.battleEnigmaBerry; for (i = 0; i < 7; i++) - _ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + battleBerry->name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; for (i = 0; i < 18; i++) - _ewram4->unk8[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; - _ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect; - _ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam; + battleBerry->itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + battleBerry->holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + battleBerry->holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; } void SetAllPlayersBerryData(void) @@ -419,7 +419,7 @@ void CB2_HandleStartBattle(void) BuildOamBuffer(); playerId = GetMultiplayerId(); - ewram160CB = playerId; + gBattleStruct->multiplayerId = playerId; enemyId = playerId ^ 1; switch (gBattleCommunication[0]) @@ -429,9 +429,9 @@ void CB2_HandleStartBattle(void) { if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { - gBattleStruct->unk0 = 1; - gBattleStruct->unk1 = 1; - sub_800E9EC(); + gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureLo = 1; + gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureHi = 1; + BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); #if DEBUG if (gUnknown_02023A14_50 & 8) @@ -443,7 +443,7 @@ void CB2_HandleStartBattle(void) } } #endif - SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkPartnerHeader, sizeof(gBattleStruct->multiBuffer.linkPartnerHeader)); gBattleCommunication[0] = 1; } } @@ -494,11 +494,11 @@ void CB2_HandleStartBattle(void) } } SetAllPlayersBerryData(); - taskId = CreateTask(sub_800DE30, 0); + taskId = CreateTask(InitLinkBattleVsScreen, 0); gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = gBattleStruct->unk2 | (gBattleStruct->unk3 << 8); + gTasks[taskId].data[3] = gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsLo | (gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsHi << 8); gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; gBattleCommunication[0]++; } @@ -576,7 +576,7 @@ void CB2_HandleStartBattle(void) } } -void sub_800F02C(void) +void PrepareOwnMultiPartnerBuffer(void) { s32 i; @@ -598,7 +598,7 @@ void sub_800F02C(void) if (gMultiPartnerParty[i].language != 1) PadNameString(nickname, 0); } - memcpy(gSharedMem, gMultiPartnerParty, 0x60); + memcpy(gBattleStruct->multiBuffer.multiBattleMons, gMultiPartnerParty, 3 * sizeof(struct MultiBattlePokemonTx)); } void sub_800F104(void) @@ -609,10 +609,10 @@ void sub_800F104(void) s32 i; playerId = GetMultiplayerId(); - ewram160CB = playerId; + gBattleStruct->multiplayerId = playerId; // Seriously, Game Freak? - pSavedCallback = ewram160C4_Callback; - pSavedBattleTypeFlags = ewram160C2_Flags; + pSavedCallback = &gBattleStruct->unk160C4; + pSavedBattleTypeFlags = &gBattleStruct->unk160C2; RunTasks(); AnimateSprites(); BuildOamBuffer(); @@ -634,8 +634,8 @@ void sub_800F104(void) #endif if (IsLinkTaskFinished()) { - sub_800F02C(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); + PrepareOwnMultiPartnerBuffer(); + SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, 3 * sizeof(struct MultiBattlePokemonTx)); gBattleCommunication[0]++; } } @@ -652,7 +652,7 @@ void sub_800F104(void) { if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerId].id & 1)) || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[playerId].id & 1))) - memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], 0x60); + memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], 3 * sizeof(struct MultiBattlePokemonTx)); } } gBattleCommunication[0]++; @@ -666,7 +666,7 @@ void sub_800F104(void) if (!gPaletteFade.active) { gBattleCommunication[0] = 3; - sub_800832C(); + SetCloseLinkCallback(); } break; case 3: @@ -680,13 +680,13 @@ void sub_800F104(void) } } -void sub_800F298(void) +void CB2_HandleStartMultiBattle(void) { u8 playerId; s32 id; playerId = GetMultiplayerId(); - ewram160CB = playerId; + gBattleStruct->multiplayerId = playerId; RunTasks(); AnimateSprites(); BuildOamBuffer(); @@ -707,11 +707,11 @@ void sub_800F298(void) #endif if (IsLinkTaskFinished()) { - gBattleStruct->unk0 = 1; - gBattleStruct->unk1 = 1; - sub_800E9EC(); + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureLo) = 1; + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureHi) = 1; + BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkPartnerHeader, sizeof(gBattleStruct->multiBuffer.linkPartnerHeader)); gBattleCommunication[0]++; } } @@ -722,6 +722,7 @@ void sub_800F298(void) u8 taskId; ResetBlockReceivedFlags(); + // LinkBattleComputeBattleTypeFlags id = 0; if (gBlockRecvBuffer[0][0] == 0x100) { @@ -767,9 +768,9 @@ void sub_800F298(void) } SetAllPlayersBerryData(); memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); - taskId = CreateTask(sub_800DE30, 0); - gTasks[taskId].data[1] = 0x10E; - gTasks[taskId].data[2] = 0x5A; + taskId = CreateTask(InitLinkBattleVsScreen, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; gTasks[taskId].data[5] = 0; gTasks[taskId].data[3] = 0; gTasks[taskId].data[4] = 0; @@ -986,7 +987,7 @@ void BattleMainCB2(void) } #endif - Text_UpdateWindowInBattle(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gWindowTemplate_Contest_MoveDescription); UpdatePaletteFade(); RunTasks(); } @@ -1195,7 +1196,7 @@ void sub_800FE40(u8 taskId) { struct Pokemon *sp4 = NULL; struct Pokemon *sp8 = NULL; - u8 r2 = ewram160CB; + u8 r2 = gBattleStruct->multiplayerId; u32 r7; s32 i; @@ -1308,7 +1309,7 @@ void c2_8011A1C(void) gBattle_BG3_X = 0; gBattle_BG3_Y = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); @@ -1321,7 +1322,7 @@ void c2_8011A1C(void) FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; SetVBlankCallback(sub_800FCFC); - taskId = CreateTask(sub_800DE30, 0); + taskId = CreateTask(InitLinkBattleVsScreen, 0); gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 1; @@ -2083,9 +2084,9 @@ void debug_sub_801174C(void) { gUnknown_02023A14_50 |= 0x10; if (gUnknown_Debug_2023A76[0][2] > 5) - gSharedMem[0x160A3] = gUnknown_Debug_2023A76[0][2] - 2; + gBattleStruct->unk160A3 = gUnknown_Debug_2023A76[0][2] - 2; else - gSharedMem[0x160A3] = gUnknown_Debug_2023A76[0][2]; + gBattleStruct->unk160A3 = gUnknown_Debug_2023A76[0][2]; sub_80408BC(); } else if (gUnknown_Debug_2023A76[0][0x22] == 5) @@ -2616,17 +2617,17 @@ void debug_sub_8012688(void) FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; gCurrentMove = 1; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); DecompressPicFromTable_2( &gMonFrontPicTable[gCurrentMove], gMonFrontPicCoords[gCurrentMove].coords, gMonFrontPicCoords[gCurrentMove].y_offset, (void *)EWRAM, - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[1], gCurrentMove); LoadCompressedPalette(gMonPaletteTable[gCurrentMove].data, 272, 32); GetMonSpriteTemplate_803C56C(gCurrentMove, 1); - spriteId = CreateSprite(&gUnknown_02024E8C, 176, 40 + gMonFrontPicCoords[gCurrentMove].y_offset, 40); + spriteId = CreateSprite(&gCreatingSpriteTemplate, 176, 40 + gMonFrontPicCoords[gCurrentMove].y_offset, 40); gSprites[spriteId].callback = nullsub_37; gSprites[spriteId].oam.paletteNum = 1; REG_DISPCNT = 0x1F40; @@ -2643,7 +2644,7 @@ void debug_sub_8012878(void) { AnimateSprites(); BuildOamBuffer(); - Text_UpdateWindowInBattle(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gWindowTemplate_Contest_MoveDescription); UpdatePaletteFade(); RunTasks(); if (gMain.heldKeys == (SELECT_BUTTON | R_BUTTON)) @@ -2653,25 +2654,25 @@ void debug_sub_8012878(void) void debug_sub_80128B4(void) { debug_sub_8010A7C(0, 9); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); ConvertIntToDecimalStringN(gBattleTextBuff1, gCurrentMove, 2, 3); gBattleTextBuff1[3] = CHAR_SPACE; gBattleTextBuff1[4] = EOS; StringAppend(gBattleTextBuff1, gSpeciesNames[gCurrentMove]); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void debug_sub_8012938(u8 taskId) { debug_sub_8010A7C(0, 7); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); StringCopy(gBattleTextBuff1, Str_821F7B8); ConvertIntToDecimalStringN(gBattleTextBuff1 + 4, gUnknown_Debug_2023B62[gCurrentMove - 1], 2, 3); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gSprites[gTasks[taskId].data[1]].pos2.y = -gUnknown_Debug_2023B62[gCurrentMove - 1]; } @@ -2682,7 +2683,7 @@ void debug_sub_80129F8(u8 taskId) gMonFrontPicCoords[gCurrentMove].coords, gMonFrontPicCoords[gCurrentMove].y_offset, (void *)EWRAM, - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[1], gCurrentMove); LoadCompressedPalette(gMonPaletteTable[gCurrentMove].data, 272, 32); gSprites[gTasks[taskId].data[1]].pos1.y = gMonFrontPicCoords[gCurrentMove].y_offset + 40; @@ -2731,8 +2732,8 @@ void debug_sub_8012B70(u8 taskId, u8 b) { sub_802BBD4(24, 28, 29, 33, 0); gTasks[taskId].data[0] = 2; - Text_InitWindow(&gUnknown_03004210, Str_821F7DA, 656, 26, 29); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, Str_821F7DA, 656, 26, 29); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gTasks[taskId].data[3] = 0; debug_sub_8012B2C(0); } @@ -2741,25 +2742,25 @@ void debug_sub_8012B70(u8 taskId, u8 b) void debug_sub_8012C08(u8 taskId, u8 b) { debug_sub_8010A7C(0, 9); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); debug_sub_8010A7C(0, 7); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); sub_802BBD4(24, 28, 29, 33, 0); if (b != 0) { gTasks[taskId].data[0] = 4; - Text_InitWindow(&gUnknown_03004210, gUnknown_Debug_821F7F3, 144, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gUnknown_Debug_821F7F3, 144, 2, 35); } else { gTasks[taskId].data[0] = 3; - Text_InitWindow(&gUnknown_03004210, Str_821F7EA, 144, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, Str_821F7EA, 144, 2, 35); } - Text_PrintWindow8002F44(&gUnknown_03004210); - Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 656, 26, 29); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_YesNo, 656, 26, 29); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gTasks[taskId].data[3] = 1; debug_sub_8012B2C(1); } @@ -2771,8 +2772,8 @@ void debug_sub_8012D10(u8 taskId) case 0: debug_sub_80128B4(); debug_sub_8012938(taskId); - Text_InitWindow(&gUnknown_03004210, Str_821F7BD, 400, 19, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, Str_821F7BD, 400, 19, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gTasks[taskId].data[0]++; sub_802E3E4(gTasks[taskId].data[2], 0); break; @@ -3064,7 +3065,7 @@ void oac_poke_opponent(struct Sprite *sprite) void sub_8010278(struct Sprite *sprite) { - if ((gUnknown_02024DE8 & 1) == 0) + if ((gIntroSlideFlags & 1) == 0) { sprite->pos2.x += 2; if (sprite->pos2.x == 0) @@ -3121,8 +3122,8 @@ void sub_8010384(struct Sprite *sprite) u16 species; u8 yOffset; - if (ewram17800[r6].transformedSpecies != 0) - species = ewram17800[r6].transformedSpecies; + if (gBattleSpriteInfo[r6].transformedSpecies != 0) + species = gBattleSpriteInfo[r6].transformedSpecies; else species = sprite->data[2]; @@ -3178,7 +3179,7 @@ void sub_8010494(struct Sprite *sprite) else { // this should use a MEMSET_ALT, but *(dst++) wont match with it. - dst = (u8 *)gUnknown_081FAF4C[GetBattlerPosition(sprite->data[0])] + (gBattleMonForms[sprite->data[0]] << 11) + (sprite->data[3] << 8); + dst = (u8 *)gMonSpriteGfx_Sprite_ptr[GetBattlerPosition(sprite->data[0])] + (gBattleMonForms[sprite->data[0]] << 11) + (sprite->data[3] << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; StartSpriteAnim(sprite, gBattleMonForms[sprite->data[0]]); @@ -3217,7 +3218,7 @@ void sub_80105A0(struct Sprite *sprite) void oac_poke_ally_(struct Sprite *sprite) { - if ((gUnknown_02024DE8 & 1) == 0) + if ((gIntroSlideFlags & 1) == 0) { sprite->pos2.x -= 2; if (sprite->pos2.x == 0) @@ -3239,7 +3240,7 @@ void nullsub_86(struct Sprite *sprite) void sub_80105EC(struct Sprite *sprite) { - if ((gUnknown_02024DE8 & 1) == 0) + if ((gIntroSlideFlags & 1) == 0) { sprite->pos2.x += sprite->data[1]; sprite->pos2.y += sprite->data[2]; @@ -3329,7 +3330,7 @@ void nullsub_41(void) void sub_8010800(void) { - sub_8010874(); + BattleStartClearSetData(); gBattleCommunication[1] = 0; gBattleMainFunc = bc_8012FAC; } @@ -3339,39 +3340,39 @@ void debug_sub_80138CC(void) { if (GetBattlerSide(gActiveBattler) == 0) { - switch (gSharedMem[0x160FD]) + switch (gBattleStruct->unk160FD) { case 0: if (gBattlerControllerFuncs[gActiveBattler] == sub_802C098) - gSharedMem[0x160FD]++; + gBattleStruct->unk160FD++; break; case 1: gMain.heldKeys = A_BUTTON; gMain.newKeys = A_BUTTON; - gSharedMem[0x160FD]++; - gSharedMem[0x160FE] = 0x80; + gBattleStruct->unk160FD++; + gBattleStruct->unk160FE = 0x80; break; case 2: - gSharedMem[0x160FE]--; - if (gSharedMem[0x160FE] == 0) + gBattleStruct->unk160FE--; + if (gBattleStruct->unk160FE == 0) { gMain.heldKeys = A_BUTTON; gMain.newKeys = A_BUTTON; - gSharedMem[0x160FD]++; - gSharedMem[0x160FE] = 0x80; + gBattleStruct->unk160FD++; + gBattleStruct->unk160FE = 0x80; } break; case 3: - gSharedMem[0x160FE]--; - if (gSharedMem[0x160FE] == 0) + gBattleStruct->unk160FE--; + if (gBattleStruct->unk160FE == 0) { gMain.heldKeys = A_BUTTON; gMain.newKeys = A_BUTTON; - gSharedMem[0x160FD]++; + gBattleStruct->unk160FD++; } break; case 4: - gSharedMem[0x160FD] = 0; + gBattleStruct->unk160FD = 0; break; } } @@ -3398,7 +3399,7 @@ void BattleMainCB1(void) } } -void sub_8010874(void) +void BattleStartClearSetData(void) { s32 i; u32 j; @@ -3412,70 +3413,78 @@ void sub_8010874(void) gStatuses3[i] = 0; MEMSET_ALT(&gDisableStructs[i], 0, 0x1C, j, r4); - gDisableStructs[i].isFirstTurn= 2; - gUnknown_02024C70[i] = 0; + gDisableStructs[i].isFirstTurn = 2; + sUnusedBattlersArray[i] = 0; gLastMoves[i] = 0; gLastLandedMoves[i] = 0; gLastHitByType[i] = 0; - gUnknown_02024C4C[i] = 0; + gLastResultingMoves[i] = 0; gLastHitBy[i] = 0xFF; gLockedMoves[i] = 0; - gUnknown_02024C2C[i] = 0; - eFlashFireArr.arr[i] = 0; + gLastPrintedMoves[i] = 0; + eBattleFlagsArr.arr[i] = 0; } for (i = 0; i < 2; i++) { gSideStatuses[i] = 0; - MEMSET_ALT(&gSideTimers[i], 0, 12, j, r4); + MEMSET_ALT(&gSideTimers[i], 0, sizeof(struct SideTimer), j, r4); } gBattlerAttacker = 0; gBattlerTarget = 0; gBattleWeather = 0; - MEMSET_ALT(&gWishFutureKnock, 0, 0x2C, i, r4); + MEMSET_ALT(&gWishFutureKnock, 0, sizeof(struct WishFutureKnock), i, r4); gHitMarker = 0; if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) gHitMarker = HITMARKER_NO_ANIMATIONS; - ewram16084 = gSaveBlock2.optionsBattleStyle; + + gBattleStruct->battleStyle = gSaveBlock2.optionsBattleStyle; + gMultiHitCounter = 0; gBattleOutcome = 0; gBattleControllerExecFlags = 0; gPaydayMoney = 0; - ewram17130 = 0; - ewram17160 = 0; + (*(u8 *)&B_BATTLESCRIPTS_STACK->size) = 0; + (*(u8 *)&B_FUNCTION_STACK->size) = 0; + for (i = 0; i < 8; i++) gBattleCommunication[i] = 0; + gPauseCounterBattle = 0; gBattleMoveDamage = 0; - gUnknown_02024DE8 = 0; - ewram16002 = 0; - ewram160A1 = 0; + gIntroSlideFlags = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; gLeveledUpInBattle = 0; gAbsentBattlerFlags = 0; - ewram16078 = 0; - ewram16086 = 0; - ewram16087 = 0; - ewram16089 = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; - ewram16088 = 3; - ewram1601B = 0; - ewram16056 = 1; + gBattleStruct->runTries = 0; + gBattleStruct->safariGoNearCounter = 0; + gBattleStruct->safariPkblThrowCounter = 0; + gBattleStruct->safariCatchFactor = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + gBattleStruct->safariFleeRate = 3; + gBattleStruct->wildVictorySong = 0; + gBattleStruct->moneyMultiplier = 1; for (i = 0; i < 8; i++) { - ewram160ACarr(i) = 0; - ewram160CCarr(i) = 0; - ewram160E8arr(i) = 0; - ewram160F0arr(i) = 0; - ewram16100arr(i) = 0; - ewram16108arr(i) = 0; + // TODO: Find matching access here + eLastTakenMove_flat(i) = 0;/*((u8 *)(gBattleStruct->lastTakenMove))[i] = 0;*/ + ewram160CCarr(i) = 0;/*((u8 *)(gBattleStruct->usedHeldItems))[i] = 0;*/ + ewram160E8arr(i) = 0;/*((u8 *)(gBattleStruct->choicedMove))[i] = 0;*/ + ewram160F0arr(i) = 0;/*((u8 *)(gBattleStruct->changedItems))[i] = 0;*/ + ewram16100arr(i) = 0;/*((u8 *)(gBattleStruct->lastTakenMoveFrom) + 8 * 0)[i] = 0;*/ + ewram16108arr(i) = 0;/*((u8 *)(gBattleStruct->lastTakenMoveFrom) + 8 * 1)[i] = 0;*/ } - ewram160C8 = 6; - ewram160C9 = 6; - ewram16113 = 0; + gBattleStruct->AI_monToSwitchIntoId[0] = PARTY_SIZE; + gBattleStruct->AI_monToSwitchIntoId[1] = PARTY_SIZE; + + gBattleStruct->givenExpMons = 0; + + // Reset gBattleResults for (i = 0; i < 11; i++) gBattleResults.usedBalls[i] = 0; gBattleResults.battleTurnCounter = 0; @@ -3499,8 +3508,8 @@ void sub_8010874(void) gBattleResults.caughtNick[i] = 0; } #if DEBUG - gSharedMem[0x1609E] = 0; - gSharedMem[0x1609F] = 0; + gBattleStruct->unk1609E = 0; + gBattleStruct->unk1609F = 0; #endif } @@ -3572,12 +3581,12 @@ void SwitchInClearSetData(void) gLastMoves[gActiveBattler] = 0; gLastLandedMoves[gActiveBattler] = 0; gLastHitByType[gActiveBattler] = 0; - gUnknown_02024C4C[gActiveBattler] = 0; - gUnknown_02024C2C[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = 0; + gLastPrintedMoves[gActiveBattler] = 0; gLastHitBy[gActiveBattler] = 0xFF; - ewram160ACarr2(0, gActiveBattler) = 0; - ewram160ACarr2(1, gActiveBattler) = 0; + eLastTakenMove_2d(0, gActiveBattler) = 0; + eLastTakenMove_2d(1, gActiveBattler) = 0; ewram16100arr2(0, gActiveBattler) = 0; ewram16100arr2(1, gActiveBattler) = 0; ewram16100arr2(2, gActiveBattler) = 0; @@ -3585,7 +3594,7 @@ void SwitchInClearSetData(void) ewram160E8arr2(0, gActiveBattler) = 0; ewram160E8arr2(1, gActiveBattler) = 0; - eFlashFireArr.arr[gActiveBattler] = 0; + eBattleFlagsArr.arr[gActiveBattler] = 0; gCurrentMove = 0; } @@ -3636,20 +3645,20 @@ void UndoEffectsAfterFainting(void) gLastMoves[gActiveBattler] = 0; gLastLandedMoves[gActiveBattler] = 0; gLastHitByType[gActiveBattler] = 0; - gUnknown_02024C4C[gActiveBattler] = 0; - gUnknown_02024C2C[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = 0; + gLastPrintedMoves[gActiveBattler] = 0; gLastHitBy[gActiveBattler] = 0xFF; ewram160E8arr2(0, gActiveBattler) = 0; ewram160E8arr2(1, gActiveBattler) = 0; - ewram160ACarr2(0, gActiveBattler) = 0; - ewram160ACarr2(1, gActiveBattler) = 0; + eLastTakenMove_2d(0, gActiveBattler) = 0; + eLastTakenMove_2d(1, gActiveBattler) = 0; ewram16100arr2(0, gActiveBattler) = 0; ewram16100arr2(1, gActiveBattler) = 0; ewram16100arr2(2, gActiveBattler) = 0; ewram16100arr2(3, gActiveBattler) = 0; - eFlashFireArr.arr[gActiveBattler] = 0; + eBattleFlagsArr.arr[gActiveBattler] = 0; gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; @@ -3707,14 +3716,15 @@ void sub_8011384(void) } else { - u8 r0; + u16 *hpOnSwitchout; MEMSET_ALT(&gBattleMons[gActiveBattler], gBattleBufferB[gActiveBattler][4 + i], 0x58, i, ptr); gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].altAbility); - r0 = GetBattlerSide(gActiveBattler); - ewram160BC[r0] = gBattleMons[gActiveBattler].hp; + + hpOnSwitchout = &gBattleStruct->HP_OnSwitchout[GetBattlerSide(gActiveBattler)]; + *hpOnSwitchout = gBattleMons[gActiveBattler].hp; for (i = 0; i < 8; i++) gBattleMons[gActiveBattler].statStages[i] = 6; gBattleMons[gActiveBattler].status2 = 0; @@ -3933,9 +3943,9 @@ void sub_80119B4(void) MarkBattlerForControllerExec(gActiveBattler); } } - ewram16058 = 0; - ewram160F9 = 0; - ewram160E6 = 0; + gBattleStruct->unk16058 = 0; + gBattleStruct->unk160F9 = 0; + gBattleStruct->unk160E6 = 0; gBattleMainFunc = BattleBeginFirstTurn; } } @@ -3952,9 +3962,9 @@ void unref_sub_8011A68(void) MarkBattlerForControllerExec(gActiveBattler); } } - ewram16058 = 0; - ewram160F9 = 0; - ewram160E6 = 0; + gBattleStruct->unk16058 = 0; + gBattleStruct->unk160F9 = 0; + gBattleStruct->unk160E6 = 0; gBattleMainFunc = BattleBeginFirstTurn; } } @@ -3967,7 +3977,7 @@ void BattleBeginFirstTurn(void) if (gBattleControllerExecFlags == 0) { - if (ewram16058 == 0) + if (gBattleStruct->unk16058 == 0) { for (i = 0; i < gBattlersCount; i++) gBattlerByTurnOrder[i] = i; @@ -3980,16 +3990,16 @@ void BattleBeginFirstTurn(void) } } } - if (ewram160E6 == 0 && AbilityBattleEffects(0, 0, 0, 0xFF, 0) != 0) + if (gBattleStruct->unk160E6 == 0 && AbilityBattleEffects(0, 0, 0, 0xFF, 0) != 0) { - ewram160E6 = 1; + gBattleStruct->unk160E6 = 1; return; } - while (ewram16058 < gBattlersCount) + while (gBattleStruct->unk16058 < gBattlersCount) { - if (AbilityBattleEffects(0, gBattlerByTurnOrder[ewram16058], 0, 0, 0) != 0) + if (AbilityBattleEffects(0, gBattlerByTurnOrder[gBattleStruct->unk16058], 0, 0, 0) != 0) r9++; - ewram16058++; + gBattleStruct->unk16058++; if (r9 != 0) return; } @@ -3997,11 +4007,11 @@ void BattleBeginFirstTurn(void) return; if (AbilityBattleEffects(11, 0, 0, 0, 0) != 0) return; - while (ewram160F9 < gBattlersCount) + while (gBattleStruct->unk160F9 < gBattlersCount) { - if (ItemBattleEffects(0, gBattlerByTurnOrder[ewram160F9], 0) != 0) + if (ItemBattleEffects(0, gBattlerByTurnOrder[gBattleStruct->unk160F9], 0) != 0) r9++; - ewram160F9++; + gBattleStruct->unk160F9++; if (r9 != 0) return; } @@ -4016,20 +4026,20 @@ void BattleBeginFirstTurn(void) } TurnValuesCleanUp(0); SpecialStatusesClear(); - ewram160A6 = gAbsentBattlerFlags; + gBattleStruct->unk160A6 = gAbsentBattlerFlags; gBattleMainFunc = sub_8012324; ResetSentPokesToOpponentValue(); for (i = 0; i < 8; i++) gBattleCommunication[i] = 0; for (i = 0; i < gBattlersCount; i++) gBattleMons[i].status2 &= ~8; - ewram16000 = 0; - ewram16001 = 0; - ewram16110 = 0; - ewram16111 = 0; - ewram1600C = 0; - ewram16059 = 0; - ewram1600E = 0; + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBattlerId = 0; + gBattleStruct->wishPerishSongState = 0; + gBattleStruct->wishPerishSongBattlerId = 0; + gBattleStruct->cmd49StateTracker = 0; + gBattleStruct->sub80173A4_Tracker = 0; + gBattleStruct->turnCountersTracker = 0; gMoveResultFlags = 0; gRandomTurnNumber = Random(); } @@ -4050,11 +4060,11 @@ void bc_8013B1C(void) if ((gBattleMons[i].status1 & 7) && (gBattleMons[i].status2 & 0x1000)) CancelMultiTurnMoves(i); } - ewram16000 = 0; - ewram16001 = 0; - ewram16110 = 0; - ewram16111 = 0; - ewram1600E = 0; + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBattlerId = 0; + gBattleStruct->wishPerishSongState = 0; + gBattleStruct->wishPerishSongBattlerId = 0; + gBattleStruct->turnCountersTracker = 0; gMoveResultFlags = 0; } } @@ -4073,7 +4083,7 @@ void BattleTurnPassed(void) } if (HandleFaintedMonActions() != 0) return; - ewram16059 = 0; + gBattleStruct->sub80173A4_Tracker = 0; if (HandleWishPerishSongOnTurnEnd() != 0) return; TurnValuesCleanUp(0); @@ -4081,9 +4091,9 @@ void BattleTurnPassed(void) gHitMarker &= ~0x80000; gHitMarker &= ~0x400000; gHitMarker &= ~0x100000; - ewram16002 = 0; - ewram160A1 = 0; - ewram1600C = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; + gBattleStruct->cmd49StateTracker = 0; gBattleMoveDamage = 0; gMoveResultFlags = 0; for (i = 0; i < 5; i++) @@ -4103,7 +4113,7 @@ void BattleTurnPassed(void) } for (i = 0; i < 4; i++) ewram16068arr(i) = 6; - ewram160A6 = gAbsentBattlerFlags; + gBattleStruct->unk160A6 = gAbsentBattlerFlags; gBattleMainFunc = sub_8012324; gRandomTurnNumber = Random(); } @@ -4131,7 +4141,7 @@ u8 CanRunFromBattle(void) if (r6 != GetBattlerSide(i) && gBattleMons[i].ability == ABILITY_SHADOW_TAG) { - ewram16003 = i; + gBattleStruct->scriptingActive = i; gLastUsedAbility = gBattleMons[i].ability; gBattleCommunication[5] = 2; return 2; @@ -4142,7 +4152,7 @@ u8 CanRunFromBattle(void) && gBattleMons[gActiveBattler].type2 != 2 && gBattleMons[i].ability == ABILITY_ARENA_TRAP) { - ewram16003 = i; + gBattleStruct->scriptingActive = i; gLastUsedAbility = gBattleMons[i].ability; gBattleCommunication[5] = 2; return 2; @@ -4151,7 +4161,7 @@ u8 CanRunFromBattle(void) i = AbilityBattleEffects(15, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0); if (i != 0 && (gBattleMons[gActiveBattler].type1 == 8 || gBattleMons[gActiveBattler].type2 == 8)) { - ewram16003 = i - 1; + gBattleStruct->scriptingActive = i - 1; gLastUsedAbility = gBattleMons[i - 1].ability; gBattleCommunication[5] = 2; return 2; @@ -4232,11 +4242,11 @@ void sub_8012324(void) ewram16068arr(gActiveBattler) = 6; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && (position & BIT_FLANK) != B_FLANK_LEFT - && !(ewram160A6 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]) + && !(gBattleStruct->unk160A6 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]) && gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] != STATE_WAIT_ACTION_CONFIRMED) break; //_080123F8 - if (ewram160A6 & gBitTable[gActiveBattler]) + if (gBattleStruct->unk160A6 & gBitTable[gActiveBattler]) { gActionForBanks[gActiveBattler] = 13; if (!(gBattleTypeFlags & 0x40)) @@ -4509,7 +4519,7 @@ void sub_8012324(void) { if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) || (position & BIT_FLANK) != B_FLANK_LEFT - || (ewram160A6 & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) + || (gBattleStruct->unk160A6 & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) { BtlController_EmitLinkStandbyMsg(0, 0); } @@ -4895,8 +4905,8 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) gBattleMainFunc = RunTurnActionsFunctions; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; - eMultihitMoveEffect = 0; - ewram17130 = 0; + gBattleStruct->multihitMoveEffect = 0; + B_BATTLESCRIPTS_STACK->size = 0; } static void RunTurnActionsFunctions(void) @@ -5170,7 +5180,7 @@ void HandleAction_UseMove(void) gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (ewram160A6 & gBitTable[gBattlerAttacker]) + if (gBattleStruct->unk160A6 & gBitTable[gBattlerAttacker]) { gCurrentActionFuncId = B_ACTION_FINISHED; return; @@ -5178,7 +5188,7 @@ void HandleAction_UseMove(void) gCritMultiplier = 1; eDmgMultiplier = 1; - ewram160E7 = 0; + gBattleStruct->atkCancellerTracker = 0; gMoveResultFlags = 0; gMultiHitCounter = 0; gBattleCommunication[6] = 0; @@ -5359,7 +5369,7 @@ void HandleAction_Switch(void) PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, ewram16064arr(gBattlerAttacker)) - ewram16003 = gBattlerAttacker; + gBattleStruct->scriptingActive = gBattlerAttacker; gBattlescriptCurrInstr = BattleScript_ActionSwitch; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; @@ -5390,7 +5400,7 @@ void HandleAction_UseItem(void) else { - switch (ewram160D8((ewram16003 = gBattlerAttacker))) + switch (ewram160D8((gBattleStruct->scriptingActive = gBattlerAttacker))) { case AI_ITEM_FULL_RESTORE: case AI_ITEM_HEAL_HP: @@ -5428,8 +5438,8 @@ void HandleAction_UseItem(void) gBattleTextBuff1[2]++; } - ewram160A4 = gBattleTextBuff1[2] + 14; - ewram160A5 = 0; + gBattleStruct->animArg1 = gBattleTextBuff1[2] + 14; + gBattleStruct->animArg2 = 0; } break; case AI_ITEM_GUARD_SPECS: @@ -5476,7 +5486,7 @@ bool8 TryRunFromBattle(u8 bank) { if (gBattleMons[bank].speed < gBattleMons[bank ^ BIT_SIDE].speed) { - speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (ewram16078 * 30); + speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (gBattleStruct->runTries * 30); if (speedVar > (Random() & 0xFF)) effect++; } @@ -5486,7 +5496,7 @@ bool8 TryRunFromBattle(u8 bank) } } - ewram16078++; + gBattleStruct->runTries++; } if (effect) @@ -5579,14 +5589,14 @@ void HandleAction_ThrowPokeblock(void) gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; - if (ewram16087 < 3) - ewram16087++; - if (ewram16088 > 1) + if (gBattleStruct->safariPkblThrowCounter < 3) + gBattleStruct->safariPkblThrowCounter++; + if (gBattleStruct->safariFleeRate > 1) { - if (ewram16088 < gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]) - ewram16088 = 1; + if (gBattleStruct->safariFleeRate < gUnknown_081FA70C[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + gBattleStruct->safariFleeRate = 1; else - ewram16088 -= gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]; + gBattleStruct->safariFleeRate -= gUnknown_081FA70C[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; } gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; @@ -5599,17 +5609,17 @@ void HandleAction_GoNear(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - ewram16089 += gUnknown_081FA71B[ewram16086]; - if (ewram16089 > 20) - ewram16089 = 20; + gBattleStruct->safariCatchFactor += gUnknown_081FA71B[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariCatchFactor > 20) + gBattleStruct->safariCatchFactor = 20; - ewram16088 += gUnknown_081FA71F[ewram16086]; - if (ewram16088 > 20) - ewram16088 = 20; + gBattleStruct->safariFleeRate += gUnknown_081FA71F[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariFleeRate > 20) + gBattleStruct->safariFleeRate = 20; - if (ewram16086 < 3) + if (gBattleStruct->safariGoNearCounter < 3) { - ewram16086++; + gBattleStruct->safariGoNearCounter++; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } else @@ -5645,7 +5655,7 @@ void HandleAction_Action11(void) { if (!HandleFaintedMonActions()) { - ewram16059 = 0; + gBattleStruct->sub80173A4_Tracker = 0; gCurrentActionFuncId = B_ACTION_FINISHED; } } @@ -5673,15 +5683,15 @@ void HandleAction_ActionFinished(void) | HITMARKER_CHARGING | HITMARKER_x4000000); gBattleMoveDamage = 0; - ewram16002 = 0; - ewram160A1 = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; gLastLandedMoves[gBattlerAttacker] = 0; gLastHitByType[gBattlerAttacker] = 0; eDynamicMoveType = 0; gDynamicBasePower = 0; - ewram1600C = 0; + gBattleStruct->cmd49StateTracker = 0; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; - eMultihitMoveEffect = 0; - ewram17130 = 0; + gBattleStruct->multihitMoveEffect = 0; + B_BATTLESCRIPTS_STACK->size = 0; } diff --git a/src/battle_message.c b/src/battle_message.c index ce1e63edd..b8872163b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -658,7 +658,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) { if (gLastUsedItem == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id == gPotentialItemEffectBattler) + if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler) { StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name); #ifdef ENGLISH @@ -724,7 +724,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT) { memset(text, 0xFF, 8); - memcpy(text, ewram17002, 7); + memcpy(text, eSecretBaseRecord->playerName, 7); toCpy = text; } else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) @@ -949,7 +949,7 @@ void ExpandBattleTextBuffPlaceholders(u8* src, u8* dst) { if (hword == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id == gPotentialItemEffectBattler) + if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler) { StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name); #ifdef ENGLISH diff --git a/src/battle_records.c b/src/battle_records.c index 307b977d5..e040418a7 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -29,7 +29,7 @@ const struct DebugStruct1 gUnknown_Debug_4245CC[] = { 7, DTR("ナンバー7", "NUMBER7") }, }; -const struct {u8 unk0; u8 unk1;} gUnknown_Debug_8424620[] = +const struct {u8 totalPoints; u8 nextTurnSpriteId;} gUnknown_Debug_8424620[] = { { 1, 1 }, { 2, 1 }, @@ -231,13 +231,13 @@ void debug_sub_81257E0(void) InitLinkBattleRecords(); for (i = 0; i < 3; i++) { - u32 id = gUnknown_Debug_8424620[i].unk0 - 1; + u32 id = gUnknown_Debug_8424620[i].totalPoints - 1; UpdateLinkBattleRecords_( gSaveBlock1.linkBattleRecords, gUnknown_Debug_4245CC[id].var1, gUnknown_Debug_4245CC[id].var0, - gUnknown_Debug_8424620[i].unk1, + gUnknown_Debug_8424620[i].nextTurnSpriteId, gLinkPlayers[gLinkPlayerObjectEvents[id].linkPlayerId].language); } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0cdcfe8f9..d1143d764 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -91,7 +91,7 @@ extern u8 gBattleTextBuff2[]; extern u8 gBattleTextBuff3[]; extern u8 gLeveledUpInBattle; extern void (*gBattleMainFunc)(void); -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern const u8 BattleText_YesNo[]; extern u8 gPlayerPartyCount; extern u16 gMoveToLearn; //move to learn @@ -101,8 +101,8 @@ extern u8* gBattleScriptsForMoveEffects[]; extern u16 gChosenMove; //last used move in battle extern u8 gBankInMenu; extern u8 gActionForBanks[4]; -extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch -extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one +extern u16 gLastPrintedMoves[4]; //last used moves 2, used by sketch +extern u16 gLastResultingMoves[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; @@ -4991,7 +4991,7 @@ static void atk15_seteffectwithchance(void) } gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - gBattleStruct->unk16112 = 0; + gBattleStruct->multihitMoveEffect = 0; } static void atk16_seteffectprimary(void) @@ -5015,7 +5015,7 @@ static void atk18_clearstatusfromeffect(void) gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattlescriptCurrInstr += 2; - gBattleStruct->unk16112 = 0; + gBattleStruct->multihitMoveEffect = 0; } static void atk19_tryfaintmon(void) @@ -5057,8 +5057,8 @@ static void atk19_tryfaintmon(void) if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]) && gBattleMons[gActiveBattler].hp == 0) { - ewram160ACarr2(0, battlerId) = 0; - ewram160ACarr2(1, battlerId) = 0; + eLastTakenMove_2d(0, battlerId) = 0; + eLastTakenMove_2d(1, battlerId) = 0; ewram16100arr2(0, battlerId) = 0; ewram16100arr2(1, battlerId) = 0; ewram16100arr2(2, battlerId) = 0; @@ -5334,7 +5334,7 @@ static void atk23_getexp(void) else { gBattleStruct->getexpStateTracker++; - gBattleStruct->unk16113 |= gBitTable[gBattlerPartyIndexes[gBank1]]; + gBattleStruct->givenExpMons |= gBitTable[gBattlerPartyIndexes[gBank1]]; } break; case 1: // calculate experience points to redistribute @@ -6673,7 +6673,7 @@ void atk49_moveend(void) } if (gBattleMoves[gChosenMove].effect != 0x7F || (gMoveResultFlags & 0x29)) - gUnknown_02024C2C[gBattlerAttacker] = gChosenMove; + gLastPrintedMoves[gBattlerAttacker] = gChosenMove; if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gSharedMem[0x160A6] & gBitTable[gBattlerAttacker]) @@ -6682,12 +6682,12 @@ void atk49_moveend(void) if (gHitMarker & HITMARKER_OBEYS) { gLastMoves[gBattlerAttacker] = gChosenMove; - gUnknown_02024C4C[gBattlerAttacker] = gCurrentMove; + gLastResultingMoves[gBattlerAttacker] = gCurrentMove; } else { gLastMoves[gBattlerAttacker] = 0xFFFF; - gUnknown_02024C4C[gBattlerAttacker] = 0xFFFF; + gLastResultingMoves[gBattlerAttacker] = 0xFFFF; } if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))) @@ -8294,8 +8294,8 @@ void atk59_handlelearnnewmove(void) void sub_8023A80(void) { sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); - Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 0x100, 0x19, 0x9); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_YesNo, 0x100, 0x19, 0x9); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); } @@ -9304,7 +9304,7 @@ _08024AB8:\n\ bgt _08024AC4\n\ b _0802495A\n\ _08024AC4:\n\ - ldr r4, _08024AE4 @ =gUnknown_03004210\n\ + ldr r4, _08024AE4 @ =gWindowTemplate_Contest_MoveDescription\n\ ldr r1, _08024AE8 @ =gStringVar4\n\ adds r2, 0xFF\n\ movs r0, 0x1\n\ @@ -9319,7 +9319,7 @@ _08024AC4:\n\ adds r1, r2\n\ b _08024BEA\n\ .align 2, 0\n\ -_08024AE4: .4byte gUnknown_03004210\n\ +_08024AE4: .4byte gWindowTemplate_Contest_MoveDescription\n\ _08024AE8: .4byte gStringVar4\n\ _08024AEC: .4byte gSharedMem\n\ _08024AF0: .4byte 0x0001609c\n\ @@ -9424,7 +9424,7 @@ _08024BC0:\n\ mov r2, r8\n\ cmp r2, 0x5\n\ ble _08024B1C\n\ - ldr r4, _08024BF4 @ =gUnknown_03004210\n\ + ldr r4, _08024BF4 @ =gWindowTemplate_Contest_MoveDescription\n\ ldr r1, _08024BF8 @ =gStringVar4\n\ movs r2, 0x80\n\ lsls r2, 1\n\ @@ -9444,7 +9444,7 @@ _08024BEA:\n\ strb r0, [r1]\n\ b _08024C38\n\ .align 2, 0\n\ -_08024BF4: .4byte gUnknown_03004210\n\ +_08024BF4: .4byte gWindowTemplate_Contest_MoveDescription\n\ _08024BF8: .4byte gStringVar4\n\ _08024BFC: .4byte gSharedMem\n\ _08024C00: .4byte 0x0001609c\n\ @@ -9574,7 +9574,7 @@ static void atk74_hpthresholds2(void) { gActiveBattler = GetBattlerForBattleScript(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBattler ^ 1; - hp_switchout = ewram160BCarr(GetBattlerSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBattlerSide(opposing_bank)]; + hp_switchout = eHpOnSwitchout(GetBattlerSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBattlerSide(opposing_bank)]; result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; if (gBattleMons[opposing_bank].hp >= hp_switchout) @@ -9666,7 +9666,7 @@ static void atk76_various(void) static void atk77_setprotectlike(void) //protect and endure { bool8 not_last_turn = 1; - u16 last_move = gUnknown_02024C4C[gBattlerAttacker]; + u16 last_move = gLastResultingMoves[gBattlerAttacker]; if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) gDisableStructs[gBattlerAttacker].protectUses = 0; @@ -9788,7 +9788,7 @@ static void atk7B_tryhealhalfhealth(void) static void atk7C_trymirrormove(void) { - u16 r7 = ewram160ACarr2(0, gBattlerAttacker) | (ewram160ACarr2(1, gBattlerAttacker) << 8); + u16 r7 = eLastTakenMove_2d(0, gBattlerAttacker) | (eLastTakenMove_2d(1, gBattlerAttacker) << 8); u16 r6 = ewram16100arr2(0, gBattlerAttacker) | (ewram16100arr2(1, gBattlerAttacker) << 8); u16 r5 = ewram16100arr2(2, gBattlerAttacker) | (ewram16100arr2(3, gBattlerAttacker) << 8); @@ -11867,14 +11867,14 @@ struct move_pp static void atkA8_copymovepermanently(void) { gChosenMove = 0xFFFF; - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) && gUnknown_02024C2C[gBattlerTarget] != MOVE_STRUGGLE && gUnknown_02024C2C[gBattlerTarget] != 0 && gUnknown_02024C2C[gBattlerTarget] != 0xFFFF && gUnknown_02024C2C[gBattlerTarget] != MOVE_SKETCH) + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) && gLastPrintedMoves[gBattlerTarget] != MOVE_STRUGGLE && gLastPrintedMoves[gBattlerTarget] != 0 && gLastPrintedMoves[gBattlerTarget] != 0xFFFF && gLastPrintedMoves[gBattlerTarget] != MOVE_SKETCH) { int i; for (i = 0; i < 4; i++) { if (gBattleMons[gBattlerAttacker].moves[i] == MOVE_SKETCH) continue; - if (gBattleMons[gBattlerAttacker].moves[i] == gUnknown_02024C2C[gBattlerTarget]) + if (gBattleMons[gBattlerAttacker].moves[i] == gLastPrintedMoves[gBattlerTarget]) break; } if (i != 4) //sketch fail @@ -11882,8 +11882,8 @@ static void atkA8_copymovepermanently(void) else //sketch worked { struct move_pp moves_data; - gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gUnknown_02024C2C[gBattlerTarget]; - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknown_02024C2C[gBattlerTarget]].pp; + gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBattlerTarget]; + gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastPrintedMoves[gBattlerTarget]].pp; gActiveBattler = gBattlerAttacker; for (i = 0; i < 4; i++) { @@ -11895,8 +11895,8 @@ static void atkA8_copymovepermanently(void) MarkBattlerForControllerExec(gActiveBattler); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gUnknown_02024C2C[gBattlerTarget]; - gBattleTextBuff1[3] = gUnknown_02024C2C[gBattlerTarget] >> 8; + gBattleTextBuff1[2] = gLastPrintedMoves[gBattlerTarget]; + gBattleTextBuff1[3] = gLastPrintedMoves[gBattlerTarget] >> 8; gBattleTextBuff1[4] = 0xFF; gBattlescriptCurrInstr += 5; } @@ -13376,7 +13376,7 @@ void atkEF_handleballthrow(void) u32 odds; u8 catch_rate; if (gLastUsedItem == ITEM_SAFARI_BALL) - catch_rate = gBattleStruct->unk16089 * 1275 / 100; //correct the name to safariFleeRate + catch_rate = gBattleStruct->safariCatchFactor * 1275 / 100; //correct the name to safariFleeRate else catch_rate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; if (gLastUsedItem > 5) diff --git a/src/battle_setup.c b/src/battle_setup.c index d8319e620..bc569dff7 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -2,6 +2,14 @@ #include "battle_setup.h" #include "battle.h" #include "battle_transition.h" +#include "constants/battle_setup.h" +#include "constants/items.h" +#include "constants/map_types.h" +#include "constants/maps.h" +#include "constants/opponents.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest_util.h" #include "data2.h" #include "event_data.h" #include "field_control_avatar.h" @@ -13,12 +21,11 @@ #include "fldeff_poison.h" #include "main.h" #include "metatile_behavior.h" +#include "overworld.h" #include "palette.h" #include "random.h" -#include "overworld.h" #include "safari_zone.h" #include "script.h" -#include "script_pokemon_80C4.h" #include "secret_base.h" #include "sound.h" #include "starter_choose.h" @@ -27,13 +34,6 @@ #include "task.h" #include "text.h" #include "trainer.h" -#include "constants/battle_setup.h" -#include "constants/map_types.h" -#include "constants/maps.h" -#include "constants/opponents.h" -#include "constants/songs.h" -#include "constants/species.h" -#include "constants/items.h" extern u16 gSpecialVar_Result; diff --git a/src/battle_tower.c b/src/battle_tower.c index 5d3bc207d..6b8af4d86 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,31 +1,31 @@ #include "global.h" +#include "battle_tower.h" #include "battle.h" #include "battle_setup.h" -#include "battle_tower.h" #include "battle_transition.h" +#include "constants/easy_chat.h" +#include "constants/event_objects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/vars.h" +#include "contest_util.h" #include "data2.h" #include "easy_chat.h" -#include "constants/easy_chat.h" #include "event_data.h" +#include "ewram.h" #include "item.h" -#include "constants/items.h" #include "main.h" -#include "constants/event_objects.h" -#include "constants/moves.h" #include "new_game.h" #include "overworld.h" #include "pokedex.h" #include "random.h" #include "save.h" -#include "script_pokemon_80C4.h" -#include "constants/species.h" #include "string_util.h" #include "task.h" #include "text.h" #include "trainer.h" #include "tv.h" -#include "constants/vars.h" -#include "ewram.h" #if ENGLISH #include "data/battle_tower/trainers.h" diff --git a/src/battle_util.c b/src/battle_util.c index b1260cd4e..4f8a0b036 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1303,7 +1303,7 @@ bool8 HandleFaintedMonActions(void) do { gBank1 = gBattlerTarget = gBattleStruct->unk1605A; - if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->unk16113 & gBitTable[gBattlerPartyIndexes[gBattleStruct->unk1605A]]) && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->unk1605A])) + if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->unk1605A]]) && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->unk1605A])) { BattleScriptExecute(BattleScript_GiveExp); gBattleStruct->sub80173A4_Tracker = 2; @@ -2003,14 +2003,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS1_FREEZE)) { - if (!(eFlashFireArr.arr[bank] & 1)) + if (!(eBattleFlagsArr.arr[bank] & 1)) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gProtectStructs[gBattlerAttacker].notFirstStrike) gBattlescriptCurrInstr = BattleScript_FlashFireBoost; else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - eFlashFireArr.arr[bank] |= 1; + eBattleFlagsArr.arr[bank] |= 1; effect = 2; } else diff --git a/src/berry_blender.c b/src/berry_blender.c index 7955c1458..b8897f964 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2479,7 +2479,7 @@ static void sub_8050E30(void) case 11: if (++gBerryBlenderData->framesToWait > 30) { - sub_800832C(); + SetCloseLinkCallback(); gBerryBlenderData->field_6F++; } break; diff --git a/src/cable_club.c b/src/cable_club.c index aeae50f50..961ab739f 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -1,7 +1,9 @@ #include "global.h" +#include "cable_club.h" #include "battle.h" #include "battle_records.h" -#include "cable_club.h" +#include "constants/songs.h" +#include "contest_util.h" #include "event_data.h" #include "field_message_box.h" #include "field_specials.h" @@ -11,12 +13,10 @@ #include "m4a.h" #include "main.h" #include "menu.h" +#include "overworld.h" #include "palette.h" #include "record_mixing.h" -#include "overworld.h" #include "script.h" -#include "script_pokemon_80C4.h" -#include "constants/songs.h" #include "sound.h" #include "start_menu.h" #include "string_util.h" @@ -431,7 +431,7 @@ static void sub_80831F8(u8 taskId) return; if (gSpecialVar_Result == 3) { - sub_800832C(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = sub_80833C4; } @@ -452,7 +452,7 @@ static void sub_8083288(u8 taskId) if (gSpecialVar_Result == 3) { - sub_800832C(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = sub_80833C4; } @@ -511,7 +511,7 @@ static void sub_8083314(u8 taskId) return; } - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80833C4; } @@ -757,7 +757,7 @@ static void sub_808382C(u8 taskId) task->data[0]++; break; case 3: - sub_800832C(); + SetCloseLinkCallback(); task->data[0]++; break; case 4: @@ -890,7 +890,7 @@ static void sub_8083AAC(u8 taskId) gUnknown_020297D8.field0 = 0; gUnknown_020297D8.field1 = 0; m4aMPlayAllStop(); - sub_800832C(); + SetCloseLinkCallback(); task->data[0]++; break; case 3: @@ -1009,7 +1009,7 @@ static void sub_8083CA4(u8 taskId) void unref_sub_8083CC8(u8 taskId) { - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_8083CA4; } diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c index 760887834..c15b94d8f 100644 --- a/src/calculate_base_damage.c +++ b/src/calculate_base_damage.c @@ -330,7 +330,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } // flash fire triggered - if ((eFlashFireArr.arr[bankAtk] & 1) && type == TYPE_FIRE) + if ((eBattleFlagsArr.arr[bankAtk] & 1) && type == TYPE_FIRE) damage = (15 * damage) / 10; } diff --git a/src/choose_party.c b/src/choose_party.c index f1252f965..5ed637910 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -23,7 +23,7 @@ extern u8 gPlayerPartyCount; extern u8 gLastFieldPokeMenuOpened; extern u8 gUnknown_020384F0; -extern struct UnknownPokemonStruct2 gMultiPartnerParty[3]; +extern struct MultiBattlePokemonTx gMultiPartnerParty[3]; extern u8 gUnknown_0202E8F6; extern const u16 gBattleTowerBannedSpecies[]; diff --git a/src/contest.c b/src/contest.c index 50824c867..150c6dbbd 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1,15 +1,16 @@ #include "global.h" -#include "constants/items.h" +#include "contest.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" #include "constants/event_objects.h" +#include "constants/items.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" -#include "battle.h" -#include "battle_anim.h" -#include "blend_palette.h" -#include "contest.h" +#include "contest_ai.h" #include "contest_effect.h" -#include "contest_link_80C857C.h" +#include "contest_link.h" #include "data2.h" #include "decompress.h" #include "ewram.h" @@ -23,6 +24,7 @@ #include "palette.h" #include "random.h" #include "rom_8077ABC.h" +#include "scanline_effect.h" #include "script.h" #include "sound.h" #include "sprite.h" @@ -30,17 +32,16 @@ #include "task.h" #include "text.h" #include "tv.h" -#include "scanline_effect.h" #include "util.h" -#include "contest_ai.h" + +#include "contest_internal.h" extern u8 gUnknown_020297ED; extern void sub_80C8A38(u8); -extern void sub_80C8AD0(u8); -extern void sub_80C8C80(u8); +extern void Task_LinkContest_CommunicateFinalStandings(u8); +extern void Task_LinkContest_CommunicateAppealsState(u8); -extern struct MusicPlayerInfo gMPlayInfo_SE1; extern u8 gBattleMonForms[]; extern u8 gDisplayedStringBattle[]; extern u16 gBattleTypeFlags; @@ -48,45 +49,20 @@ extern u8 gBattlerAttacker; extern u8 gBattlerTarget; extern u8 gBattlerPositions[]; extern u8 gBattlerSpriteIds[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; u32 gContestRngValue; -extern struct SpriteTemplate gUnknown_02024E8C; -extern const struct ContestPokemon gContestOpponents[60]; -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 gUnknown_083CA33C[]; extern const u8 gUnknown_083CA340[][4]; -extern const struct SpriteSheet gUnknown_083CA350; -extern const struct SpriteTemplate gSpriteTemplate_83CA3AC; -extern const struct CompressedSpriteSheet gUnknown_083CA3C4[]; -extern const struct SpritePalette gUnknown_083CA3E4; -extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[]; -extern const struct SubspriteTable gSubspriteTables_83CA464[]; -extern const struct CompressedSpriteSheet gUnknown_083CA46C; -extern const struct SpritePalette gUnknown_083CA474; -extern const struct SpriteTemplate gSpriteTemplate_83CA484; -extern const struct SpriteTemplate gSpriteTemplate_83CA4A4; -extern const struct CompressedSpriteSheet gUnknown_083CA4BC; -extern const struct CompressedSpriteSheet gUnknown_083CA4C4; -extern const struct CompressedSpritePalette gUnknown_083CA4CC; -extern const struct SpriteTemplate gUnknown_083CA4D4; -extern const struct CompressedSpriteSheet gUnknown_083CC3AC; -extern const struct CompressedSpritePalette gUnknown_083CC3B4[]; -extern const struct SpriteTemplate gSpriteTemplate_83CC454[]; extern const u8 gText_Contest_WhichMoveWillBePlayed[]; extern const u8 gText_Contest_ButItCantParticipate[]; -extern const u8 gUnknown_083CAFD7[]; -extern const u8 gUnknown_083CB00D[]; +extern const u8 gText_MonAppealedWithMove[]; +extern const u8 gText_MonWasWatchingOthers[]; extern const u8 ContestString_JudgeExpectantly2[]; extern const u8 ContestString_WentOverWell[]; extern const u8 ContestString_WentOverVeryWell[]; extern const u8 ContestString_AppealComboExcellently[]; -extern const u8 gUnknown_083CBF60[]; -extern const u8 gUnknown_083CB02C[]; +extern const u8 ContestString_TooNervous[]; +extern const u8 gText_AllOutOfAppealTime[]; extern const u8 *const gContestStandOutStrings[]; extern const u8 ContestString_DissapointedRepeat[]; extern const u8 ContestString_WentOverGreat[]; @@ -95,192 +71,27 @@ extern const u8 ContestString_GotCrowdGoing[]; extern const u8 ContestString_CantAppealNextTurn[]; extern const u8 ContestString_CrowdWatches[]; extern const u8 ContestString_Ignored2[]; -extern const u8 *const gUnknown_083CC188[]; -extern const u8 gText_Contest_Shyness[]; -extern const u8 gText_Contest_Anxiety[]; -extern const u8 gText_Contest_Laziness[]; -extern const u8 gText_Contest_Hesitancy[]; -extern const u8 gText_Contest_Fear[]; extern const u8 *const gContestCategoryStrings[]; -extern const u8 gUnknown_083CC2EC[]; -extern const u8 *const gUnknown_083CC330[]; +extern const u8 *const sInvalidContestMoveNames[]; extern const u8 gUnknownText_UnknownFormatting2[]; extern const u8 gUnknownText_UnknownFormatting3[]; -extern const u8 gUnknown_083CC59C[]; -extern const u8 gUnknown_083CC5A2[]; -extern const u16 gUnknown_083CC5A4[]; -extern const struct ContestWinner gUnknown_083CC5D0[]; -extern const u8 gUnknownText_MissedTurn[]; -extern const u8 gUnknownText_LinkStandbyAndWinner[]; -extern void (*const gContestEffectFuncs[])(void); -extern const s8 gContestExcitementTable[][5]; - -void sub_80AB350(void); -void sub_80AB5D4(u8); -void sub_80AB604(u8); -void sub_80AB678(u8); -void sub_80AB694(u8); -void sub_80AB6B4(u8); -u8 sub_80AB70C(u8 *); -void sub_80AB960(u8); -void sub_80AB9A0(u8); -void ContestMainCallback2(void); -void ContestVBlankCallback(void); -void sub_80ABB70(u8); -void sub_80ABC3C(u8); -void sub_80ABC70(u8); -void sub_80ABCDC(u8); -void sub_80ABEA0(u8); -void sub_80AC0AC(s8); -void nullsub_17(s8); -void sub_80AC0C8(u8); -void sub_80AC15C(u8); -void sub_80AC188(u8); -void sub_80AC204(u8); -void sub_80AC250(u8); -void sub_80AC284(u8); -void sub_80AC2CC(u8); -void sub_80AD8DC(u8); -void sub_80AD8FC(struct Sprite *); -void sub_80AD92C(struct Sprite *); -void sub_80AD960(u8); -void sub_80ADA1C(u8); -void sub_80ADA4C(u8); -void sub_80ADAD8(u8); -void sub_80ADB04(u8); -void sub_80ADB48(u8); -void sub_80ADB88(u8); -void sub_80ADC10(u8); -void sub_80ADC4C(u8); -void sub_80ADC84(u8); -void sub_80ADCB4(u8); -void sub_80ADD04(u8); -void sub_80ADD74(u8); -void sub_80ADDA4(u8); -void sub_80ADE54(u8); -void sub_80ADEAC(u8); -void sub_80ADEEC(u8); -void sub_80ADF4C(u8); -void sub_80ADF98(u8); -void sub_80ADFD8(u8); -void sub_80AE010(void); -void InsertStringDigit(u8 *, s32); -bool8 sub_80AE074(void); -void sub_80AEB4C(void *); -void sub_80AE5BC(u8); -void sub_80AE5D4(u8, u8); -void sub_80AE6CC(u8); -void sub_80AE6E4(u8, u8); -u8 CreateJudgeSprite(void); -u8 sub_80AE8B4(void); -u8 sub_80AE9FC(u16, u32, u32); -void sub_80AEB30(void); -void sub_80AEBEC(u16); -void sub_80AED58(void); -bool8 sub_80AEE54(u8, u8); -bool8 sub_80AF038(u8); -void sub_80AF120(void); -void sub_80AF138(void); -u16 GetChosenMove(u8); -void sub_80AF1B8(void); -void sub_80AF2A0(u8); -void sub_80AF2FC(void); -void sub_80AF3C0(void); -s16 sub_80AF688(u8); -void DetermineFinalStandings(void); -bool8 sub_80AF828(s32, s32, struct UnknownContestStruct6 *); -void sub_80AF860(void); -void sub_80AF94C(u8); -void sub_80AFA5C(void); -u16 sub_80AFB40(u8); -s8 sub_80AFB74(s16); -u8 sub_80AFBA0(s16, s16, u8); -void sub_80AFC74(u8); -void sub_80AFE30(void); -void sub_80AFF10(void); -bool8 sub_80AFF28(void); -void sub_80AFF60(struct Sprite *); -void sub_80AFFE0(bool8); -void sub_80B0034(void); -void CreateApplauseMeterSprite(void); -void nullsub_18(s8); -void sub_80B0238(struct Sprite *); -void sub_80B0280(struct Sprite *); -void sub_80B02A8(struct Sprite *); -void sub_80B02F4(struct Sprite *); -void sub_80B0324(void); -void sub_80B03A8(u8); -void sub_80B03D8(u8); -void sub_80B0458(u8); -void sub_80B0518(void); -void sub_80B0548(u8); -void sub_80B05A4(u8); -void nullsub_19(int); -void sub_80B05FC(u8); -void sub_80B0748(u8); -void sub_80B09B0(u8); -u8 sub_80B09E4(u8); -void sub_80B0BC4(u8, bool8); -void sub_80B0C5C(struct Sprite *); -void sub_80B0CB0(struct Sprite *); -void sub_80B0CDC(u8, int); -void unref_sub_80B0CF4(void); -void sub_80B0D7C(void); -void sub_80B1118(void); -void sub_80B114C(u8); -void sub_80B146C(u8, u8); -void sub_80B159C(void); -void sub_80B1710(u8); -void sub_80B1928(void); -u8 sub_80B1A2C(void); -void c3_08130B10(u8); -void sub_80B1B14(void); -void sub_80B1B68(u8); -void sub_80B1BDC(void); -void sub_80B1C34(u8); -void sub_80B1CBC(s8); -void sub_80B1CFC(u8); -void sub_80B1DDC(void); -void sub_80B1DFC(u8); -void sub_80B1EA8(s8, s8); -void sub_80B1F4C(u8); -void sub_80B1FD0(bool8); -const u8 *GetTurnOrderNumberGfx(u8); -void sub_80B20C4(void); -void sub_80B2184(void); -void sub_80B2280(void); -void sub_80B237C(u8); -void sub_80B23BC(u8); -void sub_80B2400(u8); -void sub_80B253C(u8); -void sub_80B25A4(u8); -void sub_80B25E4(u8); -void sub_80B26C8(u8); -u16 SanitizeMove(u16); -u16 SanitizeSpecies(u16); -void sub_80B2790(u8); -void sub_80B28CC(int); -void sub_80B28F0(u8); -void sub_80B292C(void); -void sub_80B2968(void); -void SelectContestMoveBankTarget(u16); EWRAM_DATA u8 gUnknown_0203856C = 0; EWRAM_DATA struct ContestPokemon gContestMons[4] = {0}; -EWRAM_DATA s16 gContestMonConditions[4] = {0}; -EWRAM_DATA s16 gUnknown_02038678[4] = {0}; -EWRAM_DATA s16 gUnknown_02038680[4] = {0}; -EWRAM_DATA s16 gUnknown_02038688[4] = {0}; +EWRAM_DATA s16 gContestMonRound1Points[4] = {0}; +EWRAM_DATA s16 gContestMonTotalPoints[4] = {0}; +EWRAM_DATA s16 gContestMonAppealPointTotals[4] = {0}; +EWRAM_DATA s16 gContestMonRound2Points[4] = {0}; EWRAM_DATA u8 gContestFinalStandings[4] = {0}; // What "place" each participant came in. EWRAM_DATA u8 gContestMonPartyIndex = 0; EWRAM_DATA u8 gContestPlayerMonIndex = 0; -EWRAM_DATA u8 gUnknown_02038696[4] = {0}; +EWRAM_DATA u8 gContestantTurnOrder[4] = {0}; EWRAM_DATA u8 gIsLinkContest = 0; -EWRAM_DATA u8 gUnknown_0203869B = 0; +EWRAM_DATA u8 gContestLinkLeaderIndex = 0; EWRAM_DATA u16 gSpecialVar_ContestCategory = 0; EWRAM_DATA u16 gSpecialVar_ContestRank = 0; -void nullsub_89(u8 taskId) +void TaskDummy1(u8 taskId) { } @@ -323,31 +134,32 @@ void ResetContestGpuRegs(void) gBattle_WIN1H = 0; gBattle_WIN1V = 0; } + void LoadContestBgAfterMoveAnim(void) { s32 i; LZDecompressVram(gContestMiscGfx, (void *)VRAM); LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000)); - LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000)); - LoadCompressedPalette(gUnknown_08D17144, 0, 0x200); - sub_80AB350(); + LZDecompressVram(gContestGfx, (void *)(VRAM + 0xD000)); + LoadCompressedPalette(gContestPalette, 0, 0x200); + InitContestResources(); for (i = 0; i < 4; i++) { u32 var = 5 + i; - LoadPalette(shared18000.unk18004[var], 16 * (5 + gUnknown_02038696[i]), 16 * sizeof(u16)); + LoadPalette(eContestTempSave.cachedWindowPalettes[var], 16 * (5 + gContestantTurnOrder[i]), 16 * sizeof(u16)); } } void SetUpContestWindow(void) { Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6FD8); Text_InitWindowWithTemplate(&gMenuWindow, &gWindowTemplate_81E6FF4); } -void sub_80AB350(void) +void InitContestResources(void) { u8 i; @@ -370,23 +182,23 @@ void ClearContestVars(void) memset(&sContestantStatus[i], 0, sizeof(sContestantStatus[i])); for (i = 0; i < 4; i++) { - sContestantStatus[i].unkB_0 = 0; + sContestantStatus[i].ranking = 0; sContestantStatus[i].effectStringId = CONTEST_STRING_NONE; sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; } - memset(&shared192D0, 0, sizeof(shared192D0)); + memset(&eContestAppealResults, 0, sizeof(eContestAppealResults)); memset(eContestAI, 0, sizeof(struct ContestAIInfo)); - memset(&shared19328, 0, sizeof(shared19328)); - memset(shared19338, 0, 4 * sizeof(*shared19338)); + memset(&eContestExcitement, 0, sizeof(eContestExcitement)); + memset(eContestGfxState, 0, 4 * sizeof(*eContestGfxState)); if (!(gIsLinkContest & 1)) - sub_80B0F28(0); + SortContestants(0); for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = 0xFF; - sContest.unk19218[i] = gUnknown_02038696[i]; + sContest.prevTurnOrder[i] = gContestantTurnOrder[i]; } - sub_80B159C(); + ApplyNextTurnOrder(); } void CB2_StartContest(void) @@ -405,83 +217,83 @@ void CB2_StartContest(void) ResetTasks(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; - //shared18000.unk18000 = 0; - gSharedMem[0x18000] = 0; + //eContestTempSave.unk18000 = 0; + eEnableContestDebugging = 0; ClearBattleMonForms(); ClearContestVars(); gMain.state++; break; case 1: - sub_80AB350(); + InitContestResources(); gMain.state++; break; case 2: - if (sub_80AB70C(&sContest.unk1925D) == 0) + if (SetupContestGraphics(&sContest.contestSetupState) == 0) break; - sContest.unk1925D = 0; + sContest.contestSetupState = 0; gMain.state++; break; case 3: - sub_80B2184(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; BeginFastPaletteFade(2); gPaletteFade.bufferTransferDisabled = FALSE; SetVBlankCallback(ContestVBlankCallback); - sContest.mainTaskId = CreateTask(sub_80AB5D4, 10); + sContest.mainTaskId = CreateTask(Task_StartContestWaitFade, 10); SetMainCallback2(ContestMainCallback2); break; } } -void sub_80AB5D4(u8 taskId) +void Task_StartContestWaitFade(u8 taskId) { if (!gPaletteFade.active) - gTasks[taskId].func = sub_80AB604; + gTasks[taskId].func = Task_TryStartLinkContest; } -void sub_80AB604(u8 taskId) +void Task_TryStartLinkContest(u8 taskId) { if (gIsLinkContest & 1) { if (!gPaletteFade.active) { gPaletteFade.bufferTransferDisabled = FALSE; - sub_80AF860(); - CreateTask(sub_80AB678, 0); - gTasks[taskId].func = nullsub_89; + ContestPrintLinkStandby(); + CreateTask(Task_CommunicateMonIdxs, 0); + gTasks[taskId].func = TaskDummy1; } } else { - gTasks[taskId].func = sub_80AB960; + gTasks[taskId].func = Task_WaitToRaiseCurtainAtStart; } } -void sub_80AB678(u8 taskId) +void Task_CommunicateMonIdxs(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80AB694); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_EndCommunicateMonIdxs); } -void sub_80AB694(u8 taskId) +void Task_EndCommunicateMonIdxs(u8 taskId) { u16 one = 1; gTasks[taskId].data[0] = one; - gTasks[taskId].func = sub_80AB6B4; + gTasks[taskId].func = Task_ReadyStartLinkContest; } -void sub_80AB6B4(u8 taskId) +void Task_ReadyStartLinkContest(u8 taskId) { if (--gTasks[taskId].data[0] > 0) return; GetMultiplayerId(); // unused return value DestroyTask(taskId); - gTasks[sContest.mainTaskId].func = sub_80AB960; + gTasks[sContest.mainTaskId].func = Task_WaitToRaiseCurtainAtStart; gRngValue = gContestRngValue; } -u8 sub_80AB70C(u8 *a) +u8 SetupContestGraphics(u8 *a) { u16 sp0[16]; u16 sp20[16]; @@ -497,34 +309,34 @@ u8 sub_80AB70C(u8 *a) break; case 2: LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000)); - DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000); + DmaCopyLarge32(3, (void *)(VRAM + 0x2000), eUnzippedContestAudience_Gfx, 0x2000, 0x1000); break; case 3: - LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000)); + LZDecompressVram(gContestGfx, (void *)(VRAM + 0xD000)); break; case 4: - LZDecompressVram(gUnknown_08D17424, (void *)(VRAM + 0xE000)); - DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), shared18000.unk18A04, 0x800); + LZDecompressVram(gContestBgmap, (void *)(VRAM + 0xE000)); + DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), eContestTempSave.savedJunk, 0x800); break; case 5: - LoadCompressedPalette(gUnknown_08D17144, 0, 0x200); + LoadCompressedPalette(gContestPalette, 0, 0x200); CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16)); CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16)); CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); - DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200); - sub_80AB350(); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, 0x200); + InitContestResources(); break; case 6: - sub_80B1118(); - sub_80AFA5C(); - sub_80AEB30(); - sContest.unk19216 = sub_80AE8B4(); - sub_80AFE30(); - sub_80B0034(); + DrawContestantWindows(); + FillContestantWindowBgs(); + SwapMoveDescAndContestTilemaps(); + sContest.judgeSpeechBubbleSpriteId = CreateJudgeSpeechBubbleSprite(); + CreateSliderHeartSprites(); + CreateNextTurnSprites(); CreateApplauseMeterSprite(); - sub_80B0324(); - sub_80B0518(); + CreateJudgeAttentionEyeTask(); + CreateUnusedBlendTask(); gBattlerPositions[0] = 0; gBattlerPositions[1] = 1; gBattlerPositions[2] = 3; @@ -533,7 +345,7 @@ u8 sub_80AB70C(u8 *a) gBattlerAttacker = 2; gBattlerTarget = 3; gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite(); - sub_80B292C(); + CreateInvisibleBattleTargetSprite(); break; default: *a = 0; @@ -544,18 +356,18 @@ u8 sub_80AB70C(u8 *a) return 0; } -void sub_80AB960(u8 taskId) +void Task_WaitToRaiseCurtainAtStart(u8 taskId) { gPaletteFade.bufferTransferDisabled = FALSE; if (!gPaletteFade.active) { gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80AB9A0; + gTasks[taskId].func = Task_RaiseCurtainAtStart; } } -void sub_80AB9A0(u8 taskId) +void Task_RaiseCurtainAtStart(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -572,22 +384,22 @@ void sub_80AB9A0(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - sub_80B2280(); + UpdateContestantBoxOrder(); gTasks[taskId].data[0]++; break; case 3: REG_BG0CNT_BITFIELD.priority = 0; REG_BG2CNT_BITFIELD.priority = 0; - sub_80B1B14(); + SlideApplauseMeterIn(); gTasks[taskId].data[0]++; break; case 4: default: - if (sContest.unk1920A_6) + if (sContest.applauseMeterIsMoving) break; gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80ABB70; + gTasks[taskId].func = Task_DisplayAppealNumberText; break; } } @@ -595,8 +407,8 @@ void sub_80AB9A0(u8 taskId) void ContestMainCallback2(void) { #if DEBUG - if (gUnknown_020297ED == 1 && gMain.newKeys == 4) - unref_sub_80B0CF4(); + if (gUnknown_020297ED == 1 && gMain.newKeys == SELECT_BUTTON) + ContestDebugTogglePointTotal(); #endif AnimateSprites(); RunTasks(); @@ -624,48 +436,48 @@ void ContestVBlankCallback(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void sub_80ABB70(u8 taskId) +void Task_DisplayAppealNumberText(u8 taskId) { gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80B0D7C(); - DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400); + ContestDebugDoPrint(); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, 0x400); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed); else StringCopy(gDisplayedStringBattle, gText_Contest_ButItCantParticipate); - InsertStringDigit(gDisplayedStringBattle, sContest.turnNumber + 1); - sub_80AF138(); + InsertStringDigit(gDisplayedStringBattle, sContest.appealNumber + 1); + ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].func = sub_80ABC3C; } void sub_80ABC3C(u8 taskId) { - if (Text_UpdateWindowInContest(&gMenuWindow) == 1) - gTasks[taskId].func = sub_80ABC70; + if (Contest_RunTextPrinter(&gMenuWindow) == 1) + gTasks[taskId].func = Task_TryShowMoveSelectScreen; } -void sub_80ABC70(u8 taskId) +void Task_TryShowMoveSelectScreen(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON)) { PlaySE(SE_SELECT); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) { - sub_80AFFE0(TRUE); - gTasks[taskId].func = sub_80ABCDC; + SetBottomSliderHeartsInvisibility(TRUE); + gTasks[taskId].func = Task_ShowMoveSelectScreen; } else { - gTasks[taskId].func = sub_80AC0C8; + gTasks[taskId].func = Task_SelectedMove; } } } // Print the move list -void sub_80ABCDC(u8 taskId) +void Task_ShowMoveSelectScreen(u8 taskId) { u8 i; u8 sp8[32]; @@ -673,7 +485,7 @@ void sub_80ABCDC(u8 taskId) gBattle_BG0_Y = 0xA0; gBattle_BG2_Y = 0xA0; Text_FillWindowRectDefPalette( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, 0, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1], @@ -686,7 +498,8 @@ void sub_80ABCDC(u8 taskId) u8 *r5 = sp8; if (sContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE - && sub_80B214C(gContestPlayerMonIndex) + && + IsContestantAllowedToCombo(gContestPlayerMonIndex) && AreMovesContestCombo(sContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0 && sContestantStatus[gContestPlayerMonIndex].hasJudgesAttention) { @@ -702,25 +515,25 @@ void sub_80ABCDC(u8 taskId) r5 = StringCopy(r5, gMoveNames[move]); Text_InitWindow8002E4C( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, sp8, 776 + i * 20, gUnknown_083CA340[i][0] * 8 + 4, gUnknown_083CA340[i][1] * 8, 1); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 72); - sub_80AC0AC(sContest.playerMoveChoice); - sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); - gTasks[taskId].func = sub_80ABEA0; + DrawMoveSelectArrow(sContest.playerMoveChoice); + PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); + gTasks[taskId].func = Task_HandleMoveSelectInput; } void debug_sub_80B9EBC(u8); // Handle move selection input -void sub_80ABEA0(u8 taskId) +void Task_HandleMoveSelectInput(u8 taskId) { u8 numMoves = 0; s32 i; @@ -735,7 +548,7 @@ void sub_80ABEA0(u8 taskId) { DestroyMenuCursor(); PlaySE(SE_SELECT); - gTasks[taskId].func = sub_80AC0C8; + gTasks[taskId].func = Task_SelectedMove; } else { @@ -744,9 +557,9 @@ void sub_80ABEA0(u8 taskId) case B_BUTTON: sub_814A904(); PlaySE(SE_SELECT); - sub_80AFFE0(FALSE); + SetBottomSliderHeartsInvisibility(FALSE); Text_FillWindowRectDefPalette( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, 0, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1], @@ -756,38 +569,38 @@ void sub_80ABEA0(u8 taskId) StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed); else StringCopy(gDisplayedStringBattle, gText_Contest_ButItCantParticipate); - InsertStringDigit(gDisplayedStringBattle, sContest.turnNumber + 1); - sub_80AF138(); + InsertStringDigit(gDisplayedStringBattle, sContest.appealNumber + 1); + ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); Text_InitWindowAndPrintText(&gMenuWindow, gStringVar4, 776, 1, 15); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - gTasks[taskId].func = sub_80ABC70; + gTasks[taskId].func = Task_TryShowMoveSelectScreen; break; case DPAD_LEFT: case DPAD_RIGHT: break; case DPAD_UP: - nullsub_17(sContest.playerMoveChoice); + EraseMoveSelectArrow(sContest.playerMoveChoice); if (sContest.playerMoveChoice == 0) sContest.playerMoveChoice = numMoves - 1; else sContest.playerMoveChoice--; - sub_80AC0AC(sContest.playerMoveChoice); - sub_80AED58(); - sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); + DrawMoveSelectArrow(sContest.playerMoveChoice); + Contest_ClearMoveDescriptionBox(); + PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); if (numMoves > 1) PlaySE(SE_SELECT); break; case DPAD_DOWN: - nullsub_17(sContest.playerMoveChoice); + EraseMoveSelectArrow(sContest.playerMoveChoice); if (sContest.playerMoveChoice == numMoves - 1) sContest.playerMoveChoice = 0; else sContest.playerMoveChoice++; - sub_80AC0AC(sContest.playerMoveChoice); - sub_80AED58(); - sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); + DrawMoveSelectArrow(sContest.playerMoveChoice); + Contest_ClearMoveDescriptionBox(); + PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); if (numMoves > 1) PlaySE(SE_SELECT); break; @@ -817,27 +630,27 @@ void debug_sub_80B9EBC(u8 taskId) { case 0: Text_FillWindowRectDefPalette( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, 0, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1], gUnknown_083CA340[0][2], gUnknown_083CA340[0][3]); Text_InitWindowAndPrintText( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, gMoveNames[gTasks[taskId].data[1]], 776, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1]); ConvertIntToDecimalStringN(text, gTasks[taskId].data[1], 2, 3); Text_InitWindowAndPrintText( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, text, 796, gUnknown_083CA340[1][0], gUnknown_083CA340[1][1]); - sub_80AED58(); - sub_80AEBEC(gTasks[taskId].data[1]); + Contest_ClearMoveDescriptionBox(); + PrintContestMoveDescription(gTasks[taskId].data[1]); gTasks[taskId].data[0]++; break; case 1: @@ -871,7 +684,7 @@ void debug_sub_80B9EBC(u8 taskId) case 8: gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80B1BDC(); + SlideApplauseMeterOut(); gTasks[taskId].data[0] = 0; gTasks[taskId].func = debug_sub_80BA054; break; @@ -883,7 +696,7 @@ void debug_sub_80B9EBC(u8 taskId) gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3] = 0; - gTasks[taskId].func = sub_80ABCDC; + gTasks[taskId].func = Task_ShowMoveSelectScreen; break; } break; @@ -900,27 +713,27 @@ void debug_sub_80BA054(u8 taskId) case 0: for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; - memset(&shared19348, 0, sizeof(shared19348)); - sub_80B28F0(gContestPlayerMonIndex); - r6 = sub_80AE9FC( + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + SetMoveAnimAttackerData(gContestPlayerMonIndex); + r6 = CreateContestantSprite( gContestMons[gContestPlayerMonIndex].species, gContestMons[gContestPlayerMonIndex].otId, gContestMons[gContestPlayerMonIndex].personality); gSprites[r6].pos2.x = 120; - gSprites[r6].callback = sub_80AD8FC; + gSprites[r6].callback = SpriteCB_MonSlideIn; gTasks[taskId].data[2] = r6; 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]; if (gSprites[r6].callback == SpriteCallbackDummy) { sContestantStatus[gContestPlayerMonIndex].currMove = gTasks[taskId].data[1]; - sub_80B2790(gContestPlayerMonIndex); - sub_80B28F0(gContestPlayerMonIndex); + SetMoveSpecificAnimData(gContestPlayerMonIndex); + SetMoveAnimAttackerData(gContestPlayerMonIndex); SelectContestMoveBankTarget(gTasks[taskId].data[1]); DoMoveAnim(gTasks[taskId].data[1]); gTasks[taskId].data[3] = 0; @@ -931,8 +744,8 @@ void debug_sub_80BA054(u8 taskId) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_80B28CC(gContestPlayerMonIndex); - if (sContest.unk1925E != 0) + ClearMoveAnimData(gContestPlayerMonIndex); + if (sContest.moveAnimTurnCount != 0) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 20; @@ -948,8 +761,8 @@ void debug_sub_80BA054(u8 taskId) if (gTasks[taskId].data[3] == 21) { r6 = gTasks[taskId].data[2]; - gSprites[r6].callback = sub_80AD92C; - sub_80B1B14(); + gSprites[r6].callback = SpriteCB_MonSlideOut; + SlideApplauseMeterIn(); gTasks[taskId].data[3] = 0; gTasks[taskId].data[0]++; } @@ -978,16 +791,16 @@ void debug_sub_80BA054(u8 taskId) #endif -void sub_80AC0AC(s8 a) +void DrawMoveSelectArrow(s8 a) { MenuCursor_SetPos814A880(4, 88 + a * 16); } -void nullsub_17(s8 a) +void EraseMoveSelectArrow(s8 a) { } -void sub_80AC0C8(u8 taskId) +void Task_SelectedMove(u8 taskId) { if (gIsLinkContest & 1) { @@ -996,115 +809,116 @@ void sub_80AC0C8(u8 taskId) sContestantStatus[gContestPlayerMonIndex].currMove = var; taskId2 = CreateTask(sub_80C8A38, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8A38, sub_80AC15C); - gTasks[taskId].func = nullsub_89; - sub_80AF860(); - sub_80AFFE0(FALSE); + SetTaskFuncWithFollowupFunc(taskId2, sub_80C8A38, Task_EndCommunicateMoveSelections); + gTasks[taskId].func = TaskDummy1; + ContestPrintLinkStandby(); + SetBottomSliderHeartsInvisibility(FALSE); } else { - sub_80AF1B8(); - gTasks[taskId].func = sub_80AC188; + GetAllChosenMoves(); + gTasks[taskId].func = Task_HideMoveSelectScreen; } } -void sub_80AC15C(u8 taskId) +void Task_EndCommunicateMoveSelections(u8 taskId) { DestroyTask(taskId); - gTasks[sContest.mainTaskId].func = sub_80AC188; + gTasks[sContest.mainTaskId].func = Task_HideMoveSelectScreen; } -void sub_80AC188(u8 taskId) +void Task_HideMoveSelectScreen(u8 taskId) { - sub_80AF138(); + ContestClearGeneralTextWindow(); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80AFFE0(FALSE); - DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400); - LoadPalette(shared18000.unk18204, 0, 0x400); + SetBottomSliderHeartsInvisibility(FALSE); + DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, 0x400); + LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, 0x400); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80AC204; + gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; } -void sub_80AC204(u8 taskId) +void Task_HideApplauseMeterForAppealStart(u8 taskId) { if (++gTasks[taskId].data[0] > 2) { gTasks[taskId].data[0] = 0; if (++gTasks[taskId].data[1] == 2) { - sub_80B1BDC(); - sub_80B25E4(1); - gTasks[taskId].func = sub_80AC250; + SlideApplauseMeterOut(); + AnimateSliderHearts(1); + gTasks[taskId].func = Task_WaitHideApplauseMeterForAppealStart; } } } -void sub_80AC250(u8 taskId) +void Task_WaitHideApplauseMeterForAppealStart(u8 taskId) { - if (!sContest.unk1920A_6 && !sContest.unk1920B_1) - gTasks[taskId].func = sub_80AC284; + if (!sContest.applauseMeterIsMoving && !sContest.sliderHeartsAnimating) + gTasks[taskId].func = Task_AppealSetup; } -void sub_80AC284(u8 taskId) +void Task_AppealSetup(u8 taskId) { if (++gTasks[taskId].data[0] > 19) { - sContest.unk19214 = 0; - sContest.unk1921C = gRngValue; + sContest.turnNumber = 0; + sContest.unusedRng = gRngValue; gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80AC2CC; + gTasks[taskId].func = Task_DoAppeals; } } -void sub_80AC2CC(u8 taskId) +void Task_DoAppeals(u8 taskId) { u8 spriteId; s32 i; - u8 r7 = sContest.unk19215; + u8 contestant = sContest.currentContestant; s8 r4; switch (gTasks[taskId].data[0]) { case 0: - sub_80B0D7C(); - for (i = 0; sContest.unk19214 != shared192D0.turnOrder[i]; i++) + ContestDebugDoPrint(); + for (i = 0; sContest.turnNumber != eContestAppealResults.turnOrder[i]; i++) ; - sContest.unk19215 = i; - r7 = sContest.unk19215; + sContest.currentContestant = i; + contestant = sContest.currentContestant; if (gIsLinkContest & 1) { u8 taskId2; - sContest.unk1920B_2 = 1; - if (sub_80AE074()) - sub_80B114C(sContest.unk19215); - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); - sub_80AF860(); + sContest.waitForLink = 1; + if (IsPlayerLinkLeader()) + CalculateAppealMoveImpact(sContest.currentContestant); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); + ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } else { - sub_80B114C(sContest.unk19215); + CalculateAppealMoveImpact(sContest.currentContestant); gTasks[taskId].data[0] = 2; } return; case 1: - if (!sContest.unk1920B_2) + if (!sContest.waitForLink) gTasks[taskId].data[0] = 2; return; case 2: - if (sContestantStatus[r7].numTurnsSkipped != 0 - || sContestantStatus[r7].noMoreTurns) + if (sContestantStatus[contestant].numTurnsSkipped != 0 + || sContestantStatus[contestant].noMoreTurns) { gTasks[taskId].data[0] = 31; } else { - sub_80AF138(); - sub_80B0CDC(r7, 0); + ContestClearGeneralTextWindow(); + Unused_EndBlinkingState(contestant, 0); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 3; } @@ -1112,58 +926,59 @@ 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); - spriteId = sub_80AE9FC( - gContestMons[sContest.unk19215].species, - gContestMons[sContest.unk19215].otId, - gContestMons[sContest.unk19215].personality); + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + SetMoveAnimAttackerData(sContest.currentContestant); + spriteId = CreateContestantSprite( + gContestMons[sContest.currentContestant].species, + gContestMons[sContest.currentContestant].otId, + gContestMons[sContest.currentContestant].personality); gSprites[spriteId].pos2.x = 120; - gSprites[spriteId].callback = sub_80AD8FC; + gSprites[spriteId].callback = SpriteCB_MonSlideIn; gTasks[taskId].data[2] = spriteId; gBattlerSpriteIds[gBattlerAttacker] = spriteId; - sub_80B0BC4(sub_80B09E4(sContest.unk19215), FALSE); + BlinkContestantBox(CreateContestantBoxBlinkSprites(sContest.currentContestant), FALSE); gTasks[taskId].data[0] = 4; return; case 4: spriteId = gTasks[taskId].data[2]; if (gSprites[spriteId].callback == SpriteCallbackDummy) { - if (!shared19338[r7].unk2_1) + if (!eContestGfxState[contestant].boxBlinking) gTasks[taskId].data[0] = 5; } return; case 5: - if (sContestantStatus[r7].nervous) + if (sContestantStatus[contestant].nervous) { gTasks[taskId].data[0] = 33; } else { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); - if (sContestantStatus[r7].currMove < NUM_MOVES) - StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + if (sContestantStatus[contestant].currMove < NUM_MOVES) + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); else - StringCopy(gStringVar2, gUnknown_083CC330[sContestantStatus[r7].moveCategory]); - StringExpandPlaceholders(gStringVar4, gUnknown_083CAFD7); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + StringCopy(gStringVar2, + sInvalidContestMoveNames[sContestantStatus[contestant].moveCategory]); + StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 6; } return; case 6: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sContest.unk1925E = 0; + sContest.moveAnimTurnCount = 0; gTasks[taskId].data[0] = 7; } return; case 7: { - u16 move = SanitizeMove(sContestantStatus[sContest.unk19215].currMove); + u16 move = SanitizeMove(sContestantStatus[sContest.currentContestant].currMove); - sub_80B2790(sContest.unk19215); - sub_80B28F0(sContest.unk19215); + SetMoveSpecificAnimData(sContest.currentContestant); + SetMoveAnimAttackerData(sContest.currentContestant); SelectContestMoveBankTarget(move); DoMoveAnim(move); gTasks[taskId].data[0] = 8; @@ -1173,17 +988,17 @@ void sub_80AC2CC(u8 taskId) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_80B28CC(r7); - if (sContest.unk1925E != 0) + ClearMoveAnimData(contestant); + if (sContest.moveAnimTurnCount != 0) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 9; } else { - if (!sContestantStatus[r7].hasJudgesAttention) - sub_80B03A8(r7); - sub_80B20C4(); + if (!sContestantStatus[contestant].hasJudgesAttention) + sub_80B03A8(contestant); + DrawUnnervedSymbols(); gTasks[taskId].data[0] = 23; } } @@ -1197,25 +1012,26 @@ void sub_80AC2CC(u8 taskId) return; case 23: gTasks[taskId].data[1] = 0; - if (sContestantStatus[r7].effectStringId != CONTEST_STRING_NONE) + if (sContestantStatus[contestant].effectStringId != CONTEST_STRING_NONE) { - sub_80B146C(r7, sContestantStatus[r7].effectStringId); - sContestantStatus[r7].effectStringId = CONTEST_STRING_NONE; + PrintAppealMoveResultText(contestant, sContestantStatus[contestant].effectStringId); + sContestantStatus[contestant].effectStringId = CONTEST_STRING_NONE; gTasks[taskId].data[0] = 24; } else { - if (sContestantStatus[r7].effectStringId2 != CONTEST_STRING_NONE) + if (sContestantStatus[contestant].effectStringId2 != CONTEST_STRING_NONE) { for (i = 0; i < 4; i++) { - if (i != r7 && sContestantStatus[i].effectStringId != CONTEST_STRING_NONE) + if (i != contestant && sContestantStatus[i].effectStringId != CONTEST_STRING_NONE) break; } if (i == 4) { - sub_80B146C(r7, sContestantStatus[r7].effectStringId2); - sContestantStatus[r7].effectStringId2 = CONTEST_STRING_NONE; + PrintAppealMoveResultText( + contestant, sContestantStatus[contestant].effectStringId2); + sContestantStatus[contestant].effectStringId2 = CONTEST_STRING_NONE; gTasks[taskId].data[0] = 24; } else @@ -1230,21 +1046,21 @@ void sub_80AC2CC(u8 taskId) } return; case 24: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 23; return; case 48: - if (sContestantStatus[r7].turnOrderModAction == 1) + if (sContestantStatus[contestant].turnOrderModAction == 1) { - sub_80B1710(5); + DoJudgeSpeechBubble(5); } - else if (sContestantStatus[r7].turnOrderModAction == 2) + else if (sContestantStatus[contestant].turnOrderModAction == 2) { - sub_80B1710(6); + DoJudgeSpeechBubble(6); } - else if (sContestantStatus[r7].turnOrderModAction == 3) + else if (sContestantStatus[contestant].turnOrderModAction == 3) { - sub_80B1710(7); + DoJudgeSpeechBubble(7); } else { @@ -1254,32 +1070,32 @@ void sub_80AC2CC(u8 taskId) gTasks[taskId].data[0] = 49; return; case 49: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) 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].appeal2, r7); + UpdateAppealHearts(0, sContestantStatus[contestant].appeal, contestant); gTasks[taskId].data[0] = 13; return; case 13: - if (!shared19338[sContest.unk19215].unk2_2) + if (!eContestGfxState[sContest.currentContestant].updatingAppealHearts) gTasks[taskId].data[0] = 35; return; case 35: - if (sContestantStatus[r7].conditionMod == 1) - sub_80B1710(8); + if (sContestantStatus[contestant].conditionMod == 1) + DoJudgeSpeechBubble(8); gTasks[taskId].data[0] = 36; return; case 36: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) gTasks[taskId].data[0] = 37; return; case 37: - if (sub_80AEE54(r7, 1)) + if (UpdateConditionStars(contestant, 1)) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 38; @@ -1297,7 +1113,7 @@ void sub_80AC2CC(u8 taskId) } return; case 50: - if (sub_80AF038(r7)) + if (DrawStatusSymbol(contestant)) PlaySE(SE_CONTEST_ICON_CHANGE); gTasks[taskId].data[0] = 25; return; @@ -1315,7 +1131,7 @@ void sub_80AC2CC(u8 taskId) r4 = 0; for (r2 = 0; r2 < 4; r2++) { - if (r2 != r7 && gUnknown_02038696[r2] == i + if (r2 != contestant && gContestantTurnOrder[r2] == i && sContestantStatus[r2].effectStringId != CONTEST_STRING_NONE) { r4 = 1; @@ -1327,8 +1143,8 @@ void sub_80AC2CC(u8 taskId) } if (r4) { - gTasks[taskId].data[1] = gUnknown_02038696[r2]; - sub_80B146C(r2, sContestantStatus[r2].effectStringId); + gTasks[taskId].data[1] = gContestantTurnOrder[r2]; + PrintAppealMoveResultText(r2, sContestantStatus[r2].effectStringId); sContestantStatus[r2].effectStringId = CONTEST_STRING_NONE; gTasks[taskId].data[0] = 27; } @@ -1337,30 +1153,31 @@ void sub_80AC2CC(u8 taskId) gTasks[taskId].data[1] = 0; gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 51; - sub_80AF120(); + DrawStatusSymbols(); } } return; case 27: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 28; return; case 28: - for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++) + for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - sub_80AFBA0(sContestantStatus[i].appeal2 + 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] != gUnknown_02038696[i]; i++) + for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (!shared19338[i].unk2_2) + if (!eContestGfxState[i].updatingAppealHearts) gTasks[taskId].data[0] = 39; return; case 39: - for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++) + for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (sub_80AEE54(i, 1)) + if (UpdateConditionStars(i, 1)) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 40; @@ -1380,10 +1197,10 @@ void sub_80AC2CC(u8 taskId) case 30: for (i = 0; i < 4; i++) { - if (gUnknown_02038696[i] == gTasks[taskId].data[1]) + if (gContestantTurnOrder[i] == gTasks[taskId].data[1]) break; } - if (sub_80AF038(i)) + if (DrawStatusSymbol(i)) PlaySE(SE_CONTEST_ICON_CHANGE); else PlaySE(SE_CONTEST_ICON_CLEAR); @@ -1399,92 +1216,92 @@ void sub_80AC2CC(u8 taskId) if (gTasks[taskId].data[10]++ > 9) { gTasks[taskId].data[10] = 0; - if (sContestantStatus[r7].numTurnsSkipped != 0 - || sContestantStatus[r7].turnSkipped) + if (sContestantStatus[contestant].numTurnsSkipped != 0 + || sContestantStatus[contestant].turnSkipped) { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, ContestString_CantAppealNextTurn); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); } gTasks[taskId].data[0] = 52; } return; case 52: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - if (!sContestantStatus[r7].unk15_6) + if (!sContestantStatus[contestant].usedComboMove) gTasks[taskId].data[0] = 17; else gTasks[taskId].data[0] = 14; } return; case 14: - r4 = sContestantStatus[r7].unk16; - if (sContestantStatus[r7].unk16 != 0) + r4 = sContestantStatus[contestant].completedCombo; + if (sContestantStatus[contestant].completedCombo != 0) { - sub_80AF138(); + ContestClearGeneralTextWindow(); if (r4 == 1) - Text_InitWindow8002EB0(&gMenuWindow, ContestString_WentOverWell, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, ContestString_WentOverWell, 776, 1, 15); else if (r4 == 2) - Text_InitWindow8002EB0(&gMenuWindow, ContestString_WentOverVeryWell, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, ContestString_WentOverVeryWell, 776, 1, 15); else - Text_InitWindow8002EB0(&gMenuWindow, ContestString_AppealComboExcellently, 776, 1, 15); - sub_80B1710(3); + Contest_StartTextPrinter( + &gMenuWindow, ContestString_AppealComboExcellently, 776, 1, 15); + DoJudgeSpeechBubble(3); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 45; } else { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, ContestString_JudgeExpectantly2); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); - sub_80B1710(2); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); + DoJudgeSpeechBubble(2); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 45; } return; case 45: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) { - sub_80B09B0(sContest.unk19215); + StartStopFlashJudgeAttentionEye(sContest.currentContestant); gTasks[taskId].data[0] = 15; } return; case 15: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { if (++gTasks[taskId].data[10] > 50) { - if (!sContestantStatus[r7].hasJudgesAttention) + if (!sContestantStatus[contestant].hasJudgesAttention) { - sub_80AFBA0( - sContestantStatus[r7].appeal2, - sContestantStatus[r7].unk17, - r7); - sContestantStatus[r7].appeal2 += sContestantStatus[r7].unk17; + UpdateAppealHearts( + sContestantStatus[contestant].appeal, sContestantStatus[contestant].comboAppealBonus, + contestant); + sContestantStatus[contestant].appeal += sContestantStatus[contestant].comboAppealBonus; } gTasks[taskId].data[0] = 16; } } return; case 16: - if (!shared19338[r7].unk2_2) + if (!eContestGfxState[contestant].updatingAppealHearts) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 17; } return; case 17: - if (sContestantStatus[r7].disappointedRepeat) + if (sContestantStatus[contestant].repeatedMove) { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, ContestString_DissapointedRepeat); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[10] = 0; - sub_80B1710(0); + DoJudgeSpeechBubble(0); gTasks[taskId].data[0] = 46; } else @@ -1493,50 +1310,52 @@ void sub_80AC2CC(u8 taskId) } return; case 46: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) gTasks[taskId].data[0] = 19; return; case 19: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80AFBA0(sContestantStatus[r7].appeal2, -sContestantStatus[r7].unk18, r7); - sContestantStatus[r7].appeal2 -= sContestantStatus[r7].unk18; + UpdateAppealHearts(sContestantStatus[contestant].appeal, -sContestantStatus[contestant].repeatJam, + contestant); + sContestantStatus[contestant].appeal -= sContestantStatus[contestant].repeatJam; gTasks[taskId].data[0] = 18; } return; case 18: - sub_80B0D7C(); - if (!shared19338[r7].unk2_2) + ContestDebugDoPrint(); + if (!eContestGfxState[contestant].updatingAppealHearts) { gTasks[taskId].data[10] = 0; - sub_80AF138(); + ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 41; } return; case 41: - if (shared19328.excitementFrozen && r7 != shared19328.excitementFreezer) + if (eContestExcitement.excitementFrozen && + contestant != eContestExcitement.excitementFreezer) { gTasks[taskId].data[0] = 57; } else { - r4 = shared19328.bits_0; - if (sContestantStatus[r7].overrideCategoryExcitementMod) + r4 = eContestExcitement.moveExcitement; + if (sContestantStatus[contestant].overrideCategoryExcitementMod) { r4 = 1; - StringCopy(gStringVar3, gMoveNames[sContestantStatus[r7].currMove]); + StringCopy(gStringVar3, gMoveNames[sContestantStatus[contestant].currMove]); } else { - StringCopy(gStringVar3, gContestCategoryStrings[gContestMoves[sContestantStatus[r7].currMove].contestCategory]); + StringCopy(gStringVar3, gContestCategoryStrings[gContestMoves[sContestantStatus[contestant].currMove].contestCategory]); } if (r4 > 0) { - if (sContestantStatus[r7].disappointedRepeat) + if (sContestantStatus[contestant].repeatedMove) r4 = 0; } - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); sContest.applauseLevel += r4; if (sContest.applauseLevel < 0) sContest.applauseLevel = 0; @@ -1552,7 +1371,7 @@ void sub_80AC2CC(u8 taskId) StringExpandPlaceholders(gStringVar4, ContestString_WentOverGreat); else StringExpandPlaceholders(gStringVar4, ContestString_GotCrowdGoing); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[10] = 0; gTasks[taskId].data[11] = 0; if (r4 < 0) @@ -1566,24 +1385,24 @@ 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 && Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80B1CBC(-1); + ShowAndUpdateApplauseMeter(-1); gTasks[taskId].data[10]++; } break; case 2: - if (!sContest.unk1920A_5) + if (!sContest.isShowingApplauseMeter) { if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80B1EA8(-1, -1); + BlendAudienceBackground(-1, -1); gTasks[taskId].data[10]++; } } @@ -1602,39 +1421,41 @@ void sub_80AC2CC(u8 taskId) switch (gTasks[taskId].data[10]) { case 0: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80B1EA8(1, 1); + BlendAudienceBackground(1, 1); gTasks[taskId].data[10]++; } break; case 1: - if (!sContest.unk1920B_0) + if (!sContest.waitForAudienceBlend) { - sub_80B1DDC(); + AnimateAudience(); PlaySE(SE_M_ENCORE2); - sub_80B1CBC(1); + ShowAndUpdateApplauseMeter(1); gTasks[taskId].data[10]++; } break; case 2: - if (!sContest.unk1920A_5) + if (!sContest.isShowingApplauseMeter) { if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80AFBA0(sContestantStatus[r7].appeal2, shared19328.unk2, r7); - sContestantStatus[r7].appeal2 += shared19328.unk2; + UpdateAppealHearts( + sContestantStatus[contestant].appeal, eContestExcitement.excitementAppealBonus, + contestant); + sContestantStatus[contestant].appeal += eContestExcitement.excitementAppealBonus; gTasks[taskId].data[10]++; } } break; case 3: - if (!shared19338[r7].unk2_2) + if (!eContestGfxState[contestant].updatingAppealHearts) { - if (!sContest.unk1920A_7) + if (!sContest.animatingAudience) { - sub_80B1EA8(1, -1); + BlendAudienceBackground(1, -1); gTasks[taskId].data[10]++; } } @@ -1650,69 +1471,69 @@ void sub_80AC2CC(u8 taskId) } return; case 43: - if (!shared19338[r7].unk2_2) + if (!eContestGfxState[contestant].updatingAppealHearts) { - sub_80AF138(); + ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 55; } return; case 57: - sub_80AF138(); - StringCopy(gStringVar3, gContestMons[shared19328.excitementFreezer].nickname); - StringCopy(gStringVar1, gContestMons[r7].nickname); - StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar3, gContestMons[eContestExcitement.excitementFreezer].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); StringExpandPlaceholders(gStringVar4, ContestString_CrowdWatches); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 58; return; case 58: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80AF138(); + ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, ContestString_Ignored2); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 59; } return; case 59: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80AF138(); + ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 55; } return; case 33: - if (sContestantStatus[r7].hasJudgesAttention) - sContestantStatus[r7].hasJudgesAttention = 0; - sub_80B09B0(r7); - StringCopy(gStringVar1, gContestMons[r7].nickname); - StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]); - StringExpandPlaceholders(gStringVar4, gUnknown_083CBF60); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + if (sContestantStatus[contestant].hasJudgesAttention) + sContestantStatus[contestant].hasJudgesAttention = 0; + StartStopFlashJudgeAttentionEye(contestant); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); + StringExpandPlaceholders(gStringVar4, ContestString_TooNervous); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 34; return; case 34: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 55; return; case 55: - sub_80B1BDC(); + SlideApplauseMeterOut(); gTasks[taskId].data[0] = 56; return; case 56: - if (!sContest.unk1920A_6) + if (!sContest.applauseMeterIsMoving) { if (sContest.applauseLevel > 4) { sContest.applauseLevel = 0; - sub_80B1928(); + UpdateApplauseMeter(); } gTasks[taskId].data[0] = 10; } return; case 10: spriteId = gTasks[taskId].data[2]; - gSprites[spriteId].callback = sub_80AD92C; + gSprites[spriteId].callback = SpriteCB_MonSlideOut; gTasks[taskId].data[0] = 11; return; case 11: @@ -1726,19 +1547,19 @@ 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; case 31: - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); - StringExpandPlaceholders(gStringVar4, gUnknown_083CB00D); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 32; return; case 32: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 21; return; case 21: @@ -1749,12 +1570,12 @@ void sub_80AC2CC(u8 taskId) } return; case 22: - if (++sContest.unk19214 == 4) + if (++sContest.turnNumber == 4) { gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80AD960; + gTasks[taskId].func = Task_FinishRoundOfAppeals; } else { @@ -1765,13 +1586,13 @@ void sub_80AC2CC(u8 taskId) } } -void sub_80AD8DC(u8 taskId) +void Task_EndWaitForLink(u8 taskId) { - sContest.unk1920B_2 = 0; + sContest.waitForLink = 0; DestroyTask(taskId); } -void sub_80AD8FC(struct Sprite *sprite) +void SpriteCB_MonSlideIn(struct Sprite *sprite) { if (sprite->pos2.x != 0) { @@ -1787,7 +1608,7 @@ void sub_80AD8FC(struct Sprite *sprite) } } -void sub_80AD92C(struct Sprite *sprite) +void SpriteCB_MonSlideOut(struct Sprite *sprite) { sprite->pos2.x -= 6; if (sprite->pos1.x + sprite->pos2.x < -32) @@ -1797,7 +1618,7 @@ void sub_80AD92C(struct Sprite *sprite) } } -void sub_80AD960(u8 taskId) +void Task_FinishRoundOfAppeals(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1806,57 +1627,58 @@ void sub_80AD960(u8 taskId) { u8 taskId2; - sContest.unk1920B_2 = 1; - if (sub_80AE074()) + sContest.waitForLink = 1; + if (IsPlayerLinkLeader()) { - sub_80AF2FC(); - sub_80AF3C0(); + RankContestants(); + SetAttentionLevels(); } - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); - sub_80AF860(); + 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: gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADA1C; + gTasks[taskId].func = Task_ReadyUpdateHeartSliders; break; } } -void sub_80ADA1C(u8 taskId) +void Task_ReadyUpdateHeartSliders(u8 taskId) { - sub_80B1FD0(FALSE); + ShowHideNextTurnGfx(FALSE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80ADA4C; + gTasks[taskId].func = Task_UpdateHeartSliders; } -void sub_80ADA4C(u8 taskId) +void Task_UpdateHeartSliders(u8 taskId) { switch (gTasks[taskId].data[0]) { 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) { @@ -1866,198 +1688,199 @@ void sub_80ADA4C(u8 taskId) } break; case 2: - sub_80AFF10(); + UpdateHeartSliders(); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80ADAD8; + gTasks[taskId].func = Task_WaitForHeartSliders; break; } } -void sub_80ADAD8(u8 taskId) +void Task_WaitForHeartSliders(u8 taskId) { - if (sub_80AFF28()) + if (SlidersDoneUpdating()) gTasks[taskId].func = sub_80ADB04; } void sub_80ADB04(u8 taskId) { - DmaCopy32Defvars(3, shared18000.unk18204, gPlttBufferUnfaded, 0x400); + DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, 0x400); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 2; - gTasks[taskId].func = sub_80ADB48; + gTasks[taskId].func = Task_WaitBeforePrintRoundResult; } -void sub_80ADB48(u8 taskId) +void Task_WaitBeforePrintRoundResult(u8 taskId) { if (++gTasks[taskId].data[0] > 2) { gTasks[taskId].data[0] = 0; if (--gTasks[taskId].data[1] == 0) - gTasks[taskId].func = sub_80ADB88; + gTasks[taskId].func = Task_PrintRoundResultText; } } -void sub_80ADB88(u8 taskId) +void Task_PrintRoundResultText(u8 taskId) { u8 r4 = sContestantStatus[gContestPlayerMonIndex].attentionLevel; - sub_80AF138(); + ContestClearGeneralTextWindow(); StringCopy(gStringVar1, gContestMons[gContestPlayerMonIndex].nickname); StringExpandPlaceholders(gStringVar4, gContestStandOutStrings[r4]); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); - gTasks[taskId].func = sub_80ADC10; + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); + gTasks[taskId].func = Task_WaitPrintRoundResultText; } -void sub_80ADC10(u8 taskId) +void Task_WaitPrintRoundResultText(u8 taskId) { - if (Text_UpdateWindowInContest(&gMenuWindow) == 1) + if (Contest_RunTextPrinter(&gMenuWindow) == 1) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADC4C; - sub_80B0D7C(); + gTasks[taskId].func = Task_ReUpdateHeartSliders; + ContestDebugDoPrint(); } } -void sub_80ADC4C(u8 taskId) +void Task_ReUpdateHeartSliders(u8 taskId) { if (gTasks[taskId].data[0]++ > 29) { gTasks[taskId].data[0] = 0; - sub_80AFF10(); - gTasks[taskId].func = sub_80ADC84; + UpdateHeartSliders(); + gTasks[taskId].func = Task_WaitForHeartSlidersAgain; } } -void sub_80ADC84(u8 taskId) +void Task_WaitForHeartSlidersAgain(u8 taskId) { - if (sub_80AFF28()) + if (SlidersDoneUpdating()) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADCB4; + gTasks[taskId].func = Task_DropCurtainAtRoundEnd; } } -void sub_80ADCB4(u8 taskId) +void Task_DropCurtainAtRoundEnd(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(); - gTasks[taskId].func = sub_80ADD04; + UpdateContestantBoxOrder(); + gTasks[taskId].func = Task_TryStartNextRoundOfAppeals; } -void sub_80ADD04(u8 taskId) +void Task_TryStartNextRoundOfAppeals(u8 taskId) { REG_BG0CNT_BITFIELD.priority = 0; REG_BG2CNT_BITFIELD.priority = 0; - if (++sContest.turnNumber == 5) + if (++sContest.appealNumber == 5) { - gTasks[taskId].func = sub_80ADDA4; + gTasks[taskId].func = Task_EndAppeals; } else { - sub_80B1B14(); - gTasks[taskId].func = sub_80ADD74; + SlideApplauseMeterIn(); + gTasks[taskId].func = Task_StartNewRoundOfAppeals; } } -void sub_80ADD74(u8 taskId) +void Task_StartNewRoundOfAppeals(u8 taskId) { - if (!sContest.unk1920A_6) - gTasks[taskId].func = sub_80ABB70; + if (!sContest.applauseMeterIsMoving) + gTasks[taskId].func = Task_DisplayAppealNumberText; } -void sub_80ADDA4(u8 taskId) +void Task_EndAppeals(u8 taskId) { s32 i; gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; for (i = 0; i < 4; i++) - gUnknown_02038680[i] = sContestantStatus[i].unk4; - sub_80AF668(); - sub_80AF138(); + gContestMonAppealPointTotals[i] = sContestantStatus[i].pointTotal; + CalculateFinalScores(); + ContestClearGeneralTextWindow(); sub_80BE23C(sContestantStatus[gContestPlayerMonIndex].prevMove); gContestRngValue = gRngValue; - StringExpandPlaceholders(gStringVar4, gUnknown_083CB02C); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + StringExpandPlaceholders(gStringVar4, gText_AllOutOfAppealTime); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80ADE54; + gTasks[taskId].func = Task_WaitForOutOfTimeMsg; } -void sub_80ADE54(u8 taskId) +void Task_WaitForOutOfTimeMsg(u8 taskId) { - if (Text_UpdateWindowInContest(&gMenuWindow) == 1) + if (Contest_RunTextPrinter(&gMenuWindow) == 1) { - sub_80B2184(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 160; PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADEAC; + gTasks[taskId].func = Task_DropCurtainAtAppealsEnd; } } -void sub_80ADEAC(u8 taskId) +void Task_DropCurtainAtAppealsEnd(u8 taskId) { if ((s16)(gBattle_BG1_Y -= 7) < 0) gBattle_BG1_Y = 0; if (gBattle_BG1_Y == 0) // Why cast? { - gTasks[taskId].func = sub_80ADEEC; + gTasks[taskId].func = Task_TryCommunicateFinalStandings; gTasks[taskId].data[0] = 0; } } -void sub_80ADEEC(u8 taskId) +void Task_TryCommunicateFinalStandings(u8 taskId) { if (gTasks[taskId].data[0]++ >= 50) { gTasks[taskId].data[0] = 0; if (gIsLinkContest & 1) { - gTasks[taskId].func = sub_80ADF4C; + gTasks[taskId].func = Task_CommunicateFinalStandings; } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_80ADFD8; + gTasks[taskId].func = Task_ContestReturnToField; } } } -void sub_80ADF4C(u8 taskId) +void Task_CommunicateFinalStandings(u8 taskId) { - u8 taskId2 = CreateTask(sub_80C8AD0, 0); + u8 taskId2 = CreateTask(Task_LinkContest_CommunicateFinalStandings, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8AD0, sub_80ADF98); - gTasks[taskId].func = nullsub_89; - sub_80AF860(); - sub_80AFFE0(FALSE); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateFinalStandings, Task_EndCommunicateFinalStandings); + gTasks[taskId].func = TaskDummy1; + ContestPrintLinkStandby(); + SetBottomSliderHeartsInvisibility(FALSE); } -void sub_80ADF98(u8 taskId) +void Task_EndCommunicateFinalStandings(u8 taskId) { DestroyTask(taskId); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[sContest.mainTaskId].func = sub_80ADFD8; + gTasks[sContest.mainTaskId].func = Task_ContestReturnToField; } -void sub_80ADFD8(u8 taskId) +void Task_ContestReturnToField(u8 taskId) { if (!gPaletteFade.active) { DestroyTask(taskId); - gFieldCallback = sub_80AE010; + gFieldCallback = FieldCB_ContestReturnToField; SetMainCallback2(CB2_ReturnToField); } } -void sub_80AE010(void) +void FieldCB_ContestReturnToField(void) { // Why disable and re-enable again? ScriptContext2_Disable(); @@ -2085,3444 +1908,4 @@ void InsertStringDigit(u8 *str, s32 n) } } -void sub_80AE054(void) -{ - if (!(gIsLinkContest & 1)) - gContestPlayerMonIndex = 3; -} - -bool8 sub_80AE074(void) -{ - if (gContestPlayerMonIndex == gUnknown_0203869B) - return TRUE; - else - return FALSE; -} - -void Contest_CreatePlayerMon(u8 partyIndex) -{ - u8 name[20]; - u16 heldItem; - s16 cool; - s16 beauty; - s16 cute; - s16 smart; - s16 tough; - - StringCopy(name, gSaveBlock2.playerName); - Text_StripExtCtrlCodes(name); - if (gIsLinkContest & 1) - { - u8 temp = name[5]; - - name[5] = EOS; - name[7] = temp; - } - memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); - if (gSaveBlock2.playerGender == MALE) - gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; - else - gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; - gContestMons[gContestPlayerMonIndex].flags = 0; - gContestMons[gContestPlayerMonIndex].unk2C[0] = 0; - gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); - StringGetEnd10(name); - if (gIsLinkContest & 1) - { - Text_StripExtCtrlCodes(name); - if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE) - { - name[5] = EOS; - name[10] = EXT_CTRL_CODE_BEGIN; - } - else - { - u8 temp = name[5]; - - name[5] = EOS; - name[10] = temp; - } - } - memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11); - gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL); - gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY); - gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE); - gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART); - gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH); - gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN); - gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1); - gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2); - gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3); - gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4); - gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY); - gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID); - - heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM); - cool = gContestMons[gContestPlayerMonIndex].cool; - beauty = gContestMons[gContestPlayerMonIndex].beauty; - cute = gContestMons[gContestPlayerMonIndex].cute; - smart = gContestMons[gContestPlayerMonIndex].smart; - tough = gContestMons[gContestPlayerMonIndex].tough; - if (heldItem == ITEM_RED_SCARF) - cool += 20; - else if (heldItem == ITEM_BLUE_SCARF) - beauty += 20; - else if (heldItem == ITEM_PINK_SCARF) - cute += 20; - else if (heldItem == ITEM_GREEN_SCARF) - smart += 20; - else if (heldItem == ITEM_YELLOW_SCARF) - tough += 20; - if (cool > 255) - cool = 255; - if (beauty > 255) - beauty = 255; - if (cute > 255) - cute = 255; - if (smart > 255) - smart = 255; - if (tough > 255) - tough = 255; - gContestMons[gContestPlayerMonIndex].cool = cool; - gContestMons[gContestPlayerMonIndex].beauty = beauty; - gContestMons[gContestPlayerMonIndex].cute = cute; - gContestMons[gContestPlayerMonIndex].smart = smart; - gContestMons[gContestPlayerMonIndex].tough = tough; -} - -void Contest_InitAllPokemon(u8 contestType, u8 rank) -{ - s32 i; - u8 opponentsCount = 0; - u8 opponents[64]; - - sub_80AE054(); - - // Find all suitable opponents - for (i = 0; i < 60; i++) - { - if (rank == gContestOpponents[i].whichRank) - { - if (contestType == 0 && gContestOpponents[i].aiPool_Cool) - opponents[opponentsCount++] = i; - else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty) - opponents[opponentsCount++] = i; - else if (contestType == 2 && gContestOpponents[i].aiPool_Cute) - opponents[opponentsCount++] = i; - else if (contestType == 3 && gContestOpponents[i].aiPool_Smart) - opponents[opponentsCount++] = i; - else if (contestType == 4 && gContestOpponents[i].aiPool_Tough) - opponents[opponentsCount++] = i; - } - } - opponents[opponentsCount] = 0xFF; - - // Choose three random opponents from the list - for (i = 0; i < 3; i++) - { - u16 rnd = Random() % opponentsCount; - s32 j; - - gContestMons[i] = gContestOpponents[opponents[rnd]]; - for (j = rnd; opponents[j] != 0xFF; j++) - opponents[j] = opponents[j + 1]; - opponentsCount--; - } - -#ifndef NONMATCHING - // Compiler, please put i in r5. Thanks. - asm(""::"r"(i)); - asm(""::"r"(i)); - asm(""::"r"(i)); - asm(""::"r"(i)); - asm(""::"r"(i)); -#endif - - Contest_CreatePlayerMon(gContestMonPartyIndex); -} - -// GetContestAvailability? -u8 CanMonParticipateInContest(struct Pokemon *pkmn) -{ - u8 ribbon; - u8 retVal; - - if (GetMonData(pkmn, MON_DATA_IS_EGG)) - return 3; - if (GetMonData(pkmn, MON_DATA_HP) == 0) - return 4; - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON); - break; - case CONTEST_CATEGORY_BEAUTY: - ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON); - break; - case CONTEST_CATEGORY_CUTE: - ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON); - break; - case CONTEST_CATEGORY_SMART: - ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON); - break; - case CONTEST_CATEGORY_TOUGH: - ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON); - break; - default: - return 0; - } - - // Couldn't get this to match any other way. - // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below - // the current contest rank. - if (ribbon > gSpecialVar_ContestRank) - retVal = 2; - else if (ribbon >= gSpecialVar_ContestRank) - retVal = 1; - else - retVal = 0; - return retVal; -} - -void sub_80AE514(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA308[gUnknown_02038696[i]][0], - gUnknown_083CA308[gUnknown_02038696[i]][1], - gUnknown_083CA310[gUnknown_02038696[i]][0] + 5, - gUnknown_083CA310[gUnknown_02038696[i]][1] + 1); - sub_80AE5BC(i); - sub_80AE6CC(i); - } -} - -u8 *sub_80AE598(u8 *dest, const u8 *b, u8 c) -{ - dest = StringCopy(dest, gUnknown_083CC59C); - *dest++ = c; - dest = StringCopy(dest, b); - return dest; -} - -void sub_80AE5BC(u8 a) -{ - sub_80AE5D4(a, a + 10); -} - -void sub_80AE5D4(u8 p, u8 b) -{ - u8 *str = gDisplayedStringBattle; - - str = sub_80AE598(str, gEmptyString_81E72B0, b); - str[0] = EXT_CTRL_CODE_BEGIN; - str[1] = 6; - str[2] = 4; - str += 3; - - *str++ = CHAR_SLASH; - - if ((gIsLinkContest & 1) && gLinkPlayers[p].language == LANGUAGE_JAPANESE) - { - StringCopy(str, gLinkPlayers[p].name); - Text_InitWindow8004D04( - &gUnknown_03004210, - gDisplayedStringBattle, - 592 + gUnknown_02038696[p] * 22, - 251 + gUnknown_083CA310[gUnknown_02038696[p]][0] * 8, - gUnknown_083CA310[gUnknown_02038696[p]][1] * 8, - 1); - } - else - { - StringCopy(str, gContestMons[p].trainerName); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - gDisplayedStringBattle, - 592 + gUnknown_02038696[p] * 22, - gUnknown_083CA310[gUnknown_02038696[p]][0], - gUnknown_083CA310[gUnknown_02038696[p]][1]); - } -} - -void sub_80AE6CC(u8 a) -{ - sub_80AE6E4(a, a + 10); -} - -void sub_80AE6E4(u8 a, u8 b) -{ - u8 *str = gDisplayedStringBattle; - - str[0] = EXT_CTRL_CODE_BEGIN; - str[1] = 6; - str[2] = 4; - str += 3; - - str = sub_80AE598(str, gContestMons[a].nickname, b); - *str = EOS; - - Text_InitWindow8004D04( - &gUnknown_03004210, - gDisplayedStringBattle, - 512 + gUnknown_02038696[a] * 20, - 253 + gUnknown_083CA308[gUnknown_02038696[a]][0] * 8, - gUnknown_083CA308[gUnknown_02038696[a]][1] * 8, - 1); -} - -u16 InitContestMonConditionI(u8 a, u8 b) -{ - u8 r5; - u8 r4; - u8 r3; - - switch (b) - { - case CONTEST_CATEGORY_COOL: - r5 = gContestMons[a].cool; - r4 = gContestMons[a].tough; - r3 = gContestMons[a].beauty; - break; - case CONTEST_CATEGORY_BEAUTY: - r5 = gContestMons[a].beauty; - r4 = gContestMons[a].cool; - r3 = gContestMons[a].cute; - break; - case CONTEST_CATEGORY_CUTE: - r5 = gContestMons[a].cute; - r4 = gContestMons[a].beauty; - r3 = gContestMons[a].smart; - break; - case CONTEST_CATEGORY_SMART: - r5 = gContestMons[a].smart; - r4 = gContestMons[a].cute; - r3 = gContestMons[a].tough; - break; - case CONTEST_CATEGORY_TOUGH: - default: - r5 = gContestMons[a].tough; - r4 = gContestMons[a].smart; - r3 = gContestMons[a].cool; - break; - } - return r5 + (r4 + r3 + gContestMons[a].sheen) / 2; -} - -void InitContestMonConditions(u8 a) -{ - u8 i; - - for (i = 0; i < 4; i++) - gContestMonConditions[i] = InitContestMonConditionI(i, a); -} - -u8 CreateJudgeSprite(void) -{ - u8 spriteId; - - LoadCompressedObjectPic(&gUnknown_083CA4BC); - LoadCompressedPalette(gContest2Pal, 0x110, 32); - spriteId = CreateSprite(&gSpriteTemplate_83CA4A4, 112, 36, 30); - gSprites[spriteId].oam.paletteNum = 1; - gSprites[spriteId].callback = SpriteCallbackDummy; - return spriteId; -} - -u8 sub_80AE8B4(void) -{ - u8 spriteId; - - LoadCompressedObjectPic(&gUnknown_083CA4C4); - LoadCompressedObjectPalette(&gUnknown_083CA4CC); - spriteId = CreateSprite(&gUnknown_083CA4D4, 96, 10, 29); - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum; - return spriteId; -} - -u8 unref_sub_80AE908(void) -{ - u16 species = gContestMons[gContestPlayerMonIndex].species; - u8 spriteId; - - DecompressPicFromTable_2( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - (void *)EWRAM, - gUnknown_081FAF4C[1], - species); - LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32); - GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1); - spriteId = CreateSprite( - &gUnknown_02024E8C, - 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4, - 30); - gSprites[spriteId].oam.paletteNum = 1; - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18; - StartSpriteAffineAnim(&gSprites[spriteId], 0); - return spriteId; -} - -u8 sub_80AE9FC(u16 species, u32 otId, u32 personality) -{ - const u8 *lzPaletteData; - u8 spriteId; - - species = SanitizeSpecies(species); - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - EWRAM, - gUnknown_081FAF4C[0], - species, - 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); - gSprites[spriteId].oam.paletteNum = 2; - gSprites[spriteId].oam.priority = 2; - gSprites[spriteId].subpriority = GetBattlerSubpriority(2); - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum; - gSprites[spriteId].data[2] = species; - if (IsSpeciesNotUnown(species)) - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18; - else - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC; - StartSpriteAffineAnim(&gSprites[spriteId], 0); - return spriteId; -} - -bool8 IsSpeciesNotUnown(u16 species) -{ - if (species == SPECIES_UNOWN) - return FALSE; - else - return TRUE; -} - -void sub_80AEB30(void) -{ - sub_80AEB4C((void *)(VRAM + 0xC000)); - sub_80AEB4C((void *)(VRAM + 0xE000)); -} - -void sub_80AEB4C(void *a) -{ - DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280); -} - -u16 sub_80AEB68(u16 move, u8 b) -{ - u16 var; - - switch (gContestEffects[gContestMoves[move].effect].effectType) - { - case 0: - case 1: - case 8: - var = 0x9082; - break; - case 2: - case 3: - var = 0x9088; - break; - default: - var = 0x9086; - break; - } - var += 0x9000 + (b << 12); - return var; -} - -void sub_80AEBEC(u16 a) -{ - u8 category; - u16 categoryTile; - s32 i; - u8 numHearts; - - Text_FillWindowRectDefPalette(&gUnknown_03004210, 0, 11, 31, 16, 34); - - category = gContestMoves[a].contestCategory; - if (category == CONTEST_CATEGORY_COOL) - categoryTile = 0x4040; - else if (category == CONTEST_CATEGORY_BEAUTY) - categoryTile = 0x4045; - else if (category == CONTEST_CATEGORY_CUTE) - categoryTile = 0x404A; - else if (category == CONTEST_CATEGORY_SMART) - categoryTile = 0x406A; - else - categoryTile = 0x408A; - - for (i = 0; i < 5; i++) - { - *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile; - *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16; - categoryTile++; - } - - if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF) - numHearts = 0; - else - numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; - if (numHearts > 8) - numHearts = 8; - for (i = 0; i < 8; i++) - { - if (i < numHearts) - *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012; - else - *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035; - } - - if (gContestEffects[gContestMoves[a].effect].jam == 0xFF) - numHearts = 0; - else - numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; - if (numHearts > 8) - numHearts = 8; - for (i = 0; i < 8; i++) - { - if (i < numHearts) - *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014; - else - *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036; - } - - Text_InitWindowAndPrintText(&gUnknown_03004210, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35); - Text_InitWindowAndPrintText(&gUnknown_03004210, gUnknown_083CC5A2, 866, 16, 31); -} - -void sub_80AED58(void) -{ - Text_FillWindowRectDefPalette(&gUnknown_03004210, 0, 11, 35, 28, 40); -} - -// unused -void sub_80AED7C(u16 move, u8 b) -{ - u8 r5 = gUnknown_02038696[b] * 5 + 2; - - if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE) - { - u16 tile = sub_80AEB68(move, b); - - *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile; - *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1; - - *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16; - *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17; - - } - else - { - *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0; - *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0; - - *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0; - *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0; - } -} - -void unref_sub_80AEE20(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AED7C(sContestantStatus[i].currMove, i); -} - -u16 sub_80AEE4C(u8 unused) -{ - return 0x2034; -} - -bool8 sub_80AEE54(u8 a, u8 b) -{ - u8 r9; - u16 r8; - s32 r4; - - if (sContestantStatus[a].conditionMod == 0) - return FALSE; - r9 = gUnknown_02038696[a] * 5 + 2; - if (sContestantStatus[a].conditionMod == 1) - { - r8 = sub_80AEE4C(a); - r4 = 0; - while (sContestantStatus[a].condition / 10 > r4) - { - *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8; - r4++; - } - if (b != 0) - { - PlaySE(SE_EXP_MAX); - sContestantStatus[a].conditionMod = 0; - } - } - else - { - r8 = 0; - r4 = 3; - while (sContestantStatus[a].condition / 10 < r4) - { - *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8; - r4--; - } - if (b != 0) - { - PlaySE(SE_CONTEST_CONDITION_LOSE); - sContestantStatus[a].conditionMod = 0; - } - } - return TRUE; -} - -void sub_80AEF50(void) -{ - s32 i; - s32 r4; - - for (i = 0; i < 4; i++) - { - u8 r8 = gUnknown_02038696[i] * 5 + 2; - u16 r6 = sub_80AEE4C(i); - - r4 = 0; - while (r4 < sContestantStatus[i].condition / 10) - { - *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; - r4++; - } - r6 = 0; - while (r4 < 3) - { - *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; - r4++; - } - } -} - -u16 sub_80AEFE8(u8 unused, u8 b) -{ - u16 var = 0; - - switch (b) - { - case 0: - var = 0x80; - break; - case 1: - var = 0x84; - break; - case 2: - var = 0x86; - break; - case 3: - var = 0x88; - break; - case 4: - var = 0x82; - break; - } - var += 0x9000; - return var; -} - -bool8 sub_80AF038(u8 a) -{ - bool8 r5 = TRUE; - u16 r4 = 0; - u8 r6 = gUnknown_02038696[a] * 5 + 2; - - if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0) - r4 = sub_80AEFE8(a, 0); - else if (sContestantStatus[a].nervous) - r4 = sub_80AEFE8(a, 1); - else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) - r4 = sub_80AEFE8(a, 2); - else - r5 = FALSE; - if (r5) - { - *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4; - *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1; - *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16; - *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17; - } - else - { - *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0; - *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0; - *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0; - *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0; - } - return r5; -} - -void sub_80AF120(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - sub_80AF038(i); -} - -void sub_80AF138(void) -{ - Text_FillWindowRectDefPalette(&gUnknown_03004210, 0, 1, 15, 17, 18); -} - -u16 GetChosenMove(u8 a) -{ - if (Contest_IsMonsTurnDisabled(a)) - return 0; - if (a == gContestPlayerMonIndex) - { - return gContestMons[a].moves[sContest.playerMoveChoice]; - } - else - { - u8 moveChoice; - - ContestAI_ResetAI(a); - moveChoice = ContestAI_GetActionToUse(); - return gContestMons[a].moves[moveChoice]; - } -} - -void sub_80AF1B8(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sContestantStatus[i].currMove = GetChosenMove(i); -} - -void sub_80AF1E4(u8 a, u8 b) -{ - u8 r3; - - if (b == 0) - r3 = a + 10; - else - r3 = 14; - if (sContestantStatus[a].currMove == MOVE_NONE) - sub_80AE598(gDisplayedStringBattle, gUnknownText_MissedTurn, r3); - else - sub_80AE598(gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3); - sub_80AF2A0(a); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - gDisplayedStringBattle, - 696 + a * 20, - gUnknown_083CA318[a][0], - gUnknown_083CA318[a][1]); -} - -void unref_sub_80AF280(u8 a) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AF1E4(i, a); -} - -void sub_80AF2A0(u8 a) -{ - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA318[a][0], - gUnknown_083CA318[a][1], - gUnknown_083CA318[a][0] + 7, - gUnknown_083CA318[a][1] + 1); -} - -void unref_sub_80AF2E0(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AF2A0(i); -} - -void sub_80AF2FC(void) -{ - u8 i; - u8 j; - s16 arr[4]; - - for (i = 0; i < 4; i++) - { - sContestantStatus[i].unk4 += sContestantStatus[i].appeal2; - arr[i] = sContestantStatus[i].unk4; - } - for (i = 0; i < 3; i++) - { - for (j = 3; j > i; j--) - { - if (arr[j - 1] < arr[j]) - { - u16 temp = arr[j]; - - arr[j] = arr[j - 1]; - arr[j - 1] = temp; - } - } - } - for (i = 0; i < 4; i++) - { - for (j = 0; j < 4; j++) - { - if (sContestantStatus[i].unk4 == arr[j]) - { - sContestantStatus[i].unkB_0 = j; - break; - } - } - } - sub_80B0F28(1); - sub_80B159C(); -} - -void sub_80AF3C0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - u8 attentionLevel; - - if (sContestantStatus[i].currMove == MOVE_NONE) - attentionLevel = 5; - else if (sContestantStatus[i].appeal2 <= 0) - attentionLevel = 0; - else if (sContestantStatus[i].appeal2 < 30) - attentionLevel = 1; - else if (sContestantStatus[i].appeal2 < 60) - attentionLevel = 2; - else if (sContestantStatus[i].appeal2 < 80) - attentionLevel = 3; - else - attentionLevel = 4; - - sContestantStatus[i].attentionLevel = attentionLevel; - } -} - -bool8 sub_80AF404(u8 a) -{ - if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) - return FALSE; - else - return TRUE; -} - -void sub_80AF438(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - // This is bitfield hell... - sContestantStatus[i].appeal2 = 0; - sContestantStatus[i].appeal1 = 0; - sContestantStatus[i].jamSafetyCount = 0; - if (sContestantStatus[i].numTurnsSkipped > 0) - sContestantStatus[i].numTurnsSkipped--; - sContestantStatus[i].jam = 0; - sContestantStatus[i].resistant = 0; - sContestantStatus[i].jamReduction = 0; - sContestantStatus[i].immune = 0; - sContestantStatus[i].moreEasilyStartled = 0; - sContestantStatus[i].usedRepeatableMove = 0; - sContestantStatus[i].nervous = 0; - 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].disappointedRepeat = FALSE; - sContestantStatus[i].turnOrderModAction = 0; - sContestantStatus[i].appealTripleCondition = 0; - if (sContestantStatus[i].turnSkipped) - { - sContestantStatus[i].numTurnsSkipped = 1; - sContestantStatus[i].turnSkipped = 0; - } - if (sContestantStatus[i].exploded) - { - sContestantStatus[i].noMoreTurns = 1; - sContestantStatus[i].exploded = 0; - } - sContestantStatus[i].overrideCategoryExcitementMod = 0; - } - for (i = 0; i < 4; i++) - { - sContestantStatus[i].prevMove = sContestantStatus[i].currMove; - sContest.unk19220[sContest.turnNumber][i] = sContestantStatus[i].prevMove; - sContest.unk19248[sContest.turnNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove); - sContestantStatus[i].currMove = MOVE_NONE; - } - shared19328.excitementFrozen = 0; -} - -bool8 Contest_IsMonsTurnDisabled(u8 a) -{ - if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) - return TRUE; - else - return FALSE; -} - -bool8 unref_sub_80AF5D0(u8 a, u8 b) -{ - u8 i; - - if (a != gContestPlayerMonIndex) - return TRUE; - for (i = 0; i < 4; i++) - { - if (b == 3) - { - sContest.unk1920A_0 = 1; - return TRUE; - } - if (b == 4) - { - sContest.unk1920A_1 = 1; - return TRUE; - } - if (sContest.unk19206[i] == b) - return TRUE; - if (sContest.unk19206[i] == 0xFF) - { - sContest.unk19206[i] = b; - return TRUE; - } - } - return FALSE; -} - -void sub_80AF630(u8 a) -{ - gUnknown_02038688[a] = sub_80AF688(a); - gUnknown_02038678[a] = gContestMonConditions[a] + gUnknown_02038688[a]; -} - -void sub_80AF668(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AF630(i); - DetermineFinalStandings(); -} - -s16 sub_80AF688(u8 a) -{ - return gUnknown_02038680[a] * 2; -} - -// Determines standing order? -void DetermineFinalStandings(void) -{ - u16 sp0[4] = {0}; - struct UnknownContestStruct6 sp8[4]; - s32 i; - s32 j; - - for (i = 0; i < 4; i++) - { - s32 r2; - - sp0[i] = Random(); - for (r2 = 0; r2 < i; r2++) - { - if (sp0[i] == sp0[r2]) - { - i--; - break; - } - } - } - - for (i = 0; i < 4; i++) - { - sp8[i].unk0 = gUnknown_02038678[i]; - sp8[i].unk4 = gContestMonConditions[i]; - sp8[i].unk8 = sp0[i]; - sp8[i].unkC = i; - } - - for (i = 0; i < 3; i++) - { - for (j = 3; j > i; j--) - { - if (sub_80AF828(j - 1, j, sp8)) - { - struct UnknownContestStruct6 temp; - - temp.unk0 = sp8[j - 1].unk0; - temp.unk4 = sp8[j - 1].unk4; - temp.unk8 = sp8[j - 1].unk8; - temp.unkC = sp8[j - 1].unkC; - - sp8[j - 1].unk0 = sp8[j].unk0; - sp8[j - 1].unk4 = sp8[j].unk4; - sp8[j - 1].unk8 = sp8[j].unk8; - sp8[j - 1].unkC = sp8[j].unkC; - - sp8[j].unk0 = temp.unk0; - sp8[j].unk4 = temp.unk4; - sp8[j].unk8 = temp.unk8; - sp8[j].unkC = temp.unkC; - } - } - } - - for (i = 0; i < 4; i++) - gContestFinalStandings[sp8[i].unkC] = i; -} - -bool8 sub_80AF828(s32 a, s32 b, struct UnknownContestStruct6 *c) -{ - bool8 retVal; - - if (c[a].unk0 < c[b].unk0) - retVal = TRUE; - else if (c[a].unk0 > c[b].unk0) - retVal = FALSE; - else if (c[a].unk4 < c[b].unk4) - retVal = TRUE; - else if (c[a].unk4 > c[b].unk4) - retVal = FALSE; - else if (c[a].unk8 < c[b].unk8) - retVal = TRUE; - else - retVal = FALSE; - return retVal; -} - -void sub_80AF860(void) -{ - gBattle_BG0_Y = 0; - gBattle_BG2_Y = 0; - sub_80AF138(); - Text_InitWindowAndPrintText(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15); -} - -u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d) -{ - u8 taskId; - u8 r5; - s8 r4; - u16 r0; - - shared19338[d].unk2_2 = 1; - taskId = CreateTask(sub_80AF94C, 20); - r5 = sub_80AFB74(a); - r4 = sub_80AFB74(a + b) - r5; - r0 = sub_80AFB40(d); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = r0 + c; - gTasks[taskId].data[3] = d; - if (b < 0) - nullsub_19(d); - return taskId; -} - -void sub_80AF94C(u8 taskId) -{ - u8 r5 = gTasks[taskId].data[3]; - - if (gTasks[taskId].data[1] == 0) - { - nullsub_19(r5); - DestroyTask(taskId); - shared19338[r5].unk2_2 = 0; - } - else if (++gTasks[taskId].data[10] > 29) - { - u8 r6; - - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[1] < 0) - { - r6 = gTasks[taskId].data[0]--; - gTasks[taskId].data[1]++; - PlaySE(SE_BOO); - } - else - { - r6 = ++gTasks[taskId].data[0]; - gTasks[taskId].data[1]--; - PlaySE(SE_PIN); - } - if ((u16)gTasks[taskId].data[2] != 0xFFFF) - { - RequestSpriteCopy( - &gTasks[taskId].data[2], - (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2), - 2); - } - else - { - u8 i; - - for (i = 0; i < 3; i++) - { - if (gTasks[taskId].data[i + 4] < 0) - { - RequestSpriteCopy( - &gTasks[taskId].data[i + 7], - (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2), - 2); - gTasks[taskId].data[i + 4]++; - break; - } - } - } - } -} - -void sub_80AFA5C(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16); - DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16); - } -} - -void unref_sub_80AFAB8(s16 a, u8 b) -{ - u8 r5 = sub_80AFB74(a); - u16 r2; - u8 i; - u16 arr[9]; - - if (b == 0) - r2 = 0x50A2; - else if (b == 1) - r2 = 0x60A2; - else if (b == 2) - r2 = 0x70A2; - else - r2 = 0x80A2; - - for (i = 0; i < 9; i++) - { - if (i < r5) - arr[i] = r2; - else - arr[i] = 0; - } - - DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr)); -} - -u16 sub_80AFB40(u8 a) -{ - u16 var; - - if (a == 0) - var = 0x5011; - else if (a == 1) - var = 0x6011; - else if (a == 2) - var = 0x7011; - else - var = 0x8011; - return var + 1; -} - -s8 sub_80AFB74(s16 a) -{ - s8 retVal = a / 10; - - if (retVal > 16) - retVal = 16; - else if (retVal < -16) - retVal = -16; - return retVal; -} - -u8 sub_80AFBA0(s16 a, s16 b, u8 c) -{ - u8 taskId; - s8 r4; - s8 r5; - - shared19338[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)) - gTasks[taskId].data[2] = 1; - else - gTasks[taskId].data[2] = -1; - gTasks[taskId].data[3] = c; - if (b < 0) - nullsub_19(c); - return taskId; -} - -void sub_80AFC74(u8 taskId) -{ - u8 r7 = gTasks[taskId].data[3]; - s16 r3 = gTasks[taskId].data[0]; - s16 r1 = gTasks[taskId].data[1]; - - if (++gTasks[taskId].data[10] > 14) - { - u16 r6; - u8 r5; - u8 r10; - - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[1] == 0) - { - nullsub_19(r7); - DestroyTask(taskId); - shared19338[r7].unk2_2 = 0; - return; - } - else if (r3 == 0) - { - if (r1 < 0) - { - r6 = sub_80AFB40(r7) + 2; - gTasks[taskId].data[1]++; - } - else - { - r6 = sub_80AFB40(r7); - gTasks[taskId].data[1]--; - } - r5 = gTasks[taskId].data[0]++; - } - else - { - if (gTasks[taskId].data[2] < 0) - { - if (r1 < 0) - { - r5 = gTasks[taskId].data[0]++; - gTasks[taskId].data[1]++; - r6 = sub_80AFB40(r7) + 2; - } - else - { - r5 = --gTasks[taskId].data[0]; - r6 = 0; - gTasks[taskId].data[1]--; - } - } - else - { - if (r1 < 0) - { - r5 = --gTasks[taskId].data[0]; - r6 = 0; - gTasks[taskId].data[1]++; - } - else - { - r5 = gTasks[taskId].data[0]++; - gTasks[taskId].data[1]--; - r6 = sub_80AFB40(r7); - } - } - } - r10 = r5; - if (r5 > 7) - r5 += 24; - // Seriously, a 2-byte CpuFill? Why? - CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gUnknown_02038696[r7] * 160) * 2), 2); - if (r1 > 0) - { - PlaySE(SE_CONTEST_HEART); - m4aMPlayImmInit(&gMPlayInfo_SE1); - m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256); - } - else - { - PlaySE(SE_BOO); - } - if (r5 == 0 && r6 == 0) - gTasks[taskId].data[2] = -gTasks[taskId].data[2]; - } -} - -void sub_80AFE30(void) -{ - s32 i; - - LoadSpriteSheet(&gUnknown_083CA350); - for (i = 0; i < 4; i++) - { - u8 y = gUnknown_083CA338[gUnknown_02038696[i]]; - - shared19338[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1); - } -} - -void sub_80AFE78(u8 a) -{ - u8 spriteId; - s16 r5; - - shared19338[a].unk2_0 = 1; - spriteId = shared19338[a].unk0; - r5 = sContestantStatus[a].unk4 / 10 * 2; - if (r5 > 56) - r5 = 56; - else if (r5 < 0) - r5 = 0; - gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].data[0] = a; - gSprites[spriteId].data[1] = r5; - if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x) - gSprites[spriteId].data[2] = 1; - else - gSprites[spriteId].data[2] = -1; - gSprites[spriteId].callback = sub_80AFF60; -} - -void sub_80AFF10(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - sub_80AFE78(i); -} - -bool8 sub_80AFF28(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (shared19338[i].unk2_0) - break; - } - if (i == 4) - return TRUE; - else - return FALSE; -} - -void sub_80AFF60(struct Sprite *sprite) -{ - if (sprite->pos2.x == sprite->data[1]) - { - shared19338[sprite->data[0]].unk2_0 = 0; - sprite->callback = SpriteCallbackDummy; - } - else - { - sprite->pos2.x += sprite->data[2]; - } -} - -void sub_80AFFA0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - gSprites[shared19338[i].unk0].pos1.y = gUnknown_083CA338[gUnknown_02038696[i]]; -} - -void sub_80AFFE0(bool8 a) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (gUnknown_02038696[i] > 1) - { - if (!a) - gSprites[shared19338[i].unk0].pos1.x = 180; - else - gSprites[shared19338[i].unk0].pos1.x = 256; - } - } -} - -void sub_80B0034(void) -{ - s32 i; - - LoadSpritePalette(&gUnknown_083CA3E4); - for (i = 0; i < 4; i++) - { - LoadCompressedObjectPic(&gUnknown_083CA3C4[i]); - shared19338[i].unk1 = CreateSprite( - &gSpriteTemplate_83CA3F4[i], - 204, gUnknown_083CA33C[gUnknown_02038696[i]], - 0); - SetSubspriteTables(&gSprites[shared19338[i].unk1], gSubspriteTables_83CA464); - gSprites[shared19338[i].unk1].invisible = TRUE; - } -} - -void CreateApplauseMeterSprite(void) -{ - u8 spriteId; - - LoadCompressedObjectPic(&gUnknown_083CA46C); - LoadSpritePalette(&gUnknown_083CA474); - spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1); - gSprites[spriteId].invisible = TRUE; - sContest.applauseMeterSpriteId = spriteId; -} - -void nullsub_18(s8 unused) -{ -} - -void unref_sub_80B011C(void) -{ - u8 i; - - LoadCompressedObjectPic(&gUnknown_083CC3AC); - for (i = 0; i < 4; i++) - LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]); - for (i = 0; i < 4; i++) - { - u8 spriteId = CreateSprite( - &gSpriteTemplate_83CC454[i], - gUnknown_083CA330[i][0], gUnknown_083CA330[i][1], - 5); - - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data[0] = i; - sContest.unk1920D[i] = spriteId; - } -} - -void unref_sub_80B01B0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - gSprites[sContest.unk1920D[i]].callback = sub_80B0238; -} - -bool8 unref_sub_80B01E0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy) - break; - } - if (i == 4) - return TRUE; - else - return FALSE; -} - -void sub_80B0238(struct Sprite *sprite) -{ - sprite->oam.affineMode = 1; - InitSpriteAffineAnim(sprite); - if (sprite->invisible) - { - sprite->callback = sub_80B02A8; - } - else - { - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80B0280; - } -} - -void sub_80B0280(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - sprite->invisible = TRUE; - sprite->callback = sub_80B02A8; - } -} - -void sub_80B02A8(struct Sprite *sprite) -{ - sprite->invisible = FALSE; - StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].unkB_0); - StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_80B02F4; - PlaySE(SE_CONTEST_PLACE); -} - -void sub_80B02F4(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - FreeSpriteOamMatrix(sprite); - sprite->oam.affineMode = 0; - sprite->callback = SpriteCallbackDummy; - } -} - -void sub_80B0324(void) -{ - u8 i; - u8 taskId = CreateTask(sub_80B0458, 30); - - sContest.unk19211 = taskId; - for (i = 0; i < 4; i++) - gTasks[taskId].data[i * 4] = 0xFF; -} - -void sub_80B0368(u8 a) -{ - gTasks[sContest.unk19211].data[a * 4 + 0] = 0; - gTasks[sContest.unk19211].data[a * 4 + 1] = 0; -} - -void sub_80B03A8(u8 a) -{ - u8 taskId = CreateTask(sub_80B03D8, 31); - - gTasks[taskId].data[0] = a; -} - -void sub_80B03D8(u8 taskId) -{ - u8 r4 = gTasks[taskId].data[0]; - - if (gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0 - || gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0xFF) - { - 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)); - DestroyTask(taskId); - } -} - -void sub_80B0458(u8 taskId) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - u8 r3 = i * 4; - - if (gTasks[taskId].data[r3 + 0] != 0xFF) - { - if (gTasks[taskId].data[r3 + 1] == 0) - gTasks[taskId].data[r3 + 0]++; - else - gTasks[taskId].data[r3 + 0]--; - - if (gTasks[taskId].data[r3 + 0] == 16 - || gTasks[taskId].data[r3 + 0] == 0) - gTasks[taskId].data[r3 + 1] ^= 1; - - BlendPalette( - (sContest.unk19218[i] + 5) * 16 + 6, - 2, - gTasks[taskId].data[r3 + 0], - RGB(31, 31, 18)); - } - } -} - -void sub_80B0518(void) -{ - u8 i; - - sContest.unk19212 = CreateTask(sub_80B05FC, 30); - for (i = 0; i < 4; i++) - sub_80B0548(i); -} - -void sub_80B0548(u8 a) -{ - gTasks[sContest.unk19212].data[a * 4 + 0] = 0xFF; - gTasks[sContest.unk19212].data[a * 4 + 1] = 0; -} - -void sub_80B0588(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80B05A4(i); -} - -void sub_80B05A4(u8 a) -{ - sub_80B0548(a); - - // 2-byte DMA copy? Why? - - DmaCopy16Defvars( - 3, - &gPlttBufferUnfaded[16 * (5 + a) + 10], - &gPlttBufferFaded[16 * (5 + a) + 10], - 2); - - DmaCopy16Defvars( - 3, - &gPlttBufferUnfaded[16 * (5 + a) + 12 + a], - &gPlttBufferFaded[16 * (5 + a) + 12 + a], - 2); -} - -void nullsub_19(int unused) -{ -} - -void sub_80B05FC(u8 taskId) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - u8 r3 = i * 4; - - if (gTasks[taskId].data[r3 + 0] != 0xFF) - { - if (++gTasks[taskId].data[r3 + 2] > 2) - { - gTasks[taskId].data[r3 + 2] = 0; - - if (gTasks[taskId].data[r3 + 1] == 0) - gTasks[taskId].data[r3 + 0]++; - else - gTasks[taskId].data[r3 + 0]--; - - if (gTasks[taskId].data[r3 + 0] == 16 - || gTasks[taskId].data[r3 + 0] == 0) - gTasks[taskId].data[r3 + 1] ^= 1; - - BlendPalette((i + 5) * 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)); - } - } - } -} - -u8 unref_sub_80B06E0(u8 *a) -{ - u8 i; - u8 taskId = CreateTask(sub_80B0748, 10); - - for (i = 0; i < 4; i++) - { - u8 r0 = i * 4; - - gTasks[taskId].data[r0] = a[i]; - if (a[i] != 0) - shared19338[i].unk2_1 = 1; - } - return taskId; -} - -#ifdef NONMATCHING -void sub_80B0748(u8 taskId) -{ - u8 i; - u8 r4; - u8 r4_2; - u8 r1; - u8 r7; - - for (i = 0; i < 4; i++) - { - //#define r4 r4_2 - r4 = gUnknown_02038696[i]; - r1 = r4 * 4; - r7 = gTasks[taskId].data[r1 + 0]; - - if (r7 != 0) - { - //_080B079C - u8 r8 = gTasks[taskId].data[r1 + 1]; - u8 r5 = gTasks[taskId].data[r1 + 2]; - u8 r6 = gTasks[taskId].data[r1 + 3]; - - if (r7 == 1) - { - r6++; - if (r6 == 1) - { - //_080B07D2 - r6 = 0; - BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(31, 31, 31)); - if (r5 == 0 && r8 == 4) - { - gTasks[taskId].data[r1 + 0] = 0; - //asm(""); - } - //_080B0800 - else - { - r5 += 2; - if (r5 > 13) - { - r5 = 0; - r8++; - } - } - } - //to _080B08EA - } - //_080B0818 - else if (r7 == 2 || r7 == 4) - { - r6++; - if (r6 == 3) - { - r6 = 0; - BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]); - if (r5 == 0 && r8 == 2) - { - gTasks[taskId].data[r1 + 0] = 0; - } - //_080B0858 - else - { - r5 += 1; - if (r5 == 14) - { - r5 = 0; - r8++; - if (r7 == 4 && r8 == 1) - { - BlendPalette((r4 + 9) * 16 + 2, 1, 4, RGB(0, 0, 0)); - BlendPalette((r4 + 9) * 16 + 5, 1, 4, RGB(0, 0, 0)); - } - } - } - } - //to _080B08EA - } - //_080B0896 - else if (r7 == 3) - { - r6++; - if (r6 == 12) - { - r6 = 0; - BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(0, 0, 0)); - r5 += 1; - if (r5 == 5) - { - // What the hell? These aren't pointers. - // This code would crash if run. - DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1], - (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6); - gTasks[taskId].data[r1 + 0] = 0; - } - } - } - //_080B08EA - gTasks[taskId].data[r1 + 1] = r8; - gTasks[taskId].data[r1 + 2] = r5; - gTasks[taskId].data[r1 + 3] = r6; - } - //_080B0910 - } - //_080B0920 - - #define i r4_2 - for (i = 0; i < 4; i++) // r4 is i - { - if (gTasks[taskId].data[i * 4 + 0] != 0) - break; - } - //_080B0958 - if (i == 4) - { - for (i = 0; i < 4; i++) - shared19338[i].unk2_2 = 0; - DestroyTask(taskId); - } - #undef i -} -#else -NAKED -void sub_80B0748(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - str r0, [sp, 0x4]\n\ - ldr r2, _080B07F4 @ =gTasks\n\ - movs r1, 0x8\n\ - adds r1, r2\n\ - mov r10, r1\n\ - ldr r3, [sp]\n\ - lsls r3, 2\n\ - str r3, [sp, 0x1C]\n\ - ldr r1, [sp]\n\ - adds r0, r3, r1\n\ - lsls r0, 3\n\ - str r0, [sp, 0xC]\n\ -_080B0774:\n\ - ldr r0, _080B07F8 @ =gUnknown_02038696\n\ - ldr r3, [sp, 0x4]\n\ - adds r0, r3, r0\n\ - ldrb r4, [r0]\n\ - lsls r0, r4, 26\n\ - lsrs r1, r0, 24\n\ - lsls r0, r1, 1\n\ - str r0, [sp, 0x8]\n\ - ldr r3, [sp]\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r6, r0, 3\n\ - ldr r3, [sp, 0x8]\n\ - adds r0, r3, r6\n\ - add r0, r10\n\ - mov r9, r0\n\ - ldrb r7, [r0]\n\ - cmp r7, 0\n\ - bne _080B079C\n\ - b _080B0910\n\ -_080B079C:\n\ - adds r3, r1, 0x1\n\ - lsls r0, r3, 1\n\ - adds r0, r6\n\ - add r0, r10\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r2, r1, 0x2\n\ - lsls r0, r2, 1\n\ - adds r0, r6\n\ - add r0, r10\n\ - ldrb r5, [r0]\n\ - adds r1, 0x3\n\ - lsls r0, r1, 1\n\ - adds r0, r6\n\ - add r0, r10\n\ - ldrb r6, [r0]\n\ - str r3, [sp, 0x10]\n\ - str r2, [sp, 0x14]\n\ - str r1, [sp, 0x18]\n\ - cmp r7, 0x1\n\ - bne _080B0818\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0x1\n\ - beq _080B07D2\n\ - b _080B08EA\n\ -_080B07D2:\n\ - movs r6, 0\n\ - adds r0, r4, 0x5\n\ - lsls r0, 4\n\ - adds r0, 0x1\n\ - movs r1, 0x3\n\ - adds r2, r5, 0\n\ - ldr r3, _080B07FC @ =0x00007fff\n\ - bl BlendPalette\n\ - cmp r5, 0\n\ - bne _080B0800\n\ - mov r0, r8\n\ - cmp r0, 0x4\n\ - bne _080B0800\n\ - mov r1, r9\n\ - strh r6, [r1]\n\ - b _080B08EA\n\ - .align 2, 0\n\ -_080B07F4: .4byte gTasks\n\ -_080B07F8: .4byte gUnknown_02038696\n\ -_080B07FC: .4byte 0x00007fff\n\ -_080B0800:\n\ - adds r0, r5, 0x2\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0xD\n\ - bls _080B08EA\n\ - movs r5, 0\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - b _080B08EA\n\ -_080B0818:\n\ - cmp r7, 0x2\n\ - beq _080B0820\n\ - cmp r7, 0x4\n\ - bne _080B0896\n\ -_080B0820:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0x3\n\ - bne _080B08EA\n\ - movs r6, 0\n\ - adds r0, r4, 0x5\n\ - lsls r0, 4\n\ - adds r0, 0x1\n\ - ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\ - lsls r1, r4, 1\n\ - adds r1, r2\n\ - ldrh r3, [r1]\n\ - movs r1, 0x3\n\ - adds r2, r5, 0\n\ - bl BlendPalette\n\ - cmp r5, 0\n\ - bne _080B0858\n\ - mov r2, r8\n\ - cmp r2, 0x2\n\ - bne _080B0858\n\ - mov r3, r9\n\ - strh r6, [r3]\n\ - b _080B08EA\n\ - .align 2, 0\n\ -_080B0854: .4byte gUnknown_083CC5A4\n\ -_080B0858:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0xE\n\ - bne _080B08EA\n\ - movs r5, 0\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - cmp r7, 0x4\n\ - bne _080B08EA\n\ - cmp r0, 0x1\n\ - bne _080B08EA\n\ - adds r4, 0x9\n\ - lsls r4, 4\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - movs r2, 0x4\n\ - movs r3, 0\n\ - bl BlendPalette\n\ - adds r4, 0x5\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - movs r2, 0x4\n\ - movs r3, 0\n\ - bl BlendPalette\n\ - b _080B08EA\n\ -_080B0896:\n\ - cmp r7, 0x3\n\ - bne _080B08EA\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0xC\n\ - bne _080B08EA\n\ - movs r6, 0\n\ - adds r0, r4, 0x5\n\ - lsls r0, 4\n\ - adds r4, r0, 0x1\n\ - adds r0, r4, 0\n\ - movs r1, 0x3\n\ - adds r2, r5, 0\n\ - movs r3, 0\n\ - bl BlendPalette\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x5\n\ - bne _080B08EA\n\ - ldr r0, _080B0930 @ =gPlttBufferFaded\n\ - lsls r1, r4, 1\n\ - adds r0, r1, r0\n\ - ldrh r2, [r0]\n\ - ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - ldr r1, _080B0938 @ =0x040000d4\n\ - str r2, [r1]\n\ - str r0, [r1, 0x4]\n\ - movs r0, 0x80\n\ - lsls r0, 24\n\ - orrs r7, r0\n\ - str r7, [r1, 0x8]\n\ - ldr r0, [r1, 0x8]\n\ - ldr r1, [sp, 0x8]\n\ - ldr r2, [sp, 0xC]\n\ - adds r0, r1, r2\n\ - add r0, r10\n\ - strh r6, [r0]\n\ -_080B08EA:\n\ - ldr r3, [sp, 0x10]\n\ - lsls r0, r3, 1\n\ - ldr r1, [sp, 0xC]\n\ - adds r0, r1\n\ - add r0, r10\n\ - mov r2, r8\n\ - strh r2, [r0]\n\ - ldr r3, [sp, 0x14]\n\ - lsls r0, r3, 1\n\ - adds r0, r1\n\ - add r0, r10\n\ - strh r5, [r0]\n\ - ldr r1, [sp, 0x18]\n\ - lsls r0, r1, 1\n\ - ldr r2, [sp, 0xC]\n\ - adds r0, r2\n\ - add r0, r10\n\ - strh r6, [r0]\n\ - ldr r2, _080B093C @ =gTasks\n\ -_080B0910:\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - cmp r0, 0x3\n\ - bhi _080B0920\n\ - b _080B0774\n\ -_080B0920:\n\ - movs r4, 0\n\ - ldr r3, [sp, 0x1C]\n\ - ldr r1, [sp]\n\ - adds r0, r3, r1\n\ - lsls r1, r0, 3\n\ - adds r2, 0x8\n\ - adds r0, r1, r2\n\ - b _080B0950\n\ - .align 2, 0\n\ -_080B0930: .4byte gPlttBufferFaded\n\ -_080B0934: .4byte gPlttBufferUnfaded\n\ -_080B0938: .4byte 0x040000d4\n\ -_080B093C: .4byte gTasks\n\ -_080B0940:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x3\n\ - bhi _080B0958\n\ - lsls r0, r4, 3\n\ - adds r0, r1\n\ - adds r0, r2\n\ -_080B0950:\n\ - movs r3, 0\n\ - ldrsh r0, [r0, r3]\n\ - cmp r0, 0\n\ - beq _080B0940\n\ -_080B0958:\n\ - cmp r4, 0x4\n\ - bne _080B0980\n\ - movs r4, 0\n\ - ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\ - movs r5, 0x3\n\ - negs r5, r5\n\ -_080B0964:\n\ - lsls r1, r4, 2\n\ - adds r1, r3\n\ - ldrb r2, [r1, 0x2]\n\ - adds r0, r5, 0\n\ - ands r0, r2\n\ - strb r0, [r1, 0x2]\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x3\n\ - bls _080B0964\n\ - ldr r0, [sp]\n\ - bl DestroyTask\n\ -_080B0980:\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080B0990: .4byte gSharedMem + 0x19338\n\ - .syntax divided\n"); -} -#endif - -void unref_sub_80B0994(u8 a) -{ - if (a != 0) - sContest.unk1920A_2 = 1; -} - -void sub_80B09B0(u8 a) -{ - if (sContestantStatus[a].hasJudgesAttention) - sub_80B0368(a); - else - sub_80B03A8(a); -} - -extern const struct CompressedSpriteSheet gUnknown_083CC4B4[]; -extern const struct SpritePalette gUnknown_083CC4D4[]; -extern const struct SpriteTemplate gSpriteTemplate_83CC53C[]; - -u8 sub_80B09E4(u8 a) -{ - u8 r5 = gUnknown_02038696[a] * 40 + 32; - u8 r8; - u8 r6; - volatile u8 zero; - - LoadCompressedObjectPic(&gUnknown_083CC4B4[a]); - LoadSpritePalette(&gUnknown_083CC4D4[a]); - r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29); - r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29); - gSprites[r6].oam.tileNum += 64; - - CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32)); - CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32)); - - DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300); - - // What is this? - zero = 0; - zero = 0; - - DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300); - - gSprites[r8].data[0] = r6; - gSprites[r6].data[0] = r8; - gSprites[r8].data[1] = a; - gSprites[r6].data[1] = a; - return r8; -} - -void sub_80B0B5C(u8 spriteId) -{ - u8 spriteId2 = gSprites[spriteId].data[0]; - - FreeSpriteOamMatrix(&gSprites[spriteId2]); - DestroySprite(&gSprites[spriteId2]); - DestroySpriteAndFreeResources(&gSprites[spriteId]); -} - -void sub_80B0B98(void) -{ - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = 0x0907; -} - -void sub_80B0BB4(void) -{ - REG_BLDCNT = 0; - REG_BLDALPHA = 0; -} - -void sub_80B0BC4(u8 a, bool8 b) -{ - u8 r5; - - sub_80B0B98(); - shared19338[gSprites[a].data[1]].unk2_1 = 1; - r5 = gSprites[a].data[0]; - StartSpriteAffineAnim(&gSprites[a], 1); - StartSpriteAffineAnim(&gSprites[r5], 1); - gSprites[a].callback = sub_80B0C5C; - gSprites[r5].callback = SpriteCallbackDummy; - if (b == FALSE) - PlaySE(SE_CONTEST_MONS_TURN); - else - PlaySE(SE_PC_LOGIN); -} - -void sub_80B0C5C(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - u8 r1 = sprite->data[0]; - - if (gSprites[r1].affineAnimEnded) - { - sprite->invisible = TRUE; - gSprites[r1].invisible = TRUE; - sprite->callback = sub_80B0CB0; - } - } -} - -void sub_80B0CB0(struct Sprite *sprite) -{ - shared19338[sprite->data[1]].unk2_1 = 0; - sub_80B0B5C(sprite->data[0]); - sub_80B0BB4(); -} - -void sub_80B0CDC(u8 a, int unused) -{ - shared19338[a].unk2_1 = 0; -} - -void unref_sub_80B0CF4(void) -{ - //shared18000.unk18000 ^= 1; - gSharedMem[0x18000] ^= 1; - //if (shared18000.unk18000 == 0) - if (gSharedMem[0x18000] == 0) - { - u8 i; - - for (i = 0; i < 4; i++) - { - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA308[i][0], - gUnknown_083CA308[i][1], - gUnknown_083CA310[i][0] + 5, - gUnknown_083CA310[i][1] + 1); - } - sub_80AE514(); - sub_80AEB30(); - } - else - { - sub_80B0D7C(); - } -} - -void sub_80B0D7C(void) -{ - u8 r5 = 0; - u8 sp8[8]; - - if (gSharedMem[0x18000] != 0) - { - u8 i; - s16 r2; - - for (i = 0; i < 4; i++) - { - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA308[i][0], - gUnknown_083CA308[i][1], - gUnknown_083CA310[i][0] + 5, - gUnknown_083CA310[i][1] + 1); - } - for (i = 0; i < 4; i++) - { - r2 = sContestantStatus[i].unk4; - if (r2 < 0) - { - r2 = -r2; - sp8[0] = CHAR_HYPHEN; - r5++; - } - ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - sp8, - 592 + gUnknown_02038696[i] * 22, - gUnknown_083CA310[gUnknown_02038696[i]][0], - gUnknown_083CA310[gUnknown_02038696[i]][1]); - r5 = 0; - } - for (i = 0; i < 4; i++) - { - r2 = sContestantStatus[i].appeal2; - if (r2 < 0) - { - r2 = -r2; - sp8[0] = CHAR_HYPHEN; - r5++; - } - ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - sp8, - 512 + gUnknown_02038696[i] * 20, - gUnknown_083CA308[gUnknown_02038696[i]][0], - gUnknown_083CA308[gUnknown_02038696[i]][1]); - r5 = 0; - } - sub_80AEB30(); - } -} - -void unref_sub_80B0EE8(s32 *a, s32 b) -{ - s32 i; - s32 j; - - for (i = 0; i < b - 1; i++) - { - for (j = b - 1; j > i; j--) - { - if (a[j - 1] > a[j]) - { - s32 temp = a[j]; - - a[j] = a[j - 1]; - a[j - 1] = temp; - } - } - } -} - -// something to do with contest NPC opponents, I think. -void sub_80B0F28(u8 a) -{ - u8 sp0[4]; - u16 sp4[4] = {0}; - s32 i; - s32 r2; - s32 r4; - - for (i = 0; i < 4; i++) - { - sp4[i] = Random(); - for (r2 = 0; r2 < i; r2++) - { - if (sp4[i] == sp4[r2]) - { - i--; - break; - } - } - } - - if (a == 0) - { - for (i = 0; i < 4; i++) - { - gUnknown_02038696[i] = i; - for (r4 = 0; r4 < i; r4++) - { - if (gContestMonConditions[gUnknown_02038696[r4]] < gContestMonConditions[i] - || (gContestMonConditions[gUnknown_02038696[r4]] == gContestMonConditions[i] && sp4[gUnknown_02038696[r4]] < sp4[i])) - { - for (r2 = i; r2 > r4; r2--) - gUnknown_02038696[r2] = gUnknown_02038696[r2 - 1]; - gUnknown_02038696[r4] = i; - break; - } - } - if (r4 == i) - gUnknown_02038696[i] = i; - } - memcpy(sp0, gUnknown_02038696, sizeof(sp0)); - for (i = 0; i < 4; i++) - gUnknown_02038696[sp0[i]] = i; - } - else - { - memset(sp0, 0xFF, sizeof(sp0)); - for (i = 0; i < 4; i++) - { - u8 r2 = sContestantStatus[i].unkB_0; - - while (1) - { - u8 *ptr = &sp0[r2]; - if (*ptr == 0xFF) - { - *ptr = i; - gUnknown_02038696[i] = r2; - break; - } - r2++; - } - } - for (i = 0; i < 3; i++) - { - for (r4 = 3; r4 > i; r4--) - { - if (sContestantStatus[r4 - 1].unkB_0 == sContestantStatus[r4].unkB_0 - && gUnknown_02038696[r4 - 1] < gUnknown_02038696[r4] - && sp4[r4 - 1] < sp4[r4]) - { - u8 temp = gUnknown_02038696[r4]; - - gUnknown_02038696[r4] = gUnknown_02038696[r4 - 1]; - gUnknown_02038696[r4 - 1] = temp; - } - } - } - } -} - -void sub_80B1118(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - //LoadPalette(shared18000.unk18004[5 + i], (gUnknown_02038696[i] + 5) * 16, 32); - LoadPalette(shared18004 + (i + 5) * 16, (gUnknown_02038696[i] + 5) * 16, 32); - } - sub_80AE514(); -} - -void sub_80B114C(u8 contestant) -{ - bool8 r8; - s32 i; - - sContestantStatus[contestant].appeal2 = 0; - sContestantStatus[contestant].appeal1 = 0; - r8 = sub_80AF404(contestant); - if (r8) - { - u16 move = sContestantStatus[contestant].currMove; - u8 effect = gContestMoves[move].effect; - u8 rnd; - - sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory; - if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE) - { - sContestantStatus[contestant].disappointedRepeat = TRUE; - sContestantStatus[contestant].moveRepeatCount++; - } - else - { - sContestantStatus[contestant].moveRepeatCount = 0; - } - sContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal; - sContestantStatus[contestant].appeal2 = gContestEffects[effect].appeal; - shared192D0.jam = gContestEffects[effect].jam; - shared192D0.jam2 = gContestEffects[effect].jam; - shared192D0.contestant = contestant; - for (i = 0; i < 4; i++) - { - sContestantStatus[i].jam = 0; - shared192D0.unnervedPokes[i] = 0; - } - if (sContestantStatus[contestant].hasJudgesAttention && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0) - sContestantStatus[contestant].hasJudgesAttention = 0; - gContestEffectFuncs[effect](); - if (sContestantStatus[contestant].conditionMod == 1) - sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition - 10; - else if (sContestantStatus[contestant].appealTripleCondition) - sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition * 3; - else - sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition; - sContestantStatus[contestant].unk16 = 0; - sContestantStatus[contestant].unk15_6 = 0; - if (sub_80B214C(contestant)) - { - u8 r2 = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove); - - if (r2 != 0 && sContestantStatus[contestant].hasJudgesAttention) - { - sContestantStatus[contestant].unk16 = r2; - sContestantStatus[contestant].unk15_6 = 1; - sContestantStatus[contestant].hasJudgesAttention = 0; - sContestantStatus[contestant].unk17 = sContestantStatus[contestant].appeal1 * sContestantStatus[contestant].unk16; - sContestantStatus[contestant].unk15_3 = 1; - } - else - { - if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0) - { - sContestantStatus[contestant].hasJudgesAttention = 1; - sContestantStatus[contestant].unk15_6 = 1; - } - else - { - sContestantStatus[contestant].hasJudgesAttention = 0; - } - } - } - if (sContestantStatus[contestant].disappointedRepeat) - sContestantStatus[contestant].unk18 = (sContestantStatus[contestant].moveRepeatCount + 1) * 10; - if (sContestantStatus[contestant].nervous) - { - sContestantStatus[contestant].hasJudgesAttention = 0; - sContestantStatus[contestant].appeal2 = 0; - sContestantStatus[contestant].appeal1 = 0; - } - shared19328.bits_0 = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove); - if (sContestantStatus[contestant].overrideCategoryExcitementMod) - shared19328.bits_0 = 1; - if (shared19328.bits_0 > 0) - { - if (sContest.applauseLevel + shared19328.bits_0 > 4) - shared19328.unk2 = 60; - else - shared19328.unk2 = 10; - } - else - { - shared19328.unk2 = 0; - } - - rnd = Random() % 3; - for (i = 0; i < 4; i++) - { - if (i != contestant) - { - if (rnd == 0) - break; - rnd--; - } - } - sContestantStatus[contestant].unk1B = i; - } -} - -void SetContestantEffectStringID(u8 a, u8 b) -{ - sContestantStatus[a].effectStringId = b; -} - -void SetContestantEffectStringID2(u8 a, u8 b) -{ - sContestantStatus[a].effectStringId2 = b; -} - -void SetStartledString(u8 contestant, u8 jam) -{ - if (jam >= 60) - SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER); - else if (jam >= 40) - SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP); - else if (jam >= 30) - SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY); - else if (jam >= 20) - SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK); - else if (jam >= 10) - SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN); -} - -void sub_80B146C(u8 contestant, u8 stringId) -{ - StringCopy(gStringVar1, gContestMons[contestant].nickname); - StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); - if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL) - StringCopy(gStringVar3, gText_Contest_Shyness); - else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY) - StringCopy(gStringVar3, gText_Contest_Anxiety); - else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE) - StringCopy(gStringVar3, gText_Contest_Laziness); - else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART) - StringCopy(gStringVar3, gText_Contest_Hesitancy); - else - StringCopy(gStringVar3, gText_Contest_Fear); - StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[stringId]); - sub_80AF138(); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); -} - -void MakeContestantNervous(u8 p) -{ - sContestantStatus[p].nervous = 1; - sContestantStatus[p].currMove = MOVE_NONE; -} - -// Determines turn order? -void sub_80B159C(void) -{ - u8 r12 = 0; - s32 i; - s32 j; - u8 sp0[4]; - u8 sp4[4]; - - for (i = 0; i < 4; i++) - { - sp0[i] = gUnknown_02038696[i]; - sp4[i] = 0; - } - - for (i = 0; i < 4; i++) - { - for (j = 0; j < 4; j++) - { - if (sContestantStatus[j].nextTurnOrder == i) - { - sp0[j] = i; - sp4[j] = 1; - break; - } - } - if (j == 4) - { - for (j = 0; j < 4; j++) - { - if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF) - { - r12 = j; - j++; - break; - } - } - for (; j < 4; j++) - { - if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF - && gUnknown_02038696[r12] > gUnknown_02038696[j]) - r12 = j; - } - sp0[r12] = i; - sp4[r12] = 1; - } - } - - for (i = 0; i < 4; i++) - { - shared192D0.turnOrder[i] = sp0[i]; - sContestantStatus[i].nextTurnOrder = 0xFF; - sContestantStatus[i].turnOrderMod = 0; - gUnknown_02038696[i] = sp0[i]; - } -} - -void sub_80B16D0(struct Sprite *sprite) -{ - if (sprite->data[1]++ > 84) - { - sprite->data[1] = 0; - sprite->invisible = TRUE; - sprite->callback = SpriteCallbackDummy; - sContest.unk1920A_4 = 0; - } -} - -void sub_80B1710(u8 a) -{ - u8 spriteId = sContest.unk19216; - - switch (a) - { - case 0: - case 1: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0]; - PlaySE(SE_FAILURE); - break; - case 2: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4; - PlaySE(SE_SUCCESS); - break; - case 3: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8; - PlaySE(SE_SUCCESS); - break; - case 4: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; - PlaySE(SE_WARP_IN); - break; - case 5: // exactly the same as case 4 - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; - PlaySE(SE_WARP_IN); - break; - case 6: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16; - PlaySE(SE_WARP_IN); - break; - case 8: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24; - PlaySE(SE_M_HEAL_BELL); - break; - case 7: - default: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20; - PlaySE(SE_WARP_IN); - break; - } - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].callback = sub_80B16D0; - sContest.unk1920A_4 = 1; -} - -void sub_80B1928(void) -{ - s32 i; - - for (i = 0; i < 5; i++) - { - const u8 *src; - - if (i < sContest.applauseLevel) - src = gContestApplauseMeterGfx + 64; - else - src = gContestApplauseMeterGfx; - CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); - CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); - if (sContest.applauseLevel > 4) - sub_80B1A2C(); - } -} - -void unref_sub_80B19D0(void) -{ - u8 str[20]; - StringCopy(str, gUnknown_083CC2EC); - Text_InitWindowAndPrintText(&gUnknown_03004210, str, 680, 0, 0); -} - -s8 Contest_GetMoveExcitement(u16 move) -{ - return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; -} - -// Launches crowd movement task, maybe -u8 sub_80B1A2C(void) -{ - u8 taskId = CreateTask(c3_08130B10, 10); - - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2); - return taskId; -} - -void c3_08130B10(u8 taskId) -{ - if (++gTasks[taskId].data[0] == 1) - { - gTasks[taskId].data[0] = 0; - if (gTasks[taskId].data[3] == 0) - gTasks[taskId].data[4]++; - else - gTasks[taskId].data[4]--; - BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31)); - if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16) - { - gTasks[taskId].data[3] ^= 1; - if (sContest.applauseLevel < 5) - { - BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0)); - DestroyTask(taskId); - } - } - } -} - -void sub_80B1B14(void) -{ - CreateTask(sub_80B1B68, 10); - gSprites[sContest.applauseMeterSpriteId].pos2.x = -70; - gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; - sContest.unk1920A_6 = 1; -} - -void sub_80B1B68(u8 taskId) -{ - struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; - - gTasks[taskId].data[10] += 1664; - sprite->pos2.x += gTasks[taskId].data[10] >> 8; - gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; - if (sprite->pos2.x > 0) - sprite->pos2.x = 0; - if (sprite->pos2.x == 0) - { - sContest.unk1920A_6 = 0; - DestroyTask(taskId); - } -} - -void sub_80B1BDC(void) -{ - if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE) - { - sContest.unk1920A_6 = 0; - } - else - { - CreateTask(sub_80B1C34, 10); - gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; - sContest.unk1920A_6 = 1; - } -} - -void sub_80B1C34(u8 taskId) -{ - struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; - - gTasks[taskId].data[10] += 1664; - sprite->pos2.x -= gTasks[taskId].data[10] >> 8; - gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; - if (sprite->pos2.x < -70) - sprite->pos2.x = -70; - if (sprite->pos2.x == -70) - { - sprite->invisible = TRUE; - sContest.unk1920A_6 = 0; - DestroyTask(taskId); - } -} - -void sub_80B1CBC(s8 a) -{ - u8 taskId = CreateTask(sub_80B1CFC, 5); - - gTasks[taskId].data[0] = a; - sContest.unk1920A_5 = 1; -} - -void sub_80B1CFC(u8 taskId) -{ - switch (gTasks[taskId].data[10]) - { - case 0: - sub_80B1B14(); - gTasks[taskId].data[10]++; - break; - case 1: - if (!sContest.unk1920A_6) - { - nullsub_18(gTasks[taskId].data[0]); - gTasks[taskId].data[10]++; - } - break; - case 2: - if (gTasks[taskId].data[11]++ > 20) - { - gTasks[taskId].data[11] = 0; - sub_80B1928(); - sContest.unk1920A_5 = 0; - DestroyTask(taskId); - } - break; - } -} - -void unref_sub_80B1D84(void) -{ - gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; - gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; -} - -void unref_sub_80B1DB8(void) -{ - gSprites[sContest.applauseMeterSpriteId].invisible = TRUE; -} - -void sub_80B1DDC(void) -{ - CreateTask(sub_80B1DFC, 15); - sContest.unk1920A_7 = 1; -} - -void sub_80B1DFC(u8 taskId) -{ - if (gTasks[taskId].data[10]++ > 6) - { - register struct Task *task asm("r0"); - register u32 r4 asm("r4") = taskId * 4; - - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[11] == 0) - { - DmaCopy32Defvars(3, shared16800, (void *)(VRAM + 0x2000), 0x1000); - } - else - { - DmaCopy32Defvars(3, shared15800, (void *)(VRAM + 0x2000), 0x1000); - gTasks[taskId].data[12]++; - } - - // Why won't this match the normal way? - asm("add %0, %1, #0\n\t" - "add %0, %3\n\t" - "lsl %0, #3\n\t" - "add %0, %2\n\t" - : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId)); - - //gTasks[taskId].data[11] ^= 1; - task->data[11] ^= 1; - - //if (gTasks[taskId].data[12] == 9) - if (task->data[12] == 9) - { - sContest.unk1920A_7 = 0; - DestroyTask(taskId); - } - } -} - -#define tBlendColor data[0] -#define tBlendCoeff data[1] - -void sub_80B1EA8(s8 a, s8 b) -{ - u8 taskId = CreateTask(sub_80B1F4C, 10); - u16 blendColor; - u8 blendCoeff; - u8 r3; - - if (a > 0) - { - blendColor = RGB(30, 27, 8); - if (b > 0) - { - blendCoeff = 0; - r3 = sContest.applauseLevel * 3; - } - else - { - blendCoeff = sContest.applauseLevel * 3; - r3 = 0; - } - } - else - { - blendColor = 0; - if (b > 0) - { - blendCoeff = 0; - r3 = 12; - } - else - { - blendCoeff = 12; - r3 = 0; - } - } - gTasks[taskId].tBlendColor = blendColor; - gTasks[taskId].tBlendCoeff = blendCoeff; - gTasks[taskId].data[2] = b; - gTasks[taskId].data[3] = r3; - sContest.unk1920B_0 = 0; -} - -void sub_80B1F4C(u8 taskId) -{ - if (gTasks[taskId].data[10]++ >= 0) - { - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[2] > 0) - gTasks[taskId].tBlendCoeff++; - else - gTasks[taskId].tBlendCoeff--; - BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); - BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); - if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) - { - DestroyTask(taskId); - sContest.unk1920B_0 = 0; - } - } -} - -#undef tBlendColor -#undef tBlendCoeff - -void sub_80B1FD0(bool8 a) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (sContestantStatus[i].turnOrderMod != 0 && a) - { - CpuCopy32( - GetTurnOrderNumberGfx(i), - (void *)(VRAM + 0x10000 + (gSprites[shared19338[i].unk1].oam.tileNum + 5) * 32), - 64); - gSprites[shared19338[i].unk1].pos1.y = gUnknown_083CA33C[gUnknown_02038696[i]]; - gSprites[shared19338[i].unk1].invisible = FALSE; - } - else - { - gSprites[shared19338[i].unk1].invisible = TRUE; - } - } -} - -const u8 *GetTurnOrderNumberGfx(u8 contestant) -{ - if (sContestantStatus[contestant].turnOrderMod != 1) - return gContestNextTurnRandomGfx; - else - return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64; -} - -void sub_80B20C4(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (shared192D0.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) - { - u8 r4 = gUnknown_02038696[i] * 5 + 2; - u16 r0 = sub_80AEFE8(i, 3); - - *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0; - *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1; - *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16; - *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17; - PlaySE(SE_CONTEST_ICON_CHANGE); - } - } -} - -bool8 sub_80B214C(u8 a) -{ - if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous) - return FALSE; - else - return TRUE; -} - -void sub_80B2184(void) -{ - s32 i; - - ((vBgCnt *)®_BG1CNT)->priority = 0; - ((vBgCnt *)®_BG1CNT)->screenSize = 1; - ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; - - gBattle_BG1_X = DISPLAY_WIDTH; - gBattle_BG1_Y = DISPLAY_HEIGHT; - REG_BG1HOFS = DISPLAY_WIDTH; - REG_BG1VOFS = DISPLAY_HEIGHT; - - DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); - LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000)); - - ((vBgCnt *)®_BG1CNT)->charBaseBlock = 0; - - for (i = 0; i < 4; i++) - { - gSprites[shared19338[i].unk0].oam.priority = 1; - gSprites[shared19338[i].unk1].oam.priority = 1; - } - - ((vBgCnt *)®_BG2CNT)->priority = 1; - ((vBgCnt *)®_BG0CNT)->priority = 1; - ((vBgCnt *)®_BG1CNT)->screenSize = 2; -} - -void sub_80B2280(void) -{ - s32 i; - - DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000); - DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); - - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - - ((vBgCnt *)®_BG1CNT)->priority = 1; - ((vBgCnt *)®_BG1CNT)->screenSize = 0; - ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; - ((vBgCnt *)®_BG1CNT)->charBaseBlock = 2; - - for (i = 0; i < 4; i++) - { - gSprites[shared19338[i].unk0].oam.priority = 0; - gSprites[shared19338[i].unk1].oam.priority = 0; - } -} - -void sub_80B237C(u8 taskId) -{ - gBattle_BG1_X = 0; - gBattle_BG1_Y = DISPLAY_HEIGHT; - PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); - gTasks[taskId].func = sub_80B23BC; -} - -void sub_80B23BC(u8 taskId) -{ - if ((s16)(gBattle_BG1_Y -= 7) < 0) - gBattle_BG1_Y = 0; - if (gBattle_BG1_Y == 0) // Why cast? - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80B2400; - } -} - -void sub_80B2400(u8 taskId) -{ - s32 i; - - switch (gTasks[taskId].data[0]) - { - case 0: - for (i = 0; i < 4; i++) - sContest.unk19218[i] = gUnknown_02038696[i]; - sub_80AFA5C(); - sub_80B0588(); - sub_80AEF50(); - sub_80B1118(); - sub_80B1FD0(TRUE); - sub_80AFFA0(); - gTasks[taskId].data[0] = 1; - break; - case 1: - if (gIsLinkContest & 1) - { - u8 taskId2; - - sContest.unk1920B_2 = 1; - if (sub_80AE074()) - sub_80AF438(); - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); - sub_80AF860(); - gTasks[taskId].data[0] = 2; - } - else - { - sub_80AF438(); - gTasks[taskId].data[0] = 3; - } - break; - case 2: - if (!sContest.unk1920B_2) - gTasks[taskId].data[0] = 3; - break; - case 3: - sub_80AF120(); - sub_80AEB30(); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80B253C; - break; - } -} - -void sub_80B2508(u8 taskId) -{ - if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) - gTasks[taskId].func = sub_80ADCDC; -} - -void sub_80B253C(u8 taskId) -{ - if (gTasks[taskId].data[2] < 10) - { - gTasks[taskId].data[2]++; - } - else - { - if (gTasks[taskId].data[1] == 0) - { - if (gTasks[taskId].data[0] == 16) - gTasks[taskId].data[1]++; - else - gTasks[taskId].data[0]++; - } - else - { - if (gTasks[taskId].data[0] == 0) - { - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80B25A4; - } - else - { - gTasks[taskId].data[0]--; - } - } - } -} - -void sub_80B25A4(u8 taskId) -{ - if (gTasks[taskId].data[2] < 10) - { - gTasks[taskId].data[2]++; - } - else - { - gTasks[taskId].data[2] = 0; - PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0); - gTasks[taskId].func = sub_80B2508; - } -} - -void sub_80B25E4(u8 a) -{ - s32 i; - u8 taskId; - - for (i = 0; i < 4; i++) - { - gSprites[shared19338[i].unk0].oam.matrixNum = AllocOamMatrix(); - gSprites[shared19338[i].unk0].oam.affineMode = 1; - StartSpriteAffineAnim(&gSprites[shared19338[i].unk0], a); - if (a == 2) - { - AnimateSprite(&gSprites[shared19338[i].unk0]); - gSprites[shared19338[i].unk0].invisible = FALSE; - } - } - taskId = CreateTask(sub_80B26C8, 5); - gTasks[taskId].data[0] = a; - sContest.unk1920B_1 = 1; -} - -void sub_80B26C8(u8 taskId) -{ - s32 i; - - if (gSprites[shared19338[0].unk0].affineAnimEnded) - { - if ((u8)gTasks[taskId].data[0] == 1) - { - for (i = 0; i < 4; i++) - gSprites[shared19338[i].unk0].invisible = TRUE; - } - for (i = 0; i < 4; i++) - FreeSpriteOamMatrix(&gSprites[shared19338[i].unk0]); - sContest.unk1920B_1 = 0; - DestroyTask(taskId); - } -} - -u16 SanitizeMove(u16 move) -{ - if (move >= NUM_MOVES) - move = MOVE_POUND; - return move; -} - -u16 SanitizeSpecies(u16 species) -{ - if (species >= NUM_SPECIES) - species = SPECIES_NONE; - return species; -} - -void sub_80B2790(u8 a) -{ - s32 i; - u16 move = SanitizeMove(sContestantStatus[a].currMove); - u16 species = SanitizeSpecies(gContestMons[a].species); - u8 r5_2; - - memset(&shared19348, 0, sizeof(shared19348)); - ClearBattleAnimationVars(); - for (i = 0; i < 4; i++) - gBattleMonForms[i] = 0; - switch (move) - { - case MOVE_CURSE: - if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST) - gAnimMoveTurn = 0; - else - gAnimMoveTurn = 1; - 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; - break; - case MOVE_RETURN: - gAnimFriendship = 0xFF; - break; - case MOVE_FRUSTRATION: - gAnimFriendship = 0; - break; - case MOVE_SOLAR_BEAM: - case MOVE_RAZOR_WIND: - case MOVE_SKULL_BASH: - case MOVE_SKY_ATTACK: - if (sContest.unk1925E == 0) - { - sContest.unk1925E = 2; - gAnimMoveTurn = 0; - } - else - { - gAnimMoveTurn = 1; - } - break; - } - sub_80B2968(); -} - -void sub_80B28CC(int unused) -{ - memset(&shared19348, 0, sizeof(shared19348)); - if (sContest.unk1925E != 0) - sContest.unk1925E--; -} - -void sub_80B28F0(u8 a) -{ - shared19348.unk5 = a; - shared19348.unk0 = SanitizeSpecies(gContestMons[a].species); - shared19348.unk8 = gContestMons[a].personality; - shared19348.unkC = gContestMons[a].otId; -} - -void sub_80B292C(void) -{ - gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]); - sub_80B2968(); -} - -void sub_80B2968(void) -{ - struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]]; - - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->pos1.x = GetBattlerSpriteCoord(3, 0); - sprite->pos1.y = GetBattlerSpriteCoord(3, 1); - sprite->invisible = TRUE; -} - -void SelectContestMoveBankTarget(u16 move) -{ - switch (gBattleMoves[move].target) - { - case TARGET_UNK2: - case TARGET_USER: - gBattlerTarget = 2; - break; - case TARGET_SELECTED_POKEMON: - case TARGET_RANDOM: - case TARGET_BOTH_ENEMIES: - case TARGET_ALL_EXCEPT_USER: - default: - gBattlerTarget = 3; - break; - } -} - -bool8 Contest_SaveWinner(u8 a) -{ - s32 i; - u8 r7 = Random() % 3; - - for (i = 0; i < 3; i++) - { - if (gContestFinalStandings[i] == 0) - break; - } - if (a == 0xFF && i != gContestPlayerMonIndex) - return FALSE; - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - r7 += 0; - break; - case CONTEST_CATEGORY_BEAUTY: - r7 += 3; - break; - case CONTEST_CATEGORY_CUTE: - r7 += 6; - break; - case CONTEST_CATEGORY_SMART: - r7 += 9; - break; - case CONTEST_CATEGORY_TOUGH: - r7 += 12; - break; - } - if (a != 0xFE) - { - u8 r4 = sub_80B2C4C(a, 1); - - 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; - else - gSaveBlock1.contestWinners[r4].contestCategory = r7; - } - else - { - shared15DE0.personality = gContestMons[i].personality; - shared15DE0.otId = gContestMons[i].otId; - shared15DE0.species = gContestMons[i].species; - StringCopy(shared15DE0.nickname, gContestMons[i].nickname); - if (gIsLinkContest & 1) - StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name); - else - StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName); - shared15DE0.contestCategory = r7; - } - return TRUE; -} - -u8 sub_80B2C4C(u8 a, u8 b) -{ - s32 i; - - switch (a) - { - case 0: - case 1: - return a; - case 2: - if (b != 0) - { - for (i = 4; i >= 3; i--) - memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); - } - return 2; - case 3: - if (b != 0) - { - for (i = 7; i >= 6; i--) - memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); - } - return 5; - default: - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - return 8; - case CONTEST_CATEGORY_BEAUTY: - return 9; - case CONTEST_CATEGORY_CUTE: - return 10; - case CONTEST_CATEGORY_SMART: - return 11; - case CONTEST_CATEGORY_TOUGH: - default: - return 12; - } - } -} - -void Contest_ResetWinners(void) -{ - s32 i; - - for (i = 0; i < 8; i++) - gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i]; -} +// File boundary diff --git a/src/contest_2.c b/src/contest_2.c new file mode 100644 index 000000000..58da38acf --- /dev/null +++ b/src/contest_2.c @@ -0,0 +1,4186 @@ +#include "global.h" +#include "contest.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "constants/event_objects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest_ai.h" +#include "contest_effect.h" +#include "data2.h" +#include "decompress.h" +#include "ewram.h" +#include "graphics.h" +#include "link.h" +#include "m4a.h" +#include "menu.h" +#include "palette.h" +#include "random.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +#include "contest_internal.h" + +extern void Task_LinkContest_CommunicateAppealsState(u8 taskId); +extern void Task_UpdateContestantBoxOrder(u8 taskId); + +extern struct MusicPlayerInfo gMPlayInfo_SE1; +extern u8 gBattleMonForms[]; +extern u8 gDisplayedStringBattle[]; +extern u8 gBattlerTarget; +extern u8 gBattlerSpriteIds[]; +extern struct Window gWindowTemplate_Contest_MoveDescription; +extern struct SpriteTemplate gCreatingSpriteTemplate; +extern void (*const gContestEffectFuncs[])(void); + +#include "data/contest_opponents.h" + +const u8 gUnknown_083CA308[][2] = { + {19, 0}, + {19, 5}, + {19, 10}, + {19, 15}, +}; + +const u8 gUnknown_083CA310[][2] = { + {25, 0}, + {25, 5}, + {25, 10}, + {25, 15}, +}; + +const u8 gUnknown_083CA318[][2] = { + { 20, 2 }, + { 20, 7 }, + { 20, 12 }, + { 20, 17 }, + { 24, 2 }, + { 24, 7 }, + { 24, 12 }, + { 24, 17 }, + { 220, 24 }, + { 220, 64 }, + { 220, 104 }, + { 220, 144 }, +}; + +const u8 gUnknown_083CA330[][2] = { + { 224, 24 }, + { 224, 64 }, + { 224, 104 }, + { 224, 144 }, +}; + +const u8 sSliderHeartYPositions[] = { 36, 76, 116, 156 }; +const u8 gUnknown_083CA33C[] = { 36, 76, 116, 156 }; + +const u8 gUnknown_083CA340[][4] = { + { 0, 31, 9, 39 }, + { 0, 33, 9, 39 }, + { 0, 35, 9, 39 }, + { 0, 37, 9, 39 }, +}; + +const struct SpriteSheet sSpriteSheet_SliderHeart = { + .data = gTiles_8D1975C, + .size = 0x20, + .tag = 20004 +}; + +const struct OamData gOamData_83CA358 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +// Idle +const union AffineAnimCmd gSpriteAffineAnim_83CA360[] = { + AFFINEANIMCMD_FRAME(Q_8_8(1.0), Q_8_8(1.0), 0, 0), + AFFINEANIMCMD_END +}; + +// Shrink +const union AffineAnimCmd gSpriteAffineAnim_83CA370[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(-10, -10, -20, 20), + AFFINEANIMCMD_END +}; + +// Grow +const union AffineAnimCmd gSpriteAffineAnim_83CA388[] = { + AFFINEANIMCMD_FRAME(56, 56, 0, 0), + AFFINEANIMCMD_FRAME(10, 10, 20, 20), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83CA3A0[] = { + gSpriteAffineAnim_83CA360, + gSpriteAffineAnim_83CA370, + gSpriteAffineAnim_83CA388, +}; + +const struct SpriteTemplate sSpriteTemplate_SliderHeart = { + .tileTag = 20004, + .paletteTag = 44000, + .oam = &gOamData_83CA358, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CA3A0, + .callback = SpriteCallbackDummy +}; + +// One graphic for each contestant. +// Yes, it's loaded four times. +const struct CompressedSpriteSheet gUnknown_083CA3C4[] = { + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20006 }, + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20007 }, + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20008 }, + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20009 }, +}; + +const struct SpritePalette gUnknown_083CA3E4 = { + .data = gContestPal, .tag = 20006 +}; + +const struct OamData gOamData_83CA3EC = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_83CA3F4[] = { + { .tileTag = 20006, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + { .tileTag = 20007, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + { .tileTag = 20008, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + { .tileTag = 20009, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, +}; + +const struct Subsprite gSubspriteTable_83CA454[] = { + { .x = -26, .y = -4, .shape = ST_OAM_H_RECTANGLE, .size = 1, .tileOffset = 0, .priority = 0 }, + { .x = 6, .y = -4, .shape = ST_OAM_H_RECTANGLE, .size = 1, .tileOffset = 4, .priority = 0 }, +}; + +const struct SubspriteTable gSubspriteTables_83CA464[] = { + { 2, gSubspriteTable_83CA454 }, +}; + +const struct CompressedSpriteSheet gUnknown_083CA46C = { + .data = gContestApplauseGfx, + .size = 0x400, + .tag = 44002 +}; + +const struct SpritePalette gUnknown_083CA474 = { + .data = gContestPal, + .tag = 44002 +}; + +const struct OamData gOamData_83CA47C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_83CA484 = { + .tileTag = 44002, + .paletteTag = 44002, + .oam = &gOamData_83CA47C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gOamData_83CA49C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 3, + .paletteNum = 2 +}; + +const struct SpriteTemplate sSpriteTemplate_Judge = { + .tileTag = 20005, + .paletteTag = 20005, + .oam = &gOamData_83CA49C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct CompressedSpriteSheet sSpriteSheet_Judge = { + .data = gContestJudgeGfx, + .size = 0x800, + .tag = 20005 +}; + +const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = { + .data = gContestJudgeSymbolsGfx, + .size = 0x380, + .tag = 44000 +}; + +const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = { + .data = gContest3Pal, + .tag = 44000 +}; + +const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = { + .tileTag = 44000, + .paletteTag = 44000, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +#if defined(ENGLISH) +#include "data/text/contest_en.h" +#elif defined(GERMAN) +#include "data/text/contest_de.h" +#endif //ENGLISH + +UNUSED +const u8 ALIGNED(2) _unk_83CC3BE[] = __("ピラ"); +const u8 gUnknownText_UnknownFormatting2[] = _("{COLOR GREEN}{SHADOW RED}"); +const u8 gUnknownText_UnknownFormatting3[] = _("{COLOR LIGHT_GREY}"); + +const struct CompressedSpriteSheet gUnknown_083CC3AC = { + .data = gContestNumbers_UnusedGfx, + .size = 0x200, + .tag = 20000 +}; + +const struct CompressedSpritePalette gUnknown_083CC3B4[] = { + { .data = gContestNumbers_UnusedPal, .tag = 20000 }, + { .data = gContestNumbers_UnusedPal, .tag = 20001 }, + { .data = gContestNumbers_UnusedPal, .tag = 20002 }, + { .data = gContestNumbers_UnusedPal, .tag = 20003 }, +}; + +const union AnimCmd gSpriteAnim_83CC3D4[] = { + ANIMCMD_FRAME( 0, 1), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83CC3DC[] = { + ANIMCMD_FRAME( 4, 1), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83CC3E4[] = { + ANIMCMD_FRAME( 8, 1), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83CC3EC[] = { + ANIMCMD_FRAME(12, 1), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83CC3F4[] = { + gSpriteAnim_83CC3D4, + gSpriteAnim_83CC3DC, + gSpriteAnim_83CC3E4, + gSpriteAnim_83CC3EC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC404[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC414[] = { + AFFINEANIMCMD_FRAME(-15, -15, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC424[] = { + AFFINEANIMCMD_FRAME(31, 31, 0, 0), + AFFINEANIMCMD_FRAME(15, 15, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83CC43C[] = { + gSpriteAffineAnim_83CC404, + gSpriteAffineAnim_83CC414, + gSpriteAffineAnim_83CC424, + NULL, +}; + +const struct OamData gOamData_83CC44C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_83CC454[] = { + { + .tileTag = 20000, + .paletteTag = 20000, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 20000, + .paletteTag = 20001, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 20000, + .paletteTag = 20002, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 20000, + .paletteTag = 20003, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, +}; + +const struct CompressedSpriteSheet gUnknown_083CC4B4[] = { + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33000 }, + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33001 }, + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33002 }, + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33003 }, +}; + +const struct SpritePalette gUnknown_083CC4D4[] = { + { .data = eContestTempSave.cachedWindowPalettes[5], .tag = 33000 }, + { .data = eContestTempSave.cachedWindowPalettes[6], .tag = 33001 }, + { .data = eContestTempSave.cachedWindowPalettes[7], .tag = 33002 }, + { .data = eContestTempSave.cachedWindowPalettes[8], .tag = 33003 }, +}; + +const struct OamData gOamData_83CC4F4 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC4FC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC50C[] = { + AFFINEANIMCMD_FRAME( 3, 3, 0, 15), + AFFINEANIMCMD_FRAME(-3, -3, 0, 15), + AFFINEANIMCMD_FRAME( 3, 3, 0, 15), + AFFINEANIMCMD_FRAME(-3, -3, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83CC534[] = { + gSpriteAffineAnim_83CC4FC, + gSpriteAffineAnim_83CC50C, +}; + +const struct SpriteTemplate gSpriteTemplate_83CC53C[] = { + { + .tileTag = 33000, + .paletteTag = 33000, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 33001, + .paletteTag = 33001, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 33002, + .paletteTag = 33002, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 33003, + .paletteTag = 33003, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, +}; + +const u8 gUnknown_083CC59C[] = _("{HIGHLIGHT TRANSPARENT}{COLOR}"); +const u8 gText_Slash[] = _("/"); + +const u16 gUnknown_083CC5A4[] = { + RGB(19, 3, 0), + RGB(6, 15, 6), + RGB(19, 18, 0), + RGB(4, 6, 19), + RGB(31, 0, 0), + RGB(0, 31, 0), + RGB(31, 31, 0), + RGB(0, 0, 31), +}; + +const u8 gContestExcitementTable[][5] = +{ + [CONTEST_CATEGORY_COOL] = { + [CONTEST_CATEGORY_COOL] = +1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_TOUGH] = 0 + }, + [CONTEST_CATEGORY_BEAUTY] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = +1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_TOUGH] = -1 + }, + [CONTEST_CATEGORY_CUTE] = { + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = +1, + [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = -1 + }, + [CONTEST_CATEGORY_SMART] = { + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = +1, + [CONTEST_CATEGORY_TOUGH] = 0 + }, + [CONTEST_CATEGORY_TOUGH] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = +1 + } +}; + +#if defined(ENGLISH) +#define CONTEST_WINNER_1_NICKNAME "TAILTA" +#define CONTEST_WINNER_1_OTNAME "WYATT" +#define CONTEST_WINNER_2_NICKNAME "BRELO" +#define CONTEST_WINNER_2_OTNAME "LIANA" +#define CONTEST_WINNER_3_NICKNAME "PELEP" +#define CONTEST_WINNER_3_OTNAME "TIERA" +#define CONTEST_WINNER_4_NICKNAME "PELEP" +#define CONTEST_WINNER_4_OTNAME "TIERA" +#define CONTEST_WINNER_5_NICKNAME "PELEP" +#define CONTEST_WINNER_5_OTNAME "TIERA" +#define CONTEST_WINNER_6_NICKNAME "KITSY" +#define CONTEST_WINNER_6_OTNAME "OMAR" +#define CONTEST_WINNER_7_NICKNAME "GULPS" +#define CONTEST_WINNER_7_OTNAME "MACIE" +#define CONTEST_WINNER_8_NICKNAME "LOUDED" +#define CONTEST_WINNER_8_OTNAME "BRYANT" +#elif defined(GERMAN) +#define CONTEST_WINNER_1_NICKNAME "SCHWALBI" +#define CONTEST_WINNER_1_OTNAME "ROSEL" +#define CONTEST_WINNER_2_NICKNAME "TUFUNG" +#define CONTEST_WINNER_2_OTNAME "WITOLD" +#define CONTEST_WINNER_3_NICKNAME "LIPPER" +#define CONTEST_WINNER_3_OTNAME "RUFUS" +#define CONTEST_WINNER_4_NICKNAME "LIPPER" +#define CONTEST_WINNER_4_OTNAME "ELLEN" +#define CONTEST_WINNER_5_NICKNAME "LIPPER" +#define CONTEST_WINNER_5_OTNAME "AVIA" +#define CONTEST_WINNER_6_NICKNAME "CONEC" +#define CONTEST_WINNER_6_OTNAME "HAUBERT" +#define CONTEST_WINNER_7_NICKNAME "SCHLUCKI" +#define CONTEST_WINNER_7_OTNAME "HEILWIG" +#define CONTEST_WINNER_8_NICKNAME "KEELO" +#define CONTEST_WINNER_8_OTNAME "ISEGRIM" +#endif + +const struct ContestWinner gDefaultContestWinners[] = { + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_TAILLOW, + .contestCategory = CONTEST_CATEGORY_SMART, + .nickname = _(CONTEST_WINNER_1_NICKNAME), + .trainerName = _(CONTEST_WINNER_1_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_BRELOOM, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .nickname = _(CONTEST_WINNER_2_NICKNAME), + .trainerName = _(CONTEST_WINNER_2_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_PELIPPER, + .contestCategory = CONTEST_CATEGORY_COOL, + .nickname = _(CONTEST_WINNER_3_NICKNAME), + .trainerName = _(CONTEST_WINNER_3_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_PELIPPER, + .contestCategory = CONTEST_CATEGORY_COOL, + .nickname = _(CONTEST_WINNER_4_NICKNAME), + .trainerName = _(CONTEST_WINNER_4_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_PELIPPER, + .contestCategory = CONTEST_CATEGORY_COOL, + .nickname = _(CONTEST_WINNER_5_NICKNAME), + .trainerName = _(CONTEST_WINNER_5_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_DELCATTY, + .contestCategory = CONTEST_CATEGORY_SMART, + .nickname = _(CONTEST_WINNER_6_NICKNAME), + .trainerName = _(CONTEST_WINNER_6_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_GULPIN, + .contestCategory = CONTEST_CATEGORY_CUTE, + .nickname = _(CONTEST_WINNER_7_NICKNAME), + .trainerName = _(CONTEST_WINNER_7_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_LOUDRED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .nickname = _(CONTEST_WINNER_8_NICKNAME), + .trainerName = _(CONTEST_WINNER_8_OTNAME), + }, +}; + +void TryPutPlayerLast(void) +{ + if (!(gIsLinkContest & 1)) + gContestPlayerMonIndex = 3; +} + +bool8 IsPlayerLinkLeader(void) +{ + if (gContestPlayerMonIndex == gContestLinkLeaderIndex) + return TRUE; + else + return FALSE; +} + +void Contest_CreatePlayerMon(u8 partyIndex) +{ + u8 name[20]; + u16 heldItem; + s16 cool; + s16 beauty; + s16 cute; + s16 smart; + s16 tough; + + StringCopy(name, gSaveBlock2.playerName); + Text_StripExtCtrlCodes(name); + if (gIsLinkContest & 1) + { + u8 temp = name[5]; + + name[5] = EOS; + name[7] = temp; + } + memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); + if (gSaveBlock2.playerGender == MALE) + gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; + else + gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; + gContestMons[gContestPlayerMonIndex].flags = 0; + gContestMons[gContestPlayerMonIndex].unk2C[0] = 0; + gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); + GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); + StringGetEnd10(name); + if (gIsLinkContest & 1) + { + Text_StripExtCtrlCodes(name); + if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE) + { + name[5] = EOS; + name[10] = EXT_CTRL_CODE_BEGIN; + } + else + { + u8 temp = name[5]; + + name[5] = EOS; + name[10] = temp; + } + } + memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11); + gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL); + gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY); + gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE); + gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART); + gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH); + gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN); + gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1); + gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2); + gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3); + gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4); + gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY); + gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID); + + heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM); + cool = gContestMons[gContestPlayerMonIndex].cool; + beauty = gContestMons[gContestPlayerMonIndex].beauty; + cute = gContestMons[gContestPlayerMonIndex].cute; + smart = gContestMons[gContestPlayerMonIndex].smart; + tough = gContestMons[gContestPlayerMonIndex].tough; + if (heldItem == ITEM_RED_SCARF) + cool += 20; + else if (heldItem == ITEM_BLUE_SCARF) + beauty += 20; + else if (heldItem == ITEM_PINK_SCARF) + cute += 20; + else if (heldItem == ITEM_GREEN_SCARF) + smart += 20; + else if (heldItem == ITEM_YELLOW_SCARF) + tough += 20; + if (cool > 255) + cool = 255; + if (beauty > 255) + beauty = 255; + if (cute > 255) + cute = 255; + if (smart > 255) + smart = 255; + if (tough > 255) + tough = 255; + gContestMons[gContestPlayerMonIndex].cool = cool; + gContestMons[gContestPlayerMonIndex].beauty = beauty; + gContestMons[gContestPlayerMonIndex].cute = cute; + gContestMons[gContestPlayerMonIndex].smart = smart; + gContestMons[gContestPlayerMonIndex].tough = tough; +} + +void Contest_InitAllPokemon(u8 contestType, u8 rank) +{ + s32 i; + u8 opponentsCount = 0; + u8 opponents[ARRAY_COUNT(gContestOpponents) + 1]; + + TryPutPlayerLast(); + + // Find all suitable opponents + for (i = 0; i < (s32)ARRAY_COUNT(gContestOpponents); i++) + { + if (rank == gContestOpponents[i].whichRank) + { + if (contestType == 0 && gContestOpponents[i].aiPool_Cool) + opponents[opponentsCount++] = i; + else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty) + opponents[opponentsCount++] = i; + else if (contestType == 2 && gContestOpponents[i].aiPool_Cute) + opponents[opponentsCount++] = i; + else if (contestType == 3 && gContestOpponents[i].aiPool_Smart) + opponents[opponentsCount++] = i; + else if (contestType == 4 && gContestOpponents[i].aiPool_Tough) + opponents[opponentsCount++] = i; + } + } + opponents[opponentsCount] = 0xFF; + + // Choose three random opponents from the list + for (i = 0; i < 3; i++) + { + u16 rnd = Random() % opponentsCount; + s32 j; + + gContestMons[i] = gContestOpponents[opponents[rnd]]; + for (j = rnd; opponents[j] != 0xFF; j++) + opponents[j] = opponents[j + 1]; + opponentsCount--; + } + +#ifndef NONMATCHING + // Compiler, please put i in r5. Thanks. + asm(""::"r"(i)); + asm(""::"r"(i)); + asm(""::"r"(i)); + asm(""::"r"(i)); + asm(""::"r"(i)); +#endif + + Contest_CreatePlayerMon(gContestMonPartyIndex); +} + +// GetContestAvailability? +u8 CanMonParticipateInContest(struct Pokemon *pkmn) +{ + u8 ribbon; + u8 retVal; + + if (GetMonData(pkmn, MON_DATA_IS_EGG)) + return 3; + if (GetMonData(pkmn, MON_DATA_HP) == 0) + return 4; + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON); + break; + case CONTEST_CATEGORY_BEAUTY: + ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON); + break; + case CONTEST_CATEGORY_CUTE: + ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON); + break; + case CONTEST_CATEGORY_SMART: + ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON); + break; + case CONTEST_CATEGORY_TOUGH: + ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON); + break; + default: + return 0; + } + + // Couldn't get this to match any other way. + // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below + // the current contest rank. + if (ribbon > gSpecialVar_ContestRank) + retVal = 2; + else if (ribbon >= gSpecialVar_ContestRank) + retVal = 1; + else + retVal = 0; + return retVal; +} + +void DrawContestantWindowText(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA308[gContestantTurnOrder[i]][0], + gUnknown_083CA308[gContestantTurnOrder[i]][1], + gUnknown_083CA310[gContestantTurnOrder[i]][0] + 5, + gUnknown_083CA310[gContestantTurnOrder[i]][1] + 1); + PrintContestantTrainerName(i); + PrintContestantMonName(i); + } +} + +u8 *Contest_CopyStringWithColor(u8 *dest, const u8 *src, u8 color) +{ + dest = StringCopy(dest, gUnknown_083CC59C); // {HIGHLIGHT TRANSPARENT}{COLOR}$ + *dest++ = color; + dest = StringCopy(dest, src); + return dest; +} + +void PrintContestantTrainerName(u8 contestant) +{ + PrintContestantTrainerNameWithColor(contestant, contestant + 10); +} + +void PrintContestantTrainerNameWithColor(u8 contestant, u8 color) +{ + u8 *str = gDisplayedStringBattle; + + str = Contest_CopyStringWithColor(str, gEmptyString_81E72B0, color); + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_SIZE; + str[2] = 4; + str += 3; + + *str++ = CHAR_SLASH; + + if ((gIsLinkContest & 1) && gLinkPlayers[contestant].language == LANGUAGE_JAPANESE) + { + StringCopy(str, gLinkPlayers[contestant].name); + Text_InitWindow8004D04( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 592 + gContestantTurnOrder[contestant] * 22, + 251 + gUnknown_083CA310[gContestantTurnOrder[contestant]][0] * 8, + gUnknown_083CA310[gContestantTurnOrder[contestant]][1] * 8, + 1); + } + else + { + StringCopy(str, gContestMons[contestant].trainerName); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 592 + gContestantTurnOrder[contestant] * 22, + gUnknown_083CA310[gContestantTurnOrder[contestant]][0], + gUnknown_083CA310[gContestantTurnOrder[contestant]][1]); + } +} + +void PrintContestantMonName(u8 contestant) +{ + PrintContestantMonNameWithColor(contestant, contestant + 10); +} + +void PrintContestantMonNameWithColor(u8 contestant, u8 color) +{ + u8 *str = gDisplayedStringBattle; + + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_SIZE; + str[2] = 4; + str += 3; + + str = Contest_CopyStringWithColor(str, gContestMons[contestant].nickname, color); + *str = EOS; + + Text_InitWindow8004D04( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 512 + gContestantTurnOrder[contestant] * 20, + 253 + gUnknown_083CA308[gContestantTurnOrder[contestant]][0] * 8, + gUnknown_083CA308[gContestantTurnOrder[contestant]][1] * 8, + 1); +} + +u16 CalculateContestantRound1Points(u8 who, u8 contestCategory) +{ + u8 statMain; + u8 statSub1; + u8 statSub2; + + switch (contestCategory) + { + case CONTEST_CATEGORY_COOL: + statMain = gContestMons[who].cool; + statSub1 = gContestMons[who].tough; + statSub2 = gContestMons[who].beauty; + break; + case CONTEST_CATEGORY_BEAUTY: + statMain = gContestMons[who].beauty; + statSub1 = gContestMons[who].cool; + statSub2 = gContestMons[who].cute; + break; + case CONTEST_CATEGORY_CUTE: + statMain = gContestMons[who].cute; + statSub1 = gContestMons[who].beauty; + statSub2 = gContestMons[who].smart; + break; + case CONTEST_CATEGORY_SMART: + statMain = gContestMons[who].smart; + statSub1 = gContestMons[who].cute; + statSub2 = gContestMons[who].tough; + break; + case CONTEST_CATEGORY_TOUGH: + default: + statMain = gContestMons[who].tough; + statSub1 = gContestMons[who].smart; + statSub2 = gContestMons[who].cool; + break; + } + return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2; +} + +void CalculateRound1Points(u8 contestCategory) +{ + u8 i; + + for (i = 0; i < 4; i++) + gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory); +} + +u8 CreateJudgeSprite(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&sSpriteSheet_Judge); + LoadCompressedPalette(gContest2Pal, 0x110, 32); + spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30); + gSprites[spriteId].oam.paletteNum = 1; + gSprites[spriteId].callback = SpriteCallbackDummy; + return spriteId; +} + +u8 CreateJudgeSpeechBubbleSprite(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&sSpriteSheet_JudgeSymbols); + LoadCompressedObjectPalette(&sSpritePalette_JudgeSymbols); + spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum; + return spriteId; +} + +UNUSED +u8 unref_sub_80AE908(void) +{ + u16 species = gContestMons[gContestPlayerMonIndex].species; + u8 spriteId; + + DecompressPicFromTable_2( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[1], + species); + LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32); + GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1); + spriteId = CreateSprite( + &gCreatingSpriteTemplate, + 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4, + 30); + gSprites[spriteId].oam.paletteNum = 1; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest; + StartSpriteAffineAnim(&gSprites[spriteId], 0); + return spriteId; +} + +u8 CreateContestantSprite(u16 species, u32 otId, u32 personality) +{ + const u8 *lzPaletteData; + u8 spriteId; + + species = SanitizeSpecies(species); + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[0], + species, + personality); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality); + LoadCompressedPalette(lzPaletteData, 0x120, 32); + GetMonSpriteTemplate_803C56C(species, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, 112, GetBattlerSpriteFinal_Y(2, species, 0), 30); + gSprites[spriteId].oam.paletteNum = 2; + gSprites[spriteId].oam.priority = 2; + gSprites[spriteId].subpriority = GetBattlerSubpriority(2); + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum; + gSprites[spriteId].data[2] = species; + if (IsSpeciesNotUnown(species)) + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest; + else + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteOpponentSide; + StartSpriteAffineAnim(&gSprites[spriteId], 0); + return spriteId; +} + +bool8 IsSpeciesNotUnown(u16 species) +{ + if (species == SPECIES_UNOWN) + return FALSE; + else + 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)); + __copy_tilemap((void *)(VRAM + 0xE000)); +} + +void __copy_tilemap(void *a) +{ + DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280); +} + +u16 GetMoveEffectSymbolTileOffset(u16 move, u8 b) +{ + u16 var; + + switch (gContestEffects[gContestMoves[move].effect].effectType) + { + case 0: + case 1: + case 8: + var = 0x9082; + break; + case 2: + case 3: + var = 0x9088; + break; + default: + var = 0x9086; + break; + } + var += 0x9000 + (b << 12); + return var; +} + +void PrintContestMoveDescription(u16 a) +{ + u8 category; + u16 categoryTile; + s32 i; + u8 numHearts; + + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 31, 16, 34); + + category = gContestMoves[a].contestCategory; + if (category == CONTEST_CATEGORY_COOL) + categoryTile = 0x4040; + else if (category == CONTEST_CATEGORY_BEAUTY) + categoryTile = 0x4045; + else if (category == CONTEST_CATEGORY_CUTE) + categoryTile = 0x404A; + else if (category == CONTEST_CATEGORY_SMART) + categoryTile = 0x406A; + else + categoryTile = 0x408A; + + for (i = 0; i < 5; i++) + { + *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile; + *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16; + categoryTile++; + } + + if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF) + numHearts = 0; + else + numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; + if (numHearts > 8) + numHearts = 8; + for (i = 0; i < 8; i++) + { + if (i < numHearts) // Empty hearts + *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012; + else // Filled-in hearts + *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035; + } + + if (gContestEffects[gContestMoves[a].effect].jam == 0xFF) + numHearts = 0; + else + numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; + if (numHearts > 8) + numHearts = 8; + for (i = 0; i < 8; i++) + { + if (i < numHearts) // Empty hearts + *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014; + else // Filled-in hearts + *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036; + } + + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gText_Slash, 866, 16, 31); +} + +void Contest_ClearMoveDescriptionBox(void) +{ + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 35, 28, 40); +} + +UNUSED +void DrawMoveEffectSymbol(u16 move, u8 b) +{ + u8 r5 = gContestantTurnOrder[b] * 5 + 2; + + if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE) + { + u16 tile = GetMoveEffectSymbolTileOffset(move, b); + + *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile; + *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1; + + *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16; + *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17; + + } + else + { + *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0; + *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0; + + *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0; + *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0; + } +} + +UNUSED +void DrawMoveEffectSymbols(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + DrawMoveEffectSymbol(sContestantStatus[i].currMove, i); +} + +u16 GetStarTileOffset(u8 unused) +{ + return 0x2034; +} + +bool8 UpdateConditionStars(u8 a, u8 b) +{ + u8 r9; + u16 r8; + s32 r4; + + if (sContestantStatus[a].conditionMod == 0) + return FALSE; + r9 = gContestantTurnOrder[a] * 5 + 2; + if (sContestantStatus[a].conditionMod == 1) + { + r8 = GetStarTileOffset(a); + r4 = 0; + while (sContestantStatus[a].condition / 10 > r4) + { + *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8; + r4++; + } + if (b != 0) + { + PlaySE(SE_EXP_MAX); + sContestantStatus[a].conditionMod = 0; + } + } + else // CONDITION_LOSE + { + r8 = 0; + r4 = 3; + while (sContestantStatus[a].condition / 10 < r4) + { + *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8; + r4--; + } + if (b != 0) + { + PlaySE(SE_CONTEST_CONDITION_LOSE); + sContestantStatus[a].conditionMod = 0; + } + } + return TRUE; +} + +void DrawConditionStars(void) +{ + s32 i; + s32 r4; + + for (i = 0; i < 4; i++) + { + u8 r8 = gContestantTurnOrder[i] * 5 + 2; + u16 r6 = GetStarTileOffset(i); + + r4 = 0; + while (r4 < sContestantStatus[i].condition / 10) + { + *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; + r4++; + } + r6 = 0; + while (r4 < 3) + { + *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; + r4++; + } + } +} + +u16 GetStatusSymbolTileOffset(u8 unused, u8 b) +{ + u16 var = 0; + + switch (b) + { + case 0: // For resistant + var = 0x80; + break; + case 1: // For nervous + var = 0x84; + break; + case 2: // For turn skipped + var = 0x86; + break; + case 3: // For jammed/unnerved + var = 0x88; + break; + case 4: // Never used + var = 0x82; + break; + } + var += 0x9000; + return var; +} + +bool8 DrawStatusSymbol(u8 a) +{ + bool8 r5 = TRUE; + u16 r4 = 0; + u8 r6 = gContestantTurnOrder[a] * 5 + 2; + + if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0) + r4 = GetStatusSymbolTileOffset(a, 0); + else if (sContestantStatus[a].nervous) + r4 = GetStatusSymbolTileOffset(a, 1); + else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) + r4 = GetStatusSymbolTileOffset(a, 2); + else + r5 = FALSE; + if (r5) + { + *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4; + *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1; + *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16; + *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17; + } + else + { + *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0; + *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0; + *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0; + *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0; + } + return r5; +} + +void DrawStatusSymbols(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + DrawStatusSymbol(i); +} + +void ContestClearGeneralTextWindow(void) +{ + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 1, 15, 17, 18); +} + +u16 GetChosenMove(u8 a) +{ + if (Contest_IsMonsTurnDisabled(a)) + return 0; + if (a == gContestPlayerMonIndex) + { + return gContestMons[a].moves[sContest.playerMoveChoice]; + } + else + { + u8 moveChoice; + + ContestAI_ResetAI(a); + moveChoice = ContestAI_GetActionToUse(); + return gContestMons[a].moves[moveChoice]; + } +} + +void GetAllChosenMoves(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + sContestantStatus[i].currMove = GetChosenMove(i); +} + +UNUSED +void sub_80AF1E4(u8 a, u8 b) +{ + u8 r3; + + if (b == 0) + r3 = a + 10; + else + r3 = 14; + if (sContestantStatus[a].currMove == MOVE_NONE) + Contest_CopyStringWithColor(gDisplayedStringBattle, gUnknownText_MissedTurn, r3); + else + Contest_CopyStringWithColor( + gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3); + sub_80AF2A0(a); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 696 + a * 20, + gUnknown_083CA318[a][0], + gUnknown_083CA318[a][1]); +} + +UNUSED +void unref_sub_80AF280(u8 a) +{ + u8 i; + + for (i = 0; i < 4; i++) + sub_80AF1E4(i, a); +} + +UNUSED +void sub_80AF2A0(u8 a) +{ + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA318[a][0], + gUnknown_083CA318[a][1], + gUnknown_083CA318[a][0] + 7, + gUnknown_083CA318[a][1] + 1); +} + +UNUSED +void unref_sub_80AF2E0(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + sub_80AF2A0(i); +} + +void RankContestants(void) +{ + u8 i; + u8 j; + s16 arr[4]; + + for (i = 0; i < 4; i++) + { + 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--) + { + if (arr[j - 1] < arr[j]) + { + u16 temp = arr[j]; + + arr[j] = arr[j - 1]; + arr[j - 1] = temp; + } + } + } + + // 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].pointTotal == arr[j]) + { + sContestantStatus[i].ranking = j; + break; + } + } + } + SortContestants(1); + ApplyNextTurnOrder(); +} + +void SetAttentionLevels(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + u8 attentionLevel; + + if (sContestantStatus[i].currMove == MOVE_NONE) + attentionLevel = 5; + else if (sContestantStatus[i].appeal <= 0) + attentionLevel = 0; + else if (sContestantStatus[i].appeal < 30) + attentionLevel = 1; + else if (sContestantStatus[i].appeal < 60) + attentionLevel = 2; + else if (sContestantStatus[i].appeal < 80) + attentionLevel = 3; + else + attentionLevel = 4; + + sContestantStatus[i].attentionLevel = attentionLevel; + } +} + +bool8 ContestantCanUseTurn(u8 a) +{ + if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) + return FALSE; + else + return TRUE; +} + +void SetContestantStatusesForNextRound(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + // This is bitfield hell... + sContestantStatus[i].appeal = 0; + sContestantStatus[i].baseAppeal = 0; + sContestantStatus[i].jamSafetyCount = 0; + if (sContestantStatus[i].numTurnsSkipped > 0) + sContestantStatus[i].numTurnsSkipped--; + sContestantStatus[i].jam = 0; + sContestantStatus[i].resistant = 0; + sContestantStatus[i].jamReduction = 0; + sContestantStatus[i].immune = 0; + sContestantStatus[i].moreEasilyStartled = 0; + sContestantStatus[i].usedRepeatableMove = 0; + sContestantStatus[i].nervous = 0; + sContestantStatus[i].effectStringId = CONTEST_STRING_NONE; + sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; + sContestantStatus[i].conditionMod = 0; + sContestantStatus[i].repeatedPrevMove = sContestantStatus[i].repeatedMove; + sContestantStatus[i].repeatedMove = FALSE; + sContestantStatus[i].turnOrderModAction = 0; + sContestantStatus[i].appealTripleCondition = 0; + if (sContestantStatus[i].turnSkipped) + { + sContestantStatus[i].numTurnsSkipped = 1; + sContestantStatus[i].turnSkipped = 0; + } + if (sContestantStatus[i].exploded) + { + sContestantStatus[i].noMoreTurns = 1; + sContestantStatus[i].exploded = 0; + } + sContestantStatus[i].overrideCategoryExcitementMod = 0; + } + for (i = 0; i < 4; i++) + { + sContestantStatus[i].prevMove = sContestantStatus[i].currMove; + sContest.moveHistory[sContest.appealNumber][i] = sContestantStatus[i].prevMove; + sContest.excitementHistory[sContest.appealNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove); + sContestantStatus[i].currMove = MOVE_NONE; + } + eContestExcitement.excitementFrozen = 0; +} + +bool8 Contest_IsMonsTurnDisabled(u8 a) +{ + if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) + return TRUE; + else + return FALSE; +} + +UNUSED +bool8 unref_sub_80AF5D0(u8 a, u8 b) +{ + u8 i; + + if (a != gContestPlayerMonIndex) + return TRUE; + for (i = 0; i < 4; i++) + { + if (b == 3) + { + sContest.unk1920A_0 = 1; + return TRUE; + } + if (b == 4) + { + sContest.unk1920A_1 = 1; + return TRUE; + } + if (sContest.unk19206[i] == b) + return TRUE; + if (sContest.unk19206[i] == 0xFF) + { + sContest.unk19206[i] = b; + return TRUE; + } + } + return FALSE; +} + +void CalculateTotalPointsForContestant(u8 a) +{ + gContestMonRound2Points[a] = GetContestantRound2Points(a); + gContestMonTotalPoints[a] = gContestMonRound1Points[a] + gContestMonRound2Points[a]; +} + +void CalculateFinalScores(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + CalculateTotalPointsForContestant(i); + DetermineFinalStandings(); +} + +s16 GetContestantRound2Points(u8 a) +{ + return gContestMonAppealPointTotals[a] * 2; +} + +void DetermineFinalStandings(void) +{ + u16 randomOrdering[4] = {0}; + struct ContestFinalStandings standings[4]; + s32 i; + + // Seed random order in case of ties + for (i = 0; i < 4; i++) + { + s32 j; + randomOrdering[i] = Random(); + for (j = 0; j < i; j++) + { + if (randomOrdering[i] == randomOrdering[j]) + { + i--; + break; + } + } + } + + for (i = 0; i < 4; i++) + { + standings[i].totalPoints = gContestMonTotalPoints[i]; + standings[i].round1Points = gContestMonRound1Points[i]; + standings[i].random = randomOrdering[i]; + standings[i].contestant = i; + } + + // Rank contestants + for (i = 0; i < 3; i++) + { + s32 j; + for (j = 3; j > i; j--) + { + if (DidContestantPlaceHigher(j - 1, j, standings)) + { + // Swap contestants in array + struct ContestFinalStandings temp; + + temp.totalPoints = standings[j - 1].totalPoints; + temp.round1Points = standings[j - 1].round1Points; + temp.random = standings[j - 1].random; + temp.contestant = standings[j - 1].contestant; + + standings[j - 1].totalPoints = standings[j].totalPoints; + standings[j - 1].round1Points = standings[j].round1Points; + standings[j - 1].random = standings[j].random; + standings[j - 1].contestant = standings[j].contestant; + + standings[j].totalPoints = temp.totalPoints; + standings[j].round1Points = temp.round1Points; + standings[j].random = temp.random; + standings[j].contestant = temp.contestant; + } + } + } + + // Assign placements. i is the placing (0 is 1st, 1 is 2nd...) + for (i = 0; i < 4; i++) + gContestFinalStandings[standings[i].contestant] = i; +} + +bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c) +{ + bool8 retVal; + + if (c[a].totalPoints < c[b].totalPoints) + retVal = TRUE; + else if (c[a].totalPoints > c[b].totalPoints) + retVal = FALSE; + else if (c[a].round1Points < c[b].round1Points) + retVal = TRUE; + else if (c[a].round1Points > c[b].round1Points) + retVal = FALSE; + else if (c[a].random < c[b].random) + retVal = TRUE; + else + retVal = FALSE; + return retVal; +} + +void ContestPrintLinkStandby(void) +{ + gBattle_BG0_Y = 0; + gBattle_BG2_Y = 0; + ContestClearGeneralTextWindow(); + Text_InitWindowAndPrintText(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15); +} + +UNUSED +u8 unref_sub_80AF89C(s16 appealStart, s16 appealDelta, u8 tileOffs, u8 contestant) +{ + u8 taskId; + u8 heartsStart; + s8 heartsDelta; + u16 baseBlock; + + eContestGfxState[contestant].updatingAppealHearts = 1; + taskId = CreateTask(Task_unused_80AF94C, 20); + heartsStart = GetNumHeartsFromAppealPoints(appealStart); + heartsDelta = GetNumHeartsFromAppealPoints(appealStart + appealDelta) - heartsStart; + baseBlock = GetAppealHeartTileOffset(contestant); + gTasks[taskId].data[0] = heartsStart; + gTasks[taskId].data[1] = heartsDelta; + gTasks[taskId].data[2] = baseBlock + tileOffs; + gTasks[taskId].data[3] = contestant; + if (appealDelta < 0) + nullsub_19(contestant); + return taskId; +} + +UNUSED +void Task_unused_80AF94C(u8 taskId) +{ + u8 contestant = gTasks[taskId].data[3]; + + if (gTasks[taskId].data[1] == 0) + { + nullsub_19(contestant); + DestroyTask(taskId); + eContestGfxState[contestant].updatingAppealHearts = 0; + } + else if (++gTasks[taskId].data[10] > 29) + { + u8 numHearts; + + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[1] < 0) + { + numHearts = gTasks[taskId].data[0]--; + gTasks[taskId].data[1]++; + PlaySE(SE_BOO); + } + else + { + numHearts = ++gTasks[taskId].data[0]; + gTasks[taskId].data[1]--; + PlaySE(SE_PIN); + } + if ((u16)gTasks[taskId].data[2] != 0xFFFF) + { + RequestSpriteCopy( + &gTasks[taskId].data[2], + (void *)(VRAM + 0xC000 + (147 + numHearts + contestant * 160) * 2), + 2); + } + else + { + u8 i; + + for (i = 0; i < 3; i++) + { + if (gTasks[taskId].data[i + 4] < 0) + { + RequestSpriteCopy( + &gTasks[taskId].data[i + 7], + (void *)(VRAM + 0xC000 + (147 + numHearts + contestant * 160) * 2), + 2); + gTasks[taskId].data[i + 4]++; + break; + } + } + } + } +} + +void FillContestantWindowBgs(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16); + DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16); + } +} + +UNUSED +void unref_sub_80AFAB8(s16 a, u8 b) +{ + u8 r5 = GetNumHeartsFromAppealPoints(a); + u16 r2; + u8 i; + u16 arr[9]; + + if (b == 0) + r2 = 0x50A2; + else if (b == 1) + r2 = 0x60A2; + else if (b == 2) + r2 = 0x70A2; + else + r2 = 0x80A2; + + for (i = 0; i < 9; i++) + { + if (i < r5) + arr[i] = r2; + else + arr[i] = 0; + } + + DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr)); +} + +u16 GetAppealHeartTileOffset(u8 a) +{ + u16 var; + + if (a == 0) + var = 0x5011; + else if (a == 1) + var = 0x6011; + else if (a == 2) + var = 0x7011; + else + var = 0x8011; + return var + 1; +} + +s8 GetNumHeartsFromAppealPoints(s16 a) +{ + s8 retVal = a / 10; + + if (retVal > 16) + retVal = 16; + else if (retVal < -16) + retVal = -16; + return retVal; +} + +u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant) +{ + u8 taskId; + 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] = contestant; + if (appealDelta < 0) + nullsub_19(contestant); + return taskId; +} + +void Task_UpdateAppealHearts(u8 taskId) +{ + 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 heartOffset; + u8 newNumHearts; + u8 pitchMod; + + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[1] == 0) + { + nullsub_19(contestant); + DestroyTask(taskId); + eContestGfxState[contestant].updatingAppealHearts = 0; + return; + } + else if (startHearts == 0) + { + if (heartsDelta < 0) + { + heartOffset = GetAppealHeartTileOffset(contestant) + 2; + gTasks[taskId].data[1]++; + } + else + { + heartOffset = GetAppealHeartTileOffset(contestant); + gTasks[taskId].data[1]--; + } + newNumHearts = gTasks[taskId].data[0]++; + } + else + { + if (gTasks[taskId].data[2] < 0) + { + if (heartsDelta < 0) + { + newNumHearts = gTasks[taskId].data[0]++; + gTasks[taskId].data[1]++; + heartOffset = GetAppealHeartTileOffset(contestant) + 2; + } + else + { + newNumHearts = --gTasks[taskId].data[0]; + heartOffset = 0; + gTasks[taskId].data[1]--; + } + } + else + { + if (heartsDelta < 0) + { + newNumHearts = --gTasks[taskId].data[0]; + heartOffset = 0; + gTasks[taskId].data[1]++; + } + else + { + newNumHearts = gTasks[taskId].data[0]++; + gTasks[taskId].data[1]--; + heartOffset = GetAppealHeartTileOffset(contestant); + } + } + } + pitchMod = newNumHearts; + if (newNumHearts >= 8) + newNumHearts += 32 - 8; // jump to second line + // Seriously, a 2-byte CpuFill? Why? + 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, pitchMod * 256); + } + else // Jam + { + PlaySE(SE_BOO); + } + if (newNumHearts == 0 && heartOffset == 0) + gTasks[taskId].data[2] = -gTasks[taskId].data[2]; + } +} + +void CreateSliderHeartSprites(void) +{ + s32 i; + + LoadSpriteSheet(&sSpriteSheet_SliderHeart); + for (i = 0; i < 4; i++) + { + u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]]; + + eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1); + } +} + +void sub_80AFE78(u8 a) +{ + u8 spriteId; + s16 r5; + + eContestGfxState[a].sliderUpdating = 1; + spriteId = eContestGfxState[a].sliderHeartSpriteId; + r5 = sContestantStatus[a].pointTotal / 10 * 2; + if (r5 > 56) + r5 = 56; + else if (r5 < 0) + r5 = 0; + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = r5; + if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x) + gSprites[spriteId].data[2] = 1; + else + gSprites[spriteId].data[2] = -1; + gSprites[spriteId].callback = sub_80AFF60; +} + +void UpdateHeartSliders(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + sub_80AFE78(i); +} + +bool8 SlidersDoneUpdating(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (eContestGfxState[i].sliderUpdating) + break; + } + if (i == 4) + return TRUE; + else + return FALSE; +} + +void sub_80AFF60(struct Sprite *sprite) +{ + if (sprite->pos2.x == sprite->data[1]) + { + eContestGfxState[sprite->data[0]].sliderUpdating = 0; + sprite->callback = SpriteCallbackDummy; + } + else + { + sprite->pos2.x += sprite->data[2]; + } +} + +void UpdateSliderHeartSpriteYPositions(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]]; +} + +void SetBottomSliderHeartsInvisibility(bool8 a) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (gContestantTurnOrder[i] > 1) + { + if (!a) + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180; + else + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256; + } + } +} + +void CreateNextTurnSprites(void) +{ + s32 i; + + LoadSpritePalette(&gUnknown_083CA3E4); + for (i = 0; i < 4; i++) + { + LoadCompressedObjectPic(&gUnknown_083CA3C4[i]); + eContestGfxState[i].nextTurnSpriteId = CreateSprite( + &gSpriteTemplate_83CA3F4[i], + 204, gUnknown_083CA33C[gContestantTurnOrder[i]], + 0); + SetSubspriteTables(&gSprites[eContestGfxState[i].nextTurnSpriteId], gSubspriteTables_83CA464); + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE; + } +} + +void CreateApplauseMeterSprite(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&gUnknown_083CA46C); + LoadSpritePalette(&gUnknown_083CA474); + spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1); + gSprites[spriteId].invisible = TRUE; + sContest.applauseMeterSpriteId = spriteId; +} + +void nullsub_18(s8 unused) +{ +} + +void unref_sub_80B011C(void) +{ + u8 i; + + LoadCompressedObjectPic(&gUnknown_083CC3AC); + for (i = 0; i < 4; i++) + LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]); + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite( + &gSpriteTemplate_83CC454[i], + gUnknown_083CA330[i][0], gUnknown_083CA330[i][1], + 5); + + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data[0] = i; + sContest.unk1920D[i] = spriteId; + } +} + +void unref_sub_80B01B0(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + gSprites[sContest.unk1920D[i]].callback = sub_80B0238; +} + +bool8 unref_sub_80B01E0(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy) + break; + } + if (i == 4) + return TRUE; + else + return FALSE; +} + +void sub_80B0238(struct Sprite *sprite) +{ + sprite->oam.affineMode = 1; + InitSpriteAffineAnim(sprite); + if (sprite->invisible) + { + sprite->callback = sub_80B02A8; + } + else + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80B0280; + } +} + +void sub_80B0280(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + sprite->invisible = TRUE; + sprite->callback = sub_80B02A8; + } +} + +void sub_80B02A8(struct Sprite *sprite) +{ + sprite->invisible = FALSE; + StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].ranking); + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80B02F4; + PlaySE(SE_CONTEST_PLACE); +} + +void sub_80B02F4(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + FreeSpriteOamMatrix(sprite); + sprite->oam.affineMode = 0; + sprite->callback = SpriteCallbackDummy; + } +} + +void CreateJudgeAttentionEyeTask(void) +{ + u8 i; + u8 taskId = CreateTask(sub_80B0458, 30); + + sContest.judgeAttentionTaskId = taskId; + for (i = 0; i < 4; i++) + gTasks[taskId].data[i * 4] = 0xFF; +} + +void sub_80B0368(u8 a) +{ + gTasks[sContest.judgeAttentionTaskId].data[a * 4 + 0] = 0; + gTasks[sContest.judgeAttentionTaskId].data[a * 4 + 1] = 0; +} + +void sub_80B03A8(u8 a) +{ + u8 taskId = CreateTask(sub_80B03D8, 31); + + gTasks[taskId].data[0] = a; +} + +void sub_80B03D8(u8 taskId) +{ + u8 r4 = gTasks[taskId].data[0]; + + if (gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 0] == 0 + || gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 0] == 0xFF) + { + gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 0] = 0xFF; + gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 1] = 0; + BlendPalette((sContest.prevTurnOrder[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); + DestroyTask(taskId); + } +} + +void sub_80B0458(u8 taskId) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + u8 r3 = i * 4; + + if (gTasks[taskId].data[r3 + 0] != 0xFF) + { + if (gTasks[taskId].data[r3 + 1] == 0) + gTasks[taskId].data[r3 + 0]++; + else + gTasks[taskId].data[r3 + 0]--; + + if (gTasks[taskId].data[r3 + 0] == 16 + || gTasks[taskId].data[r3 + 0] == 0) + gTasks[taskId].data[r3 + 1] ^= 1; + + BlendPalette( + (sContest.prevTurnOrder[i] + 5) * 16 + 6, + 2, + gTasks[taskId].data[r3 + 0], + RGB(31, 31, 18)); + } + } +} + +void CreateUnusedBlendTask(void) +{ + u8 i; + + sContest.blendTaskId = CreateTask(Task_UnusedBlend, 30); + for (i = 0; i < 4; i++) + InitUnusedBlendTaskData(i); +} + +void InitUnusedBlendTaskData(u8 contestant) +{ + gTasks[sContest.blendTaskId].data[contestant * 4 + 0] = 0xFF; + gTasks[sContest.blendTaskId].data[contestant * 4 + 1] = 0; +} + +void UpdateBlendTaskContestantsData(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + UpdateBlendTaskContestantData(i); +} + +void UpdateBlendTaskContestantData(u8 contestant) +{ + InitUnusedBlendTaskData(contestant); + + // 2-byte DMA copy? Why? + + DmaCopy16Defvars( + 3, + &gPlttBufferUnfaded[16 * (5 + contestant) + 10], + &gPlttBufferFaded[16 * (5 + contestant) + 10], + 2); + + DmaCopy16Defvars( + 3, + &gPlttBufferUnfaded[16 * (5 + contestant) + 12 + contestant], + &gPlttBufferFaded[16 * (5 + contestant) + 12 + contestant], + 2); +} + +void nullsub_19(int unused) +{ +} + +void Task_UnusedBlend(u8 taskId) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + u8 r3 = i * 4; + + if (gTasks[taskId].data[r3 + 0] != 0xFF) + { + if (++gTasks[taskId].data[r3 + 2] > 2) + { + gTasks[taskId].data[r3 + 2] = 0; + + if (gTasks[taskId].data[r3 + 1] == 0) + gTasks[taskId].data[r3 + 0]++; + else + gTasks[taskId].data[r3 + 0]--; + + if (gTasks[taskId].data[r3 + 0] == 16 + || gTasks[taskId].data[r3 + 0] == 0) + gTasks[taskId].data[r3 + 1] ^= 1; + + BlendPalette((i + 5) * 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)); + } + } + } +} + +// This task is never used +u8 CreateUnusedBrokenBlendTask(u8 *a) +{ + u8 i; + u8 taskId = CreateTask(Task_UnusedBrokenBlend, 10); + + for (i = 0; i < 4; i++) + { + u8 r0 = i * 4; + + gTasks[taskId].data[r0] = a[i]; + if (a[i] != 0) + eContestGfxState[i].boxBlinking = TRUE; + } + return taskId; +} + +#ifdef NONMATCHING +void Task_UnusedBrokenBlend(u8 taskId) +{ + u8 i; + u8 r4; + u8 r4_2; + u8 r1; + u8 r7; + + for (i = 0; i < 4; i++) + { + //#define r4 r4_2 + r4 = gContestantTurnOrder[i]; + r1 = r4 * 4; + r7 = gTasks[taskId].data[r1 + 0]; + + if (r7 != 0) + { + //_080B079C + u8 r8 = gTasks[taskId].data[r1 + 1]; + u8 r5 = gTasks[taskId].data[r1 + 2]; + u8 r6 = gTasks[taskId].data[r1 + 3]; + + if (r7 == 1) + { + r6++; + if (r6 == 1) + { + //_080B07D2 + r6 = 0; + BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(31, 31, 31)); + if (r5 == 0 && r8 == 4) + { + gTasks[taskId].data[r1 + 0] = 0; + //asm(""); + } + //_080B0800 + else + { + r5 += 2; + if (r5 > 13) + { + r5 = 0; + r8++; + } + } + } + //to _080B08EA + } + //_080B0818 + else if (r7 == 2 || r7 == 4) + { + r6++; + if (r6 == 3) + { + r6 = 0; + BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]); + if (r5 == 0 && r8 == 2) + { + gTasks[taskId].data[r1 + 0] = 0; + } + //_080B0858 + else + { + r5 += 1; + if (r5 == 14) + { + r5 = 0; + r8++; + if (r7 == 4 && r8 == 1) + { + BlendPalette((r4 + 9) * 16 + 2, 1, 4, RGB(0, 0, 0)); + BlendPalette((r4 + 9) * 16 + 5, 1, 4, RGB(0, 0, 0)); + } + } + } + } + //to _080B08EA + } + //_080B0896 + else if (r7 == 3) + { + r6++; + if (r6 == 12) + { + r6 = 0; + BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(0, 0, 0)); + r5 += 1; + if (r5 == 5) + { + // What the hell? These aren't pointers. + // This code would crash if run. + DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1], + (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6); + gTasks[taskId].data[r1 + 0] = 0; + } + } + } + //_080B08EA + gTasks[taskId].data[r1 + 1] = r8; + gTasks[taskId].data[r1 + 2] = r5; + gTasks[taskId].data[r1 + 3] = r6; + } + //_080B0910 + } + //_080B0920 + + #define i r4_2 + for (i = 0; i < 4; i++) // r4 is i + { + if (gTasks[taskId].data[i * 4 + 0] != 0) + break; + } + //_080B0958 + if (i == 4) + { + for (i = 0; i < 4; i++) + eContestGfxState[i].boxBlinking = FALSE; + DestroyTask(taskId); + } + #undef i +} +#else +NAKED +void Task_UnusedBrokenBlend(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + ldr r2, _080B07F4 @ =gTasks\n\ + movs r1, 0x8\n\ + adds r1, r2\n\ + mov r10, r1\n\ + ldr r3, [sp]\n\ + lsls r3, 2\n\ + str r3, [sp, 0x1C]\n\ + ldr r1, [sp]\n\ + adds r0, r3, r1\n\ + lsls r0, 3\n\ + str r0, [sp, 0xC]\n\ +_080B0774:\n\ + ldr r0, _080B07F8 @ =gContestantTurnOrder\n\ + ldr r3, [sp, 0x4]\n\ + adds r0, r3, r0\n\ + ldrb r4, [r0]\n\ + lsls r0, r4, 26\n\ + lsrs r1, r0, 24\n\ + lsls r0, r1, 1\n\ + str r0, [sp, 0x8]\n\ + ldr r3, [sp]\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r6, r0, 3\n\ + ldr r3, [sp, 0x8]\n\ + adds r0, r3, r6\n\ + add r0, r10\n\ + mov r9, r0\n\ + ldrb r7, [r0]\n\ + cmp r7, 0\n\ + bne _080B079C\n\ + b _080B0910\n\ +_080B079C:\n\ + adds r3, r1, 0x1\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + add r0, r10\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r2, r1, 0x2\n\ + lsls r0, r2, 1\n\ + adds r0, r6\n\ + add r0, r10\n\ + ldrb r5, [r0]\n\ + adds r1, 0x3\n\ + lsls r0, r1, 1\n\ + adds r0, r6\n\ + add r0, r10\n\ + ldrb r6, [r0]\n\ + str r3, [sp, 0x10]\n\ + str r2, [sp, 0x14]\n\ + str r1, [sp, 0x18]\n\ + cmp r7, 0x1\n\ + bne _080B0818\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x1\n\ + beq _080B07D2\n\ + b _080B08EA\n\ +_080B07D2:\n\ + movs r6, 0\n\ + adds r0, r4, 0x5\n\ + lsls r0, 4\n\ + adds r0, 0x1\n\ + movs r1, 0x3\n\ + adds r2, r5, 0\n\ + ldr r3, _080B07FC @ =0x00007fff\n\ + bl BlendPalette\n\ + cmp r5, 0\n\ + bne _080B0800\n\ + mov r0, r8\n\ + cmp r0, 0x4\n\ + bne _080B0800\n\ + mov r1, r9\n\ + strh r6, [r1]\n\ + b _080B08EA\n\ + .align 2, 0\n\ +_080B07F4: .4byte gTasks\n\ +_080B07F8: .4byte gContestantTurnOrder\n\ +_080B07FC: .4byte 0x00007fff\n\ +_080B0800:\n\ + adds r0, r5, 0x2\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0xD\n\ + bls _080B08EA\n\ + movs r5, 0\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + b _080B08EA\n\ +_080B0818:\n\ + cmp r7, 0x2\n\ + beq _080B0820\n\ + cmp r7, 0x4\n\ + bne _080B0896\n\ +_080B0820:\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x3\n\ + bne _080B08EA\n\ + movs r6, 0\n\ + adds r0, r4, 0x5\n\ + lsls r0, 4\n\ + adds r0, 0x1\n\ + ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\ + lsls r1, r4, 1\n\ + adds r1, r2\n\ + ldrh r3, [r1]\n\ + movs r1, 0x3\n\ + adds r2, r5, 0\n\ + bl BlendPalette\n\ + cmp r5, 0\n\ + bne _080B0858\n\ + mov r2, r8\n\ + cmp r2, 0x2\n\ + bne _080B0858\n\ + mov r3, r9\n\ + strh r6, [r3]\n\ + b _080B08EA\n\ + .align 2, 0\n\ +_080B0854: .4byte gUnknown_083CC5A4\n\ +_080B0858:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0xE\n\ + bne _080B08EA\n\ + movs r5, 0\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + cmp r7, 0x4\n\ + bne _080B08EA\n\ + cmp r0, 0x1\n\ + bne _080B08EA\n\ + adds r4, 0x9\n\ + lsls r4, 4\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + movs r2, 0x4\n\ + movs r3, 0\n\ + bl BlendPalette\n\ + adds r4, 0x5\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + movs r2, 0x4\n\ + movs r3, 0\n\ + bl BlendPalette\n\ + b _080B08EA\n\ +_080B0896:\n\ + cmp r7, 0x3\n\ + bne _080B08EA\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0xC\n\ + bne _080B08EA\n\ + movs r6, 0\n\ + adds r0, r4, 0x5\n\ + lsls r0, 4\n\ + adds r4, r0, 0x1\n\ + adds r0, r4, 0\n\ + movs r1, 0x3\n\ + adds r2, r5, 0\n\ + movs r3, 0\n\ + bl BlendPalette\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x5\n\ + bne _080B08EA\n\ + ldr r0, _080B0930 @ =gPlttBufferFaded\n\ + lsls r1, r4, 1\n\ + adds r0, r1, r0\n\ + ldrh r2, [r0]\n\ + ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + ldr r1, _080B0938 @ =0x040000d4\n\ + str r2, [r1]\n\ + str r0, [r1, 0x4]\n\ + movs r0, 0x80\n\ + lsls r0, 24\n\ + orrs r7, r0\n\ + str r7, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + ldr r1, [sp, 0x8]\n\ + ldr r2, [sp, 0xC]\n\ + adds r0, r1, r2\n\ + add r0, r10\n\ + strh r6, [r0]\n\ +_080B08EA:\n\ + ldr r3, [sp, 0x10]\n\ + lsls r0, r3, 1\n\ + ldr r1, [sp, 0xC]\n\ + adds r0, r1\n\ + add r0, r10\n\ + mov r2, r8\n\ + strh r2, [r0]\n\ + ldr r3, [sp, 0x14]\n\ + lsls r0, r3, 1\n\ + adds r0, r1\n\ + add r0, r10\n\ + strh r5, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + lsls r0, r1, 1\n\ + ldr r2, [sp, 0xC]\n\ + adds r0, r2\n\ + add r0, r10\n\ + strh r6, [r0]\n\ + ldr r2, _080B093C @ =gTasks\n\ +_080B0910:\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + cmp r0, 0x3\n\ + bhi _080B0920\n\ + b _080B0774\n\ +_080B0920:\n\ + movs r4, 0\n\ + ldr r3, [sp, 0x1C]\n\ + ldr r1, [sp]\n\ + adds r0, r3, r1\n\ + lsls r1, r0, 3\n\ + adds r2, 0x8\n\ + adds r0, r1, r2\n\ + b _080B0950\n\ + .align 2, 0\n\ +_080B0930: .4byte gPlttBufferFaded\n\ +_080B0934: .4byte gPlttBufferUnfaded\n\ +_080B0938: .4byte 0x040000d4\n\ +_080B093C: .4byte gTasks\n\ +_080B0940:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x3\n\ + bhi _080B0958\n\ + lsls r0, r4, 3\n\ + adds r0, r1\n\ + adds r0, r2\n\ +_080B0950:\n\ + movs r3, 0\n\ + ldrsh r0, [r0, r3]\n\ + cmp r0, 0\n\ + beq _080B0940\n\ +_080B0958:\n\ + cmp r4, 0x4\n\ + bne _080B0980\n\ + movs r4, 0\n\ + ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\ + movs r5, 0x3\n\ + negs r5, r5\n\ +_080B0964:\n\ + lsls r1, r4, 2\n\ + adds r1, r3\n\ + ldrb r2, [r1, 0x2]\n\ + adds r0, r5, 0\n\ + ands r0, r2\n\ + strb r0, [r1, 0x2]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x3\n\ + bls _080B0964\n\ + ldr r0, [sp]\n\ + bl DestroyTask\n\ +_080B0980:\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080B0990: .4byte gSharedMem + 0x19338\n\ + .syntax divided\n"); +} +#endif + +void unref_sub_80B0994(u8 a) +{ + if (a != 0) + sContest.unk1920A_2 = 1; +} + +void StartStopFlashJudgeAttentionEye(u8 a) +{ + if (sContestantStatus[a].hasJudgesAttention) + sub_80B0368(a); + else + sub_80B03A8(a); +} + +extern const struct CompressedSpriteSheet gUnknown_083CC4B4[]; +extern const struct SpritePalette gUnknown_083CC4D4[]; +extern const struct SpriteTemplate gSpriteTemplate_83CC53C[]; + +u8 CreateContestantBoxBlinkSprites(u8 a) +{ + u8 r5 = gContestantTurnOrder[a] * 40 + 32; + u8 r8; + u8 r6; + volatile u8 zero; + + LoadCompressedObjectPic(&gUnknown_083CC4B4[a]); + LoadSpritePalette(&gUnknown_083CC4D4[a]); + r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29); + r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29); + gSprites[r6].oam.tileNum += 64; + + CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32)); + CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32)); + + DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300); + + // What is this? + zero = 0; + zero = 0; + + DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300); + + gSprites[r8].data[0] = r6; + gSprites[r6].data[0] = r8; + gSprites[r8].data[1] = a; + gSprites[r6].data[1] = a; + return r8; +} + +void DestroyContestantBoxBlinkSprites(u8 spriteId) +{ + u8 spriteId2 = gSprites[spriteId].data[0]; + + FreeSpriteOamMatrix(&gSprites[spriteId2]); + DestroySprite(&gSprites[spriteId2]); + DestroySpriteAndFreeResources(&gSprites[spriteId]); +} + +void SetBlendForContestantBoxBlink(void) +{ + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x0907; +} + +void ResetBlendForContestantBoxBlink(void) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; +} + +void BlinkContestantBox(u8 a, bool8 b) +{ + u8 r5; + + SetBlendForContestantBoxBlink(); + eContestGfxState[gSprites[a].data[1]].boxBlinking = 1; + r5 = gSprites[a].data[0]; + StartSpriteAffineAnim(&gSprites[a], 1); + StartSpriteAffineAnim(&gSprites[r5], 1); + gSprites[a].callback = SpriteCB_BlinkContestantBox; + gSprites[r5].callback = SpriteCallbackDummy; + if (b == FALSE) + PlaySE(SE_CONTEST_MONS_TURN); + else + PlaySE(SE_PC_LOGIN); +} + +void SpriteCB_BlinkContestantBox(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + u8 r1 = sprite->data[0]; + + if (gSprites[r1].affineAnimEnded) + { + sprite->invisible = TRUE; + gSprites[r1].invisible = TRUE; + sprite->callback = SpriteCB_EndBlinkContestantBox; + } + } +} + +void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite) +{ + eContestGfxState[sprite->data[1]].boxBlinking = 0; + DestroyContestantBoxBlinkSprites(sprite->data[0]); + ResetBlendForContestantBoxBlink(); +} + +void Unused_EndBlinkingState(u8 a, int unused) +{ + eContestGfxState[a].boxBlinking = 0; +} + +void ContestDebugTogglePointTotal(void) +{ + eEnableContestDebugging ^= 1; + if (eEnableContestDebugging == 0) + { + u8 i; + + for (i = 0; i < 4; i++) + { + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA308[i][0], + gUnknown_083CA308[i][1], + gUnknown_083CA310[i][0] + 5, + gUnknown_083CA310[i][1] + 1); + } + DrawContestantWindowText(); + SwapMoveDescAndContestTilemaps(); + } + else + { + ContestDebugDoPrint(); + } +} + +void ContestDebugDoPrint(void) +{ + u8 r5 = 0; + u8 sp8[8]; + + if (eEnableContestDebugging != 0) + { + u8 i; + s16 r2; + + for (i = 0; i < 4; i++) + { + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA308[i][0], + gUnknown_083CA308[i][1], + gUnknown_083CA310[i][0] + 5, + gUnknown_083CA310[i][1] + 1); + } + for (i = 0; i < 4; i++) + { + r2 = sContestantStatus[i].pointTotal; + if (r2 < 0) + { + r2 = -r2; + sp8[0] = CHAR_HYPHEN; + r5++; + } + ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + sp8, + 592 + gContestantTurnOrder[i] * 22, + gUnknown_083CA310[gContestantTurnOrder[i]][0], + gUnknown_083CA310[gContestantTurnOrder[i]][1]); + r5 = 0; + } + for (i = 0; i < 4; i++) + { + r2 = sContestantStatus[i].appeal; + if (r2 < 0) + { + r2 = -r2; + sp8[0] = CHAR_HYPHEN; + r5++; + } + ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + sp8, + 512 + gContestantTurnOrder[i] * 20, + gUnknown_083CA308[gContestantTurnOrder[i]][0], + gUnknown_083CA308[gContestantTurnOrder[i]][1]); + r5 = 0; + } + SwapMoveDescAndContestTilemaps(); + } +} + +void unref_sub_80B0EE8(s32 *a, s32 b) +{ + s32 i; + s32 j; + + for (i = 0; i < b - 1; i++) + { + for (j = b - 1; j > i; j--) + { + if (a[j - 1] > a[j]) + { + s32 temp = a[j]; + + a[j] = a[j - 1]; + a[j - 1] = temp; + } + } + } +} + +// something to do with contest NPC opponents, I think. +void SortContestants(u8 a) +{ + u8 sp0[4]; + u16 sp4[4] = {0}; + s32 i; + s32 r2; + s32 r4; + + // Generate a unique random number for each contestant. + for (i = 0; i < 4; i++) + { + sp4[i] = Random(); + + // Loop through all the numbers generated so far. + for (r2 = 0; r2 < i; r2++) + { + if (sp4[i] == sp4[r2]) + { + // This number isn't unique; try generating again. + i--; + break; + } + } + } + + if (a == 0) + { + // Order based on the results of the Conditions round using Insertion Sort. + // Use the randomOrdering to break ties. + for (i = 0; i < 4; i++) + { + // Append this contestant to the list. + gContestantTurnOrder[i] = i; + + // Determine where the contestant should be ordered. + for (r4 = 0; r4 < i; r4++) + { + if (gContestMonRound1Points[gContestantTurnOrder[r4]] < gContestMonRound1Points[i] + || (gContestMonRound1Points[gContestantTurnOrder[r4]] == gContestMonRound1Points[i] && sp4[gContestantTurnOrder[r4]] < sp4[i])) + { + // Shift everything larger up to make room. + for (r2 = i; r2 > r4; r2--) + gContestantTurnOrder[r2] = gContestantTurnOrder[r2 - 1]; + + // Insert into the new spot. + gContestantTurnOrder[r4] = i; + break; + } + } + + // This is redundant. + // Perhaps GF switched from true insertion sort to in-place insertion sort, and forgot to + // remove this check? + if (r4 == i) + gContestantTurnOrder[i] = i; + } + + // Invert gContestantTurnOrder; above, it was a list of contestant IDs. Now it's a list of turn orderings. + // + // For example, if contestant 3 had the first turn, then `gContestantTurnOrder[1] = 3`. The turn is the index, + // the contestant is the data. After inverting the list, `gContestantTurnOrder[3] = 1`. The contestant is the index, + // and the turn is the data. + memcpy(sp0, gContestantTurnOrder, sizeof(sp0)); + for (i = 0; i < 4; i++) + gContestantTurnOrder[sp0[i]] = i; + } + else + { + // Order contestants based on their ranking. + // If contestants have tied ranking, fill in the next available slot. + // + // Note that ranking is calculated so that shared places still take up a ranking + // space. A ranking like [1, 2, 2, 3] is not possible; it would be [1, 2, 2, 4] + // instead. + memset(sp0, 0xFF, sizeof(sp0)); + for (i = 0; i < 4; i++) + { + u8 r2_2 = sContestantStatus[i].ranking; + + while (1) + { + u8 *ptr = &sp0[r2_2]; + if (*ptr == 0xFF) + { + *ptr = i; + gContestantTurnOrder[i] = r2_2; + break; + } + r2_2++; + } + } + + // Randomize the order of contestants with tied rankings using Selection Sort. + // + // Look through the array for tied ranks, and use randomOrdering to break the tie. + // This ensures that contestants with the same rank will be randomly ordered. This + // uses an in-place slection sort, which involves a lot of extra swapping. + for (i = 0; i < 3; i++) + { + for (r4 = 3; r4 > i; r4--) + { + if (sContestantStatus[r4 - 1].ranking == sContestantStatus[r4].ranking && gContestantTurnOrder[r4 - 1] < gContestantTurnOrder[r4] + && sp4[r4 - 1] < sp4[r4]) + { + u8 temp = gContestantTurnOrder[r4]; + + gContestantTurnOrder[r4] = gContestantTurnOrder[r4 - 1]; + gContestantTurnOrder[r4 - 1] = temp; + } + } + } + } +} + +void DrawContestantWindows(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + s32 windowId = i + 5; + LoadPalette( + eContestTempSave.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, 32); + } + DrawContestantWindowText(); +} + +void CalculateAppealMoveImpact(u8 contestant) +{ + bool8 r8; + s32 i; + + sContestantStatus[contestant].appeal = 0; + sContestantStatus[contestant].baseAppeal = 0; + r8 = ContestantCanUseTurn(contestant); + if (r8) + { + u16 move = sContestantStatus[contestant].currMove; + u8 effect = gContestMoves[move].effect; + u8 rnd; + + sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory; + if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE) + { + sContestantStatus[contestant].repeatedMove = TRUE; + sContestantStatus[contestant].moveRepeatCount++; + } + else + { + sContestantStatus[contestant].moveRepeatCount = 0; + } + sContestantStatus[contestant].baseAppeal = gContestEffects[effect].appeal; + sContestantStatus[contestant].appeal = gContestEffects[effect].appeal; + eContestAppealResults.jam = gContestEffects[effect].jam; + eContestAppealResults.jam2 = gContestEffects[effect].jam; + eContestAppealResults.contestant = contestant; + for (i = 0; i < 4; i++) + { + sContestantStatus[i].jam = 0; + eContestAppealResults.unnervedPokes[i] = 0; + } + if (sContestantStatus[contestant].hasJudgesAttention && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0) + sContestantStatus[contestant].hasJudgesAttention = 0; + gContestEffectFuncs[effect](); + if (sContestantStatus[contestant].conditionMod == 1) + sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition - 10; + else if (sContestantStatus[contestant].appealTripleCondition) + sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition * 3; + else + sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition; + sContestantStatus[contestant].completedCombo = 0; + sContestantStatus[contestant].usedComboMove = 0; + if (IsContestantAllowedToCombo(contestant)) + { + u8 completedCombo = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove); + + if (completedCombo != 0 && sContestantStatus[contestant].hasJudgesAttention) + { + sContestantStatus[contestant].completedCombo = completedCombo; + sContestantStatus[contestant].usedComboMove = 1; + sContestantStatus[contestant].hasJudgesAttention = 0; + sContestantStatus[contestant].comboAppealBonus = sContestantStatus[contestant].baseAppeal * sContestantStatus[contestant].completedCombo; + sContestantStatus[contestant].completedComboFlag = 1; + } + else + { + if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0) + { + sContestantStatus[contestant].hasJudgesAttention = 1; + sContestantStatus[contestant].usedComboMove = 1; + } + else + { + sContestantStatus[contestant].hasJudgesAttention = 0; + } + } + } + if (sContestantStatus[contestant].repeatedMove) + sContestantStatus[contestant].repeatJam = (sContestantStatus[contestant].moveRepeatCount + 1) * 10; + if (sContestantStatus[contestant].nervous) + { + sContestantStatus[contestant].hasJudgesAttention = 0; + sContestantStatus[contestant].appeal = 0; + sContestantStatus[contestant].baseAppeal = 0; + } + eContestExcitement.moveExcitement = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove); + if (sContestantStatus[contestant].overrideCategoryExcitementMod) + eContestExcitement.moveExcitement = 1; + if (eContestExcitement.moveExcitement > 0) + { + if (sContest.applauseLevel + eContestExcitement.moveExcitement > 4) + eContestExcitement.excitementAppealBonus = 60; + else + eContestExcitement.excitementAppealBonus = 10; + } + else + { + eContestExcitement.excitementAppealBonus = 0; + } + + rnd = Random() % 3; + for (i = 0; i < 4; i++) + { + if (i != contestant) + { + if (rnd == 0) + break; + rnd--; + } + } + sContestantStatus[contestant].contestantAnimTarget = i; + } +} + +void SetContestantEffectStringID(u8 a, u8 b) +{ + sContestantStatus[a].effectStringId = b; +} + +void SetContestantEffectStringID2(u8 a, u8 b) +{ + sContestantStatus[a].effectStringId2 = b; +} + +void SetStartledString(u8 contestant, u8 jam) +{ + if (jam >= 60) + SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER); + else if (jam >= 40) + SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP); + else if (jam >= 30) + SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY); + else if (jam >= 20) + SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK); + else if (jam >= 10) + SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN); +} + +void PrintAppealMoveResultText(u8 contestant, u8 stringId) +{ + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); + if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL) + StringCopy(gStringVar3, gText_Contest_Shyness); + else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY) + StringCopy(gStringVar3, gText_Contest_Anxiety); + else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE) + StringCopy(gStringVar3, gText_Contest_Laziness); + else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART) + StringCopy(gStringVar3, gText_Contest_Hesitancy); + else + StringCopy(gStringVar3, gText_Contest_Fear); + StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[stringId]); + ContestClearGeneralTextWindow(); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); +} + +void MakeContestantNervous(u8 p) +{ + sContestantStatus[p].nervous = 1; + sContestantStatus[p].currMove = MOVE_NONE; +} + +// This function calculates the new turn order for the next round. The +// algorithm first checks for explicit turn assignments in the +// ContestantStatus::nextTurnOrder field of each contestant. The remaining +// turns are assigned such that the turn order will reverse. +// +// For example, if no pokemon have a defined nextTurnOrder, then the 4th +// will become 1st, the 3rd will become 2nd, etc. +// +// Note: This function assumes that multiple pokemon cannot have the same +// nextTurnOrder value. +void ApplyNextTurnOrder(void) +{ + u8 nextContestant = 0; + s32 i; + s32 j; + u8 newTurnOrder[4]; + bool8 isContestantOrdered[4]; + + for (i = 0; i < 4; i++) + { + newTurnOrder[i] = gContestantTurnOrder[i]; + isContestantOrdered[i] = FALSE; + } + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + if (sContestantStatus[j].nextTurnOrder == i) + { + newTurnOrder[j] = i; + isContestantOrdered[j] = TRUE; + break; + } + } + if (j == 4) + { + for (j = 0; j < 4; j++) + { + if (isContestantOrdered[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF) + { + nextContestant = j; + j++; + break; + } + } + for (; j < 4; j++) + { + if (isContestantOrdered[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF + && gContestantTurnOrder[nextContestant] > gContestantTurnOrder[j]) + nextContestant = j; + } + newTurnOrder[nextContestant] = i; + isContestantOrdered[nextContestant] = 1; + } + } + + for (i = 0; i < 4; i++) + { + eContestAppealResults.turnOrder[i] = newTurnOrder[i]; + sContestantStatus[i].nextTurnOrder = 0xFF; + sContestantStatus[i].turnOrderMod = 0; + gContestantTurnOrder[i] = newTurnOrder[i]; + } +} + +void SpriteCB_JudgeSpeechBubble(struct Sprite *sprite) +{ + if (sprite->data[1]++ > 84) + { + sprite->data[1] = 0; + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + sContest.waitForJudgeSpeechBubble = 0; + } +} + +void DoJudgeSpeechBubble(u8 a) +{ + u8 spriteId = sContest.judgeSpeechBubbleSpriteId; + + switch (a) + { + case 0: + case 1: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0]; + PlaySE(SE_FAILURE); + break; + case 2: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4; + PlaySE(SE_SUCCESS); + break; + case 3: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8; + PlaySE(SE_SUCCESS); + break; + case 4: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; + PlaySE(SE_WARP_IN); + break; + case 5: // exactly the same as case 4 + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; + PlaySE(SE_WARP_IN); + break; + case 6: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16; + PlaySE(SE_WARP_IN); + break; + case 8: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24; + PlaySE(SE_M_HEAL_BELL); + break; + case 7: + default: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20; + PlaySE(SE_WARP_IN); + break; + } + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].callback = SpriteCB_JudgeSpeechBubble; + sContest.waitForJudgeSpeechBubble = 1; +} + +void UpdateApplauseMeter(void) +{ + s32 i; + + for (i = 0; i < 5; i++) + { + const u8 *src; + + if (i < sContest.applauseLevel) + src = gContestApplauseMeterGfx + 64; + else + src = gContestApplauseMeterGfx; + CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); + CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); + if (sContest.applauseLevel > 4) + StartApplauseOverflowAnimation(); + } +} + +UNUSED +void unref_sub_80B19D0(void) +{ + u8 str[20]; + StringCopy(str, gUnknown_083CC2EC); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, str, 680, 0, 0); +} + +s8 Contest_GetMoveExcitement(u16 move) +{ + return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; +} + +// Launches crowd movement task, maybe +u8 StartApplauseOverflowAnimation(void) +{ + u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10); + + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2); + return taskId; +} + +void Task_ApplauseOverflowAnimation(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 1) + { + gTasks[taskId].data[0] = 0; + if (gTasks[taskId].data[3] == 0) + gTasks[taskId].data[4]++; + else + gTasks[taskId].data[4]--; + BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31)); + if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16) + { + gTasks[taskId].data[3] ^= 1; + if (sContest.applauseLevel < 5) + { + BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0)); + DestroyTask(taskId); + } + } + } +} + +void SlideApplauseMeterIn(void) +{ + CreateTask(Task_SlideApplauseMeterIn, 10); + gSprites[sContest.applauseMeterSpriteId].pos2.x = -70; + gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; + sContest.applauseMeterIsMoving = 1; +} + +void Task_SlideApplauseMeterIn(u8 taskId) +{ + struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; + + gTasks[taskId].data[10] += 1664; + sprite->pos2.x += gTasks[taskId].data[10] >> 8; + gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; + if (sprite->pos2.x > 0) + sprite->pos2.x = 0; + if (sprite->pos2.x == 0) + { + sContest.applauseMeterIsMoving = 0; + DestroyTask(taskId); + } +} + +void SlideApplauseMeterOut(void) +{ + if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE) + { + sContest.applauseMeterIsMoving = 0; + } + else + { + CreateTask(Task_SlideApplauseMeterOut, 10); + gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; + sContest.applauseMeterIsMoving = 1; + } +} + +void Task_SlideApplauseMeterOut(u8 taskId) +{ + struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; + + gTasks[taskId].data[10] += 1664; + sprite->pos2.x -= gTasks[taskId].data[10] >> 8; + gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; + if (sprite->pos2.x < -70) + sprite->pos2.x = -70; + if (sprite->pos2.x == -70) + { + sprite->invisible = TRUE; + sContest.applauseMeterIsMoving = 0; + DestroyTask(taskId); + } +} + +void ShowAndUpdateApplauseMeter(s8 a) +{ + u8 taskId = CreateTask(Task_ShowAndUpdateApplauseMeter, 5); + + gTasks[taskId].data[0] = a; + sContest.isShowingApplauseMeter = 1; +} + +void Task_ShowAndUpdateApplauseMeter(u8 taskId) +{ + switch (gTasks[taskId].data[10]) + { + case 0: + SlideApplauseMeterIn(); + gTasks[taskId].data[10]++; + break; + case 1: + if (!sContest.applauseMeterIsMoving) + { + nullsub_18(gTasks[taskId].data[0]); + gTasks[taskId].data[10]++; + } + break; + case 2: + if (gTasks[taskId].data[11]++ > 20) + { + gTasks[taskId].data[11] = 0; + UpdateApplauseMeter(); + sContest.isShowingApplauseMeter = 0; + DestroyTask(taskId); + } + break; + } +} + +UNUSED +void HideApplauseMeterNoAnim(void) +{ + gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; + gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; +} + +UNUSED +void ShowApplauseMeterNoAnim(void) +{ + gSprites[sContest.applauseMeterSpriteId].invisible = TRUE; +} + +void AnimateAudience(void) +{ + CreateTask(Task_AnimateAudience, 15); + sContest.animatingAudience = 1; +} + +void Task_AnimateAudience(u8 taskId) +{ + if (gTasks[taskId].data[10]++ > 6) + { +#ifndef NONMATCHING + register struct Task *task asm("r0"); + register u32 r4 asm("r4") = taskId * 4; +#endif + + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[11] == 0) + { + DmaCopy32Defvars(3, ewram16800, (void *)(VRAM + 0x2000), 0x1000); + } + else + { + DmaCopy32Defvars(3, eUnzippedContestAudience_Gfx, (void *)(VRAM + 0x2000), 0x1000); + gTasks[taskId].data[12]++; + } + +#ifdef NONMATCHING + gTasks[taskId].data[11] ^= 1; + if (gTasks[taskId].data[12] == 9) +#else + // Why won't this match the normal way? + asm("add %0, %1, #0\n\t" + "add %0, %3\n\t" + "lsl %0, #3\n\t" + "add %0, %2\n\t" + : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId)); + + task->data[11] ^= 1; + if (task->data[12] == 9) +#endif + { + sContest.animatingAudience = 0; + DestroyTask(taskId); + } + } +} + +#define tBlendColor data[0] +#define tBlendCoeff data[1] + +void BlendAudienceBackground(s8 excitementDir, s8 blendDir) +{ + u8 taskId = CreateTask(Task_BlendAudienceBackground, 10); + u16 blendColor; + u8 blendCoeff; + u8 targetBlendCoeff; + + if (excitementDir > 0) + { + blendColor = RGB(30, 27, 8); + if (blendDir > 0) + { + blendCoeff = 0; + targetBlendCoeff = sContest.applauseLevel * 3; + } + else + { + blendCoeff = sContest.applauseLevel * 3; + targetBlendCoeff = 0; + } + } + else + { + blendColor = 0; + if (blendDir > 0) + { + blendCoeff = 0; + targetBlendCoeff = 12; + } + else + { + blendCoeff = 12; + targetBlendCoeff = 0; + } + } + gTasks[taskId].tBlendColor = blendColor; + gTasks[taskId].tBlendCoeff = blendCoeff; + 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 Task_BlendAudienceBackground(u8 taskId) +{ + if (gTasks[taskId].data[10]++ >= 0) + { + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[2] > 0) + gTasks[taskId].tBlendCoeff++; + else + gTasks[taskId].tBlendCoeff--; + BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) + { + DestroyTask(taskId); + sContest.waitForAudienceBlend = 0; + } + } +} + +#undef tBlendColor +#undef tBlendCoeff + +void ShowHideNextTurnGfx(bool8 a) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (sContestantStatus[i].turnOrderMod != 0 && a) + { + CpuCopy32( + GetTurnOrderNumberGfx(i), + (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 5) * 32), + 64); + gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = gUnknown_083CA33C[gContestantTurnOrder[i]]; + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE; + } + else + { + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE; + } + } +} + +const u8 *GetTurnOrderNumberGfx(u8 contestant) +{ + if (sContestantStatus[contestant].turnOrderMod != 1) + return gContestNextTurnRandomGfx; + else + return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64; +} + +void DrawUnnervedSymbols(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (eContestAppealResults.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) + { + u8 r4 = gContestantTurnOrder[i] * 5 + 2; + u16 r0 = GetStatusSymbolTileOffset(i, 3); + + *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0; + *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1; + *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16; + *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17; + PlaySE(SE_CONTEST_ICON_CHANGE); + } + } +} + +bool8 IsContestantAllowedToCombo(u8 contestant) +{ + if (sContestantStatus[contestant].repeatedMove || sContestantStatus[contestant].nervous) + return FALSE; + else + return TRUE; +} + +void SetBgForCurtainDrop(void) +{ + s32 i; + + ((vBgCnt *)®_BG1CNT)->priority = 0; + ((vBgCnt *)®_BG1CNT)->screenSize = 1; + ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; + + gBattle_BG1_X = DISPLAY_WIDTH; + gBattle_BG1_Y = DISPLAY_HEIGHT; + REG_BG1HOFS = DISPLAY_WIDTH; + REG_BG1VOFS = DISPLAY_HEIGHT; + + DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); + LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000)); + + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 0; + + for (i = 0; i < 4; i++) + { + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1; + gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 1; + } + + ((vBgCnt *)®_BG2CNT)->priority = 1; + ((vBgCnt *)®_BG0CNT)->priority = 1; + ((vBgCnt *)®_BG1CNT)->screenSize = 2; +} + +void UpdateContestantBoxOrder(void) +{ + s32 i; + + DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000); + DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + + ((vBgCnt *)®_BG1CNT)->priority = 1; + ((vBgCnt *)®_BG1CNT)->screenSize = 0; + ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 2; + + for (i = 0; i < 4; i++) + { + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0; + gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 0; + } +} + +void Task_StartDropCurtainAtRoundEnd(u8 taskId) +{ + gBattle_BG1_X = 0; + gBattle_BG1_Y = DISPLAY_HEIGHT; + PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); + gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd; +} + +void Task_UpdateCurtainDropAtRoundEnd(u8 taskId) +{ + if ((s16)(gBattle_BG1_Y -= 7) < 0) + gBattle_BG1_Y = 0; + if (gBattle_BG1_Y == 0) // Why cast? + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = Task_ResetForNextRound; + } +} + +void Task_ResetForNextRound(u8 taskId) +{ + s32 i; + + switch (gTasks[taskId].data[0]) + { + case 0: + for (i = 0; i < 4; i++) + sContest.prevTurnOrder[i] = gContestantTurnOrder[i]; + FillContestantWindowBgs(); + UpdateBlendTaskContestantsData(); + DrawConditionStars(); + DrawContestantWindows(); + ShowHideNextTurnGfx(TRUE); + UpdateSliderHeartSpriteYPositions(); + gTasks[taskId].data[0] = 1; + break; + case 1: + if (gIsLinkContest & 1) + { + u8 taskId2; + + sContest.waitForLink = 1; + if (IsPlayerLinkLeader()) + SetContestantStatusesForNextRound(); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); + ContestPrintLinkStandby(); + gTasks[taskId].data[0] = 2; + } + else + { + SetContestantStatusesForNextRound(); + gTasks[taskId].data[0] = 3; + } + break; + case 2: + if (!sContest.waitForLink) + gTasks[taskId].data[0] = 3; + break; + case 3: + DrawStatusSymbols(); + SwapMoveDescAndContestTilemaps(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd; + break; + } +} + +void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId) +{ + if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) + gTasks[taskId].func = Task_UpdateContestantBoxOrder; +} + +void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId) +{ + if (gTasks[taskId].data[2] < 10) + { + gTasks[taskId].data[2]++; + } + else + { + if (gTasks[taskId].data[1] == 0) + { + if (gTasks[taskId].data[0] == 16) + gTasks[taskId].data[1]++; + else + gTasks[taskId].data[0]++; + } + else + { + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd; + } + else + { + gTasks[taskId].data[0]--; + } + } + } +} + +void Task_StartRaiseCurtainAtRoundEnd(u8 taskId) +{ + if (gTasks[taskId].data[2] < 10) + { + gTasks[taskId].data[2]++; + } + else + { + gTasks[taskId].data[2] = 0; + PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0); + gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd; + } +} + +void AnimateSliderHearts(u8 animId) +{ + s32 i; + u8 taskId; + + for (i = 0; i < 4; i++) + { + 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].sliderHeartSpriteId]); + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE; + } + } + taskId = CreateTask(Task_WaitForSliderHeartAnim, 5); + gTasks[taskId].data[0] = animId; + sContest.sliderHeartsAnimating = 1; +} + +void Task_WaitForSliderHeartAnim(u8 taskId) +{ + s32 i; + + if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded) + { + if ((u8)gTasks[taskId].data[0] == 1) + { + for (i = 0; i < 4; i++) + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE; + } + for (i = 0; i < 4; i++) + FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); + sContest.sliderHeartsAnimating = 0; + DestroyTask(taskId); + } +} + +u16 SanitizeMove(u16 move) +{ + if (move >= NUM_MOVES) + move = MOVE_POUND; + return move; +} + +u16 SanitizeSpecies(u16 species) +{ + if (species >= NUM_SPECIES) + species = SPECIES_NONE; + return species; +} + +void SetMoveSpecificAnimData(u8 contestant) +{ + s32 i; + u16 move = SanitizeMove(sContestantStatus[contestant].currMove); + u16 species = SanitizeSpecies(gContestMons[contestant].species); + u8 r5_2; + + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + ClearBattleAnimationVars(); + for (i = 0; i < 4; i++) + gBattleMonForms[i] = 0; + switch (move) + { + case MOVE_CURSE: + if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST) + gAnimMoveTurn = 0; + else + gAnimMoveTurn = 1; + break; + case MOVE_TRANSFORM: + case MOVE_ROLE_PLAY: + r5_2 = sContestantStatus[contestant].contestantAnimTarget; + gContestResources__moveAnim.targetSpecies = SanitizeSpecies(gContestMons[r5_2].species); + gContestResources__moveAnim.unk10 = gContestMons[r5_2].personality; + gContestResources__moveAnim.hasTargetAnim = 1; + break; + case MOVE_RETURN: + gAnimFriendship = 0xFF; + break; + case MOVE_FRUSTRATION: + gAnimFriendship = 0; + break; + case MOVE_SOLAR_BEAM: + case MOVE_RAZOR_WIND: + case MOVE_SKULL_BASH: + case MOVE_SKY_ATTACK: + if (sContest.moveAnimTurnCount == 0) + { + sContest.moveAnimTurnCount = 2; + gAnimMoveTurn = 0; + } + else + { + gAnimMoveTurn = 1; + } + break; + } + SetBattleTargetSpritePosition(); +} + +void ClearMoveAnimData(UNUSED u8 contestant) +{ + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + if (sContest.moveAnimTurnCount != 0) + sContest.moveAnimTurnCount--; +} + +void SetMoveAnimAttackerData(u8 contestant) +{ + gContestResources__moveAnim.contestant = contestant; + gContestResources__moveAnim.species = SanitizeSpecies(gContestMons[contestant].species); + gContestResources__moveAnim.personality = gContestMons[contestant].personality; + gContestResources__moveAnim.otId = gContestMons[contestant].otId; +} + +void CreateInvisibleBattleTargetSprite(void) +{ + gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]); + SetBattleTargetSpritePosition(); +} + +void SetBattleTargetSpritePosition(void) +{ + struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]]; + + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->pos1.x = GetBattlerSpriteCoord(3, 0); + sprite->pos1.y = GetBattlerSpriteCoord(3, 1); + sprite->invisible = TRUE; +} + +void SelectContestMoveBankTarget(u16 move) +{ + switch (gBattleMoves[move].target) + { + case TARGET_UNK2: + case TARGET_USER: + gBattlerTarget = 2; + break; + case TARGET_SELECTED_POKEMON: + case TARGET_RANDOM: + case TARGET_BOTH_ENEMIES: + case TARGET_ALL_EXCEPT_USER: + default: + gBattlerTarget = 3; + break; + } +} + +bool8 Contest_SaveWinner(u8 rank) +{ + s32 i; + u8 captionId = Random() % 3; + + // Get the index of the winner among the contestants + for (i = 0; i < 3; i++) + { + if (gContestFinalStandings[i] == 0) + break; + } + + // 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: + captionId += 0; + break; + case CONTEST_CATEGORY_BEAUTY: + captionId += 3; + break; + case CONTEST_CATEGORY_CUTE: + captionId += 6; + break; + case CONTEST_CATEGORY_SMART: + captionId += 9; + break; + case CONTEST_CATEGORY_TOUGH: + captionId += 12; + break; + } + if (rank != CONTEST_SAVE_FOR_ARTIST) + { + // 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[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[saveIdx].contestCategory = captionId; + } + else + { + eCurContestWinner.personality = gContestMons[i].personality; + eCurContestWinner.otId = gContestMons[i].otId; + eCurContestWinner.species = gContestMons[i].species; + StringCopy(eCurContestWinner.nickname, gContestMons[i].nickname); + if (gIsLinkContest & 1) + StringCopy(eCurContestWinner.trainerName, gLinkPlayers[i].name); + else + StringCopy(eCurContestWinner.trainerName, gContestMons[i].trainerName); + eCurContestWinner.contestCategory = captionId; + } + return TRUE; +} + +// 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 (rank) + { + case CONTEST_RANK_NORMAL: + case CONTEST_RANK_SUPER: + return rank; + case CONTEST_RANK_HYPER: + if (shift) + { + 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 CONTEST_WINNER_HYPER_1 - 1; + case CONTEST_RANK_MASTER: + if (shift) + { + 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 CONTEST_WINNER_MASTER_1 - 1; + default: +// case CONTEST_SAVE_FOR_MUSEUM: +// case CONTEST_SAVE_FOR_ARTIST: + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + return CONTEST_WINNER_MUSEUM_COOL - 1; + case CONTEST_CATEGORY_BEAUTY: + return CONTEST_WINNER_MUSEUM_BEAUTY - 1; + case CONTEST_CATEGORY_CUTE: + return CONTEST_WINNER_MUSEUM_CUTE - 1; + case CONTEST_CATEGORY_SMART: + return CONTEST_WINNER_MUSEUM_SMART - 1; + case CONTEST_CATEGORY_TOUGH: + default: + return CONTEST_WINNER_MUSEUM_TOUGH - 1; + } + } +} + +void Contest_ResetWinners(void) +{ + s32 i; + + for (i = 0; i < 8; i++) + gSaveBlock1.contestWinners[i] = gDefaultContestWinners[i]; +} + diff --git a/src/contest_ai.c b/src/contest_ai.c index 06d4c11ca..9e62fcd70 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -380,7 +380,7 @@ static u8 sub_8128A7C(u8 var) int i; for(i = 0; i < 4; i++) - if(shared192D0.turnOrder[i] == var) + if(eContestAppealResults.turnOrder[i] == var) break; return i; @@ -402,7 +402,7 @@ static void ContestAICmd_unk_00(void) static void ContestAICmd_get_turn(void) { - eContestAI->scriptResult = sContest.turnNumber; + eContestAI->scriptResult = sContest.appealNumber; gAIScriptPtr += 1; } @@ -494,7 +494,7 @@ static void ContestAICmd_unk_0A(void) static void ContestAICmd_get_user_order(void) { - eContestAI->scriptResult = shared192D0.turnOrder[eContestAI->unk41]; + eContestAI->scriptResult = eContestAppealResults.turnOrder[eContestAI->unk41]; gAIScriptPtr += 1; } @@ -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; } @@ -632,7 +632,7 @@ static void ContestAICmd_unk_19(void) static void ContestAICmd_unk_1A(void) { - eContestAI->scriptResult = gContestMonConditions[eContestAI->unk41]; + eContestAI->scriptResult = gContestMonRound1Points[eContestAI->unk41]; gAIScriptPtr += 1; } @@ -1196,7 +1196,7 @@ static void ContestAICmd_get_used_combo_starter(void) u16 result = 0; u8 var = sub_8128A7C(gAIScriptPtr[1]); - if(sub_80B214C(var)) + if(IsContestantAllowedToCombo(var)) result = gContestMoves[sContestantStatus[var].prevMove].comboStarterId ? 1 : 0; eContestAI->scriptResult = result; @@ -1277,7 +1277,7 @@ static void ContestAICmd_get_val_812A188(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = sContestantStatus[var].unk15_3; + eContestAI->scriptResult = sContestantStatus[var].completedComboFlag; gAIScriptPtr += 2; } @@ -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; } @@ -1353,7 +1353,8 @@ static void ContestAICmd_unk_5E(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI->unk41]; + eContestAI->scriptResult = + gContestMonRound1Points[var] - gContestMonRound1Points[eContestAI->unk41]; gAIScriptPtr += 2; } @@ -1401,7 +1402,7 @@ static void ContestAICmd_unk_63(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); u8 var2 = gAIScriptPtr[2]; - u16 move = sContest.unk19220[var2][var]; + u16 move = sContest.moveHistory[var2][var]; eContestAI->scriptResult = gContestMoves[move].effect; gAIScriptPtr += 3; @@ -1451,7 +1452,7 @@ static void ContestAICmd_unk_68(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); u8 var2 = gAIScriptPtr[2]; - s8 result = sContest.unk19248[var2][var]; + s8 result = sContest.excitementHistory[var2][var]; eContestAI->scriptResult = result; gAIScriptPtr += 3; @@ -1501,7 +1502,7 @@ static void ContestAICmd_unk_6D(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); u8 var2 = gAIScriptPtr[2]; - u16 move = sContest.unk19220[var2][var]; + u16 move = sContest.moveHistory[var2][var]; eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].effectType; gAIScriptPtr += 3; diff --git a/src/contest_effect.c b/src/contest_effect.c index 2cd1e5828..417f5512c 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -81,93 +81,93 @@ static void ContestEffect_HighlyAppealing(void) // After this move, the user is more easily startled. static void ContestEffect_UserMoreEasilyStartled(void) { - sContestantStatus[shared192D0.contestant].moreEasilyStartled = TRUE; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MORE_CONSCIOUS); + sContestantStatus[eContestAppealResults.contestant].moreEasilyStartled = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MORE_CONSCIOUS); } // Makes a great appeal, but allows no more to the end. static void ContestEffect_GreatAppealButNoMoreMoves(void) { - sContestantStatus[shared192D0.contestant].exploded = TRUE; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NO_APPEAL); + sContestantStatus[eContestAppealResults.contestant].exploded = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_APPEAL); } // Can be used repeatedly without boring the JUDGE. static void ContestEffect_RepetitionNotBoring(void) { - sContestantStatus[shared192D0.contestant].usedRepeatableMove = TRUE; - sContestantStatus[shared192D0.contestant].disappointedRepeat = FALSE; - sContestantStatus[shared192D0.contestant].moveRepeatCount = 0; + sContestantStatus[eContestAppealResults.contestant].usedRepeatableMove = TRUE; + sContestantStatus[eContestAppealResults.contestant].repeatedMove = FALSE; + sContestantStatus[eContestAppealResults.contestant].moveRepeatCount = 0; } // Can avoid being startled by others once. static void ContestEffect_AvoidStartleOnce(void) { - sContestantStatus[shared192D0.contestant].jamSafetyCount = 1; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SETTLE_DOWN); + sContestantStatus[eContestAppealResults.contestant].jamSafetyCount = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SETTLE_DOWN); } // Can avoid being startled by others. static void ContestEffect_AvoidStartle(void) { - sContestantStatus[shared192D0.contestant].immune = TRUE; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS); + sContestantStatus[eContestAppealResults.contestant].immune = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS); } // Can avoid being startled by others a little. static void ContestEffect_AvoidStartleSlightly(void) { - sContestantStatus[shared192D0.contestant].jamReduction = 20; - SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_LESS_AWARE); + sContestantStatus[eContestAppealResults.contestant].jamReduction = 20; + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_LESS_AWARE); } // After this move, the user is less likely to be startled. static void ContestEffect_UserLessEasilyStartled(void) { - sContestantStatus[shared192D0.contestant].resistant = TRUE; - SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_STOPPED_CARING); + sContestantStatus[eContestAppealResults.contestant].resistant = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING); } // Slightly startles the POKéMON in front. static void ContestEffect_StartleFrontMon(void) { u8 idx = 0; - u8 a = shared192D0.contestant; + u8 a = eContestAppealResults.contestant; - if (shared192D0.turnOrder[a] != 0) { + if (eContestAppealResults.turnOrder[a] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[a] - 1 == shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[a] - 1 == eContestAppealResults.turnOrder[i]) break; } - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Slightly startles those that have made appeals. static void ContestEffect_StartlePrevMons(void) { u8 idx = 0; - u8 a = shared192D0.contestant; + u8 a = eContestAppealResults.contestant; - if (shared192D0.turnOrder[a] != 0) { + if (eContestAppealResults.turnOrder[a] != 0) { int i, j; for (i = 0, j = 0; i < 4; i++) - if (shared192D0.turnOrder[a] > shared192D0.turnOrder[i]) - shared192D0.jamQueue[j++] = i; - shared192D0.jamQueue[j] = 0xFF; + if (eContestAppealResults.turnOrder[a] > eContestAppealResults.turnOrder[i]) + eContestAppealResults.jamQueue[j++] = i; + eContestAppealResults.jamQueue[j] = 0xFF; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Startles the POKéMON that appealed before the user. @@ -182,7 +182,7 @@ static void ContestEffect_StartlePrevMon2(void) jam = 40; else jam = 60; - shared192D0.jam = jam; + eContestAppealResults.jam = jam; ContestEffect_StartleFrontMon(); } @@ -190,18 +190,18 @@ static void ContestEffect_StartlePrevMon2(void) static void ContestEffect_StartlePrevMons2(void) { u8 numStartled = 0; - u8 contestant = shared192D0.contestant; + u8 contestant = eContestAppealResults.contestant; - if (shared192D0.turnOrder[contestant] != 0) + if (eContestAppealResults.turnOrder[contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) { - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; { u8 rval = Random() % 10; int jam; @@ -218,31 +218,31 @@ static void ContestEffect_StartlePrevMons2(void) jam = 40; else jam = 60; - shared192D0.jam = jam; + eContestAppealResults.jam = jam; } if (WasAtLeastOneOpponentJammed()) numStartled++; } } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); if (numStartled == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Shifts the JUDGE's attention from others. static void ContestEffect_ShiftJudgeAttention(void) { bool32 hitAny = FALSE; - u8 contestant = shared192D0.contestant; + u8 contestant = eContestAppealResults.contestant; - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i] && sContestantStatus[i].hasJudgesAttention && CanUnnerveContestant(i)) { @@ -253,10 +253,10 @@ static void ContestEffect_ShiftJudgeAttention(void) } } } - SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_DAZZLE_ATTEMPT); + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_DAZZLE_ATTEMPT); if (!hitAny) { - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } } @@ -264,81 +264,81 @@ static void ContestEffect_ShiftJudgeAttention(void) static void ContestEffect_StartleMonWithJudgesAttention(void) { u8 numStartled = 0; - u8 contestant = shared192D0.contestant; + u8 contestant = eContestAppealResults.contestant; - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) { if (sContestantStatus[i].hasJudgesAttention) - shared192D0.jam = 50; + eContestAppealResults.jam = 50; else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numStartled++; } } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); if (numStartled == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Jams the others, and misses one turn of appeals. static void ContestEffect_JamsOthersButMissOneTurn(void) { - sContestantStatus[shared192D0.contestant].turnSkipped = TRUE; + sContestantStatus[eContestAppealResults.contestant].turnSkipped = TRUE; ContestEffect_StartlePrevMons(); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Startles POKéMON that made a same-type appeal. static void ContestEffect_StartleMonsSameTypeAppeal(void) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; JamByMoveCategory(gContestMoves[move].contestCategory); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made COOL appeals. static void ContestEffect_StartleMonsCoolAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_COOL); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made BEAUTY appeals. static void ContestEffect_StartleMonsBeautyAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_BEAUTY); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made CUTE appeals. static void ContestEffect_StartleMonsCuteAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_CUTE); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made SMART appeals. static void ContestEffect_StartleMonsSmartAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_SMART); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made TOUGH appeals. static void ContestEffect_StartleMonsToughAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_TOUGH); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Makes one POKéMON after the user nervous. @@ -346,13 +346,13 @@ static void ContestEffect_MakeFollowingMonNervous(void) { bool32 hitAny = FALSE; - if (shared192D0.turnOrder[shared192D0.contestant] != 3) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 3) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] + 1 == shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] + 1 == eContestAppealResults.turnOrder[i]) { if (CanUnnerveContestant(i)) { @@ -368,9 +368,9 @@ static void ContestEffect_MakeFollowingMonNervous(void) } } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_UNNERVE_ATTEMPT); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_ATTEMPT); if (!hitAny) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Makes all POKéMON after the user nervous. @@ -387,7 +387,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds)); for (i = 0, numAfter = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] < shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] && !sContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i)) contestantIds[numAfter++] = i; } @@ -414,7 +414,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) } for (i = 0; i < 4; i++) { - if (sContestantStatus[i].hasJudgesAttention && sub_80B214C(i)) + if (sContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i)) oddsMod[i] = gComboStarterLookupTable[gContestMoves[sContestantStatus[i].prevMove].comboStarterId] * 10; else oddsMod[i] = 0; @@ -441,12 +441,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void) SetContestantEffectStringID(contestantIds[i], CONTEST_STRING_UNAFFECTED); numUnnerved++; } - shared192D0.unnervedPokes[contestantIds[i]] = 1; + eContestAppealResults.unnervedPokes[contestantIds[i]] = 1; } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_UNNERVE_WAITING); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_WAITING); if (numUnnerved == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Worsens the condition of those that made appeals. @@ -457,7 +457,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i] && sContestantStatus[i].condition > 0 && CanUnnerveContestant(i)) { @@ -468,9 +468,9 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_TAUNT_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_TAUNT_WELL); if (numHit == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_IGNORED); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } // Badly startles POKéMON in good condition. @@ -481,42 +481,42 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (sContestantStatus[i].condition > 0) - shared192D0.jam = 40; + eContestAppealResults.jam = 40; else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numHit++; } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_JAM_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_JAM_WELL); if (numHit == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_IGNORED); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } // The appeal works great if performed first. static void ContestEffect_BetterIfFirst(void) { - if (gUnknown_02038696[shared192D0.contestant] == 0) + if (gContestantTurnOrder[eContestAppealResults.contestant] == 0) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; - sContestantStatus[shared192D0.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_HUSTLE_STANDOUT); + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; + sContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT); } } // The appeal works great if performed last. static void ContestEffect_BetterIfLast(void) { - if (gUnknown_02038696[shared192D0.contestant] == 3) + if (gContestantTurnOrder[eContestAppealResults.contestant] == 3) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; - sContestantStatus[shared192D0.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; + sContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); } } @@ -528,19 +528,19 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void) for (i = 0, appealSum = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) - appealSum += sContestantStatus[i].appeal2; + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) + appealSum += sContestantStatus[i].appeal; } if (appealSum < 0) appealSum = 0; - if (shared192D0.turnOrder[shared192D0.contestant] == 0 || appealSum == 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_WELL); + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appealSum == 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL); else { - sContestantStatus[shared192D0.contestant].appeal2 += appealSum / 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_BEFORE); + sContestantStatus[eContestAppealResults.contestant].appeal += appealSum / 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE); } - sContestantStatus[shared192D0.contestant].appeal2 = RoundTowardsZero(sContestantStatus[shared192D0.contestant].appeal2); + sContestantStatus[eContestAppealResults.contestant].appeal = RoundTowardsZero(sContestantStatus[eContestAppealResults.contestant].appeal); } // Makes the appeal as good as the one before it. @@ -548,40 +548,40 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void) { s16 appeal = 0; - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i]) - appeal = sContestantStatus[i].appeal2; + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) + appeal = sContestantStatus[i].appeal; } } - if (shared192D0.turnOrder[shared192D0.contestant] == 0 || appeal <= 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_WELL2); + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL2); else { - sContestantStatus[shared192D0.contestant].appeal2 += appeal; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_PRECEDING); + sContestantStatus[eContestAppealResults.contestant].appeal += appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING); } } // The appeal works better the later it is performed. static void ContestEffect_BetterWhenLater(void) { - u8 whichTurn = shared192D0.turnOrder[shared192D0.contestant]; + u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; if (whichTurn == 0) - sContestantStatus[shared192D0.contestant].appeal2 = 10; + sContestantStatus[eContestAppealResults.contestant].appeal = 10; else - sContestantStatus[shared192D0.contestant].appeal2 = 20 * whichTurn; + sContestantStatus[eContestAppealResults.contestant].appeal = 20 * whichTurn; if (whichTurn == 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); else if (whichTurn == 1) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL); else if (whichTurn == 2) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL); else - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY); } // The appeal's quality varies depending on its timing. @@ -593,31 +593,31 @@ static void ContestEffect_QualityDependsOnTiming(void) if (rval < 3) { appeal = 10; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); } else if (rval < 6) { appeal = 20; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); } else if (rval < 8) { appeal = 40; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); } else if (rval < 9) { appeal = 60; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); } else { appeal = 80; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - sContestantStatus[shared192D0.contestant].appeal2 = appeal; + sContestantStatus[eContestAppealResults.contestant].appeal = appeal; } static void ContestEffect_BetterIfSameType(void) { - s8 turnOrder = shared192D0.turnOrder[shared192D0.contestant]; + s8 turnOrder = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; s8 i = turnOrder - 1, j; u16 move; @@ -628,7 +628,7 @@ static void ContestEffect_BetterIfSameType(void) { for (j = 0; j < 4; j++) { - if (shared192D0.turnOrder[j] == i) + if (eContestAppealResults.turnOrder[j] == i) break; } if (sContestantStatus[j].noMoreTurns || sContestantStatus[j].nervous || sContestantStatus[j].numTurnsSkipped) @@ -642,29 +642,29 @@ static void ContestEffect_BetterIfSameType(void) } } - move = sContestantStatus[shared192D0.contestant].currMove; + move = sContestantStatus[eContestAppealResults.contestant].currMove; if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[j].currMove].contestCategory) { - sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD); + sContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD); } } // Works well if different in type than the one before. static void ContestEffect_BetterIfDiffType(void) { - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] && gContestMoves[move].contestCategory != gContestMoves[sContestantStatus[i].currMove].contestCategory) { - sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); + sContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); break; } } @@ -674,23 +674,23 @@ static void ContestEffect_BetterIfDiffType(void) // Affected by how well the appeal in front goes. static void ContestEffect_AffectedByPrevAppeal(void) { - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) { - if (sContestantStatus[shared192D0.contestant].appeal2 > sContestantStatus[i].appeal2) + if (sContestantStatus[eContestAppealResults.contestant].appeal > sContestantStatus[i].appeal) { - sContestantStatus[shared192D0.contestant].appeal2 *= 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); + sContestantStatus[eContestAppealResults.contestant].appeal *= 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); } - else if (sContestantStatus[shared192D0.contestant].appeal2 < sContestantStatus[i].appeal2) + else if (sContestantStatus[eContestAppealResults.contestant].appeal < sContestantStatus[i].appeal) { - sContestantStatus[shared192D0.contestant].appeal2 = 0; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NOT_AS_WELL); + sContestantStatus[eContestAppealResults.contestant].appeal = 0; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL); } } } @@ -700,24 +700,24 @@ static void ContestEffect_AffectedByPrevAppeal(void) // Ups the user's condition. Helps prevent nervousness. static void ContestEffect_ImproveConditionPreventNervousness(void) { - if (sContestantStatus[shared192D0.contestant].condition < 30) + if (sContestantStatus[eContestAppealResults.contestant].condition < 30) { - sContestantStatus[shared192D0.contestant].condition += 10; - sContestantStatus[shared192D0.contestant].conditionMod = 1; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_CONDITION_ROSE); + sContestantStatus[eContestAppealResults.contestant].condition += 10; + sContestantStatus[eContestAppealResults.contestant].conditionMod = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE); } else - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE); } // The appeal works well if the user's condition is good. static void ContestEffect_BetterWithGoodCondition(void) { - sContestantStatus[shared192D0.contestant].appealTripleCondition = TRUE; - if (sContestantStatus[shared192D0.contestant].condition != 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_HOT_STATUS); + sContestantStatus[eContestAppealResults.contestant].appealTripleCondition = TRUE; + if (sContestantStatus[eContestAppealResults.contestant].condition != 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HOT_STATUS); else - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL); } // The next appeal can be made earlier next turn. @@ -727,18 +727,18 @@ static void ContestEffect_NextAppealEarlier(void) s8 j; u8 turnOrder[4]; - if (sContest.turnNumber != 4) + if (sContest.appealNumber != 4) { for (i = 0; i < 4; i++) turnOrder[i] = sContestantStatus[i].nextTurnOrder; - turnOrder[shared192D0.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = 0xFF; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { - if (j != shared192D0.contestant && + if (j != eContestAppealResults.contestant && i == turnOrder[j] && turnOrder[j] == sContestantStatus[j].nextTurnOrder) { @@ -750,15 +750,15 @@ static void ContestEffect_NextAppealEarlier(void) break; } - turnOrder[shared192D0.contestant] = 0; - sContestantStatus[shared192D0.contestant].turnOrderMod = 1; + turnOrder[eContestAppealResults.contestant] = 0; + sContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1; for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = turnOrder[i]; } - sContestantStatus[shared192D0.contestant].turnOrderModAction = 1; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MOVE_UP_LINE); + sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_UP_LINE); } } @@ -769,18 +769,18 @@ static void ContestEffect_NextAppealLater(void) s8 j; u8 turnOrder[4]; - if (sContest.turnNumber != 4) + if (sContest.appealNumber != 4) { for (i = 0; i < 4; i++) turnOrder[i] = sContestantStatus[i].nextTurnOrder; - turnOrder[shared192D0.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = 0xFF; for (i = 3; i > -1; i--) { for (j = 0; j < 4; j++) { - if (j != shared192D0.contestant && + if (j != eContestAppealResults.contestant && i == turnOrder[j] && turnOrder[j] == sContestantStatus[j].nextTurnOrder) { @@ -792,15 +792,15 @@ static void ContestEffect_NextAppealLater(void) break; } - turnOrder[shared192D0.contestant] = 3; - sContestantStatus[shared192D0.contestant].turnOrderMod = 1; + turnOrder[eContestAppealResults.contestant] = 3; + sContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1; for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = turnOrder[i]; } - sContestantStatus[shared192D0.contestant].turnOrderModAction = 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MOVE_BACK_LINE); + sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_BACK_LINE); } } @@ -818,7 +818,7 @@ static void ContestEffect_ScrambleNextTurnOrder(void) u8 turnOrder[4]; u8 unselectedContestants[4]; - if (sContest.turnNumber != 4) + if (sContest.appealNumber != 4) { for (i = 0; i < 4; i++) { @@ -851,17 +851,17 @@ static void ContestEffect_ScrambleNextTurnOrder(void) sContestantStatus[i].nextTurnOrder = turnOrder[i]; sContestantStatus[i].turnOrderMod = 2; } - sContestantStatus[shared192D0.contestant].turnOrderModAction = 3; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SCRAMBLE_ORDER); + sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 3; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SCRAMBLE_ORDER); } } // An appeal that excites the audience in any CONTEST. static void ContestEffect_ExciteAudienceInAnyContest(void) { - if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory != gSpecialVar_ContestCategory) + if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory != gSpecialVar_ContestCategory) { - sContestantStatus[shared192D0.contestant].overrideCategoryExcitementMod = TRUE; + sContestantStatus[eContestAppealResults.contestant].overrideCategoryExcitementMod = TRUE; } } @@ -873,24 +873,24 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { - if (sContestantStatus[i].appeal2 > 0) + if (sContestantStatus[i].appeal > 0) { - shared192D0.jam = sContestantStatus[i].appeal2 / 2; - shared192D0.jam = RoundUp(shared192D0.jam); + eContestAppealResults.jam = sContestantStatus[i].appeal / 2; + eContestAppealResults.jam = RoundUp(eContestAppealResults.jam); } else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numJammed++; } } if (numJammed == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // The appeal works best the more the crowd is excited. @@ -901,39 +901,39 @@ static void ContestEffect_BetterWhenAudienceExcited(void) if (sContest.applauseLevel == 0) { appeal = 10; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); } else if (sContest.applauseLevel == 1) { appeal = 20; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); } else if (sContest.applauseLevel == 2) { appeal = 30; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); } else if (sContest.applauseLevel == 3) { appeal = 50; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); } else { appeal = 60; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - sContestantStatus[shared192D0.contestant].appeal2 = appeal; + sContestantStatus[eContestAppealResults.contestant].appeal = appeal; } // Temporarily stops the crowd from growing excited. static void ContestEffect_DontExciteAudience(void) { - if (!shared19328.excitementFrozen) + if (!eContestExcitement.excitementFrozen) { - shared19328.excitementFrozen = TRUE; - shared19328.excitementFreezer = shared192D0.contestant; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTRACTED_ATTENTION); + eContestExcitement.excitementFrozen = TRUE; + eContestExcitement.excitementFreezer = eContestAppealResults.contestant; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTRACTED_ATTENTION); } } @@ -944,26 +944,26 @@ static void JamByMoveCategory(u8 category) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (category == gContestMoves[sContestantStatus[i].currMove].contestCategory) - shared192D0.jam = 40; + eContestAppealResults.jam = 40; else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numJammed++; } } if (numJammed == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } static bool8 CanUnnerveContestant(u8 i) { - shared192D0.unnervedPokes[i] = 1; + eContestAppealResults.unnervedPokes[i] = 1; if (sContestantStatus[i].immune) { SetContestantEffectStringID(i, CONTEST_STRING_AVOID_SEEING); @@ -988,32 +988,32 @@ static bool8 WasAtLeastOneOpponentJammed(void) s16 jamBuffer[4] = {0}; int i; - for (i = 0; shared192D0.jamQueue[i] != 0xFF; i++) + for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++) { - u8 contestant = shared192D0.jamQueue[i]; + u8 contestant = eContestAppealResults.jamQueue[i]; if (CanUnnerveContestant(contestant)) { - shared192D0.jam2 = shared192D0.jam; + eContestAppealResults.jam2 = eContestAppealResults.jam; if (sContestantStatus[contestant].moreEasilyStartled) - shared192D0.jam2 *= 2; + eContestAppealResults.jam2 *= 2; if (sContestantStatus[contestant].resistant) { - shared192D0.jam2 = 10; + eContestAppealResults.jam2 = 10; SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED); } else { - shared192D0.jam2 -= sContestantStatus[contestant].jamReduction; - if (shared192D0.jam2 <= 0) + eContestAppealResults.jam2 -= sContestantStatus[contestant].jamReduction; + if (eContestAppealResults.jam2 <= 0) { - shared192D0.jam2 = 0; + eContestAppealResults.jam2 = 0; SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED); } else { - JamContestant(contestant, shared192D0.jam2); - SetStartledString(contestant, shared192D0.jam2); - jamBuffer[contestant] = shared192D0.jam2; + JamContestant(contestant, eContestAppealResults.jam2); + SetStartledString(contestant, eContestAppealResults.jam2); + jamBuffer[contestant] = eContestAppealResults.jam2; } } } @@ -1029,7 +1029,7 @@ static bool8 WasAtLeastOneOpponentJammed(void) static void JamContestant(u8 i, u8 jam) { - sContestantStatus[i].appeal2 -= jam; + sContestantStatus[i].appeal -= jam; sContestantStatus[i].jam += jam; } diff --git a/src/contest_link_80C857C.c b/src/contest_link.c index a694380df..2ba7a3e39 100644 --- a/src/contest_link_80C857C.c +++ b/src/contest_link.c @@ -42,7 +42,7 @@ static bool8 HaveAllPlayersReceivedBlock(void) return TRUE; } -void sub_80C8604(u8 taskId) +void Task_LinkContest_Init(u8 taskId) { #if ENGLISH u8 i; @@ -295,7 +295,7 @@ void sub_80C8734(u8 taskId) } } -void sub_80C88AC(u8 taskId) +void Task_LinkContest_CommunicateRng(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -328,7 +328,7 @@ void sub_80C88AC(u8 taskId) } } -void sub_80C8938(u8 taskId) +void Task_LinkContest_CommunicateCategory(u8 taskId) { int i; @@ -395,7 +395,7 @@ void sub_80C8938(u8 taskId) } } -void sub_80C89DC(u8 taskId) +void Task_LinkContest_CommunicateMonIdxs(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -449,21 +449,21 @@ void sub_80C8A38(u8 taskId) } } -void sub_80C8AD0(u8 taskId) +void Task_LinkContest_CommunicateFinalStandings(u8 taskId) { switch (gTasks[taskId].data[0]) { case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038678, sizeof gUnknown_02038678); + SendBlockToAllOpponents(gContestMonTotalPoints, sizeof gContestMonTotalPoints); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038678, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038678); + memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonTotalPoints); gTasks[taskId].data[0]++; } break; @@ -480,28 +480,29 @@ void sub_80C8AD0(u8 taskId) case 3: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038680, sizeof gUnknown_02038680); + SendBlockToAllOpponents( + gContestMonAppealPointTotals, sizeof gContestMonAppealPointTotals); gTasks[taskId].data[0]++; } break; case 4: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038680, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038680); + memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonAppealPointTotals); gTasks[taskId].data[0]++; } break; case 6: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038688, sizeof gUnknown_02038688); + SendBlockToAllOpponents(gContestMonRound2Points, sizeof gContestMonRound2Points); gTasks[taskId].data[0]++; } break; case 7: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038688, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038688); + memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonRound2Points); gTasks[taskId].data[0]++; } break; @@ -515,7 +516,7 @@ void sub_80C8AD0(u8 taskId) case 10: if (HaveAllPlayersReceivedBlock()) { - memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestFinalStandings); + memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestFinalStandings); gTasks[taskId].data[0]++; } break; @@ -526,7 +527,7 @@ void sub_80C8AD0(u8 taskId) } } -void sub_80C8C80(u8 taskId) +void Task_LinkContest_CommunicateAppealsState(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -540,7 +541,7 @@ void sub_80C8C80(u8 taskId) case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(sContestantStatus, gBlockRecvBuffer[gUnknown_0203869B], 4 * sizeof(struct ContestantStatus)); + memcpy(sContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], 4 * sizeof(struct ContestantStatus)); gTasks[taskId].data[0]++; } break; @@ -557,42 +558,42 @@ void sub_80C8C80(u8 taskId) case 3: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(&shared192D0, sizeof shared192D0); + SendBlockToAllOpponents(&eContestAppealResults, sizeof eContestAppealResults); gTasks[taskId].data[0]++; } break; case 4: if (HaveAllPlayersReceivedBlock()) { - memcpy(&shared192D0, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared192D0); + memcpy(&eContestAppealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof eContestAppealResults); gTasks[taskId].data[0]++; } break; case 6: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(&shared19328, sizeof shared19328); + SendBlockToAllOpponents(&eContestExcitement, sizeof eContestExcitement); gTasks[taskId].data[0]++; } break; case 7: if (HaveAllPlayersReceivedBlock()) { - memcpy(&shared19328, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared19328); + memcpy(&eContestExcitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof eContestExcitement); gTasks[taskId].data[0]++; } break; case 9: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696); + SendBlockToAllOpponents(gContestantTurnOrder, sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; case 10: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); + memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; @@ -603,7 +604,7 @@ void sub_80C8C80(u8 taskId) } } -void sub_80C8E1C(u8 taskId) +void Task_LinkContest_CommunicateLeaderIds(u8 taskId) { int i; @@ -670,7 +671,7 @@ void sub_80C8E1C(u8 taskId) } } -void sub_80C8EBC(u8 taskId) +void Task_LinkContest_CommunicateRound1Points(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -681,21 +682,21 @@ void sub_80C8EBC(u8 taskId) case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gContestMonConditions, sizeof gContestMonConditions); + SendBlockToAllOpponents(gContestMonRound1Points, sizeof gContestMonRound1Points); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestMonConditions); + memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonRound1Points); gTasks[taskId].data[0]++; } break; } } -void sub_80C8F34(u8 taskId) +void Task_LinkContest_CommunicateTurnOrder(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -706,14 +707,14 @@ void sub_80C8F34(u8 taskId) case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696); + SendBlockToAllOpponents(gContestantTurnOrder, sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); + memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; diff --git a/src/contest_link_80C2020.c b/src/contest_link_util.c index e14880ee0..6f39e5fdb 100644 --- a/src/contest_link_80C2020.c +++ b/src/contest_link_util.c @@ -1,35 +1,35 @@ #include "global.h" -#include "data2.h" -#include "util.h" -#include "random.h" -#include "overworld.h" +#include "contest_link_util.h" +#include "battle.h" +#include "blend_palette.h" #include "constants/songs.h" -#include "ewram.h" -#include "main.h" -#include "scanline_effect.h" +#include "contest.h" +#include "contest_link.h" +#include "data2.h" #include "decompress.h" -#include "palette.h" -#include "blend_palette.h" +#include "event_data.h" +#include "ewram.h" +#include "field_effect.h" +#include "field_specials.h" #include "graphics.h" -#include "strings2.h" -#include "text.h" -#include "string_util.h" +#include "link.h" +#include "main.h" #include "menu.h" -#include "sound.h" +#include "overworld.h" +#include "palette.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 "random.h" +#include "scanline_effect.h" #include "script.h" +#include "sound.h" +#include "string_util.h" +#include "strings2.h" +#include "text.h" #include "trig.h" +#include "tv.h" +#include "util.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) @@ -117,15 +117,15 @@ 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); +void Task_StartCommunication(u8 taskId); +void Task_StartCommunicateRng(u8 taskId); +void Task_StartCommunicateLeaderIds(u8 taskId); +void Task_StartCommunicateCategory(u8 taskId); +void Task_LinkContest_SetUpContest(u8 taskId); +void Task_LinkContest_CalculateTurnOrder(u8 taskId); +void Task_LinkContest_FinalizeConnection(u8 taskId); +void Task_LinkContest_Disconnect(u8 taskId); +void Task_LinkContest_WaitDisconnect(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"); @@ -388,7 +388,7 @@ static void sub_80C255C(u8 taskId) static void sub_80C25A4(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, sub_80C25C0); } static void sub_80C25C0(u8 taskId) @@ -610,12 +610,12 @@ static void sub_80C2A8C(u8 taskId) 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); + HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)gSharedMem, gMonSpriteGfx_Sprite_ptr[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); + gCreatingSpriteTemplate.paletteTag = monPal->tag; + spriteId = CreateSprite(&gCreatingSpriteTemplate, 0x110, 0x50, 10); gSprites[spriteId].data[1] = species; gSprites[spriteId].oam.priority = 0; gSprites[spriteId].callback = sub_80C3C44; @@ -702,7 +702,7 @@ static void sub_80C2D80(u8 taskId) if (gIsLinkContest & 1) { sub_80C3698(gOtherText_LinkStandby); - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80C2DD8; } else @@ -727,8 +727,8 @@ static void sub_80C2E14(u8 taskId) sub_810FB10(2); Contest_SaveWinner(gSpecialVar_ContestRank); Contest_SaveWinner(0xFE); - ewram15DDF = 1; - ewram15DDE = sub_80B2C4C(0xfe, 0); + eCurContestWinnerIsForArtist = TRUE; + eCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(0xfe, 0); BeginHardwarePaletteFade(0xff, 0, 0, 16, 0); gTasks[taskId].func = sub_80C2EA0; } @@ -1788,7 +1788,7 @@ u8 sub_80C3990(u8 monIndex, u8 arg1) u32 var0; u32 var1; - var0 = gContestMonConditions[monIndex] << 16; + var0 = gContestMonRound1Points[monIndex] << 16; var1 = var0 / 0x3F; if (var1 & 0xFFFF) var1 += 0x10000; @@ -1810,7 +1810,7 @@ s8 sub_80C39E4(u8 arg0, u8 arg1) s16 val; s8 ret; - val = gUnknown_02038688[arg0]; + val = gContestMonRound2Points[arg0]; if (val < 0) r4 = -val << 16; else @@ -1826,7 +1826,7 @@ s8 sub_80C39E4(u8 arg0, u8 arg1) if (arg1 != 0 && r2 > 10) r2 = 10; - if (gUnknown_02038688[arg0] < 0) + if (gContestMonRound2Points[arg0] < 0) ret = -r2; else ret = r2; @@ -2093,41 +2093,41 @@ void sub_80C3EA4(u8 taskId) void sub_80C3F00(void) { s32 i; - s16 r2 = gUnknown_02038678[0]; + s16 r2 = gContestMonTotalPoints[0]; s32 r4; u32 r5; s8 r0; for (i = 1; i < 4; i++) { - if (r2 < gUnknown_02038678[i]) - r2 = gUnknown_02038678[i]; + if (r2 < gContestMonTotalPoints[i]) + r2 = gContestMonTotalPoints[i]; } if (r2 < 0) { - r2 = gUnknown_02038678[0]; + r2 = gContestMonTotalPoints[0]; for (i = 1; i < 4; i++) { - if (r2 > gUnknown_02038678[i]) - r2 = gUnknown_02038678[i]; + if (r2 > gContestMonTotalPoints[i]) + r2 = gContestMonTotalPoints[i]; } } for (i = 0; i < 4; i++) { - r4 = 1000 * gContestMonConditions[i] / ABS(r2); + r4 = 1000 * gContestMonRound1Points[i] / ABS(r2); if ((r4 % 10) >= 5) r4 += 10; eContestLink80C2020Struct2018018[i].unk_00 = r4 / 10; - r4 = 1000 * ABS(gUnknown_02038688[i]) / ABS(r2); + r4 = 1000 * ABS(gContestMonRound2Points[i]) / ABS(r2); if ((r4 % 10) >= 5) r4 += 10; eContestLink80C2020Struct2018018[i].unk_04 = r4 / 10; - if (gUnknown_02038688[i] < 0) + if (gContestMonRound2Points[i] < 0) eContestLink80C2020Struct2018018[i].unk_10 = 1; r5 = 22528 * eContestLink80C2020Struct2018018[i].unk_00 / 100; @@ -2568,7 +2568,7 @@ void ScrSpecial_CheckSelectedMonAndInitContest(void) if (result != 0) { Contest_InitAllPokemon(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); - InitContestMonConditions(gSpecialVar_ContestCategory); + CalculateRound1Points(gSpecialVar_ContestCategory); } gSpecialVar_Result = result; } @@ -2700,7 +2700,7 @@ void ScrSpecial_CountContestMonsWithBetterCondition(void) for (i = 0, count = 0; i < 4; i++) { - if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i]) + if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i]) count++; } @@ -2709,7 +2709,7 @@ void ScrSpecial_CountContestMonsWithBetterCondition(void) void ScrSpecial_GetMonCondition(void) { - gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006]; + gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006]; } void ScrSpecial_GetContestWinnerIdx(void) @@ -2770,7 +2770,7 @@ void sub_80C48C8(void) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } -void sub_80C48F4(void) +void Contest_GetSpeciesNameI_StringVar1(void) { gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species; } @@ -2796,37 +2796,40 @@ void ScrSpecial_GetContestPlayerMonIdx(void) gSpecialVar_0x8004 = gContestPlayerMonIndex; } -void sub_80C4980(u8 taskId) +void ContestLinkTransfer(u8 category) { - u8 taskId2; + u8 taskId; ScriptContext2_Enable(); - taskId2 = CreateTask(sub_80C8604, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8604, sub_80C49C4); - gTasks[taskId2].data[9] = taskId; + taskId = CreateTask(Task_LinkContest_Init, 0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_Init, Task_StartCommunication); + gTasks[taskId].data[9] = category; } -void sub_80C49C4(u8 taskId) +void Task_StartCommunication(u8 taskId) { Contest_CreatePlayerMon(gContestMonPartyIndex); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80C49F0); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, Task_StartCommunicateRng); } -void sub_80C49F0(u8 taskId) +void Task_StartCommunicateRng(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80C4A0C); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateRng, Task_StartCommunicateLeaderIds); } -void sub_80C4A0C(u8 taskId) +void Task_StartCommunicateLeaderIds(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80C4A28); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateLeaderIds, Task_StartCommunicateCategory); } -void sub_80C4A28(u8 taskId) +void Task_StartCommunicateCategory(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8938, sub_80C4A44); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateCategory, Task_LinkContest_SetUpContest); } -void sub_80C4A44(u8 taskId) +void Task_LinkContest_SetUpContest(u8 taskId) { u8 i; u8 sp0[4]; @@ -2849,18 +2852,20 @@ void sub_80C4A44(u8 taskId) 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); + gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(sp4); + CalculateRound1Points(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrder); } -void sub_80C4B0C(u8 taskId) +void Task_LinkContest_CalculateTurnOrder(u8 taskId) { - sub_80B0F28(0); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80C4B5C); + SortContestants(0); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection); } -u8 sub_80C4B34(u8 * a0) +u8 LinkContest_GetLeaderIndex(u8 * a0) { s32 i; u8 result = 0; @@ -2874,12 +2879,12 @@ u8 sub_80C4B34(u8 * a0) return result; } -void sub_80C4B5C(u8 taskId) +void Task_LinkContest_FinalizeConnection(u8 taskId) { if (gSpecialVar_0x8004 == 1) { if (IsLinkTaskFinished()) - gTasks[taskId].func = sub_80C4BA4; + gTasks[taskId].func = Task_LinkContest_Disconnect; } else { @@ -2889,13 +2894,13 @@ void sub_80C4B5C(u8 taskId) } } -void sub_80C4BA4(u8 taskId) +void Task_LinkContest_Disconnect(u8 taskId) { - sub_800832C(); - gTasks[taskId].func = sub_80C4BCC; + SetCloseLinkCallback(); + gTasks[taskId].func = Task_LinkContest_WaitDisconnect; } -void sub_80C4BCC(u8 taskId) +void Task_LinkContest_WaitDisconnect(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { diff --git a/src/contest_painting.c b/src/contest_painting.c index ae683d267..1f127f760 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -1,29 +1,29 @@ #include "global.h" #include "contest_painting.h" -#include "contest_painting_effects.h" #include "data2.h" #include "decompress.h" +#include "ewram.h" +#include "image_processing_effects.h" #include "main.h" #include "menu.h" #include "palette.h" #include "random.h" +#include "scanline_effect.h" #include "sprite.h" #include "string_util.h" #include "strings.h" #include "text.h" -#include "scanline_effect.h" -#include "ewram.h" -static u8 gUnknown_03000750; -static u16 gUnknown_03000752; -static u16 gUnknown_03000754; -static u8 gUnknown_03000756; +static u8 sHoldState; +static u16 sMosaicVal; +static u16 sFrameCounter; +static u8 sVarsInitialized; -u16 (*gUnknown_03005E10)[][32]; -struct Unk03005E20 gUnknown_03005E20; -u8 gUnknown_03005E40[0x4C]; -struct ContestEntry *gUnknown_03005E8C; -u16 *gUnknown_03005E90; +u16 (*gContestMonPixels)[][32]; +struct ImageProcessingContext gImageProcessingContext; +u8 sCaptionBuffer[76]; +struct ContestWinner *gContestPaintingWinner; +u16 *gContestPaintingMonPalette; static const u16 gPictureFramePalettes[][16] = { @@ -49,7 +49,8 @@ const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl"); const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl"); const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl"); -const u8 *const gUnknown_083F60AC[] = + +const u8 *const sContestRankNames[] = { OtherText_Cool, OtherText_Beauty2, @@ -57,62 +58,70 @@ const u8 *const gUnknown_083F60AC[] = OtherText_Smart, OtherText_Tough, }; -const struct LabelPair gUnknown_083F60C0[] = + +const struct LabelPair sMuseumCaptions[] = { + // COOL {OtherText_NonstopSuperCool, OtherText_Terminator6}, {OtherText_GoodLookingPoke, OtherText_Terminator7}, {OtherText_MarvelousGreat, OtherText_Terminator8}, + // BEAUTY {OtherText_CenturyLastVenus, OtherText_Terminator9}, {OtherText_Terminator10, OtherText_DazzlingSmile}, {OtherText_PokeCenterIdol, OtherText_Terminator11}, + // CUTE {OtherText_LovelyAndSweet, OtherText_Terminator12}, {OtherText_ThePretty, OtherText_WinningPortrait}, {OtherText_GiveUsWink, OtherText_Terminator13}, + // SMART {OtherText_SmartnessMaestro, OtherText_Terminator15}, {OtherText_ChosenPokeAmong, OtherText_Terminator15}, {OtherText_TheExcellent, OtherText_ItsMomentOfElegance}, + // TOUGH {OtherText_PowerfullyMuscular, OtherText_Terminator16}, {OtherText_StrongErEst, OtherText_Terminator17}, {OtherText_MightyTough, OtherText_Exclamation}, }; -const struct OamData gOamData_83F6138 = + +const struct OamData sContestPaintingMonOamData = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 1, - .bpp = 1, - .shape = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = TRUE, + .bpp = ST_OAM_8BPP, + .shape = SPRITE_SHAPE(64x64), .x = 0, .matrixNum = 0, - .size = 3, + .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 0, .paletteNum = 0, .affineParam = 0, }; -const u16 gUnknown_083F6140[] = {0, 0}; + +const u16 sBgPalette[] = {RGB_BLACK, RGB_BLACK}; static void ShowContestPainting(); static void CB2_HoldContestPainting(void); static void HoldContestPainting(void); -static void ContestPaintingInitWindow(u8 arg0); -static void ContestPaintingPrintCaption(u8 arg0, u8 arg1); -static void ContestPaintingInitBG(void); -static void ContestPaintingInitVars(u8 arg0); +static void InitContestPaintingWindow(bool8 isForArtist); +static void PrintContestPaintingCaption(u8 contestType, bool8 isForArtist); +static void InitContestPaintingBg(void); +static void InitContestPaintingVars(bool8 reset); static void VBlankCB_ContestPainting(void); -static void sub_8106B90(u8 *a, u16 *b, u16 *c); -static void sub_8107090(u8 arg0, u8 arg1); +static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 *destPixels); +static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist); -void sub_8106630(u32 contestWinnerId) +void SetContestWinnerForPainting(u32 contestWinnerId) { // probably fakematching - struct ContestWinner *ptr1 = (struct ContestWinner*)&ewram15DE0; // TODO: resolve messy struct duplicates - u8 *ptr2 = (u8*)&ewram15DDE; - u8 *ptr3 = (u8*)&ewram15DDF; - *ptr1 = gSaveBlock1.contestWinners[contestWinnerId - 1]; - *ptr2 = contestWinnerId - 1; - *ptr3 = 0; + struct ContestWinner *curWinner = &eCurContestWinner; + u8 *saveIdx = (u8*)&eCurContestWinnerSaveIdx; + u8 *isForArtist = (u8*)&eCurContestWinnerIsForArtist; + *curWinner = gSaveBlock1.contestWinners[contestWinnerId - 1]; + *saveIdx = contestWinnerId - 1; + *isForArtist = FALSE; } void CB2_ContestPainting(void) @@ -127,9 +136,9 @@ static void ShowContestPainting(void) case 0: ScanlineEffect_Stop(); SetVBlankCallback(NULL); - gUnknown_03005E8C = &ewram15DE0; - ContestPaintingInitVars(TRUE); - ContestPaintingInitBG(); + gContestPaintingWinner = &eCurContestWinner; + InitContestPaintingVars(TRUE); + InitContestPaintingBg(); gMain.state++; break; case 1: @@ -143,20 +152,20 @@ static void ShowContestPainting(void) case 2: SeedRng(gMain.vblankCounter1); InitKeys(); - ContestPaintingInitWindow(ewram15DDF); + InitContestPaintingWindow(eCurContestWinnerIsForArtist); gMain.state++; break; case 3: - sub_8107090(ewram15DDE, ewram15DDF); + CreateContestPaintingPicture(eCurContestWinnerSaveIdx, eCurContestWinnerIsForArtist); gMain.state++; break; case 4: - ContestPaintingPrintCaption(ewram15DDE, ewram15DDF); - LoadPalette(gUnknown_083F6140, 0, 1 * 2); + PrintContestPaintingCaption(eCurContestWinnerSaveIdx, eCurContestWinnerIsForArtist); + LoadPalette(sBgPalette, 0, 1 * 2); DmaClear32(3, PLTT, 0x400); BeginFastPaletteFade(2); SetVBlankCallback(VBlankCB_ContestPainting); - gUnknown_03000750 = 0; + sHoldState = 0; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; SetMainCallback2(CB2_HoldContestPainting); break; @@ -176,70 +185,68 @@ static void CB2_QuitContestPainting(void) static void HoldContestPainting(void) { - switch (gUnknown_03000750) + switch (sHoldState) { case 0: if (!gPaletteFade.active) - gUnknown_03000750 = 1; - if (gUnknown_03000756 != 0 && gUnknown_03000754 != 0) - gUnknown_03000754--; + sHoldState = 1; + if (sVarsInitialized&& sFrameCounter != 0) + sFrameCounter--; break; case 1: - if ((gMain.newKeys & 1) || (gMain.newKeys & 2)) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { - u8 two = 2; //needed to make the asm match - - gUnknown_03000750 = two; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); + sHoldState++; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } - if (gUnknown_03000756 != 0) - gUnknown_03000754 = 0; + if (sVarsInitialized != 0) + sFrameCounter = 0; break; case 2: if (!gPaletteFade.active) SetMainCallback2(CB2_QuitContestPainting); - if (gUnknown_03000756 != 0 && gUnknown_03000754 <= 0x1D) - gUnknown_03000754++; + if (sVarsInitialized && sFrameCounter < 30) + sFrameCounter++; break; } } -static void ContestPaintingInitWindow(u8 arg0) +static void InitContestPaintingWindow(u8 isForArtist) { - InitMenuWindow(&gWindowTemplate_81E7160); - Text_LoadWindowTemplate(&gWindowTemplate_81E7160); + InitMenuWindow(&gWindowTemplate_ContestPainting); + Text_LoadWindowTemplate(&gWindowTemplate_ContestPainting); } -static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) +static void PrintContestPaintingCaption(u8 contestType, u8 isForArtist) { u8 xPos, yPos; u8 *ptr; u8 type; - if (arg1 == TRUE) + if (isForArtist == TRUE) return; - ptr = gUnknown_03005E40; - type = gUnknown_03005E8C->contestType; + ptr = sCaptionBuffer; + type = gContestPaintingWinner->contestCategory; if (contestType < 8) { - ptr = StringCopy(ptr, gUnknown_083F60AC[type]); + ptr = StringCopy(ptr, sContestRankNames[type]); ptr = StringCopy(ptr, gContestText_ContestWinner); #if ENGLISH - ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); + ptr = StringCopy(ptr, gContestPaintingWinner->trainerName); #elif GERMAN - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + ptr = StringCopy10(ptr, gContestPaintingWinner->nickname); #endif // {LATIN} - ptr[0] = 0xFC; + ptr[0] = EXT_CTRL_CODE_BEGIN; ptr[1] = 0x16; ptr += 2; ptr = StringCopy(ptr, gOtherText_Unknown1); #if ENGLISH - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + ptr = StringCopy10(ptr, gContestPaintingWinner->nickname); #elif GERMAN - ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); + ptr = StringCopy(ptr, gContestPaintingWinner->trainerName); #endif xPos = 6; @@ -247,17 +254,17 @@ static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) } else { - ptr = StringCopy(ptr, gUnknown_083F60C0[type].prefix); - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); - ptr = StringCopy(ptr, gUnknown_083F60C0[type].suffix); + ptr = StringCopy(ptr, sMuseumCaptions[type].prefix); + ptr = StringCopy10(ptr, gContestPaintingWinner->nickname); + ptr = StringCopy(ptr, sMuseumCaptions[type].suffix); xPos = 3; yPos = 14; } - Menu_PrintTextPixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1); + Menu_PrintTextPixelCoords(sCaptionBuffer, xPos * 8 + 1, yPos * 8, 1); } -static void ContestPaintingInitBG(void) +static void InitContestPaintingBg(void) { REG_DISPCNT = 0; REG_IE |= INTR_FLAG_VBLANK; @@ -268,34 +275,34 @@ static void ContestPaintingInitBG(void) REG_BLDY = 0; } -static void ContestPaintingInitVars(bool8 arg0) +static void InitContestPaintingVars(bool8 reset) { - if (arg0 == FALSE) + if (reset == FALSE) { - gUnknown_03000756 = FALSE; - gUnknown_03000752 = 0; - gUnknown_03000754 = 0; + sVarsInitialized = FALSE; + sMosaicVal = 0; + sFrameCounter = 0; } else { - gUnknown_03000756 = TRUE; - gUnknown_03000752 = 15; - gUnknown_03000754 = 30; + sVarsInitialized = TRUE; + sMosaicVal = 15; + sFrameCounter = 30; } } static void ContestPaintingMosaic(void) { - if (gUnknown_03000756 == FALSE) + if (sVarsInitialized == FALSE) { REG_MOSAIC = 0; return; } REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; - gUnknown_03000752 = gUnknown_03000754 / 2; + sMosaicVal = sFrameCounter / 2; - REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); + REG_MOSAIC = (sMosaicVal << 12) | (sMosaicVal << 8) | (sMosaicVal << 4) | (sMosaicVal << 0); } static void VBlankCB_ContestPainting(void) @@ -306,12 +313,12 @@ static void VBlankCB_ContestPainting(void) TransferPlttBuffer(); } -static void sub_8106AC4(u16 species, u8 arg1) +static void InitContestMonPixels(u16 species, u8 arg1) { const void *pal; - pal = GetMonSpritePalFromOtIdPersonality(species, gUnknown_03005E8C->otId, gUnknown_03005E8C->personality); - LZDecompressVram(pal, gUnknown_03005E90); + pal = GetMonSpritePalFromOtIdPersonality(species, gContestPaintingWinner->otId, gContestPaintingWinner->personality); + LZDecompressVram(pal, gContestPaintingMonPalette); if (arg1 == 0) { @@ -319,12 +326,12 @@ static void sub_8106AC4(u16 species, u8 arg1) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - EWRAM, - gUnknown_081FAF4C[1], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[1], species, - (u32)gUnknown_03005E8C->personality + (u32)gContestPaintingWinner->personality ); - sub_8106B90((u8*)gUnknown_081FAF4C[1], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10); + _InitContestMonPixels((u8*)gMonSpriteGfx_Sprite_ptr[1], (u16*)gContestPaintingMonPalette, (u16*)gContestMonPixels); } else { @@ -332,18 +339,18 @@ static void sub_8106AC4(u16 species, u8 arg1) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - EWRAM, - gUnknown_081FAF4C[0], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[0], species, - (u32)gUnknown_03005E8C->personality + (u32)gContestPaintingWinner->personality ); - sub_8106B90((u8*)gUnknown_081FAF4C[0], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10); + _InitContestMonPixels((u8*)gMonSpriteGfx_Sprite_ptr[0], (u16*)gContestPaintingMonPalette, (u16*)gContestMonPixels); } } -static void sub_8106B90(u8 *a, u16 *b, u16 *c) +static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 *destPixels) { - u16 i, j, k, l; + u16 tileY, tileX, pixelY, pixelX; /* Raw arithmetics are required to match this function. @@ -353,70 +360,71 @@ static void sub_8106B90(u8 *a, u16 *b, u16 *c) calculate dimensions manually (as seen in other functions), tell that it may have been this way in the original code. */ - for (i = 0; i < 8; i++) + for (tileY = 0; tileY < 8; tileY++) { - for (j = 0; j < 8; j++) + for (tileX = 0; tileX < 8; tileX++) { - for (k = 0; k < 8; k++) + for (pixelY = 0; pixelY < 8; pixelY++) { - for (l = 0; l < 8; l++) + for (pixelX = 0; pixelX < 8; pixelX++) { - u8 temp = a[(((i * 8) + j) * 32) + (k << 2) + (l >> 1)]; + u8 colorIndex = spriteGfx[(((tileY * 8) + tileX) * 32) + (pixelY << 2) + (pixelX >> 1)]; /* The shifts have to be there to match r0 and r2's order in one instruction: add r5, r2, r0 This also makes agbcc's expression order parsing even more super sensitive and obscene when it comes to parentheses affecting regalloc regardless if - unnecessary, requiring j must be placed in the front to match, or else + unnecessary, requiring tileX must be placed in the front to match, or else regalloc breaks again and does this a few instructions above: add r0, r3, r7 <- regswap */ - if (l & 1) - temp /= 16; + if (pixelX & 1) + colorIndex /= 16; else - temp %= 16; + colorIndex %= 16; // Same order as above needs to be written here, or else this happens: // add r0, r7, r1 <- regswap - if (temp == 0) - *(u16 *)(c + (((i * 8) + k) << 6) + ((j * 8) + l)) = 0x8000; + if (colorIndex == 0) + *(u16 *)(destPixels + (((tileY * 8) + pixelY) << 6) + ((tileX * 8) + pixelX)) = 0x8000; else - *(u16 *)(c + (((i * 8) + k) << 6) + ((j * 8) + l)) = b[temp]; + *(u16 *)(destPixels + (((tileY * 8) + pixelY) << 6) + ((tileX * 8) + pixelX)) = + palette[colorIndex]; } } } } } -static void sub_8106C40(u8 arg0, u8 arg1) +static void LoadContestPaintingFrame(u8 contestWinnerId, u8 isForArtist) { u8 x, y; LoadPalette(gPictureFramePalettes, 0, sizeof(gPictureFramePalettes)); - if (arg1 == 1) + if (isForArtist == TRUE) { - switch (gUnknown_03005E8C->contestType / 3) + switch (gContestPaintingWinner->contestCategory / 3) { case CONTEST_COOL: RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_0, gContestMonPixels); break; case CONTEST_BEAUTY: RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_1, gContestMonPixels); break; case CONTEST_CUTE: RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_2, gContestMonPixels); break; case CONTEST_SMART: RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_3, gContestMonPixels); break; case CONTEST_TOUGH: RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_4, gContestMonPixels); break; } @@ -433,23 +441,23 @@ static void sub_8106C40(u8 arg0, u8 arg1) for (y = 0; y < 10; y++) { for (x = 0; x < 18; x++) - VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03005E10)[y + 2][x + 6]; + VRAM_PICTURE_DATA(x + 6, y + 2) = (*gContestMonPixels)[y + 2][x + 6]; } // Re-set the entire top row to the first top frame part for (x = 0; x < 16; x++) - VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03005E10)[2][7]; + VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7]; #undef VRAM_PICTURE_DATA } - else if (arg0 < 8) + else if (contestWinnerId < 8) { RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM); RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000)); } else { - switch (gUnknown_03005E8C->contestType / 3) + switch (gContestPaintingWinner->contestCategory / 3) { case CONTEST_COOL: RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); @@ -475,32 +483,31 @@ static void sub_8106C40(u8 arg0, u8 arg1) } } -static void sub_8106E98(u8 arg0) +static void InitPaintingMonOamData(u8 contestWinnerId) { - //Some hacks just to get the asm to match -#ifndef NONMATCHING - asm(""::"r"(arg0)); -#endif - - gMain.oamBuffer[0] = gOamData_83F6138; + gMain.oamBuffer[0] = sContestPaintingMonOamData; gMain.oamBuffer[0].tileNum = 0; -#ifndef NONMATCHING - if (arg0) arg0 = gMain.oamBuffer[0].tileNum; -#endif - - gMain.oamBuffer[0].x = 88; - gMain.oamBuffer[0].y = 24; + if (contestWinnerId > 1) + { + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; + } + else // duplicated code branch + { + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; + } } -static u8 sub_8106EE0(u8 arg0) +static u8 GetImageEffectForContestWinner(u8 contestWinnerId) { u8 contestType; - if (arg0 < 8) - contestType = gUnknown_03005E8C->contestType; + if (contestWinnerId < 8) + contestType = gContestPaintingWinner->contestCategory; else - contestType = gUnknown_03005E8C->contestType / 3; + contestType = gContestPaintingWinner->contestCategory / 3; switch (contestType) { @@ -519,55 +526,55 @@ static u8 sub_8106EE0(u8 arg0) return contestType; } -static void sub_8106F4C(void) +static void AllocPaintingResources(void) { - gUnknown_03005E90 = ewram15E00.unk2017e00; - gUnknown_03005E10 = &ewram15E00.unk2015e00; + gContestPaintingMonPalette = eContestPaintingBuffers.palette; + gContestMonPixels = (void *)eContestPaintingBuffers.pixels; } -static void sub_8106F6C(u8 arg0) +static void DoContestPaintingImageProcessing(u8 imageEffect) { - gUnknown_03005E20.var_4 = gUnknown_03005E10; - gUnknown_03005E20.var_8 = gUnknown_03005E90; - gUnknown_03005E20.var_18 = 0; - gUnknown_03005E20.var_1F = gUnknown_03005E8C->personality % 256; - gUnknown_03005E20.var_19 = 0; - gUnknown_03005E20.var_1A = 0; - gUnknown_03005E20.var_1B = 64; - gUnknown_03005E20.var_1C = 64; - gUnknown_03005E20.var_1D = 64; - gUnknown_03005E20.var_1E = 64; - - switch (arg0) + gImageProcessingContext.canvasPixels = gContestMonPixels; + gImageProcessingContext.canvasPalette = gContestPaintingMonPalette; + gImageProcessingContext.paletteStart = 0; + gImageProcessingContext.personality = gContestPaintingWinner->personality % 256; + gImageProcessingContext.columnStart = 0; + gImageProcessingContext.rowStart = 0; + gImageProcessingContext.columnEnd = 64; + gImageProcessingContext.rowEnd = 64; + gImageProcessingContext.canvasWidth = 64; + gImageProcessingContext.canvasHeight = 64; + + switch (imageEffect) { case CONTESTRESULT_SMART: case CONTESTRESULT_TOUGH: - gUnknown_03005E20.var_14 = 3; + gImageProcessingContext.quantizeEffect = QUANTIZE_EFFECT_GRAYSCALE; break; case CONTESTRESULT_COOL: case CONTESTRESULT_BEAUTY: case CONTESTRESULT_CUTE: default: - gUnknown_03005E20.var_14 = 1; + gImageProcessingContext.quantizeEffect = QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS; break; } - gUnknown_03005E20.var_16 = 2; - gUnknown_03005E20.var_0 = arg0; - gUnknown_03005E20.var_10 = OBJ_VRAM0; + gImageProcessingContext.bgType = 2; + gImageProcessingContext.effect = imageEffect; + gImageProcessingContext.dest = OBJ_VRAM0; - sub_80FC7A0(&gUnknown_03005E20); - sub_80FDA18(&gUnknown_03005E20); - sub_80FD8CC(&gUnknown_03005E20); + ApplyImageProcessingEffects(&gImageProcessingContext); + ApplyImageProcessingQuantization(&gImageProcessingContext); + ConvertImageProcessingToGBA(&gImageProcessingContext); - LoadPalette(gUnknown_03005E90, 256, 256 * 2); + LoadPalette(gContestPaintingMonPalette, 256, 256 * 2); } -static void sub_8107090(u8 arg0, u8 arg1) +static void CreateContestPaintingPicture(u8 contestWinnerId, u8 isForArtist) { - sub_8106F4C(); - sub_8106AC4(gUnknown_03005E8C->species, 0); - sub_8106F6C(sub_8106EE0(arg0)); - sub_8106E98(arg0); - sub_8106C40(arg0, arg1); + AllocPaintingResources(); + InitContestMonPixels(gContestPaintingWinner->species, 0); + DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId)); + InitPaintingMonOamData(contestWinnerId); + LoadContestPaintingFrame(contestWinnerId, isForArtist); } diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c deleted file mode 100644 index ade91a0ec..000000000 --- a/src/contest_painting_effects.c +++ /dev/null @@ -1,1535 +0,0 @@ -#include "global.h" -#include "contest_painting_effects.h" -#include "contest_painting.h" - -extern const u8 gUnknown_083E7A50[][3]; - -u16 (*gUnknown_03005DEC)[][32]; -u8 gUnknown_03005DE8; -u8 gUnknown_03005DF0; -u8 gUnknown_03005DFC; -u8 gUnknown_03005DF8; -u8 gUnknown_03005DF4; -u8 gUnknown_03005E00; -u8 gUnknown_03005E04; -u16 * gUnknown_03005E08; -u16 gUnknown_03005E0C; - -// this file's functions -void sub_80FCAA4(void); -void sub_80FCB5C(void); -void sub_80FCD54(void); -void sub_80FCEA4(void); -void sub_80FCCBC(void); -void sub_80FD06C(void); -void sub_80FD114(void); -void sub_80FCF3C(void); -void sub_80FCAC4(void); -void sub_80FCC18(u8); -void sub_80FC92C(u8); -void sub_80FC9E4(u8); -void sub_80FD1C8(u16); -u16 ConvertColorToGrayscale(u16*); -u16 sub_80FD68C(u16*, u16*, u16*); -u16 ConvertCoolColor(u16*, u8); -u16 ConvertToBlackOrWhite(u16*); -u16 sub_80FD50C(u16*, u16*); -u16 InvertColor(u16*); -u16 sub_80FD7AC(u16*, u16*, u16*); -u16 sub_80FD568(u16*, u16*); -u16 GetCoolColorFromPersonality(u8); -void sub_80FDC18(bool8); -void sub_80FDAE4(void); -void sub_80FDF88(void); -void sub_80FDBE4(void); -void sub_80FDED8(void); -void sub_80FDBA8(void); -void sub_80FDE28(void); -void sub_80FDB8C(void); -void sub_80FDD70(void); -u16 sub_80FE038(u16 *); -u16 sub_80FE17C(u16 *); -u16 sub_80FE1B0(u16 *); -u16 sub_80FE0AC(u16 *); - -void sub_80FC7A0(struct Unk03005E20* info) -{ - gUnknown_03005DEC = info->var_4; - gUnknown_03005E00 = info->var_1F; - gUnknown_03005DE8 = info->var_19; - gUnknown_03005DFC = info->var_1A; - gUnknown_03005DF8 = info->var_1B; - gUnknown_03005DF0 = info->var_1C; - gUnknown_03005E04 = info->var_1D; - gUnknown_03005DF4 = info->var_1E; - switch (info->var_0) - { - case 2: - sub_80FCAA4(); - break; - case 8: - sub_80FCB5C(); - break; - case 9: - sub_80FCD54(); - sub_80FCC18(gUnknown_03005E00); - break; - case 10: - sub_80FCD54(); - sub_80FCEA4(); - sub_80FCCBC(); - case 31: - sub_80FCEA4(); - break; - case 11: - sub_80FCD54(); - sub_80FD06C(); - sub_80FD06C(); - sub_80FD114(); - sub_80FCCBC(); - break; - case 13: - sub_80FCF3C(); - break; - case 30: - sub_80FCD54(); - break; - case 32: - sub_80FD06C(); - break; - case 33: - sub_80FD114(); - break; - case 6: - sub_80FCAC4(); - sub_80FC92C(3); - break; - case 36: - sub_80FCD54(); - sub_80FD06C(); - sub_80FD114(); - sub_80FCCBC(); - sub_80FCB5C(); - sub_80FCB5C(); - sub_80FC92C(2); - sub_80FC9E4(4); - break; - } -} - -#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) - -void sub_80FC92C(u8 a0) // it changes palette someway somehow... .__. -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (!(0x8000 & *pal)) - { - u8 val = (31 & *pal); - val += a0; - if (val > 31) - val = 31; - - *pal = RGB2(val, val, val); - } - } - } -} - -void sub_80FC9E4(u8 a0) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (!(0x8000 & *pal)) - { - u8 val = (31 & *pal); - if (val > 31 - a0) - val = 31 - (a0 >> 1); - - *pal = RGB2(val, val, val); - } - } - } -} - -void sub_80FCAA4(void) -{ - u32 i; - for (i = 0; i < 3200; i++) - sub_80FD1C8(i); -} - -void sub_80FCAC4(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = ConvertColorToGrayscale(color); - } - } - } -} - -void sub_80FCB5C(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF8; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; - u16* palette = &var0[gUnknown_03005DE8 + i]; - u16 color = *palette; - j = 1; - palette += gUnknown_03005E04; - while (j < gUnknown_03005DF0 - 1) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD68C(&color, palette, palette + gUnknown_03005E04); - color = *palette; - } - - j++; - palette += gUnknown_03005E04; - } - } -} - -void sub_80FCC18(u8 arg0) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var0[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = ConvertCoolColor(color, arg0); - } - } - } -} - -void sub_80FCCBC(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var0[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = ConvertToBlackOrWhite(color); - } - } - } -} - -void sub_80FCD54(void) -{ - u8 i, j; - u16 *palette; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - palette = &var0[gUnknown_03005DE8]; - *palette = sub_80FD50C(palette, palette + 1); - for (j = 1, palette = palette + 1; j < gUnknown_03005DF8 - 1; j++, palette++) - { - *palette = sub_80FD50C(palette, palette + 1); - *palette = sub_80FD50C(palette, palette - 1); - } - - *palette = sub_80FD50C(palette, palette - 1); - } - - for (j = 0; j < gUnknown_03005DF8; j++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; - palette = &var0[gUnknown_03005DE8 + j]; - *palette = sub_80FD50C(palette, palette + gUnknown_03005E04); - for (i = 1, palette = palette + gUnknown_03005E04; i < gUnknown_03005DF0 - 1; i++, palette += gUnknown_03005E04) - { - *palette = sub_80FD50C(palette, palette + gUnknown_03005E04); - *palette = sub_80FD50C(palette, palette - gUnknown_03005E04); - } - - *palette = sub_80FD50C(palette, palette - gUnknown_03005E04); - } -} - -void sub_80FCEA4(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var0[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = InvertColor(color); - } - } - } -} - -void sub_80FCF3C(void) -{ - u8 i, j; - u16 *palette; - u16 color; - - palette = (*gUnknown_03005DEC)[0]; - for (i = 0; i < 64; i++) - { - for (j = 0; j < 64; j++, palette++) - { - if (!(0x8000 & *palette)) - { - *palette = InvertColor(palette); - } - } - } - - for (j = 0; j < 64; j++) - { - palette = &(*gUnknown_03005DEC)[0][j]; - color = *palette; - *palette = 0x8000; - for (i = 1, palette += 64; i < 63; i++, palette += 64) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD7AC(&color, palette, palette + 64); - color = *palette; - } - } - - *palette = 0x8000; - palette = &(*gUnknown_03005DEC)[0][j]; - color = *palette; - *palette = 0x8000; - for (i = 1, palette += 64; i < 63; i++, palette += 64) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD7AC(&color, palette, palette + 64); - color = *palette; - } - } - - *palette = 0x8000; - } - - palette = (*gUnknown_03005DEC)[0]; - for (i = 0; i < 64; i++) - { - for (j = 0; j < 64; j++, palette++) - { - if (!(0x8000 & *palette)) - { - *palette = InvertColor(palette); - } - } - } -} - -void sub_80FD06C(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* palette = &var0[gUnknown_03005DE8]; - u16 color = *palette; - for (j = 1, palette++; j < gUnknown_03005DF8 - 1; j++, palette++) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD568(&color, palette); - color = *palette; - } - } - } -} - -void sub_80FD114(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF8; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; - u16* palette = &var0[gUnknown_03005DE8 + i]; - u16 color = *palette; - for (j = 1, palette += gUnknown_03005E04; j < gUnknown_03005DF0 - 1; j++, palette += gUnknown_03005E04) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD568(&color, palette); - color = *palette; - } - } - } -} - -NAKED -void sub_80FD1C8(u16 arg0) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ - mov r2, sp\n\ - ldr r3, _080FD234 @ =gUnknown_083E7A50\n\ - lsls r1, r0, 1\n\ - add r1, r10\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - adds r0, r3, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - strb r0, [r2, 0x1]\n\ - mov r5, sp\n\ - adds r0, r3, 0x2\n\ - adds r1, r0\n\ - ldrb r4, [r1]\n\ - lsls r2, r4, 24\n\ - lsrs r1, r2, 27\n\ - movs r0, 0x7\n\ - ands r1, r0\n\ - strh r1, [r5, 0x2]\n\ - lsrs r2, 25\n\ - mov r9, r2\n\ - movs r0, 0x3\n\ - ands r2, r0\n\ - mov r9, r2\n\ - movs r5, 0x1\n\ - ands r5, r4\n\ - movs r4, 0x1\n\ - mov r8, r4\n\ - cmp r8, r1\n\ - bcs _080FD27A\n\ - mov r3, sp\n\ -_080FD21A:\n\ - cmp r5, 0\n\ - bne _080FD238\n\ - mov r0, r8\n\ - lsls r2, r0, 2\n\ - mov r4, sp\n\ - adds r1, r4, r2\n\ - ldrb r0, [r3]\n\ - mov r4, r8\n\ - subs r0, r4\n\ - strb r0, [r1]\n\ - ldrb r0, [r3, 0x1]\n\ - add r0, r8\n\ - b _080FD24A\n\ - .align 2, 0\n\ -_080FD234: .4byte gUnknown_083E7A50\n\ -_080FD238:\n\ - mov r0, r8\n\ - lsls r2, r0, 2\n\ - mov r4, sp\n\ - adds r1, r4, r2\n\ - ldrb r0, [r3]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - ldrb r0, [r3, 0x1]\n\ - subs r0, 0x1\n\ -_080FD24A:\n\ - strb r0, [r1, 0x1]\n\ - add r2, sp\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x3F\n\ - bhi _080FD25A\n\ - ldrb r0, [r2, 0x1]\n\ - cmp r0, 0x3F\n\ - bls _080FD262\n\ -_080FD25A:\n\ - mov r0, r8\n\ - subs r0, 0x1\n\ - strh r0, [r3, 0x2]\n\ - b _080FD27A\n\ -_080FD262:\n\ - ldrh r0, [r3, 0x2]\n\ - mov r1, r8\n\ - subs r0, r1\n\ - strh r0, [r2, 0x2]\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldrh r0, [r3, 0x2]\n\ - cmp r8, r0\n\ - bcc _080FD21A\n\ -_080FD27A:\n\ - movs r2, 0\n\ - mov r8, r2\n\ - mov r0, sp\n\ - ldrh r0, [r0, 0x2]\n\ - cmp r8, r0\n\ - bcc _080FD288\n\ - b _080FD38A\n\ -_080FD288:\n\ - movs r3, 0x1F\n\ -_080FD28A:\n\ - ldr r1, _080FD2E8 @ =gUnknown_03005DEC\n\ - mov r4, r8\n\ - lsls r0, r4, 2\n\ - mov r2, sp\n\ - adds r6, r2, r0\n\ - ldrb r0, [r6, 0x1]\n\ - lsls r0, 7\n\ - ldr r1, [r1]\n\ - adds r1, r0\n\ - ldrb r0, [r6]\n\ - lsls r0, 1\n\ - adds r2, r1, r0\n\ - ldrh r1, [r2]\n\ - movs r4, 0x80\n\ - lsls r4, 8\n\ - adds r0, r4, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080FD376\n\ - movs r7, 0x1F\n\ - ands r7, r1\n\ - lsls r0, r1, 16\n\ - lsrs r5, r0, 21\n\ - ands r5, r3\n\ - lsrs r4, r0, 26\n\ - ands r4, r3\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - blt _080FD36C\n\ - cmp r0, 0x1\n\ - ble _080FD2EC\n\ - cmp r0, 0x3\n\ - bgt _080FD36C\n\ - ldrh r0, [r6, 0x2]\n\ - adds r1, r7, r0\n\ - lsls r1, 16\n\ - lsrs r7, r1, 16\n\ - adds r1, r5, r0\n\ - lsls r1, 16\n\ - lsrs r5, r1, 16\n\ - adds r0, r4, r0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r7, 0x1F\n\ - bls _080FD360\n\ - movs r7, 0x1F\n\ - b _080FD360\n\ - .align 2, 0\n\ -_080FD2E8: .4byte gUnknown_03005DEC\n\ -_080FD2EC:\n\ - mov r1, r10\n\ - lsls r0, r1, 1\n\ - add r0, r10\n\ - ldr r1, _080FD320 @ =gUnknown_083E7A50\n\ - adds r1, 0x2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsrs r0, 3\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - movs r1, 0x3\n\ - str r2, [sp, 0x18]\n\ - str r3, [sp, 0x1C]\n\ - bl __umodsi3\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r2, [sp, 0x18]\n\ - ldr r3, [sp, 0x1C]\n\ - cmp r0, 0x1\n\ - beq _080FD33C\n\ - cmp r0, 0x1\n\ - bgt _080FD324\n\ - cmp r0, 0\n\ - beq _080FD32A\n\ - b _080FD36C\n\ - .align 2, 0\n\ -_080FD320: .4byte gUnknown_083E7A50\n\ -_080FD324:\n\ - cmp r0, 0x2\n\ - beq _080FD34E\n\ - b _080FD36C\n\ -_080FD32A:\n\ - ldrh r0, [r6, 0x2]\n\ - cmp r7, r0\n\ - bcc _080FD338\n\ - subs r0, r7, r0\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - b _080FD36C\n\ -_080FD338:\n\ - movs r7, 0\n\ - b _080FD36C\n\ -_080FD33C:\n\ - ldrh r0, [r6, 0x2]\n\ - cmp r5, r0\n\ - bcc _080FD34A\n\ - subs r0, r5, r0\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - b _080FD36C\n\ -_080FD34A:\n\ - movs r5, 0\n\ - b _080FD36C\n\ -_080FD34E:\n\ - ldrh r0, [r6, 0x2]\n\ - cmp r4, r0\n\ - bcc _080FD35C\n\ - subs r0, r4, r0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - b _080FD36C\n\ -_080FD35C:\n\ - movs r4, 0\n\ - b _080FD36C\n\ -_080FD360:\n\ - cmp r5, 0x1F\n\ - bls _080FD366\n\ - movs r5, 0x1F\n\ -_080FD366:\n\ - cmp r4, 0x1F\n\ - bls _080FD36C\n\ - movs r4, 0x1F\n\ -_080FD36C:\n\ - lsls r0, r4, 10\n\ - lsls r1, r5, 5\n\ - orrs r0, r1\n\ - orrs r7, r0\n\ - strh r7, [r2]\n\ -_080FD376:\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - mov r0, sp\n\ - ldrh r0, [r0, 0x2]\n\ - cmp r8, r0\n\ - bcs _080FD38A\n\ - b _080FD28A\n\ -_080FD38A:\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} - -u16 ConvertColorToGrayscale(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - u16 average = (red + green + blue) / 3; - return RGB2(average, average, average); -} - -// The dark colors are the colored edges of the Cool painting effect. -// Everything else is white. -u16 ConvertCoolColor(u16 *color, u8 personality) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - if (red < 17 && green < 17 && blue < 17) - return GetCoolColorFromPersonality(personality); - else - return RGB2(31, 31, 31); -} - -// Based on the given value, which comes from the first 8 bits of -// the mon's personality value, return a color. -u16 GetCoolColorFromPersonality(u8 personality) -{ - u16 red = 0; - u16 green = 0; - u16 blue = 0; - u8 strength = (personality / 6) % 3; - u8 colorType = personality % 6; - - switch (colorType) - { - case 0: - // Teal color - green = 21 - strength; - blue = green; - red = 0; - break; - case 1: - // Yellow color - blue = 0; - red = 21 - strength; - green = red; - break; - case 2: - // Purple color - blue = 21 - strength; - green = 0; - red = blue; - break; - case 3: - // Red color - blue = 0; - green = 0; - red = 23 - strength; - break; - case 4: - // Blue color - blue = 23 - strength; - green = 0; - red = 0; - break; - case 5: - // Green color - blue = 0; - green = 23 - strength; - red = 0; - break; - } - - return RGB2(red, green, blue); -} - -u16 ConvertToBlackOrWhite(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - if (red < 17 && green < 17 && blue < 17) - return RGB2(0, 0, 0); - else - return RGB2(31, 31, 31); -} - -u16 sub_80FD50C(u16 *colorA, u16 *colorB) -{ - if (*colorA) - { - if (*colorA & 0x8000) - return 0x8000; - if (*colorB & 0x8000) - return RGB2(0, 0, 0); - - return *colorA; - } - - return RGB2(0, 0, 0); -} - -u16 InvertColor(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - red = 31 - red; - green = 31 - green; - blue = 31 - blue; - - return RGB2(red, green, blue); -} - -u16 sub_80FD568(u16 *a0, u16 *a1) -{ - u16 sp0[2][3]; - u16 spC[3]; - u8 r4; - u16 r2; - u16 r, g, b; - - if (*a0 == *a1) - return *a1; - - sp0[0][0] = (*a0 >> 0) & 0x1F; - sp0[0][1] = (*a0 >> 5) & 0x1F; - sp0[0][2] = (*a0 >> 10) & 0x1F; - sp0[1][0] = (*a1 >> 0) & 0x1F; - sp0[1][1] = (*a1 >> 5) & 0x1F; - sp0[1][2] = (*a1 >> 10) & 0x1F; - - if (sp0[0][0] > 25 && sp0[0][1] > 25 && sp0[0][2] > 25) - return *a1; - if (sp0[1][0] > 25 && sp0[1][1] > 25 && sp0[1][2] > 25) - return *a1; - - for (r4 = 0; r4 < 3; r4++) - { - if (sp0[0][r4] > sp0[1][r4]) - spC[r4] = sp0[0][r4] - sp0[1][r4]; - else - spC[r4] = sp0[1][r4] - sp0[0][r4]; - } - - if (spC[0] >= spC[1]) - { - if (spC[0] >= spC[2]) - r2 = spC[0]; - else if (spC[1] >= spC[2]) - r2 = spC[1]; - else - r2 = spC[2]; - } - else - { - if (spC[1] >= spC[2]) - r2 = spC[1]; - else if (spC[2] >= spC[0]) - r2 = spC[2]; - else - r2 = spC[0]; - } - - r = (sp0[1][0] * (31 - r2 / 2)) / 31; - g = (sp0[1][1] * (31 - r2 / 2)) / 31; - b = (sp0[1][2] * (31 - r2 / 2)) / 31; - return RGB2(r, g, b); -} - -u16 sub_80FD68C(u16 * a0, u16 * a1, u16 * a2) -{ - u16 red, green, blue; - u16 avg0, avg1, avg2; - u16 diff1, diff2; - u32 minimum; - u16 factor; - - if (*a0 == *a1 && *a2 == *a1) - return *a1; - - red = (*a1 >> 0) & 0x1F; - green = (*a1 >> 5) & 0x1F; - blue = (*a1 >> 10) & 0x1F; - - avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3; - avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3; - avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3; - - if (avg0 == avg1 && avg2 == avg1) - return *a1; - - if (avg0 > avg1) - diff1 = avg0 - avg1; - else - diff1 = avg1 - avg0; - - if (avg2 > avg1) - diff2 = avg2 - avg1; - else - diff2 = avg1 - avg2; - - if (diff1 >= diff2) - minimum = diff1; - else - minimum = diff2; - - factor = 31 - minimum / 2; - red = red * factor / 31; - green = green * factor / 31; - blue = blue * factor / 31; - return RGB2(red, green, blue); -} - -u16 sub_80FD7AC(u16 *a0, u16 *a1, u16 *a2) -{ - u16 red, green, blue; - u16 avg0, avg1, avg2; - u16 diff1, diff2; - u32 minimum; - u16 factor; - - if (*a0 == *a1 && *a2 == *a1) - return *a1; - - red = (*a1 >> 0) & 0x1F; - green = (*a1 >> 5) & 0x1F; - blue = (*a1 >> 10) & 0x1F; - - avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3; - avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3; - avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3; - - if (avg0 == avg1 && avg2 == avg1) - return *a1; - - if (avg0 > avg1) - diff1 = avg0 - avg1; - else - diff1 = avg1 - avg0; - - if (avg2 > avg1) - diff2 = avg2 - avg1; - else - diff2 = avg1 - avg2; - - if (diff1 >= diff2) - minimum = diff1; - else - minimum = diff2; - - factor = 31 - minimum; - red = red * factor / 31; - green = green * factor / 31; - blue = blue * factor / 31; - return RGB2(red, green, blue); -} - -/* -void sub_80FD8CC(struct Unk03005E20 * a0) -{ - u16 i, j, k; - u8 r5 = a0->var_1D >> 3; - u8 sp08 = a0->var_1E >> 3; - u16 * sp00 = (u16 *)a0->var_4; - u16 * sp04 = (u16 *)a0->var_10; - if (a0->var_16 == 2) - { - for (i = 0; i < sp08; i++) - { - for (j = 0; j < r5; j++) - { - for (k = 0; k < 8; k++) - { - u16 * r3 = &sp04[i * r5 * 32 + 4 * k]; - u16 * r2 = &sp00[j * 8 + (i * 8 + k) * 8 * r5]; - r3[0] = r2[0] | (r2[1] << 8); - r3[1] = r2[2] | (r2[3] << 8); - r3[2] = r2[4] | (r2[5] << 8); - r3[3] = r2[6] | (r2[7] << 8); - } - } - } - } - else - { - for (i = 0; i < sp08; i++) - { - for (j = 0; j < r5; j++) - { - for (k = 0; k < 8; k++) - { - u16 * r3 = &sp04[i * r5 * 16 + 2 * k]; - u16 * r2 = &sp00[j * 8 + (i * 8 + k) * 8 * r5]; - r3[0] = r2[0] | (r2[1] << 4) | (r2[2] << 8) | (r2[3] << 12); - r3[1] = r2[4] | (r2[5] << 4) | (r2[6] << 8) | (r2[7] << 12); - } - } - } - } -} -*/ - -NAKED -void sub_80FD8CC(struct Unk03005E20 * a0) -{ - 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, 0xC\n" - "\tldrb r1, [r0, 0x1D]\n" - "\tlsrs r5, r1, 3\n" - "\tldrb r1, [r0, 0x1E]\n" - "\tlsrs r1, 3\n" - "\tstr r1, [sp, 0x8]\n" - "\tldr r1, [r0, 0x4]\n" - "\tstr r1, [sp]\n" - "\tldr r2, [r0, 0x10]\n" - "\tstr r2, [sp, 0x4]\n" - "\tldrh r0, [r0, 0x16]\n" - "\tcmp r0, 0x2\n" - "\tbne _080FD97C\n" - "\tmovs r1, 0\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r1, r0\n" - "\tbcc _080FD8FA\n" - "\tb _080FDA08\n" - "_080FD8FA:\n" - "\tmovs r0, 0\n" - "\tadds r2, r1, 0x1\n" - "\tmov r10, r2\n" - "\tcmp r0, r5\n" - "\tbcs _080FD96E\n" - "\tadds r2, r1, 0\n" - "\tmuls r2, r5\n" - "\tmov r9, r2\n" - "\tlsls r1, 3\n" - "\tmov r8, r1\n" - "_080FD90E:\n" - "\tmovs r4, 0\n" - "\tlsls r6, r0, 4\n" - "\tadds r7, r0, 0x1\n" - "\tadd r0, r9\n" - "\tlsls r0, 6\n" - "\tldr r1, [sp, 0x4]\n" - "\tadds r1, r0\n" - "\tmov r12, r1\n" - "_080FD91E:\n" - "\tlsls r0, r4, 3\n" - "\tmov r2, r12\n" - "\tadds r3, r2, r0\n" - "\tmov r1, r8\n" - "\tadds r0, r1, r4\n" - "\tlsls r0, 3\n" - "\tmuls r0, r5\n" - "\tlsls r0, 1\n" - "\tldr r2, [sp]\n" - "\tadds r0, r2, r0\n" - "\tadds r2, r0, r6\n" - "\tldrh r0, [r2, 0x2]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3]\n" - "\tldrh r0, [r2, 0x6]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2, 0x4]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3, 0x2]\n" - "\tldrh r0, [r2, 0xA]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2, 0x8]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3, 0x4]\n" - "\tldrh r0, [r2, 0xE]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2, 0xC]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3, 0x6]\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tcmp r4, 0x7\n" - "\tbls _080FD91E\n" - "\tlsls r0, r7, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, r5\n" - "\tbcc _080FD90E\n" - "_080FD96E:\n" - "\tmov r1, r10\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r1, r0, 16\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r1, r2\n" - "\tbcc _080FD8FA\n" - "\tb _080FDA08\n" - "_080FD97C:\n" - "\tmovs r1, 0\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r1, r0\n" - "\tbcs _080FDA08\n" - "_080FD984:\n" - "\tmovs r0, 0\n" - "\tadds r2, r1, 0x1\n" - "\tmov r10, r2\n" - "\tcmp r0, r5\n" - "\tbcs _080FD9FC\n" - "\tadds r2, r1, 0\n" - "\tmuls r2, r5\n" - "\tmov r9, r2\n" - "\tlsls r1, 3\n" - "\tmov r8, r1\n" - "_080FD998:\n" - "\tmovs r4, 0\n" - "\tlsls r6, r0, 4\n" - "\tadds r7, r0, 0x1\n" - "\tadd r0, r9\n" - "\tlsls r0, 5\n" - "\tldr r1, [sp, 0x4]\n" - "\tadds r1, r0\n" - "\tmov r12, r1\n" - "_080FD9A8:\n" - "\tlsls r0, r4, 2\n" - "\tmov r2, r12\n" - "\tadds r3, r2, r0\n" - "\tmov r1, r8\n" - "\tadds r0, r1, r4\n" - "\tlsls r0, 3\n" - "\tmuls r0, r5\n" - "\tlsls r0, 1\n" - "\tldr r2, [sp]\n" - "\tadds r0, r2, r0\n" - "\tadds r2, r0, r6\n" - "\tldrh r1, [r2, 0x2]\n" - "\tlsls r1, 4\n" - "\tldrh r0, [r2]\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0x4]\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0x6]\n" - "\tlsls r0, 12\n" - "\torrs r1, r0\n" - "\tstrh r1, [r3]\n" - "\tldrh r1, [r2, 0xA]\n" - "\tlsls r1, 4\n" - "\tldrh r0, [r2, 0x8]\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0xC]\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0xE]\n" - "\tlsls r0, 12\n" - "\torrs r1, r0\n" - "\tstrh r1, [r3, 0x2]\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tcmp r4, 0x7\n" - "\tbls _080FD9A8\n" - "\tlsls r0, r7, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, r5\n" - "\tbcc _080FD998\n" - "_080FD9FC:\n" - "\tmov r1, r10\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r1, r0, 16\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r1, r2\n" - "\tbcc _080FD984\n" - "_080FDA08:\n" - "\tadd sp, 0xC\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"); -} - -void sub_80FDA18(struct Unk03005E20 *arg0) -{ - gUnknown_03005E0C = arg0->var_18 * 16; - gUnknown_03005E08 = &arg0->var_8[gUnknown_03005E0C]; - gUnknown_03005DEC = arg0->var_4; - gUnknown_03005DE8 = arg0->var_19; - gUnknown_03005DFC = arg0->var_1A; - gUnknown_03005DF8 = arg0->var_1B; - gUnknown_03005DF0 = arg0->var_1C; - gUnknown_03005E04 = arg0->var_1D; - gUnknown_03005DF4 = arg0->var_1E; - - switch (arg0->var_14) - { - case 0: - sub_80FDC18(FALSE); - break; - case 1: - sub_80FDC18(TRUE); - break; - case 2: - sub_80FDAE4(); - sub_80FDF88(); - break; - case 3: - sub_80FDBE4(); - sub_80FDED8(); - break; - case 4: - sub_80FDBA8(); - sub_80FDE28(); - break; - case 5: - sub_80FDB8C(); - sub_80FDD70(); - break; - } -} - -void sub_80FDAE4(void) -{ - gUnknown_03005E08[0] = RGB2(0, 0, 0); - gUnknown_03005E08[1] = RGB2(6, 6, 6); - gUnknown_03005E08[2] = RGB2(29, 29, 29); - gUnknown_03005E08[3] = RGB2(11, 11, 11); - gUnknown_03005E08[4] = RGB2(29, 6, 6); - gUnknown_03005E08[5] = RGB2(6, 29, 6); - gUnknown_03005E08[6] = RGB2(6, 6, 29); - gUnknown_03005E08[7] = RGB2(29, 29, 6); - gUnknown_03005E08[8] = RGB2(29, 6, 29); - gUnknown_03005E08[9] = RGB2(6, 29, 29); - gUnknown_03005E08[10] = RGB2(29, 11, 6); - gUnknown_03005E08[11] = RGB2(11, 29, 6); - gUnknown_03005E08[12] = RGB2(6, 11, 29); - gUnknown_03005E08[13] = RGB2(29, 6, 11); - gUnknown_03005E08[14] = RGB2(6, 29, 11); - gUnknown_03005E08[15] = RGB2(11, 6, 29); -} - -void sub_80FDB8C(void) -{ - gUnknown_03005E08[0] = RGB2(0, 0, 0); - gUnknown_03005E08[1] = RGB2(0, 0, 0); - gUnknown_03005E08[2] = RGB2(31, 31, 31); -} - -void sub_80FDBA8(void) -{ - u8 i; - - gUnknown_03005E08[0] = RGB2(0, 0, 0); - gUnknown_03005E08[1] = RGB2(0, 0, 0); - for (i = 0; i < 14; i++) - gUnknown_03005E08[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); -} - -void sub_80FDBE4(void) -{ - u8 i; - - gUnknown_03005E08[0] = RGB2(0, 0, 0); - for (i = 0; i < 32; i++) - gUnknown_03005E08[i + 1] = RGB2(i, i, i); -} - -void sub_80FDC18(bool8 arg0) -{ - u8 i, j; - u16 maxIndex; - - maxIndex = 0xDF; - if (!arg0) - maxIndex = 0xFF; - - for (j = 0; j < maxIndex; j++) - gUnknown_03005E08[j] = 0; - - gUnknown_03005E08[maxIndex] = RGB2(15, 15, 15); - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - { - *pal = gUnknown_03005E0C; - } - else - { - u16 color = sub_80FE038(pal); - u8 curIndex = 1; - if (curIndex < maxIndex) - { - if (gUnknown_03005E08[curIndex] == RGB_BLACK) - { - gUnknown_03005E08[curIndex] = color; - *pal = gUnknown_03005E0C + curIndex; - } - else - { - while (curIndex < maxIndex) - { - if (gUnknown_03005E08[curIndex] == RGB_BLACK) - { - gUnknown_03005E08[curIndex] = color; - *pal = gUnknown_03005E0C + curIndex; - break; - } - - if (gUnknown_03005E08[curIndex] == color) - { - *pal = gUnknown_03005E0C + curIndex; - break; - } - - curIndex++; - } - } - } - - if (curIndex == maxIndex) - { - curIndex = maxIndex; - *pal = curIndex; - } - } - } - } -} - -void sub_80FDD70(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - { - *pal = gUnknown_03005E0C; - } - else - { - if (ConvertToBlackOrWhite(pal) == RGB_BLACK) - *pal = gUnknown_03005E0C + 1; - else - *pal = gUnknown_03005E0C + 2; - } - } - } -} - -void sub_80FDE28(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - *pal = gUnknown_03005E0C; - else - *pal = sub_80FE17C(pal) + gUnknown_03005E0C; - } - } -} - -void sub_80FDED8(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - *pal = gUnknown_03005E0C; - else - *pal = sub_80FE1B0(pal) + gUnknown_03005E0C; - } - } -} - -void sub_80FDF88(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - *pal = gUnknown_03005E0C; - else - *pal = sub_80FE0AC(pal) + gUnknown_03005E0C; - } - } -} - -u16 sub_80FE038(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - - if (red & 3) - red = (red & 0x1C) + 4; - if (green & 3) - green = (green & 0x1C) + 4; - if (blue & 3) - blue = (blue & 0x1C) + 4; - - if (red < 6) - red = 6; - if (red > 30) - red = 30; - - if (green < 6) - green = 6; - if (green > 30) - green = 30; - - if (blue < 6) - blue = 6; - if (blue > 30) - blue = 30; - - return RGB2(red, green, blue); -} - -u16 sub_80FE0AC(u16* color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - - if (red < 12 && green < 11 && blue < 11) - return 1; - - if (red > 19 && green > 19 && blue > 19) - return 2; - - if (red > 19) - { - if (green > 19) - { - if (blue > 14) - return 2; - else - return 7; - } - else if (blue > 19) - { - if (green > 14) - return 2; - else - return 8; - } - } - - if (green > 19 && blue > 19) - { - if (red > 14) - return 2; - else - return 9; - } - - if (red > 19) - { - if (green > 11) - { - if (blue > 11) - { - if (green < blue) - return 8; - else - return 7; - } - else - { - return 10; - } - } - else if (blue > 11) - { - return 13; - } - else - { - return 4; - } - } - - if (green > 19) - { - if (red > 11) - { - if (blue > 11) - { - if (red < blue) - return 9; - else - return 7; - } - else - { - return 11; - } - } - else - { - if (blue > 11) - return 14; - else - return 5; - } - } - - if (blue > 19) - { - if (red > 11) - { - if (green > 11) - { - if (red < green) - return 9; - else - return 8; - } - } - else if (green > 11) - { - return 12; - } - - if (blue > 11) - return 15; - else - return 6; - } - - return 3; -} - -u16 sub_80FE17C(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - u16 average = ((red + green + blue) / 3) & 0x1E; - if (average == 0) - return 1; - else - return average / 2; -} - -u16 sub_80FE1B0(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - u16 average = (red + green + blue) / 3; - return average + 1; -} diff --git a/src/script_pokemon_util_80C4BF0.c b/src/contest_util.c index c405d9cb4..34db5a975 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/contest_util.c @@ -1,33 +1,33 @@ #include "global.h" +#include "contest_util.h" #include "battle.h" #include "berry.h" #include "choose_party.h" +#include "constants/items.h" +#include "constants/species.h" #include "contest.h" -#include "contest_link_80C2020.h" +#include "contest_link_util.h" #include "contest_painting.h" #include "data2.h" #include "daycare.h" #include "debug.h" #include "decompress.h" #include "event_data.h" -#include "constants/items.h" +#include "ewram.h" #include "link.h" #include "load_save.h" #include "main.h" #include "menu.h" +#include "overworld.h" #include "pokedex.h" #include "pokemon.h" #include "random.h" -#include "overworld.h" -#include "script_pokemon_80C4.h" -#include "constants/species.h" #include "task.h" -#include "ewram.h" #define CONTEST_ENTRY_PIC_LEFT 10 #define CONTEST_ENTRY_PIC_TOP 3 -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gSelectedOrderFromParty[]; @@ -44,89 +44,87 @@ void SetContestTrainerGfxIds(void) gSaveBlock1.vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId; } -void sub_80C4C28(void) +void GetNpcContestantLocalId(void) { - u16 var; + u16 localId; u8 specialVar = gSpecialVar_0x8005; switch(specialVar) { case 0: - var = 3; + localId = 3; break; case 1: - var = 4; + localId = 4; break; case 2: - var = 5; + localId = 5; break; default: - var = 100; + localId = 100; break; } - gSpecialVar_0x8004 = var; + gSpecialVar_0x8004 = localId; } -void sub_80C4C64(void) +void BufferContestTrainerAndMonNames(void) { Contest_GetTrainerNameI_StringVar1(); Contest_GetNicknameI_StringVar1(); - sub_80C48F4(); + Contest_GetSpeciesNameI_StringVar1(); } -void sub_80C4C78(void) +void DoesContestCategoryHaveMuseumPainting(void) { - u16 var; - u16 returnVar; + u16 contestWinner; switch(gSpecialVar_ContestCategory) { case CONTEST_CATEGORY_COOL: - var = 8; + contestWinner = CONTEST_WINNER_MUSEUM_COOL - 1; break; case CONTEST_CATEGORY_BEAUTY: - var = 9; + contestWinner = CONTEST_WINNER_MUSEUM_BEAUTY - 1; break; case CONTEST_CATEGORY_CUTE: - var = 10; + contestWinner = CONTEST_WINNER_MUSEUM_CUTE - 1; break; case CONTEST_CATEGORY_SMART: - var = 11; + contestWinner = CONTEST_WINNER_MUSEUM_SMART - 1; break; case CONTEST_CATEGORY_TOUGH: default: - var = 12; + contestWinner = CONTEST_WINNER_MUSEUM_TOUGH - 1; break; } - returnVar = gSaveBlock1.contestWinners[var].species; - - if(returnVar == 0) - gSpecialVar_0x8004 = returnVar; + if (gSaveBlock1.contestWinners[contestWinner].species == SPECIES_NONE) + gSpecialVar_0x8004 = FALSE; else - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; } -void sub_80C4CEC(void) +void SaveMuseumContestPainting(void) { - Contest_SaveWinner(0xFF); + Contest_SaveWinner(CONTEST_SAVE_FOR_MUSEUM); } -void sub_80C4CF8(void) +void ShouldReadyContestArtist(void) { if(!gContestFinalStandings[gContestPlayerMonIndex] - && gSpecialVar_ContestRank == 3 - && gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gSpecialVar_ContestRank == CONTEST_RANK_MASTER + && + gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) { - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; } else { - gSpecialVar_0x8004 = 0; + gSpecialVar_0x8004 = FALSE; } } -u8 sub_80C4D50(void) +u8 CountPlayerMuseumPaintings(void) { u8 retVar = 0; int i; @@ -138,67 +136,72 @@ u8 sub_80C4D50(void) return retVar; } -void sub_80C4D80(void) +void GetContestantNamesAtRank(void) { - s16 sp0[4]; + s16 conditions[4]; s32 i; s32 j; - s16 r4; - u8 r2; - u8 r7; - s8 r10; - u8 r4_; + s16 condition; + u8 contestantOffset; + u8 tieRank; + s8 numAtCondition; + u8 rank; + // Get round 1 points for (i = 0; i < 4; i++) - sp0[i] = gContestMonConditions[i]; + conditions[i] = gContestMonRound1Points[i]; + // Sort round 1 points for (i = 0; i < 3; i++) { for (j = 3; j > i; j--) { - if (sp0[j - 1] < sp0[j]) + if (conditions[j - 1] < conditions[j]) { - s32 temp = sp0[j]; - - sp0[j] = sp0[j - 1]; - sp0[j - 1] = temp; + int temp; + SWAP(conditions[j], conditions[j - 1], temp) } } } - r4 = sp0[gSpecialVar_0x8006]; - r10 = 0; - r7 = 0; + // Get round1 points at specified rank + condition = conditions[gSpecialVar_0x8006]; + + // Count number of contestants with the same number of points + numAtCondition = 0; + tieRank = 0; for (i = 0; i < 4; i++) { - if (sp0[i] == r4) + if (conditions[i] == condition) { - r10++; + numAtCondition++; if (i == gSpecialVar_0x8006) - r7 = r10; + tieRank = numAtCondition; } } + // Get rank of first contestant with the same number of points for (i = 0; i < 4; i++) { - if (sp0[i] == r4) + if (conditions[i] == condition) break; } + rank = i; - r4_ = i; - r2 = r7; - + // Get contestant id of player at rank (taking ties into account) + contestantOffset = tieRank; for (i = 0; i < 4; i++) { - if (r4 == gContestMonConditions[i]) + if (condition == gContestMonRound1Points[i]) { - if (r2 == 1) + if (contestantOffset == 1) break; - r2--; + contestantOffset--; } } + // Use contestant id to get names Contest_CopyAndConvertNicknameI_Intl(gStringVar1, i); if (gIsLinkContest & 1) @@ -206,10 +209,13 @@ void sub_80C4D80(void) else Contest_CopyAndConvertTrainerName_Intl(gStringVar2, gContestMons[i].trainerName); - if (r10 == 1 || r7 == r10) - gSpecialVar_0x8006 = r4_; + // Return adjusted rank + if (numAtCondition == 1) + gSpecialVar_0x8006 = rank; + else if (tieRank == numAtCondition) + gSpecialVar_0x8006 = rank; else - gSpecialVar_0x8006 = r4_ + 4; + gSpecialVar_0x8006 = rank + 4; } void ShowContestWinnerCleanup(void) @@ -217,13 +223,15 @@ void ShowContestWinnerCleanup(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } +// File boundary? + void ShowContestWinner(void) { if(gUnknown_0203856C) { sub_80AAF30(); - gBattleStruct->unk15DDF = 1; - gBattleStruct->unk15DDE = sub_80B2C4C(254, 0); + eCurContestWinnerIsForArtist = TRUE; + eCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(CONTEST_SAVE_FOR_ARTIST, 0); Contest_SaveWinner(3); gUnknown_0203856C = 0; } @@ -246,7 +254,7 @@ bool8 GiveMonArtistRibbon(void) if(ribbon == FALSE && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3 - && gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) { ribbon = TRUE; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &ribbon); @@ -287,15 +295,15 @@ void ShowContestEntryMonPic(void) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - (u32)gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[0], + gMonSpriteGfx_Sprite_ptr[1], species, var1); palette = GetMonSpritePalStructFromOtIdPersonality(species, var2, var1); LoadCompressedObjectPalette(palette); GetMonSpriteTemplate_803C56C(species, 1); - gUnknown_02024E8C.paletteTag = palette->tag; - spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0); + gCreatingSpriteTemplate.paletteTag = palette->tag; + spriteId = CreateSprite(&gCreatingSpriteTemplate, 0x78, 0x40, 0); gTasks[taskId].data[2] = spriteId; gTasks[taskId].data[3] = left; gTasks[taskId].data[4] = top; diff --git a/src/credits.c b/src/credits.c index 28a4994be..3f1335cd8 100644 --- a/src/credits.c +++ b/src/credits.c @@ -166,7 +166,7 @@ struct CreditsEntry extern u8 unk_201e800[0x800]; extern u8 unk_201f000[0x800]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u16 gUnknown_02039358; extern s16 gUnknown_0203935A; @@ -174,7 +174,7 @@ extern s16 gUnknown_0203935C; static EWRAM_DATA s16 gUnknown_02039320 = 0; static EWRAM_DATA u16 gUnknown_02039322 = 0; // TASK A -EWRAM_DATA u8 gUnknown_02039324 = 0; +EWRAM_DATA u8 gHasHallOfFameRecords = 0; static EWRAM_DATA u8 gUnknown_02039325 = 0; extern u8 gReservedSpritePaletteCount; @@ -433,7 +433,7 @@ static void sub_814395C(void) UpdatePaletteFade(); if ((gMain.heldKeys & B_BUTTON) - && gUnknown_02039324 != 0 + && gHasHallOfFameRecords != 0 && gTasks[gUnknown_02039322].func == task_a_8143B68) { vblank_8143948(); @@ -1561,7 +1561,7 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - EWRAM, + (void *)EWRAM, gUnknown_0840B5A0[position], species, personality, @@ -1572,7 +1572,7 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20); sub_8143648(position, position); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].oam.paletteNum = position; gSprites[spriteId].oam.priority = 1; gSprites[spriteId].data[1] = position + 1; diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h new file mode 100644 index 000000000..a1584cf0d --- /dev/null +++ b/src/data/contest_opponents.h @@ -0,0 +1,1668 @@ +#include "constants/species.h" +#include "constants/moves.h" +#include "constants/contest.h" + +#define CONTEST_OPPONENT_JIMMY 0 +#define CONTEST_OPPONENT_EDITH 1 +#define CONTEST_OPPONENT_EVAN 2 +#define CONTEST_OPPONENT_KELSEY 3 +#define CONTEST_OPPONENT_MADISON 4 +#define CONTEST_OPPONENT_RAYMOND 5 +#define CONTEST_OPPONENT_GRANT 6 +#define CONTEST_OPPONENT_PAIGE 7 +#define CONTEST_OPPONENT_ALEC 8 +#define CONTEST_OPPONENT_SYDNEY 9 +#define CONTEST_OPPONENT_MORRIS 10 +#define CONTEST_OPPONENT_MARIAH 11 +#define CONTEST_OPPONENT_RUSSELL 12 +#define CONTEST_OPPONENT_MELANIE 13 +#define CONTEST_OPPONENT_CHANCE 14 +#define CONTEST_OPPONENT_KARINA 15 +#define CONTEST_OPPONENT_BOBBY 16 +#define CONTEST_OPPONENT_CLAIRE 17 +#define CONTEST_OPPONENT_WILLIE 18 +#define CONTEST_OPPONENT_CASSIDY 19 +#define CONTEST_OPPONENT_MORGAN 20 +#define CONTEST_OPPONENT_SUMMER 21 +#define CONTEST_OPPONENT_MILES 22 +#define CONTEST_OPPONENT_AUDREY 23 +#define CONTEST_OPPONENT_AVERY 24 +#define CONTEST_OPPONENT_ARIANA 25 +#define CONTEST_OPPONENT_ASHTON 26 +#define CONTEST_OPPONENT_SANDRA 27 +#define CONTEST_OPPONENT_CARSON 28 +#define CONTEST_OPPONENT_KATRINA 29 +#define CONTEST_OPPONENT_RONNIE 30 +#define CONTEST_OPPONENT_CLAUDIA 31 +#define CONTEST_OPPONENT_ELIAS 32 +#define CONTEST_OPPONENT_JADE 33 +#define CONTEST_OPPONENT_FRANCIS 34 +#define CONTEST_OPPONENT_ALISHA 35 +#define CONTEST_OPPONENT_SAUL 36 +#define CONTEST_OPPONENT_FELICIA 37 +#define CONTEST_OPPONENT_EMILIO 38 +#define CONTEST_OPPONENT_KARLA 39 +#define CONTEST_OPPONENT_DARRYL 40 +#define CONTEST_OPPONENT_SELENA 41 +#define CONTEST_OPPONENT_NOEL 42 +#define CONTEST_OPPONENT_LACEY 43 +#define CONTEST_OPPONENT_CORBIN 44 +#define CONTEST_OPPONENT_JUSTINA 45 +#define CONTEST_OPPONENT_RALPH 46 +#define CONTEST_OPPONENT_ROSA 47 +#define CONTEST_OPPONENT_KEATON 48 +#define CONTEST_OPPONENT_MAYRA 49 +#define CONTEST_OPPONENT_LAMAR 50 +#define CONTEST_OPPONENT_AUBREY 51 +#define CONTEST_OPPONENT_NIGEL 52 +#define CONTEST_OPPONENT_CAMILLE 53 +#define CONTEST_OPPONENT_DEON 54 +#define CONTEST_OPPONENT_JANELLE 55 +#define CONTEST_OPPONENT_HEATH 56 +#define CONTEST_OPPONENT_SASHA 57 +#define CONTEST_OPPONENT_FRANKIE 58 +#define CONTEST_OPPONENT_HELEN 59 + +// All contest opponents have a common set of AI flags (which contains all of the actually +// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags. +// Seems that like the battle AI they had more plans for this than what ended up in the final game +#define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_3 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_4 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_5 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_6 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_7 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_8 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_9 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_24) +#define CONTEST_AI_SET_A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_11 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_22 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_24) +#define CONTEST_AI_SET_F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_10 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_11 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_12 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_13 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_14 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_15 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_16 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_17 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_23 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_18 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_19 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_1C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_1D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25) + +#if defined(ENGLISH) +#define CONTEST_OPPONENT_NICKNAME_JIMMY "POOCHY" +#define CONTEST_OPPONENT_OTNAME_JIMMY "JIMMY" +#define CONTEST_OPPONENT_NICKNAME_EDITH "ZIGOON" +#define CONTEST_OPPONENT_OTNAME_EDITH "EDITH" +#define CONTEST_OPPONENT_NICKNAME_EVAN "DUSTER" +#define CONTEST_OPPONENT_OTNAME_EVAN "EVAN" +#define CONTEST_OPPONENT_NICKNAME_KELSEY "DOTS" +#define CONTEST_OPPONENT_OTNAME_KELSEY "KELSEY" +#define CONTEST_OPPONENT_NICKNAME_MADISON "TATAY" +#define CONTEST_OPPONENT_OTNAME_MADISON "MADISON" +#define CONTEST_OPPONENT_NICKNAME_RAYMOND "NINDA" +#define CONTEST_OPPONENT_OTNAME_RAYMOND "RAYMOND" +#define CONTEST_OPPONENT_NICKNAME_GRANT "SMISH" +#define CONTEST_OPPONENT_OTNAME_GRANT "GRANT" +#define CONTEST_OPPONENT_NICKNAME_PAIGE "GULWEE" +#define CONTEST_OPPONENT_OTNAME_PAIGE "PAIGE" +#define CONTEST_OPPONENT_NICKNAME_ALEC "SLOKTH" +#define CONTEST_OPPONENT_OTNAME_ALEC "ALEC" +#define CONTEST_OPPONENT_NICKNAME_SYDNEY "WHIRIS" +#define CONTEST_OPPONENT_OTNAME_SYDNEY "SYDNEY" +#define CONTEST_OPPONENT_NICKNAME_MORRIS "MAHITA" +#define CONTEST_OPPONENT_OTNAME_MORRIS "MORRIS" +#define CONTEST_OPPONENT_NICKNAME_MARIAH "RONAR" +#define CONTEST_OPPONENT_OTNAME_MARIAH "MARIAH" +#define CONTEST_OPPONENT_NICKNAME_RUSSELL "ZUTZU" +#define CONTEST_OPPONENT_OTNAME_RUSSELL "RUSSELL" +#define CONTEST_OPPONENT_NICKNAME_MELANIE "GULIN" +#define CONTEST_OPPONENT_OTNAME_MELANIE "MELANIE" +#define CONTEST_OPPONENT_NICKNAME_CHANCE "RIKELEC" +#define CONTEST_OPPONENT_OTNAME_CHANCE "CHANCE" +#define CONTEST_OPPONENT_NICKNAME_KARINA "RELIA" +#define CONTEST_OPPONENT_OTNAME_KARINA "KARINA" +#define CONTEST_OPPONENT_NICKNAME_BOBBY "DUODO" +#define CONTEST_OPPONENT_OTNAME_BOBBY "BOBBY" +#define CONTEST_OPPONENT_NICKNAME_CLAIRE "PINCHIN" +#define CONTEST_OPPONENT_OTNAME_CLAIRE "CLAIRE" +#define CONTEST_OPPONENT_NICKNAME_WILLIE "NACAC" +#define CONTEST_OPPONENT_OTNAME_WILLIE "WILLIE" +#define CONTEST_OPPONENT_NICKNAME_CASSIDY "SHRAND" +#define CONTEST_OPPONENT_OTNAME_CASSIDY "CASSIDY" +#define CONTEST_OPPONENT_NICKNAME_MORGAN "TOYBAL" +#define CONTEST_OPPONENT_OTNAME_MORGAN "MORGAN" +#define CONTEST_OPPONENT_NICKNAME_SUMMER "LENUM" +#define CONTEST_OPPONENT_OTNAME_SUMMER "SUMMER" +#define CONTEST_OPPONENT_NICKNAME_MILES "SPININ" +#define CONTEST_OPPONENT_OTNAME_MILES "MILES" +#define CONTEST_OPPONENT_NICKNAME_AUDREY "SWABY" +#define CONTEST_OPPONENT_OTNAME_AUDREY "AUDREY" +#define CONTEST_OPPONENT_NICKNAME_AVERY "NOONE" +#define CONTEST_OPPONENT_OTNAME_AVERY "AVERY" +#define CONTEST_OPPONENT_NICKNAME_ARIANA "KECON" +#define CONTEST_OPPONENT_OTNAME_ARIANA "ARIANA" +#define CONTEST_OPPONENT_NICKNAME_ASHTON "GOLDEN" +#define CONTEST_OPPONENT_OTNAME_ASHTON "ASHTON" +#define CONTEST_OPPONENT_NICKNAME_SANDRA "BOBOACH" +#define CONTEST_OPPONENT_OTNAME_SANDRA "SANDRA" +#define CONTEST_OPPONENT_NICKNAME_CARSON "CORPY" +#define CONTEST_OPPONENT_OTNAME_CARSON "CARSON" +#define CONTEST_OPPONENT_NICKNAME_KATRINA "TADO" +#define CONTEST_OPPONENT_OTNAME_KATRINA "KATRINA" +#define CONTEST_OPPONENT_NICKNAME_RONNIE "LAIRN" +#define CONTEST_OPPONENT_OTNAME_RONNIE "RONNIE" +#define CONTEST_OPPONENT_NICKNAME_CLAUDIA "NUZLE" +#define CONTEST_OPPONENT_OTNAME_CLAUDIA "CLAUDIA" +#define CONTEST_OPPONENT_NICKNAME_ELIAS "NINAS" +#define CONTEST_OPPONENT_OTNAME_ELIAS "ELIAS" +#define CONTEST_OPPONENT_NICKNAME_JADE "WELOW" +#define CONTEST_OPPONENT_OTNAME_JADE "JADE" +#define CONTEST_OPPONENT_NICKNAME_FRANCIS "YENA" +#define CONTEST_OPPONENT_OTNAME_FRANCIS "FRANCIS" +#define CONTEST_OPPONENT_NICKNAME_ALISHA "TIFLY" +#define CONTEST_OPPONENT_OTNAME_ALISHA "ALISHA" +#define CONTEST_OPPONENT_NICKNAME_SAUL "KINGSEA" +#define CONTEST_OPPONENT_OTNAME_SAUL "SAUL" +#define CONTEST_OPPONENT_NICKNAME_FELICIA "ERUPAM" +#define CONTEST_OPPONENT_OTNAME_FELICIA "FELICIA" +#define CONTEST_OPPONENT_NICKNAME_EMILIO "CHOPAM" +#define CONTEST_OPPONENT_OTNAME_EMILIO "EMILIO" +#define CONTEST_OPPONENT_NICKNAME_KARLA "LOMBE" +#define CONTEST_OPPONENT_OTNAME_KARLA "KARLA" +#define CONTEST_OPPONENT_NICKNAME_DARRYL "VIPES" +#define CONTEST_OPPONENT_OTNAME_DARRYL "DARRYL" +#define CONTEST_OPPONENT_NICKNAME_SELENA "MERAIL" +#define CONTEST_OPPONENT_OTNAME_SELENA "SELENA" +#define CONTEST_OPPONENT_NICKNAME_NOEL "KARPAG" +#define CONTEST_OPPONENT_OTNAME_NOEL "NOEL" +#define CONTEST_OPPONENT_NICKNAME_LACEY "LUNONE" +#define CONTEST_OPPONENT_OTNAME_LACEY "LACEY" +#define CONTEST_OPPONENT_NICKNAME_CORBIN "PELIPE" +#define CONTEST_OPPONENT_OTNAME_CORBIN "CORBIN" +#define CONTEST_OPPONENT_NICKNAME_JUSTINA "RADOS" +#define CONTEST_OPPONENT_OTNAME_JUSTINA "JUSTINA" +#define CONTEST_OPPONENT_NICKNAME_RALPH "LOUDERD" +#define CONTEST_OPPONENT_OTNAME_RALPH "RALPH" +#define CONTEST_OPPONENT_NICKNAME_ROSA "CATTED" +#define CONTEST_OPPONENT_OTNAME_ROSA "ROSA" +#define CONTEST_OPPONENT_NICKNAME_KEATON "SLING" +#define CONTEST_OPPONENT_OTNAME_KEATON "KEATON" +#define CONTEST_OPPONENT_NICKNAME_MAYRA "TARIA" +#define CONTEST_OPPONENT_OTNAME_MAYRA "MAYRA" +#define CONTEST_OPPONENT_NICKNAME_LAMAR "SHEDJA" +#define CONTEST_OPPONENT_OTNAME_LAMAR "LAMAR" +#define CONTEST_OPPONENT_NICKNAME_AUBREY "PLUMILE" +#define CONTEST_OPPONENT_OTNAME_AUBREY "AUBREY" +#define CONTEST_OPPONENT_NICKNAME_NIGEL "KULLUSK" +#define CONTEST_OPPONENT_OTNAME_NIGEL "NIGEL" +#define CONTEST_OPPONENT_NICKNAME_CAMILLE "UTAN" +#define CONTEST_OPPONENT_OTNAME_CAMILLE "CAMILLE" +#define CONTEST_OPPONENT_NICKNAME_DEON "PEDOS" +#define CONTEST_OPPONENT_OTNAME_DEON "DEON" +#define CONTEST_OPPONENT_NICKNAME_JANELLE "LUVIS" +#define CONTEST_OPPONENT_OTNAME_JANELLE "JANELLE" +#define CONTEST_OPPONENT_NICKNAME_HEATH "HEROSS" +#define CONTEST_OPPONENT_OTNAME_HEATH "HEATH" +#define CONTEST_OPPONENT_NICKNAME_SASHA "RODLECT" +#define CONTEST_OPPONENT_OTNAME_SASHA "SASHA" +#define CONTEST_OPPONENT_NICKNAME_FRANKIE "CHUPY" +#define CONTEST_OPPONENT_OTNAME_FRANKIE "FRANKIE" +#define CONTEST_OPPONENT_NICKNAME_HELEN "WOBET" +#define CONTEST_OPPONENT_OTNAME_HELEN "HELEN" +#elif defined(GERMAN) +#define CONTEST_OPPONENT_NICKNAME_JIMMY "FIFFI" +#define CONTEST_OPPONENT_OTNAME_JIMMY "JIMMY" +#define CONTEST_OPPONENT_NICKNAME_EDITH "ZIGGY" +#define CONTEST_OPPONENT_OTNAME_EDITH "KLARA" +#define CONTEST_OPPONENT_NICKNAME_EVAN "DOXU" +#define CONTEST_OPPONENT_OTNAME_EVAN "KARLO" +#define CONTEST_OPPONENT_NICKNAME_KELSEY "SAMINI" +#define CONTEST_OPPONENT_OTNAME_KELSEY "TRUDI" +#define CONTEST_OPPONENT_NICKNAME_MADISON "SCHWALBI" +#define CONTEST_OPPONENT_OTNAME_MADISON "HELENA" +#define CONTEST_OPPONENT_NICKNAME_RAYMOND "CADINJA" +#define CONTEST_OPPONENT_OTNAME_RAYMOND "WILLI" +#define CONTEST_OPPONENT_NICKNAME_GRANT "KNILZLI" +#define CONTEST_OPPONENT_OTNAME_GRANT "HARTMUT" +#define CONTEST_OPPONENT_NICKNAME_PAIGE "WINGI" +#define CONTEST_OPPONENT_OTNAME_PAIGE "CLAUDIA" +#define CONTEST_OPPONENT_NICKNAME_ALEC "BLUMPI" +#define CONTEST_OPPONENT_OTNAME_ALEC "ALEC" +#define CONTEST_OPPONENT_NICKNAME_SYDNEY "FLURMI" +#define CONTEST_OPPONENT_OTNAME_SYDNEY "SILKE" +#define CONTEST_OPPONENT_NICKNAME_MORRIS "MAHITA" +#define CONTEST_OPPONENT_OTNAME_MORRIS "PEER" +#define CONTEST_OPPONENT_NICKNAME_MARIAH "STOLLI" +#define CONTEST_OPPONENT_OTNAME_MARIAH "MARIA" +#define CONTEST_OPPONENT_NICKNAME_RUSSELL "BLUTBAT" +#define CONTEST_OPPONENT_OTNAME_RUSSELL "RUDOLF" +#define CONTEST_OPPONENT_NICKNAME_MELANIE "SCHLUPPI" +#define CONTEST_OPPONENT_OTNAME_MELANIE "MELANIE" +#define CONTEST_OPPONENT_NICKNAME_CHANCE "FRIZZZEL" +#define CONTEST_OPPONENT_OTNAME_CHANCE "BERTRAM" +#define CONTEST_OPPONENT_NICKNAME_KARINA "ROSALI" +#define CONTEST_OPPONENT_OTNAME_KARINA "KARINA" +#define CONTEST_OPPONENT_NICKNAME_BOBBY "DOLDI" +#define CONTEST_OPPONENT_OTNAME_BOBBY "BOBBY" +#define CONTEST_OPPONENT_NICKNAME_CLAIRE "KNACKI" +#define CONTEST_OPPONENT_OTNAME_CLAIRE "JUDITH" +#define CONTEST_OPPONENT_NICKNAME_WILLIE "KOTUS" +#define CONTEST_OPPONENT_OTNAME_WILLIE "HELMUT" +#define CONTEST_OPPONENT_NICKNAME_CASSIDY "SADAN" +#define CONTEST_OPPONENT_OTNAME_CASSIDY "BRITTA" +#define CONTEST_OPPONENT_NICKNAME_MORGAN "PUPPIBAL" +#define CONTEST_OPPONENT_OTNAME_MORGAN "TORBEN" +#define CONTEST_OPPONENT_NICKNAME_SUMMER "CLAMAUK" +#define CONTEST_OPPONENT_OTNAME_SUMMER "BIANKA" +#define CONTEST_OPPONENT_NICKNAME_MILES "SPIRRWIRR" +#define CONTEST_OPPONENT_OTNAME_MILES "ALEX" +#define CONTEST_OPPONENT_NICKNAME_AUDREY "BLUPPF" +#define CONTEST_OPPONENT_OTNAME_AUDREY "SABINE" +#define CONTEST_OPPONENT_NICKNAME_AVERY "DAKSIRAD" +#define CONTEST_OPPONENT_OTNAME_AVERY "AUGUST" +#define CONTEST_OPPONENT_NICKNAME_ARIANA "KECLI" +#define CONTEST_OPPONENT_OTNAME_ARIANA "ARIANA" +#define CONTEST_OPPONENT_NICKNAME_ASHTON "GOLDINCHEN" +#define CONTEST_OPPONENT_OTNAME_ASHTON "TONI" +#define CONTEST_OPPONENT_NICKNAME_SANDRA "SCHMERBSE" +#define CONTEST_OPPONENT_OTNAME_SANDRA "SUSI" +#define CONTEST_OPPONENT_NICKNAME_CARSON "KREBSILI" +#define CONTEST_OPPONENT_OTNAME_CARSON "CLEMENS" +#define CONTEST_OPPONENT_NICKNAME_KATRINA "URLOTZO" +#define CONTEST_OPPONENT_OTNAME_KATRINA "KATRIN" +#define CONTEST_OPPONENT_NICKNAME_RONNIE "STROLLAK" +#define CONTEST_OPPONENT_OTNAME_RONNIE "ACHIM" +#define CONTEST_OPPONENT_NICKNAME_CLAUDIA "BLASNI" +#define CONTEST_OPPONENT_OTNAME_CLAUDIA "GABI" +#define CONTEST_OPPONENT_NICKNAME_ELIAS "ASKINJA" +#define CONTEST_OPPONENT_OTNAME_ELIAS "ROLF" +#define CONTEST_OPPONENT_NICKNAME_JADE "SCHWALLO" +#define CONTEST_OPPONENT_OTNAME_JADE "ELSE" +#define CONTEST_OPPONENT_NICKNAME_FRANCIS "JÄNAGI" +#define CONTEST_OPPONENT_OTNAME_FRANCIS "FRANK" +#define CONTEST_OPPONENT_NICKNAME_ALISHA "PAPINILLI" +#define CONTEST_OPPONENT_OTNAME_ALISHA "ANNA" +#define CONTEST_OPPONENT_NICKNAME_SAUL "KINGOLA" +#define CONTEST_OPPONENT_OTNAME_SAUL "KONRAD" +#define CONTEST_OPPONENT_NICKNAME_FELICIA "ERUPTAM" +#define CONTEST_OPPONENT_OTNAME_FELICIA "LUISE" +#define CONTEST_OPPONENT_NICKNAME_EMILIO "OLLOMA" +#define CONTEST_OPPONENT_OTNAME_EMILIO "MICHAEL" +#define CONTEST_OPPONENT_NICKNAME_KARLA "OMBRE" +#define CONTEST_OPPONENT_OTNAME_KARLA "ANIKA" +#define CONTEST_OPPONENT_NICKNAME_DARRYL "PITISVI" +#define CONTEST_OPPONENT_OTNAME_DARRYL "DETLEF" +#define CONTEST_OPPONENT_NICKNAME_SELENA "WAILA" +#define CONTEST_OPPONENT_OTNAME_SELENA "XENIA" +#define CONTEST_OPPONENT_NICKNAME_NOEL "KARDORPA" +#define CONTEST_OPPONENT_OTNAME_NOEL "FLORIAN" +#define CONTEST_OPPONENT_NICKNAME_LACEY "LUNA" +#define CONTEST_OPPONENT_OTNAME_LACEY "DIANA" +#define CONTEST_OPPONENT_NICKNAME_CORBIN "PEPE" +#define CONTEST_OPPONENT_OTNAME_CORBIN "LUTZ" +#define CONTEST_OPPONENT_NICKNAME_JUSTINA "GARADI" +#define CONTEST_OPPONENT_OTNAME_JUSTINA "JASMIN" +#define CONTEST_OPPONENT_NICKNAME_RALPH "KRAKEEL" +#define CONTEST_OPPONENT_OTNAME_RALPH "GERT" +#define CONTEST_OPPONENT_NICKNAME_ROSA "ENEKOTO" +#define CONTEST_OPPONENT_OTNAME_ROSA "ROSA" +#define CONTEST_OPPONENT_NICKNAME_KEATON "ASSIMAX" +#define CONTEST_OPPONENT_OTNAME_KEATON "KURT" +#define CONTEST_OPPONENT_NICKNAME_MAYRA "RIA" +#define CONTEST_OPPONENT_OTNAME_MAYRA "SONJA" +#define CONTEST_OPPONENT_NICKNAME_LAMAR "EXUVINJA" +#define CONTEST_OPPONENT_OTNAME_LAMAR "SÖNKE" +#define CONTEST_OPPONENT_NICKNAME_AUBREY "BLUMIEFT" +#define CONTEST_OPPONENT_OTNAME_AUBREY "MAGDA" +#define CONTEST_OPPONENT_NICKNAME_NIGEL "WANDELBOLD" +#define CONTEST_OPPONENT_OTNAME_NIGEL "SASCHA" +#define CONTEST_OPPONENT_NICKNAME_CAMILLE "TUMANI" +#define CONTEST_OPPONENT_OTNAME_CAMILLE "MILA" +#define CONTEST_OPPONENT_NICKNAME_DEON "HAITODO" +#define CONTEST_OPPONENT_OTNAME_DEON "KNUT" +#define CONTEST_OPPONENT_NICKNAME_JANELLE "KUSSLIEB" +#define CONTEST_OPPONENT_OTNAME_JANELLE "INCA" +#define CONTEST_OPPONENT_NICKNAME_HEATH "SKARAB" +#define CONTEST_OPPONENT_OTNAME_HEATH "FELIX" +#define CONTEST_OPPONENT_NICKNAME_SASHA "LEKBAL" +#define CONTEST_OPPONENT_OTNAME_SASHA "DEBORA" +#define CONTEST_OPPONENT_NICKNAME_FRANKIE "DEIBEL" +#define CONTEST_OPPONENT_OTNAME_FRANKIE "BORIS" +#define CONTEST_OPPONENT_NICKNAME_HELEN "WOHINGENAU" +#define CONTEST_OPPONENT_OTNAME_HELEN "DELIA" +#endif //ENGLISH + +const struct ContestPokemon gContestOpponents[] = { + [CONTEST_OPPONENT_JIMMY] = { + .species = SPECIES_POOCHYENA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JIMMY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JIMMY), + .trainerGfxId = OBJ_EVENT_GFX_BOY_1, + .flags = CONTEST_AI_SET_1, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_ROAR, MOVE_BITE, MOVE_TAKE_DOWN, MOVE_HOWL }, + .cool = 10, + .beauty = 4, + .cute = 10, + .smart = 3, + .tough = 4, + .sheen = 50, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_EDITH] = { + .species = SPECIES_ZIGZAGOON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_EDITH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_EDITH), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_REST, MOVE_TAIL_WHIP, MOVE_TACKLE, MOVE_COVET }, + .cool = 10, + .beauty = 10, + .cute = 6, + .smart = 1, + .tough = 2, + .sheen = 60, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_EVAN] = { + .species = SPECIES_DUSTOX, + .nickname = _(CONTEST_OPPONENT_NICKNAME_EVAN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_EVAN), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_3, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SILVER_WIND, MOVE_MOONLIGHT, MOVE_LIGHT_SCREEN, MOVE_GUST }, + .cool = 2, + .beauty = 10, + .cute = 10, + .smart = 12, + .tough = 4, + .sheen = 70, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KELSEY] = { + .species = SPECIES_SEEDOT, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KELSEY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KELSEY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_4, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_BIDE, MOVE_SYNTHESIS, MOVE_BULLET_SEED, MOVE_GROWTH }, + .cool = 3, + .beauty = 3, + .cute = 5, + .smart = 2, + .tough = 7, + .sheen = 80, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MADISON] = { + .species = SPECIES_TAILLOW, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MADISON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MADISON), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_5, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_WING_ATTACK, MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_GROWL }, + .cool = 1, + .beauty = 3, + .cute = 3, + .smart = 5, + .tough = 4, + .sheen = 90, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RAYMOND] = { + .species = SPECIES_NINCADA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RAYMOND), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RAYMOND), + .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, + .flags = CONTEST_AI_SET_6, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_LEECH_LIFE, MOVE_FALSE_SWIPE, MOVE_FURY_SWIPES, MOVE_MIND_READER }, + .cool = 5, + .beauty = 2, + .cute = 10, + .smart = 7, + .tough = 8, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_GRANT] = { + .species = SPECIES_SHROOMISH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_GRANT), + .trainerName = _(CONTEST_OPPONENT_OTNAME_GRANT), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_7, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_ATTRACT }, + .cool = 3, + .beauty = 3, + .cute = 10, + .smart = 2, + .tough = 2, + .sheen = 50, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_PAIGE] = { + .species = SPECIES_WINGULL, + .nickname = _(CONTEST_OPPONENT_NICKNAME_PAIGE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_PAIGE), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_8, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MIST, MOVE_WATER_GUN, MOVE_GROWL, MOVE_PURSUIT }, + .cool = 3, + .beauty = 5, + .cute = 1, + .smart = 10, + .tough = 10, + .sheen = 60, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ALEC] = { + .species = SPECIES_SLAKOTH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ALEC), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ALEC), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_9, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_STRENGTH, MOVE_COUNTER, MOVE_YAWN, MOVE_ENCORE }, + .cool = 10, + .beauty = 4, + .cute = 4, + .smart = 5, + .tough = 18, + .sheen = 70, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SYDNEY] = { + .species = SPECIES_WHISMUR, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SYDNEY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SYDNEY), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_HYPER_VOICE }, + .cool = 2, + .beauty = 2, + .cute = 7, + .smart = 2, + .tough = 7, + .sheen = 80, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MORRIS] = { + .species = SPECIES_MAKUHITA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MORRIS), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MORRIS), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_B, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SEISMIC_TOSS, MOVE_VITAL_THROW, MOVE_TACKLE, MOVE_REVERSAL }, + .cool = 9, + .beauty = 1, + .cute = 1, + .smart = 8, + .tough = 1, + .sheen = 90, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MARIAH] = { + .species = SPECIES_ARON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MARIAH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MARIAH), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_C, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_HEADBUTT, MOVE_TAKE_DOWN }, + .cool = 5, + .beauty = 10, + .cute = 2, + .smart = 10, + .tough = 2, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RUSSELL] = { + .species = SPECIES_ZUBAT, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RUSSELL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RUSSELL), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_D, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_HAZE, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_LEECH_LIFE }, + .cool = 4, + .beauty = 2, + .cute = 2, + .smart = 2, + .tough = 10, + .sheen = 50, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MELANIE] = { + .species = SPECIES_GULPIN, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MELANIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MELANIE), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_GIRL_1, + .flags = CONTEST_AI_SET_E, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SLUDGE, MOVE_AMNESIA, MOVE_TOXIC, MOVE_YAWN }, + .cool = 1, + .beauty = 10, + .cute = 1, + .smart = 10, + .tough = 5, + .sheen = 60, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CHANCE] = { + .species = SPECIES_ELECTRIKE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CHANCE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CHANCE), + .trainerGfxId = OBJ_EVENT_GFX_BOY_4, + .flags = CONTEST_AI_SET_F, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_ROAR }, + .cool = 20, + .beauty = 10, + .cute = 1, + .smart = 1, + .tough = 1, + .sheen = 70, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KARINA] = { + .species = SPECIES_ROSELIA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KARINA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KARINA), + .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, + .flags = CONTEST_AI_SET_10, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_PETAL_DANCE, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_INGRAIN }, + .cool = 50, + .beauty = 15, + .cute = 75, + .smart = 10, + .tough = 20, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_BOBBY] = { + .species = SPECIES_DODUO, + .nickname = _(CONTEST_OPPONENT_NICKNAME_BOBBY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_BOBBY), + .trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_PECK, MOVE_FURY_ATTACK, MOVE_RETURN, MOVE_GROWL }, + .cool = 15, + .beauty = 21, + .cute = 15, + .smart = 85, + .tough = 35, + .sheen = 110, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CLAIRE] = { + .species = SPECIES_TRAPINCH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CLAIRE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CLAIRE), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_11, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_BITE, MOVE_SAND_ATTACK, MOVE_DIG, MOVE_FAINT_ATTACK }, + .cool = 75, + .beauty = 25, + .cute = 25, + .smart = 10, + .tough = 25, + .sheen = 120, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_WILLIE] = { + .species = SPECIES_CACNEA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_WILLIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_WILLIE), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_12, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SPIKES, MOVE_LEER, MOVE_POISON_STING, MOVE_SAND_ATTACK }, + .cool = 10, + .beauty = 30, + .cute = 25, + .smart = 65, + .tough = 25, + .sheen = 130, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CASSIDY] = { + .species = SPECIES_SANDSHREW, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CASSIDY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CASSIDY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_13, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SLASH, MOVE_DEFENSE_CURL, MOVE_SWIFT, MOVE_FURY_SWIPES }, + .cool = 30, + .beauty = 90, + .cute = 30, + .smart = 10, + .tough = 100, + .sheen = 140, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MORGAN] = { + .species = SPECIES_BALTOY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MORGAN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MORGAN), + .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, + .flags = CONTEST_AI_SET_14, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SELF_DESTRUCT, MOVE_ROCK_TOMB, MOVE_PSYBEAM, MOVE_CONFUSION }, + .cool = 50, + .beauty = 40, + .cute = 10, + .smart = 35, + .tough = 35, + .sheen = 150, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SUMMER] = { + .species = SPECIES_NUMEL, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SUMMER), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SUMMER), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_15, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_MAGNITUDE, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY, MOVE_FLAMETHROWER }, + .cool = 40, + .beauty = 5, + .cute = 40, + .smart = 40, + .tough = 40, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MILES] = { + .species = SPECIES_SPINDA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MILES), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MILES), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_16, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_TEETER_DANCE, MOVE_PSYCH_UP, MOVE_HYPNOSIS, MOVE_UPROAR }, + .cool = 25, + .beauty = 75, + .cute = 25, + .smart = 10, + .tough = 25, + .sheen = 110, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_AUDREY] = { + .species = SPECIES_SWABLU, + .nickname = _(CONTEST_OPPONENT_NICKNAME_AUDREY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_AUDREY), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_17, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MIRROR_MOVE, MOVE_PERISH_SONG, MOVE_SAFEGUARD, MOVE_MIST }, + .cool = 30, + .beauty = 30, + .cute = 40, + .smart = 30, + .tough = 25, + .sheen = 120, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_AVERY] = { + .species = SPECIES_LINOONE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_AVERY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_AVERY), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_GROWL, MOVE_COVET, MOVE_SAND_ATTACK, MOVE_REST }, + .cool = 40, + .beauty = 40, + .cute = 30, + .smart = 10, + .tough = 30, + .sheen = 130, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ARIANA] = { + .species = SPECIES_KECLEON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ARIANA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ARIANA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_18, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_THIEF, MOVE_SCREECH, MOVE_ANCIENT_POWER, MOVE_BIND }, + .cool = 10, + .beauty = 10, + .cute = 40, + .smart = 75, + .tough = 35, + .sheen = 140, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ASHTON] = { + .species = SPECIES_GOLDEEN, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ASHTON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ASHTON), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_19, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_HORN_ATTACK, MOVE_FURY_ATTACK, MOVE_HORN_DRILL, MOVE_TAIL_WHIP }, + .cool = 70, + .beauty = 30, + .cute = 5, + .smart = 30, + .tough = 25, + .sheen = 150, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SANDRA] = { + .species = SPECIES_BARBOACH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SANDRA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SANDRA), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_GIRL_1, + .flags = CONTEST_AI_SET_1A, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_EARTHQUAKE, MOVE_FUTURE_SIGHT }, + .cool = 45, + .beauty = 45, + .cute = 60, + .smart = 25, + .tough = 15, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CARSON] = { + .species = SPECIES_SKARMORY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CARSON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CARSON), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_1B, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SWIFT, MOVE_DOUBLE_TEAM, MOVE_AGILITY, MOVE_CUT }, + .cool = 40, + .beauty = 30, + .cute = 25, + .smart = 60, + .tough = 20, + .sheen = 110, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KATRINA] = { + .species = SPECIES_LOTAD, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KATRINA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KATRINA), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_1C, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ASTONISH, MOVE_GROWL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE }, + .cool = 15, + .beauty = 15, + .cute = 30, + .smart = 15, + .tough = 75, + .sheen = 120, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RONNIE] = { + .species = SPECIES_LAIRON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RONNIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RONNIE), + .trainerGfxId = OBJ_EVENT_GFX_HIKER, + .flags = CONTEST_AI_SET_1D, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_METAL_SOUND, MOVE_METAL_CLAW, MOVE_HARDEN, MOVE_TAKE_DOWN }, + .cool = 30, + .beauty = 50, + .cute = 35, + .smart = 100, + .tough = 90, + .sheen = 200, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CLAUDIA] = { + .species = SPECIES_NUZLEAF, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CLAUDIA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CLAUDIA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_GROWTH, MOVE_RAZOR_WIND, MOVE_EXPLOSION, MOVE_EXTRASENSORY }, + .cool = 75, + .beauty = 75, + .cute = 65, + .smart = 35, + .tough = 70, + .sheen = 210, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ELIAS] = { + .species = SPECIES_NINJASK, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ELIAS), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ELIAS), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_11, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SCREECH, MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS }, + .cool = 30, + .beauty = 50, + .cute = 95, + .smart = 70, + .tough = 70, + .sheen = 220, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_JADE] = { + .species = SPECIES_SWELLOW, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JADE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JADE), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_12, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_WING_ATTACK, MOVE_FLY }, + .cool = 65, + .beauty = 85, + .cute = 35, + .smart = 75, + .tough = 40, + .sheen = 230, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_FRANCIS] = { + .species = SPECIES_MIGHTYENA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_FRANCIS), + .trainerName = _(CONTEST_OPPONENT_OTNAME_FRANCIS), + .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, + .flags = CONTEST_AI_SET_5, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_TAUNT, MOVE_THIEF, MOVE_ODOR_SLEUTH, MOVE_TAKE_DOWN }, + .cool = 40, + .beauty = 80, + .cute = 35, + .smart = 70, + .tough = 70, + .sheen = 240, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ALISHA] = { + .species = SPECIES_BEAUTIFLY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ALISHA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ALISHA), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_1E, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MORNING_SUN, MOVE_SILVER_WIND, MOVE_STUN_SPORE, MOVE_SECRET_POWER }, + .cool = 40, + .beauty = 70, + .cute = 25, + .smart = 80, + .tough = 100, + .sheen = 250, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SAUL] = { + .species = SPECIES_SEAKING, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SAUL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SAUL), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_1F, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_FLAIL, MOVE_SUPERSONIC, MOVE_HORN_ATTACK, MOVE_FURY_ATTACK }, + .cool = 80, + .beauty = 60, + .cute = 30, + .smart = 70, + .tough = 90, + .sheen = 200, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_FELICIA] = { + .species = SPECIES_CAMERUPT, + .nickname = _(CONTEST_OPPONENT_NICKNAME_FELICIA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_FELICIA), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_16, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_EARTHQUAKE, MOVE_FISSURE, MOVE_OVERHEAT, MOVE_HYPER_BEAM }, + .cool = 100, + .beauty = 80, + .cute = 20, + .smart = 50, + .tough = 65, + .sheen = 210, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_EMILIO] = { + .species = SPECIES_MACHOP, + .nickname = _(CONTEST_OPPONENT_NICKNAME_EMILIO), + .trainerName = _(CONTEST_OPPONENT_OTNAME_EMILIO), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_20, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SEISMIC_TOSS, MOVE_FOCUS_ENERGY, MOVE_KARATE_CHOP, MOVE_SCARY_FACE }, + .cool = 70, + .beauty = 85, + .cute = 25, + .smart = 60, + .tough = 50, + .sheen = 220, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KARLA] = { + .species = SPECIES_LOMBRE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KARLA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KARLA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ATTRACT, MOVE_FLASH, MOVE_UPROAR, MOVE_GROWL }, + .cool = 40, + .beauty = 60, + .cute = 90, + .smart = 45, + .tough = 70, + .sheen = 230, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_DARRYL] = { + .species = SPECIES_SEVIPER, + .nickname = _(CONTEST_OPPONENT_NICKNAME_DARRYL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_DARRYL), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_18, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP, MOVE_SCREECH }, + .cool = 35, + .beauty = 50, + .cute = 90, + .smart = 40, + .tough = 100, + .sheen = 240, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SELENA] = { + .species = SPECIES_WAILMER, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SELENA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SELENA), + .trainerGfxId = OBJ_EVENT_GFX_OLD_WOMAN_1, + .flags = CONTEST_AI_SET_19, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_WATER_PULSE, MOVE_REST, MOVE_WATER_SPOUT, MOVE_SPLASH }, + .cool = 30, + .beauty = 100, + .cute = 100, + .smart = 50, + .tough = 30, + .sheen = 250, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_NOEL] = { + .species = SPECIES_MAGIKARP, + .nickname = _(CONTEST_OPPONENT_NICKNAME_NOEL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_NOEL), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_1A, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_TACKLE, MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE }, + .cool = 30, + .beauty = 30, + .cute = 160, + .smart = 50, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_LACEY] = { + .species = SPECIES_LUNATONE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_LACEY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_LACEY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_21, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_EXPLOSION, MOVE_FUTURE_SIGHT, MOVE_PSYCHIC, MOVE_CONFUSION }, + .cool = 50, + .beauty = 70, + .cute = 60, + .smart = 70, + .tough = 50, + .sheen = 210, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CORBIN] = { + .species = SPECIES_PELIPPER, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CORBIN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CORBIN), + .trainerGfxId = OBJ_EVENT_GFX_MANIAC, + .flags = CONTEST_AI_SET_F, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MIST, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_WING_ATTACK }, + .cool = 95, + .beauty = 80, + .cute = 85, + .smart = 35, + .tough = 35, + .sheen = 220, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_JUSTINA] = { + .species = SPECIES_GYARADOS, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JUSTINA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JUSTINA), + .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, + .flags = CONTEST_AI_SET_1D, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_HYPER_BEAM, MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE }, + .cool = 160, + .beauty = 200, + .cute = 20, + .smart = 40, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RALPH] = { + .species = SPECIES_LOUDRED, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RALPH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RALPH), + .trainerGfxId = OBJ_EVENT_GFX_OLD_MAN_1, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_HYPER_VOICE, MOVE_STOMP, MOVE_ROAR, MOVE_HOWL }, + .cool = 170, + .beauty = 50, + .cute = 55, + .smart = 150, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ROSA] = { + .species = SPECIES_DELCATTY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ROSA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ROSA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_11, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ATTRACT, MOVE_ASSIST, MOVE_FAINT_ATTACK, MOVE_TAIL_WHIP }, + .cool = 40, + .beauty = 200, + .cute = 150, + .smart = 185, + .tough = 60, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KEATON] = { + .species = SPECIES_SLAKING, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KEATON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KEATON), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_12, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_COVET, MOVE_COUNTER, MOVE_ENCORE, MOVE_SLACK_OFF }, + .cool = 85, + .beauty = 85, + .cute = 170, + .smart = 110, + .tough = 150, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MAYRA] = { + .species = SPECIES_ALTARIA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MAYRA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MAYRA), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_5, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_PERISH_SONG, MOVE_SAFEGUARD }, + .cool = 170, + .beauty = 150, + .cute = 30, + .smart = 30, + .tough = 90, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_LAMAR] = { + .species = SPECIES_KIRLIA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_LAMAR), + .trainerName = _(CONTEST_OPPONENT_OTNAME_LAMAR), + .trainerGfxId = OBJ_EVENT_GFX_BOY_4, + .flags = CONTEST_AI_SET_1E, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SHOCK_WAVE, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, MOVE_RETURN }, + .cool = 230, + .beauty = 60, + .cute = 60, + .smart = 230, + .tough = 80, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_AUBREY] = { + .species = SPECIES_VILEPLUME, + .nickname = _(CONTEST_OPPONENT_NICKNAME_AUBREY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_AUBREY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_1F, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_PETAL_DANCE, MOVE_SWEET_SCENT, MOVE_STUN_SPORE, MOVE_FLASH }, + .cool = 35, + .beauty = 200, + .cute = 150, + .smart = 130, + .tough = 40, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_NIGEL] = { + .species = SPECIES_DUSKULL, + .nickname = _(CONTEST_OPPONENT_NICKNAME_NIGEL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_NIGEL), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_16, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_DISABLE, MOVE_FUTURE_SIGHT, MOVE_NIGHT_SHADE, MOVE_PURSUIT }, + .cool = 25, + .beauty = 35, + .cute = 230, + .smart = 150, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CAMILLE] = { + .species = SPECIES_XATU, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CAMILLE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CAMILLE), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_20, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_PSYCHIC }, + .cool = 35, + .beauty = 35, + .cute = 150, + .smart = 130, + .tough = 170, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_DEON] = { + .species = SPECIES_SHARPEDO, + .nickname = _(CONTEST_OPPONENT_NICKNAME_DEON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_DEON), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_AGILITY, MOVE_SWAGGER, MOVE_TAUNT, MOVE_TAKE_DOWN }, + .cool = 140, + .beauty = 70, + .cute = 140, + .smart = 75, + .tough = 100, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_JANELLE] = { + .species = SPECIES_LUVDISC, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JANELLE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JANELLE), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_18, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_TAKE_DOWN, MOVE_CHARM }, + .cool = 50, + .beauty = 100, + .cute = 220, + .smart = 40, + .tough = 190, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_HEATH] = { + .species = SPECIES_HERACROSS, + .nickname = _(CONTEST_OPPONENT_NICKNAME_HEATH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_HEATH), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_19, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_STRENGTH, MOVE_ENDURE, MOVE_REVERSAL, MOVE_ROCK_TOMB }, + .cool = 170, + .beauty = 70, + .cute = 110, + .smart = 240, + .tough = 140, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SASHA] = { + .species = SPECIES_ELECTRODE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SASHA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SASHA), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_GIRL_1, + .flags = CONTEST_AI_SET_1A, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_EXPLOSION, MOVE_LIGHT_SCREEN, MOVE_SWIFT, MOVE_FLASH }, + .cool = 200, + .beauty = 200, + .cute = 30, + .smart = 35, + .tough = 50, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_FRANKIE] = { + .species = SPECIES_PICHU, + .nickname = _(CONTEST_OPPONENT_NICKNAME_FRANKIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_FRANKIE), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_21, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_REST, MOVE_TAIL_WHIP }, + .cool = 25, + .beauty = 150, + .cute = 180, + .smart = 115, + .tough = 120, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_HELEN] = { + .species = SPECIES_WOBBUFFET, + .nickname = _(CONTEST_OPPONENT_NICKNAME_HELEN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_HELEN), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_F, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND }, + .cool = 60, + .beauty = 230, + .cute = 50, + .smart = 220, + .tough = 210, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, +}; diff --git a/src/data/graphics.c b/src/data/graphics.c index 0e98195cd..8c98739a2 100644 --- a/src/data/graphics.c +++ b/src/data/graphics.c @@ -355,11 +355,11 @@ const u8 gContestNumbers_UnusedGfx[] = INCBIN_U8("graphics/unused/numbers.4bpp.l const u8 gContestNumbers_UnusedPal[] = INCBIN_U8("graphics/unused/numbers.gbapal.lz"); const u8 unused_old_contest_2_4bpp[] = INCBIN_U8("graphics/unused/old_contest_2.4bpp.lz"); // the tilemap and palette for unused contest assets are used. however, these two files aren't old -const u8 gUnknown_08D17144[] = INCBIN_U8("graphics/unused/old_contest_2.gbapal.lz"); +const u8 gContestPalette[] = INCBIN_U8("graphics/unused/old_contest_2.gbapal.lz"); -const u8 gUnknown_08D1725C[] = INCBIN_U8("graphics/unused/old_contest_2.bin.lz"); +const u8 gContestGfx[] = INCBIN_U8("graphics/unused/old_contest_2.bin.lz"); -const u8 gUnknown_08D17424[] = INCBIN_U8("graphics/unknown/unknown_D17424.bin.lz"); +const u8 gContestBgmap[] = INCBIN_U8("graphics/unknown/unknown_D17424.bin.lz"); const u8 unused_unknown_D176CC[] = INCBIN_U8("graphics/unknown/unknown_D176CC.bin.lz"); const u8 unused_unknown_D177D8[] = INCBIN_U8("graphics/unknown/unknown_D177D8.bin.lz"); @@ -1183,12 +1183,12 @@ const u16 gMonIconPalettes[][16] = }; const u8 gUnknown_08E96738[] = INCBIN_U8("graphics/unknown/unknown_E96738.bin.lz"); -const u8 gUnknown_08E96888[] = INCBIN_U8("graphics/pokedex/pokedex_list_menu.bin.lz"); -const u8 gUnknown_08E96994[] = INCBIN_U8("graphics/pokedex/pokedex_listing_menu.bin.lz"); -const u8 gUnknown_08E96ACC[] = INCBIN_U8("graphics/pokedex/pokedex_navbar.bin.lz"); -const u8 gUnknown_08E96B58[] = INCBIN_U8("graphics/pokedex/pokedex_navbar_3.bin.lz"); +const u8 gPokedexStartMenuMain_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_list_menu.bin.lz"); +const u8 gPokedexStartMenuSearchResults_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_listing_menu.bin.lz"); +const u8 gPokedexScreenSelectBarMain_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_navbar.bin.lz"); +const u8 gPokedexScreenSelectBarSubmenu_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_navbar_3.bin.lz"); const u8 gUnknown_08E96BD4[] = INCBIN_U8("graphics/pokedex/pokedex_detail_layout.bin.lz"); -const u8 gUnknown_08E96D2C[] = INCBIN_U8("graphics/unknown/unknown_E96D2C.bin.lz"); +const u8 gPokedexMenuSearch_Tilemap[] = INCBIN_U8("graphics/unknown/unknown_E96D2C.bin.lz"); const u8 gBagScreenLabels_Tilemap[] = INCBIN_U8("graphics/interface/bag_screen_labels.bin"); @@ -1422,7 +1422,7 @@ const u16 gTilesetPalettes_Shop[][16] = }; const u8 gTilesetTiles_Shop[] = INCBIN_U8("data/tilesets/secondary/shop/tiles.4bpp.lz"); -const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); -const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); -const u8 gUnknown_083FAE7C[] = INCBIN_U8("graphics/pokedex/cry_meter_map.bin"); +const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +const u8 sCryMeter_Tilemap[] = INCBIN_U8("graphics/pokedex/cry_meter_map.bin"); #endif // GERMAN diff --git a/src/data/pointillism_points.h b/src/data/pointillism_points.h new file mode 100644 index 000000000..708f5c02e --- /dev/null +++ b/src/data/pointillism_points.h @@ -0,0 +1,3210 @@ +#define GET_POINT_OFFSET_DL(bits) (((bits) >> 0) & 1) +#define GET_POINT_COLOR_TYPE(bits) (((bits) >> 1) & 3) +#define GET_POINT_DELTA(bits) (((bits) >> 3) & 7) + +#define PT(x, y, delta, colorType, offsetDownLeft) x, y, (delta << 3) | (colorType << 1) | offsetDownLeft + +static const u8 sPointillismPoints[][3] = { + PT( 0, 29, 3, 2, FALSE), + PT(14, 30, 3, 1, TRUE), + PT( 0, 1, 6, 1, FALSE), + PT(46, 30, 6, 3, TRUE), + PT(10, 34, 3, 3, TRUE), + PT( 5, 38, 5, 3, FALSE), + PT(18, 23, 3, 3, FALSE), + PT(26, 3, 2, 0, TRUE), + PT( 5, 17, 3, 0, FALSE), + PT( 5, 39, 5, 3, TRUE), + PT(26, 63, 2, 1, FALSE), + PT(34, 63, 2, 3, FALSE), + PT(43, 47, 5, 3, FALSE), + PT(17, 2, 5, 2, TRUE), + PT(35, 13, 5, 0, FALSE), + PT(23, 12, 3, 0, TRUE), + PT(47, 14, 2, 1, TRUE), + PT(48, 24, 4, 0, FALSE), + PT(45, 40, 4, 1, FALSE), + PT( 1, 3, 3, 0, TRUE), + PT(14, 42, 5, 1, TRUE), + PT(34, 21, 4, 2, TRUE), + PT(34, 10, 4, 3, FALSE), + PT(57, 6, 4, 1, TRUE), + PT(22, 7, 5, 3, TRUE), + PT(34, 58, 3, 1, TRUE), + PT(59, 54, 6, 2, TRUE), + PT(10, 43, 4, 2, FALSE), + PT(54, 9, 2, 1, FALSE), + PT(28, 47, 4, 1, TRUE), + PT(46, 56, 5, 2, FALSE), + PT( 5, 42, 4, 0, FALSE), + PT( 7, 20, 6, 1, FALSE), + PT(49, 8, 2, 3, TRUE), + PT(26, 36, 5, 2, TRUE), + PT(34, 10, 2, 3, FALSE), + PT(27, 38, 5, 1, TRUE), + PT(41, 22, 2, 0, TRUE), + PT(53, 8, 2, 2, FALSE), + PT(30, 8, 2, 2, FALSE), + PT( 5, 49, 2, 2, FALSE), + PT(56, 49, 2, 3, TRUE), + PT(52, 51, 2, 1, FALSE), + PT(17, 9, 3, 3, TRUE), + PT(40, 61, 6, 1, FALSE), + PT(53, 3, 3, 3, FALSE), + PT(60, 43, 5, 3, FALSE), + PT(16, 1, 2, 3, TRUE), + PT( 3, 62, 4, 1, FALSE), + PT(23, 24, 6, 2, FALSE), + PT( 8, 41, 3, 0, TRUE), + PT( 3, 36, 5, 0, FALSE), + PT(61, 51, 5, 3, TRUE), + PT(49, 36, 3, 0, TRUE), + PT(27, 24, 4, 3, FALSE), + PT( 7, 13, 4, 2, TRUE), + PT(45, 63, 2, 1, FALSE), + PT(47, 21, 4, 2, TRUE), + PT(41, 15, 2, 1, FALSE), + PT( 7, 44, 2, 1, FALSE), + PT(44, 11, 4, 3, FALSE), + PT(18, 26, 2, 3, FALSE), + PT( 0, 11, 5, 3, TRUE), + PT(22, 53, 4, 2, FALSE), + PT(31, 28, 4, 1, FALSE), + PT(41, 51, 4, 3, TRUE), + PT(59, 48, 2, 3, TRUE), + PT(17, 6, 6, 2, TRUE), + PT(62, 49, 5, 3, TRUE), + PT(17, 58, 4, 2, TRUE), + PT(42, 2, 3, 0, TRUE), + PT(51, 24, 6, 2, TRUE), + PT(42, 32, 4, 0, TRUE), + PT(46, 50, 3, 1, TRUE), + PT(59, 31, 4, 1, TRUE), + PT(57, 41, 5, 1, FALSE), + PT(46, 49, 5, 0, TRUE), + PT(42, 14, 5, 2, TRUE), + PT(45, 0, 3, 3, TRUE), + PT(56, 40, 3, 1, TRUE), + PT(20, 59, 5, 1, TRUE), + PT(46, 4, 4, 3, FALSE), + PT(54, 48, 2, 0, TRUE), + PT(59, 33, 5, 2, TRUE), + PT(43, 63, 3, 1, TRUE), + PT(32, 19, 6, 0, TRUE), + PT(51, 12, 6, 0, FALSE), + PT(34, 43, 5, 1, TRUE), + PT(22, 2, 3, 3, FALSE), + PT(28, 18, 3, 2, FALSE), + PT(15, 60, 6, 3, FALSE), + PT(56, 16, 5, 2, TRUE), + PT(24, 47, 5, 2, TRUE), + PT(53, 59, 2, 0, TRUE), + PT(55, 49, 2, 1, TRUE), + PT(19, 61, 5, 3, TRUE), + PT(30, 44, 6, 1, TRUE), + PT(46, 55, 2, 1, FALSE), + PT(60, 31, 6, 1, TRUE), + PT(50, 42, 4, 3, TRUE), + PT(13, 59, 3, 2, FALSE), + PT(53, 42, 4, 3, TRUE), + PT( 9, 61, 4, 3, TRUE), + PT(18, 11, 3, 0, FALSE), + PT(12, 21, 3, 2, TRUE), + PT(32, 1, 3, 2, FALSE), + PT( 8, 59, 3, 2, FALSE), + PT(18, 55, 6, 1, TRUE), + PT(21, 3, 5, 2, FALSE), + PT(42, 59, 6, 0, TRUE), + PT(15, 4, 6, 2, TRUE), + PT( 8, 23, 6, 1, TRUE), + PT(56, 61, 5, 1, FALSE), + PT(47, 53, 2, 3, FALSE), + PT(16, 53, 2, 3, FALSE), + PT(35, 19, 5, 2, FALSE), + PT(47, 6, 4, 0, FALSE), + PT(39, 58, 4, 2, FALSE), + PT( 0, 28, 5, 1, FALSE), + PT( 3, 57, 3, 2, TRUE), + PT(40, 7, 3, 1, FALSE), + PT(32, 10, 6, 3, TRUE), + PT( 7, 53, 5, 2, TRUE), + PT(21, 47, 5, 2, FALSE), + PT(16, 44, 4, 1, TRUE), + PT(63, 41, 2, 2, FALSE), + PT(42, 33, 6, 3, FALSE), + PT(52, 26, 5, 2, FALSE), + PT(28, 61, 6, 1, TRUE), + PT(56, 43, 4, 1, FALSE), + PT(53, 40, 3, 3, TRUE), + PT(61, 15, 3, 2, FALSE), + PT(30, 62, 3, 1, TRUE), + PT(12, 62, 3, 3, TRUE), + PT(43, 49, 5, 2, FALSE), + PT(50, 57, 2, 0, TRUE), + PT( 5, 9, 2, 0, TRUE), + PT( 4, 56, 5, 1, FALSE), + PT(50, 0, 2, 3, FALSE), + PT(19, 11, 6, 0, TRUE), + PT(52, 42, 2, 1, TRUE), + PT(44, 34, 4, 0, TRUE), + PT(57, 47, 2, 2, TRUE), + PT(55, 40, 3, 3, FALSE), + PT( 7, 59, 5, 2, TRUE), + PT(17, 3, 5, 0, FALSE), + PT(45, 48, 3, 3, FALSE), + PT(49, 17, 2, 0, TRUE), + PT(35, 1, 3, 3, FALSE), + PT(61, 49, 6, 2, FALSE), + PT(28, 2, 6, 2, FALSE), + PT(33, 14, 4, 2, TRUE), + PT(61, 7, 2, 3, TRUE), + PT(51, 21, 2, 0, FALSE), + PT(41, 50, 6, 1, FALSE), + PT(24, 31, 6, 0, FALSE), + PT(45, 59, 6, 0, FALSE), + PT(39, 62, 2, 3, FALSE), + PT(49, 21, 2, 1, FALSE), + PT(48, 37, 2, 3, TRUE), + PT(51, 6, 6, 2, FALSE), + PT( 0, 41, 3, 0, FALSE), + PT(60, 3, 2, 1, FALSE), + PT(44, 12, 2, 0, TRUE), + PT( 9, 48, 6, 0, FALSE), + PT(16, 14, 2, 0, TRUE), + PT(39, 22, 3, 1, TRUE), + PT(12, 59, 5, 3, FALSE), + PT(43, 51, 3, 3, FALSE), + PT(19, 45, 5, 2, TRUE), + PT(17, 36, 5, 0, TRUE), + PT(52, 62, 5, 1, TRUE), + PT(36, 30, 4, 0, TRUE), + PT(39, 26, 5, 2, TRUE), + PT( 4, 57, 2, 3, FALSE), + PT(62, 51, 4, 3, FALSE), + PT(27, 46, 4, 2, TRUE), + PT(12, 6, 3, 0, TRUE), + PT(37, 25, 3, 0, FALSE), + PT(29, 51, 6, 1, TRUE), + PT(29, 40, 5, 2, TRUE), + PT(28, 16, 5, 1, FALSE), + PT(31, 53, 3, 3, FALSE), + PT(52, 2, 2, 0, FALSE), + PT(43, 58, 2, 2, FALSE), + PT(13, 11, 2, 2, TRUE), + PT(12, 44, 2, 0, FALSE), + PT(55, 58, 3, 0, TRUE), + PT( 6, 19, 2, 3, TRUE), + PT(36, 16, 4, 2, TRUE), + PT(36, 4, 3, 3, FALSE), + PT( 0, 53, 6, 2, FALSE), + PT(58, 0, 6, 3, TRUE), + PT(60, 7, 3, 1, FALSE), + PT(43, 40, 6, 3, FALSE), + PT(52, 57, 5, 3, TRUE), + PT(40, 9, 3, 3, TRUE), + PT(56, 49, 6, 0, FALSE), + PT(22, 37, 6, 0, TRUE), + PT(24, 40, 6, 0, TRUE), + PT(24, 12, 4, 1, FALSE), + PT( 6, 57, 5, 2, TRUE), + PT(61, 32, 4, 2, FALSE), + PT(46, 39, 4, 0, TRUE), + PT(62, 24, 3, 0, FALSE), + PT(21, 60, 4, 2, FALSE), + PT( 6, 27, 4, 3, FALSE), + PT(21, 14, 4, 1, FALSE), + PT(10, 13, 3, 3, TRUE), + PT(24, 22, 6, 2, FALSE), + PT(16, 40, 4, 0, TRUE), + PT(32, 17, 2, 0, TRUE), + PT(54, 50, 2, 2, TRUE), + PT(59, 46, 4, 2, FALSE), + PT(31, 45, 2, 1, FALSE), + PT(54, 46, 4, 0, FALSE), + PT(11, 23, 6, 1, TRUE), + PT(38, 3, 3, 3, TRUE), + PT( 8, 25, 6, 0, TRUE), + PT(42, 24, 4, 2, TRUE), + PT(53, 45, 5, 2, TRUE), + PT(48, 56, 3, 0, FALSE), + PT(28, 37, 2, 2, FALSE), + PT(28, 34, 5, 0, FALSE), + PT( 8, 35, 4, 0, TRUE), + PT(38, 30, 6, 0, FALSE), + PT(25, 15, 2, 2, TRUE), + PT(16, 47, 4, 1, FALSE), + PT(18, 2, 4, 2, TRUE), + PT(60, 1, 3, 2, TRUE), + PT(14, 20, 3, 0, FALSE), + PT(13, 24, 2, 3, TRUE), + PT(34, 11, 6, 0, TRUE), + PT(19, 52, 4, 0, TRUE), + PT(15, 45, 6, 3, FALSE), + PT(57, 31, 4, 2, TRUE), + PT(24, 16, 3, 3, TRUE), + PT(45, 32, 4, 0, FALSE), + PT(25, 11, 6, 0, TRUE), + PT(51, 19, 2, 2, FALSE), + PT(46, 17, 4, 0, TRUE), + PT(45, 10, 6, 3, TRUE), + PT( 7, 21, 3, 1, TRUE), + PT(50, 4, 6, 1, FALSE), + PT( 6, 24, 3, 1, TRUE), + PT(19, 36, 2, 1, FALSE), + PT(54, 34, 2, 3, FALSE), + PT(29, 41, 3, 2, FALSE), + PT(53, 23, 4, 0, TRUE), + PT(54, 23, 5, 1, TRUE), + PT(53, 50, 3, 0, TRUE), + PT(42, 15, 5, 3, FALSE), + PT(16, 0, 6, 2, FALSE), + PT( 2, 14, 5, 0, FALSE), + PT(49, 50, 6, 1, FALSE), + PT(59, 5, 4, 0, FALSE), + PT(54, 38, 2, 1, FALSE), + PT(52, 6, 6, 2, FALSE), + PT(30, 49, 6, 1, FALSE), + PT(53, 5, 6, 2, FALSE), + PT(30, 19, 2, 2, TRUE), + PT(21, 20, 5, 2, FALSE), + PT(41, 28, 3, 0, FALSE), + PT(36, 36, 2, 1, FALSE), + PT(34, 41, 3, 0, FALSE), + PT(52, 54, 6, 0, FALSE), + PT(30, 1, 4, 1, TRUE), + PT(12, 60, 4, 2, FALSE), + PT(10, 61, 2, 3, FALSE), + PT(39, 30, 4, 1, TRUE), + PT(21, 2, 2, 1, FALSE), + PT(17, 25, 5, 1, FALSE), + PT(29, 49, 2, 2, TRUE), + PT( 3, 59, 5, 1, FALSE), + PT(33, 25, 5, 2, FALSE), + PT(10, 35, 2, 0, TRUE), + PT(37, 17, 3, 1, FALSE), + PT(26, 10, 6, 2, FALSE), + PT(59, 11, 6, 1, TRUE), + PT(33, 11, 6, 3, TRUE), + PT( 1, 49, 5, 0, FALSE), + PT(53, 29, 4, 3, TRUE), + PT(44, 48, 6, 0, TRUE), + PT(46, 57, 5, 2, TRUE), + PT(48, 5, 5, 2, FALSE), + PT(18, 42, 5, 1, TRUE), + PT(57, 34, 4, 0, FALSE), + PT(21, 52, 3, 2, FALSE), + PT(28, 1, 2, 2, TRUE), + PT(32, 22, 4, 1, FALSE), + PT(19, 4, 3, 0, FALSE), + PT(30, 19, 2, 0, FALSE), + PT(37, 51, 2, 2, TRUE), + PT(57, 3, 6, 0, TRUE), + PT(63, 54, 3, 0, FALSE), + PT(20, 35, 2, 0, FALSE), + PT(47, 30, 3, 3, TRUE), + PT(31, 23, 5, 2, FALSE), + PT( 2, 22, 6, 0, TRUE), + PT(32, 24, 6, 0, FALSE), + PT(46, 24, 6, 3, TRUE), + PT(59, 14, 6, 0, FALSE), + PT(16, 57, 4, 2, FALSE), + PT(38, 57, 3, 3, FALSE), + PT(48, 38, 5, 3, FALSE), + PT(18, 1, 2, 2, FALSE), + PT(55, 42, 5, 3, FALSE), + PT(33, 6, 3, 2, TRUE), + PT(42, 22, 6, 1, FALSE), + PT( 9, 56, 3, 2, FALSE), + PT( 7, 34, 2, 3, TRUE), + PT(59, 45, 2, 2, TRUE), + PT( 7, 30, 5, 3, FALSE), + PT(27, 46, 3, 2, TRUE), + PT( 4, 9, 6, 0, FALSE), + PT(48, 45, 6, 3, TRUE), + PT(45, 52, 4, 2, FALSE), + PT(24, 36, 4, 2, TRUE), + PT(14, 45, 4, 3, FALSE), + PT(35, 10, 2, 3, FALSE), + PT(18, 45, 2, 0, TRUE), + PT(33, 40, 5, 3, FALSE), + PT(15, 1, 4, 0, TRUE), + PT( 1, 49, 2, 1, FALSE), + PT(63, 27, 3, 3, FALSE), + PT(33, 37, 5, 1, TRUE), + PT(38, 24, 2, 1, TRUE), + PT(21, 45, 6, 2, FALSE), + PT(35, 33, 6, 3, FALSE), + PT(14, 46, 3, 2, FALSE), + PT(20, 34, 3, 2, FALSE), + PT(44, 11, 5, 0, FALSE), + PT(26, 24, 4, 0, TRUE), + PT(33, 7, 3, 1, FALSE), + PT(36, 38, 5, 0, TRUE), + PT(43, 10, 6, 2, FALSE), + PT(62, 39, 6, 1, TRUE), + PT(18, 52, 3, 1, TRUE), + PT(31, 1, 5, 1, FALSE), + PT(46, 6, 4, 1, TRUE), + PT(47, 31, 2, 2, FALSE), + PT(24, 6, 4, 3, FALSE), + PT(49, 31, 5, 1, TRUE), + PT(34, 38, 5, 3, FALSE), + PT(30, 21, 2, 3, FALSE), + PT(32, 34, 5, 0, FALSE), + PT(21, 55, 2, 1, FALSE), + PT(37, 4, 5, 2, FALSE), + PT(31, 4, 5, 3, FALSE), + PT(12, 19, 3, 0, FALSE), + PT( 7, 11, 6, 3, FALSE), + PT(29, 28, 5, 1, FALSE), + PT(48, 34, 3, 2, FALSE), + PT(46, 18, 5, 3, TRUE), + PT(43, 33, 3, 3, FALSE), + PT(22, 56, 6, 0, FALSE), + PT( 4, 2, 2, 3, FALSE), + PT( 5, 20, 4, 0, FALSE), + PT(56, 60, 6, 1, TRUE), + PT(33, 27, 5, 3, TRUE), + PT(20, 42, 4, 3, TRUE), + PT(56, 20, 3, 1, TRUE), + PT(43, 31, 5, 1, TRUE), + PT(41, 43, 4, 2, TRUE), + PT(39, 54, 4, 0, TRUE), + PT(17, 34, 3, 1, TRUE), + PT(41, 3, 3, 1, TRUE), + PT(24, 36, 5, 0, FALSE), + PT(33, 45, 6, 3, FALSE), + PT(60, 44, 4, 2, FALSE), + PT(51, 23, 3, 3, TRUE), + PT(42, 58, 4, 0, TRUE), + PT(10, 35, 6, 3, TRUE), + PT( 0, 11, 4, 0, TRUE), + PT(17, 56, 3, 0, TRUE), + PT(15, 14, 3, 2, FALSE), + PT(31, 15, 6, 3, TRUE), + PT(60, 16, 6, 3, TRUE), + PT(56, 49, 6, 2, TRUE), + PT( 7, 21, 5, 0, FALSE), + PT(30, 46, 3, 0, TRUE), + PT(38, 16, 6, 1, TRUE), + PT(61, 53, 5, 3, TRUE), + PT(58, 4, 6, 2, FALSE), + PT(13, 24, 3, 1, FALSE), + PT( 1, 45, 2, 2, TRUE), + PT(61, 26, 2, 3, TRUE), + PT(23, 63, 6, 1, FALSE), + PT(11, 33, 2, 0, TRUE), + PT(30, 38, 5, 1, TRUE), + PT(13, 25, 4, 2, FALSE), + PT(46, 4, 3, 1, TRUE), + PT(27, 51, 4, 0, FALSE), + PT(21, 33, 3, 2, TRUE), + PT(31, 4, 4, 0, TRUE), + PT(15, 18, 3, 3, TRUE), + PT(45, 42, 6, 1, FALSE), + PT( 3, 55, 3, 3, TRUE), + PT(53, 7, 4, 3, TRUE), + PT(36, 31, 6, 0, TRUE), + PT(47, 48, 2, 2, TRUE), + PT( 6, 0, 4, 2, FALSE), + PT(11, 34, 3, 1, FALSE), + PT(12, 59, 5, 0, TRUE), + PT(20, 26, 2, 3, TRUE), + PT(55, 32, 4, 2, TRUE), + PT(63, 38, 6, 3, TRUE), + PT(58, 62, 2, 0, FALSE), + PT(34, 4, 2, 0, TRUE), + PT(40, 18, 3, 2, FALSE), + PT( 3, 46, 5, 3, FALSE), + PT(14, 56, 5, 0, FALSE), + PT( 1, 41, 4, 1, FALSE), + PT(30, 51, 3, 0, TRUE), + PT( 6, 33, 4, 3, TRUE), + PT(51, 25, 3, 1, FALSE), + PT( 2, 5, 2, 3, TRUE), + PT(17, 17, 5, 2, FALSE), + PT(31, 38, 3, 3, FALSE), + PT(57, 31, 5, 0, FALSE), + PT(46, 47, 2, 1, FALSE), + PT(34, 52, 2, 1, TRUE), + PT(59, 38, 5, 3, TRUE), + PT(52, 0, 2, 2, FALSE), + PT(16, 49, 2, 0, TRUE), + PT(29, 45, 5, 1, FALSE), + PT( 8, 8, 6, 3, TRUE), + PT(21, 24, 6, 2, FALSE), + PT( 4, 43, 4, 2, FALSE), + PT(47, 30, 4, 3, TRUE), + PT(34, 42, 4, 2, FALSE), + PT( 7, 20, 4, 2, TRUE), + PT( 1, 39, 3, 0, TRUE), + PT(41, 10, 5, 0, TRUE), + PT(61, 28, 5, 3, TRUE), + PT(13, 31, 3, 2, FALSE), + PT(36, 61, 6, 1, FALSE), + PT(54, 29, 4, 2, FALSE), + PT(20, 33, 2, 3, FALSE), + PT(26, 13, 5, 0, TRUE), + PT(63, 43, 5, 1, FALSE), + PT(26, 62, 6, 2, TRUE), + PT(17, 40, 3, 0, FALSE), + PT(50, 5, 2, 2, TRUE), + PT(33, 46, 6, 2, FALSE), + PT(45, 20, 5, 1, FALSE), + PT(60, 8, 6, 3, TRUE), + PT(63, 52, 3, 3, FALSE), + PT(39, 36, 3, 2, FALSE), + PT(22, 22, 6, 1, TRUE), + PT(41, 59, 3, 0, TRUE), + PT(54, 47, 3, 2, FALSE), + PT( 3, 37, 5, 2, FALSE), + PT(11, 22, 6, 3, FALSE), + PT(28, 29, 3, 1, TRUE), + PT(44, 39, 3, 1, TRUE), + PT(11, 31, 5, 1, TRUE), + PT( 8, 16, 4, 3, TRUE), + PT(63, 37, 5, 3, TRUE), + PT(51, 19, 3, 3, TRUE), + PT( 4, 49, 6, 3, TRUE), + PT(14, 47, 2, 1, FALSE), + PT( 8, 35, 4, 0, FALSE), + PT(58, 26, 3, 3, FALSE), + PT(47, 11, 3, 3, TRUE), + PT(30, 32, 3, 0, TRUE), + PT(35, 59, 2, 2, FALSE), + PT(37, 0, 4, 3, TRUE), + PT(20, 4, 4, 2, TRUE), + PT(54, 26, 5, 1, TRUE), + PT(39, 33, 2, 2, TRUE), + PT(40, 19, 5, 2, FALSE), + PT(14, 60, 6, 2, TRUE), + PT(12, 45, 5, 1, TRUE), + PT(55, 22, 2, 2, TRUE), + PT(41, 21, 3, 2, TRUE), + PT(23, 52, 6, 3, FALSE), + PT( 9, 10, 6, 0, TRUE), + PT(55, 34, 5, 0, FALSE), + PT(23, 43, 6, 2, TRUE), + PT(20, 43, 2, 1, FALSE), + PT( 8, 19, 3, 3, TRUE), + PT(49, 19, 5, 0, FALSE), + PT( 6, 7, 6, 2, TRUE), + PT(35, 58, 5, 0, TRUE), + PT(15, 36, 5, 3, FALSE), + PT( 7, 53, 4, 3, FALSE), + PT(14, 18, 2, 2, TRUE), + PT(35, 51, 5, 2, FALSE), + PT(14, 33, 4, 3, FALSE), + PT(28, 18, 4, 2, TRUE), + PT(35, 29, 5, 3, TRUE), + PT( 4, 53, 6, 1, TRUE), + PT(22, 1, 4, 2, FALSE), + PT(61, 44, 5, 3, FALSE), + PT(53, 10, 4, 2, TRUE), + PT(17, 19, 4, 2, TRUE), + PT(27, 27, 2, 2, TRUE), + PT(21, 57, 2, 0, FALSE), + PT(11, 53, 4, 2, FALSE), + PT(58, 39, 6, 0, FALSE), + PT(46, 47, 2, 2, TRUE), + PT(16, 31, 6, 2, TRUE), + PT(27, 40, 6, 2, TRUE), + PT(38, 48, 6, 3, TRUE), + PT(52, 55, 5, 1, TRUE), + PT(15, 48, 5, 0, TRUE), + PT(46, 63, 5, 1, TRUE), + PT(56, 52, 5, 1, TRUE), + PT(43, 47, 4, 2, TRUE), + PT(13, 40, 5, 1, FALSE), + PT(51, 24, 2, 0, FALSE), + PT(33, 18, 2, 0, TRUE), + PT(31, 34, 6, 2, FALSE), + PT(17, 37, 4, 1, TRUE), + PT(33, 63, 2, 0, TRUE), + PT(38, 39, 4, 2, TRUE), + PT(40, 54, 2, 1, FALSE), + PT(21, 38, 6, 1, FALSE), + PT(17, 24, 4, 2, FALSE), + PT(50, 37, 6, 3, TRUE), + PT(39, 58, 6, 1, TRUE), + PT(53, 7, 3, 2, FALSE), + PT(26, 14, 5, 1, FALSE), + PT(30, 47, 3, 3, TRUE), + PT( 0, 46, 4, 0, TRUE), + PT(27, 60, 2, 2, FALSE), + PT(47, 58, 5, 3, TRUE), + PT(62, 56, 2, 2, TRUE), + PT(26, 19, 5, 3, TRUE), + PT(41, 13, 5, 3, TRUE), + PT(55, 23, 3, 0, FALSE), + PT(48, 28, 6, 2, TRUE), + PT(21, 52, 2, 2, FALSE), + PT(40, 17, 5, 2, FALSE), + PT(44, 37, 5, 1, FALSE), + PT(32, 63, 5, 0, FALSE), + PT(12, 52, 3, 1, TRUE), + PT(48, 46, 4, 2, TRUE), + PT(55, 28, 4, 2, FALSE), + PT(31, 37, 4, 3, FALSE), + PT(12, 25, 6, 2, FALSE), + PT(24, 16, 6, 2, TRUE), + PT(10, 19, 2, 0, TRUE), + PT(37, 19, 4, 0, FALSE), + PT(19, 25, 2, 0, TRUE), + PT(32, 40, 3, 2, TRUE), + PT(62, 48, 3, 1, TRUE), + PT(35, 36, 4, 0, TRUE), + PT(13, 35, 4, 1, TRUE), + PT(29, 40, 5, 3, FALSE), + PT(45, 18, 3, 3, TRUE), + PT(14, 46, 5, 1, TRUE), + PT(11, 49, 6, 1, FALSE), + PT(36, 60, 5, 2, FALSE), + PT(19, 60, 2, 1, FALSE), + PT(40, 22, 5, 1, FALSE), + PT( 5, 12, 6, 1, FALSE), + PT(57, 11, 6, 1, FALSE), + PT(33, 4, 2, 2, FALSE), + PT(16, 49, 6, 1, FALSE), + PT(18, 31, 4, 1, TRUE), + PT(57, 46, 5, 3, FALSE), + PT(34, 61, 4, 3, TRUE), + PT(12, 30, 3, 0, FALSE), + PT(37, 0, 2, 3, TRUE), + PT( 6, 49, 2, 2, FALSE), + PT(19, 33, 3, 1, FALSE), + PT(20, 32, 6, 2, TRUE), + PT(10, 59, 4, 2, TRUE), + PT(51, 8, 5, 0, FALSE), + PT(61, 2, 6, 1, TRUE), + PT(35, 0, 2, 1, TRUE), + PT(34, 33, 5, 0, FALSE), + PT(48, 20, 5, 3, FALSE), + PT(20, 50, 6, 3, FALSE), + PT(57, 35, 3, 3, FALSE), + PT(28, 17, 6, 0, FALSE), + PT(55, 22, 6, 0, FALSE), + PT(21, 49, 3, 3, TRUE), + PT(52, 40, 5, 2, FALSE), + PT(53, 5, 5, 0, TRUE), + PT(55, 51, 5, 1, FALSE), + PT(28, 23, 5, 3, FALSE), + PT(16, 6, 2, 3, FALSE), + PT(50, 31, 5, 3, TRUE), + PT( 0, 41, 3, 3, FALSE), + PT( 4, 1, 2, 3, FALSE), + PT(59, 35, 3, 3, FALSE), + PT(27, 52, 5, 1, FALSE), + PT(48, 17, 5, 1, TRUE), + PT( 3, 0, 3, 3, TRUE), + PT(29, 55, 3, 1, FALSE), + PT(58, 24, 4, 2, TRUE), + PT(28, 22, 5, 2, FALSE), + PT( 4, 63, 6, 1, TRUE), + PT(38, 35, 5, 2, TRUE), + PT(21, 44, 4, 3, TRUE), + PT( 2, 53, 4, 3, TRUE), + PT( 7, 53, 6, 1, TRUE), + PT(26, 12, 2, 0, FALSE), + PT(40, 38, 5, 2, FALSE), + PT(47, 54, 2, 3, FALSE), + PT(55, 11, 4, 3, TRUE), + PT(27, 61, 3, 0, FALSE), + PT(39, 31, 4, 0, FALSE), + PT(43, 42, 6, 1, TRUE), + PT(11, 15, 4, 0, FALSE), + PT(53, 60, 5, 3, TRUE), + PT(51, 33, 2, 2, TRUE), + PT(45, 38, 6, 2, FALSE), + PT(31, 26, 4, 0, TRUE), + PT(47, 44, 5, 1, FALSE), + PT(26, 50, 3, 1, FALSE), + PT(59, 63, 4, 0, TRUE), + PT(19, 63, 2, 1, TRUE), + PT(15, 36, 4, 1, FALSE), + PT(20, 27, 2, 0, FALSE), + PT(33, 6, 5, 0, FALSE), + PT(37, 52, 2, 0, FALSE), + PT(46, 14, 2, 2, FALSE), + PT(60, 62, 4, 2, TRUE), + PT(22, 6, 6, 0, FALSE), + PT(11, 4, 3, 3, TRUE), + PT(62, 2, 4, 2, FALSE), + PT(12, 23, 4, 2, TRUE), + PT(43, 60, 5, 2, TRUE), + PT(21, 54, 6, 1, TRUE), + PT(24, 35, 5, 1, FALSE), + PT(29, 16, 5, 1, FALSE), + PT(53, 23, 5, 0, FALSE), + PT( 0, 55, 4, 2, FALSE), + PT(10, 59, 2, 2, TRUE), + PT(29, 11, 3, 3, TRUE), + PT(60, 49, 4, 2, TRUE), + PT(29, 15, 3, 2, TRUE), + PT(32, 19, 6, 2, FALSE), + PT(17, 43, 5, 3, FALSE), + PT(35, 12, 5, 3, FALSE), + PT(36, 2, 2, 2, FALSE), + PT(49, 22, 3, 0, TRUE), + PT(14, 35, 6, 2, TRUE), + PT(26, 16, 2, 3, FALSE), + PT(20, 4, 3, 0, TRUE), + PT(45, 39, 6, 3, TRUE), + PT(51, 2, 6, 0, TRUE), + PT( 2, 4, 2, 3, FALSE), + PT(13, 34, 4, 2, TRUE), + PT(37, 0, 2, 3, FALSE), + PT(42, 63, 4, 3, FALSE), + PT(32, 12, 2, 1, FALSE), + PT(47, 46, 6, 2, TRUE), + PT(27, 13, 4, 1, FALSE), + PT(30, 1, 6, 2, FALSE), + PT( 5, 34, 4, 0, TRUE), + PT(52, 42, 6, 1, FALSE), + PT(11, 9, 3, 2, TRUE), + PT(63, 50, 5, 3, TRUE), + PT(61, 24, 5, 2, TRUE), + PT(11, 56, 6, 3, FALSE), + PT(57, 23, 5, 0, FALSE), + PT(52, 4, 4, 2, FALSE), + PT(54, 14, 5, 1, FALSE), + PT(56, 1, 2, 2, FALSE), + PT(60, 36, 4, 1, FALSE), + PT(33, 3, 3, 0, FALSE), + PT(50, 47, 2, 1, FALSE), + PT(41, 36, 6, 0, TRUE), + PT(10, 59, 2, 1, FALSE), + PT(26, 28, 4, 0, FALSE), + PT(48, 49, 3, 1, TRUE), + PT(26, 33, 2, 0, FALSE), + PT( 5, 41, 2, 0, FALSE), + PT(38, 45, 2, 1, TRUE), + PT(22, 12, 3, 2, TRUE), + PT(43, 6, 3, 1, TRUE), + PT( 6, 18, 2, 2, FALSE), + PT(56, 15, 6, 2, TRUE), + PT(35, 58, 5, 2, FALSE), + PT( 0, 25, 6, 1, TRUE), + PT(41, 20, 5, 2, TRUE), + PT(42, 33, 5, 0, TRUE), + PT(20, 49, 2, 2, FALSE), + PT(26, 6, 3, 3, FALSE), + PT(24, 27, 5, 0, FALSE), + PT(59, 22, 5, 0, TRUE), + PT(21, 30, 2, 1, FALSE), + PT(52, 10, 2, 2, FALSE), + PT(27, 5, 4, 3, TRUE), + PT(11, 1, 4, 3, FALSE), + PT(42, 34, 6, 2, TRUE), + PT(33, 32, 3, 0, FALSE), + PT(32, 55, 2, 3, TRUE), + PT(20, 31, 2, 0, TRUE), + PT(29, 17, 4, 2, TRUE), + PT(36, 43, 5, 3, TRUE), + PT( 7, 63, 3, 3, TRUE), + PT(44, 37, 4, 2, TRUE), + PT(42, 41, 3, 0, FALSE), + PT(17, 36, 5, 0, FALSE), + PT(49, 44, 5, 1, FALSE), + PT(57, 11, 4, 3, FALSE), + PT(40, 16, 4, 3, FALSE), + PT(34, 6, 2, 3, FALSE), + PT( 9, 44, 2, 1, TRUE), + PT(52, 25, 2, 2, TRUE), + PT(58, 18, 4, 0, TRUE), + PT(29, 56, 4, 1, TRUE), + PT(18, 37, 4, 2, FALSE), + PT(33, 48, 2, 1, FALSE), + PT(55, 26, 2, 1, FALSE), + PT(36, 59, 4, 2, TRUE), + PT(50, 21, 4, 1, TRUE), + PT(13, 26, 2, 0, FALSE), + PT(22, 46, 4, 3, FALSE), + PT(29, 20, 2, 3, FALSE), + PT(62, 46, 3, 3, TRUE), + PT(10, 22, 2, 0, FALSE), + PT(29, 48, 5, 1, TRUE), + PT( 4, 58, 3, 0, TRUE), + PT( 8, 45, 5, 3, FALSE), + PT(40, 30, 6, 1, TRUE), + PT(10, 18, 5, 3, FALSE), + PT(13, 3, 5, 3, TRUE), + PT(38, 58, 3, 3, FALSE), + PT(53, 59, 5, 1, FALSE), + PT( 3, 26, 3, 0, FALSE), + PT(63, 11, 4, 3, TRUE), + PT( 4, 5, 6, 2, FALSE), + PT(54, 11, 4, 3, TRUE), + PT(59, 23, 2, 0, TRUE), + PT(13, 39, 4, 3, FALSE), + PT(44, 31, 4, 0, FALSE), + PT(38, 16, 4, 0, FALSE), + PT(37, 35, 5, 2, TRUE), + PT(55, 9, 2, 1, TRUE), + PT(20, 23, 5, 2, TRUE), + PT(46, 61, 4, 1, TRUE), + PT(29, 26, 3, 3, TRUE), + PT(33, 51, 5, 3, FALSE), + PT(40, 23, 2, 1, TRUE), + PT(38, 60, 6, 3, FALSE), + PT(20, 26, 6, 1, TRUE), + PT(50, 32, 5, 1, TRUE), + PT(25, 62, 4, 0, FALSE), + PT(12, 2, 5, 2, TRUE), + PT(60, 60, 5, 1, FALSE), + PT(48, 48, 5, 0, FALSE), + PT(37, 63, 3, 3, FALSE), + PT( 3, 23, 3, 3, FALSE), + PT(53, 17, 3, 2, FALSE), + PT(27, 20, 5, 1, FALSE), + PT(40, 58, 4, 1, TRUE), + PT(14, 31, 2, 1, FALSE), + PT(54, 33, 4, 0, FALSE), + PT( 7, 59, 2, 0, FALSE), + PT(35, 25, 6, 2, FALSE), + PT(13, 46, 3, 0, FALSE), + PT(63, 32, 4, 2, TRUE), + PT(62, 59, 2, 2, TRUE), + PT(11, 46, 2, 1, FALSE), + PT(55, 11, 4, 1, TRUE), + PT(61, 50, 3, 3, TRUE), + PT(22, 3, 4, 3, TRUE), + PT(20, 12, 4, 0, TRUE), + PT(24, 3, 6, 0, FALSE), + PT(62, 33, 2, 1, TRUE), + PT(15, 0, 6, 1, FALSE), + PT(63, 35, 2, 3, FALSE), + PT(14, 49, 3, 2, TRUE), + PT(24, 28, 3, 2, TRUE), + PT(48, 14, 3, 3, FALSE), + PT(33, 32, 4, 1, TRUE), + PT(63, 12, 3, 3, FALSE), + PT(20, 51, 4, 1, FALSE), + PT(34, 33, 2, 2, TRUE), + PT(54, 5, 3, 3, FALSE), + PT(29, 49, 2, 2, FALSE), + PT(32, 17, 6, 3, TRUE), + PT(13, 51, 3, 0, TRUE), + PT(37, 5, 6, 3, FALSE), + PT(30, 49, 4, 0, FALSE), + PT(53, 58, 5, 3, TRUE), + PT(50, 47, 6, 0, FALSE), + PT(20, 35, 5, 2, TRUE), + PT(53, 30, 5, 0, TRUE), + PT( 5, 5, 3, 1, TRUE), + PT( 9, 31, 4, 3, FALSE), + PT(47, 11, 2, 2, TRUE), + PT(21, 17, 2, 1, TRUE), + PT(41, 27, 3, 0, FALSE), + PT(28, 19, 6, 2, TRUE), + PT(52, 49, 4, 1, TRUE), + PT(39, 63, 5, 3, TRUE), + PT( 9, 48, 3, 0, TRUE), + PT(35, 18, 6, 2, FALSE), + PT( 2, 42, 4, 0, TRUE), + PT( 9, 60, 3, 2, TRUE), + PT(12, 2, 2, 0, FALSE), + PT(34, 5, 2, 3, TRUE), + PT(34, 8, 3, 1, TRUE), + PT(10, 15, 2, 2, TRUE), + PT( 2, 17, 2, 1, TRUE), + PT( 1, 33, 4, 1, FALSE), + PT(22, 57, 6, 1, TRUE), + PT(36, 56, 6, 2, FALSE), + PT(15, 30, 5, 1, TRUE), + PT(43, 21, 2, 2, TRUE), + PT(32, 34, 5, 3, FALSE), + PT(58, 63, 6, 0, TRUE), + PT(26, 39, 5, 1, TRUE), + PT(41, 52, 2, 2, FALSE), + PT(22, 57, 5, 3, TRUE), + PT(19, 62, 2, 3, FALSE), + PT(54, 33, 6, 0, FALSE), + PT( 0, 36, 5, 1, TRUE), + PT(36, 33, 6, 0, FALSE), + PT(21, 49, 2, 1, TRUE), + PT(16, 55, 4, 2, FALSE), + PT( 8, 7, 4, 1, TRUE), + PT(33, 9, 4, 2, TRUE), + PT( 5, 60, 6, 1, FALSE), + PT(25, 3, 4, 2, TRUE), + PT(15, 41, 5, 1, TRUE), + PT(22, 7, 2, 1, TRUE), + PT(62, 61, 4, 2, TRUE), + PT(54, 11, 5, 0, FALSE), + PT(46, 43, 2, 3, FALSE), + PT(12, 49, 2, 0, TRUE), + PT(48, 19, 5, 2, TRUE), + PT(38, 62, 6, 3, TRUE), + PT(41, 47, 5, 3, FALSE), + PT(21, 61, 2, 3, TRUE), + PT(28, 46, 4, 0, TRUE), + PT(51, 47, 2, 0, FALSE), + PT(13, 5, 3, 2, TRUE), + PT(28, 26, 2, 1, FALSE), + PT(14, 24, 6, 3, TRUE), + PT(27, 17, 2, 2, FALSE), + PT( 6, 20, 4, 0, TRUE), + PT(49, 14, 4, 3, TRUE), + PT(26, 3, 2, 0, FALSE), + PT( 0, 52, 6, 0, TRUE), + PT(63, 11, 3, 2, TRUE), + PT(15, 18, 3, 3, TRUE), + PT(26, 21, 2, 0, FALSE), + PT(15, 0, 4, 2, FALSE), + PT(62, 10, 5, 1, FALSE), + PT(48, 43, 4, 2, FALSE), + PT(38, 49, 2, 0, FALSE), + PT(45, 47, 5, 3, TRUE), + PT(63, 12, 2, 1, TRUE), + PT(18, 11, 2, 3, FALSE), + PT(21, 7, 3, 3, TRUE), + PT(40, 16, 6, 1, FALSE), + PT(15, 23, 2, 2, TRUE), + PT(11, 39, 6, 1, TRUE), + PT(52, 29, 2, 0, FALSE), + PT(28, 58, 2, 1, FALSE), + PT(44, 39, 6, 3, TRUE), + PT(10, 26, 6, 1, FALSE), + PT( 5, 31, 4, 0, TRUE), + PT(36, 13, 3, 3, TRUE), + PT(28, 23, 4, 2, FALSE), + PT(47, 59, 6, 1, FALSE), + PT(59, 37, 2, 0, FALSE), + PT( 3, 47, 4, 0, TRUE), + PT(12, 16, 4, 1, TRUE), + PT(14, 58, 5, 2, FALSE), + PT(51, 3, 5, 2, FALSE), + PT(18, 6, 3, 2, FALSE), + PT(42, 55, 6, 0, FALSE), + PT(63, 1, 3, 3, FALSE), + PT(53, 22, 6, 3, TRUE), + PT(44, 50, 6, 2, TRUE), + PT( 5, 17, 4, 1, FALSE), + PT(41, 9, 4, 0, FALSE), + PT(43, 13, 3, 3, TRUE), + PT(24, 13, 4, 0, FALSE), + PT(35, 57, 2, 3, FALSE), + PT(15, 58, 3, 0, FALSE), + PT(33, 53, 5, 1, TRUE), + PT(54, 38, 5, 1, TRUE), + PT(35, 5, 5, 3, TRUE), + PT(27, 8, 2, 3, TRUE), + PT(62, 9, 2, 3, FALSE), + PT(45, 58, 6, 3, TRUE), + PT(21, 53, 6, 2, TRUE), + PT(41, 10, 2, 1, FALSE), + PT( 2, 57, 3, 3, TRUE), + PT(20, 52, 6, 1, TRUE), + PT(23, 29, 3, 0, FALSE), + PT(22, 29, 3, 1, FALSE), + PT( 1, 57, 4, 1, FALSE), + PT(30, 39, 6, 3, FALSE), + PT(50, 20, 4, 3, FALSE), + PT(10, 57, 6, 3, FALSE), + PT(31, 13, 3, 3, FALSE), + PT(11, 10, 3, 0, TRUE), + PT(53, 29, 6, 2, FALSE), + PT( 3, 18, 2, 3, FALSE), + PT(12, 19, 5, 3, FALSE), + PT(12, 52, 3, 3, FALSE), + PT(16, 20, 3, 3, FALSE), + PT(35, 50, 4, 3, TRUE), + PT( 2, 16, 5, 0, TRUE), + PT(53, 24, 6, 1, TRUE), + PT(51, 29, 3, 1, FALSE), + PT(60, 21, 4, 1, TRUE), + PT(62, 63, 4, 1, FALSE), + PT(42, 2, 5, 2, FALSE), + PT(40, 10, 5, 3, TRUE), + PT(26, 6, 6, 2, TRUE), + PT(60, 23, 5, 1, TRUE), + PT( 3, 18, 2, 3, TRUE), + PT(47, 10, 4, 3, FALSE), + PT(18, 56, 2, 0, TRUE), + PT(54, 27, 4, 1, TRUE), + PT( 1, 57, 6, 2, TRUE), + PT(25, 25, 2, 3, TRUE), + PT( 9, 40, 4, 1, FALSE), + PT(30, 39, 5, 2, FALSE), + PT(53, 51, 5, 2, FALSE), + PT(39, 37, 6, 0, TRUE), + PT( 6, 49, 5, 2, TRUE), + PT(26, 57, 5, 0, FALSE), + PT(45, 4, 3, 3, FALSE), + PT(36, 62, 3, 2, FALSE), + PT(60, 48, 3, 1, TRUE), + PT(63, 62, 6, 3, TRUE), + PT(34, 54, 2, 0, TRUE), + PT( 0, 1, 3, 2, FALSE), + PT(18, 26, 2, 0, FALSE), + PT(18, 30, 5, 2, FALSE), + PT(31, 18, 5, 1, FALSE), + PT(47, 6, 3, 0, TRUE), + PT(53, 26, 3, 0, FALSE), + PT(59, 9, 6, 3, FALSE), + PT(52, 29, 2, 1, TRUE), + PT( 2, 7, 2, 0, FALSE), + PT(32, 47, 3, 2, TRUE), + PT(11, 3, 6, 1, TRUE), + PT(28, 22, 6, 0, TRUE), + PT( 5, 19, 3, 1, TRUE), + PT(41, 6, 2, 1, TRUE), + PT(48, 45, 6, 3, FALSE), + PT(42, 45, 5, 2, FALSE), + PT(25, 52, 3, 2, FALSE), + PT(15, 21, 2, 1, FALSE), + PT(54, 21, 5, 2, FALSE), + PT(58, 6, 3, 2, FALSE), + PT(18, 29, 4, 3, FALSE), + PT( 3, 56, 3, 2, TRUE), + PT( 1, 1, 5, 2, TRUE), + PT(23, 46, 2, 0, FALSE), + PT(20, 23, 3, 2, FALSE), + PT(52, 15, 5, 0, FALSE), + PT( 9, 55, 3, 1, TRUE), + PT(40, 29, 4, 3, FALSE), + PT(41, 45, 6, 3, FALSE), + PT(30, 23, 5, 0, FALSE), + PT(21, 15, 3, 2, FALSE), + PT(32, 45, 2, 0, FALSE), + PT(39, 22, 5, 3, FALSE), + PT(20, 9, 2, 1, FALSE), + PT(59, 61, 4, 0, TRUE), + PT(37, 26, 5, 2, FALSE), + PT( 0, 34, 6, 3, FALSE), + PT(13, 48, 2, 0, FALSE), + PT(23, 25, 3, 1, TRUE), + PT( 0, 59, 4, 0, TRUE), + PT(42, 40, 6, 2, FALSE), + PT(45, 15, 2, 3, FALSE), + PT(10, 48, 5, 0, FALSE), + PT( 6, 0, 4, 2, TRUE), + PT(49, 46, 5, 1, FALSE), + PT(20, 51, 5, 0, FALSE), + PT(54, 16, 5, 3, FALSE), + PT( 5, 46, 3, 0, TRUE), + PT(25, 26, 2, 2, TRUE), + PT(44, 20, 2, 3, TRUE), + PT(55, 15, 2, 1, TRUE), + PT(50, 23, 3, 1, TRUE), + PT(57, 24, 6, 1, FALSE), + PT(46, 50, 3, 3, FALSE), + PT(36, 29, 6, 0, TRUE), + PT(18, 29, 5, 1, TRUE), + PT(20, 12, 4, 3, TRUE), + PT(54, 46, 6, 1, FALSE), + PT( 6, 10, 3, 1, FALSE), + PT(40, 40, 4, 0, FALSE), + PT(58, 58, 2, 3, TRUE), + PT( 8, 39, 6, 3, FALSE), + PT(24, 26, 2, 0, FALSE), + PT(30, 38, 3, 1, TRUE), + PT(31, 51, 3, 3, TRUE), + PT(33, 23, 5, 3, TRUE), + PT( 1, 8, 4, 0, FALSE), + PT(53, 3, 3, 0, TRUE), + PT(59, 2, 4, 0, FALSE), + PT( 2, 45, 4, 1, TRUE), + PT(14, 23, 6, 1, FALSE), + PT(49, 41, 2, 0, TRUE), + PT(34, 23, 4, 1, FALSE), + PT(58, 44, 4, 1, TRUE), + PT(52, 32, 3, 0, FALSE), + PT( 0, 58, 4, 1, FALSE), + PT(37, 51, 4, 0, TRUE), + PT(51, 4, 4, 3, TRUE), + PT( 4, 24, 6, 1, FALSE), + PT(44, 12, 5, 3, TRUE), + PT(40, 20, 5, 2, FALSE), + PT(63, 48, 5, 1, TRUE), + PT(48, 33, 3, 2, TRUE), + PT( 1, 37, 6, 1, FALSE), + PT( 5, 35, 6, 2, FALSE), + PT(36, 16, 6, 0, FALSE), + PT(61, 20, 3, 1, TRUE), + PT(63, 56, 5, 3, TRUE), + PT(34, 27, 6, 1, FALSE), + PT(37, 7, 6, 3, TRUE), + PT(10, 12, 3, 2, TRUE), + PT( 3, 30, 3, 1, FALSE), + PT(15, 60, 2, 1, FALSE), + PT(17, 24, 3, 2, TRUE), + PT( 0, 53, 5, 3, TRUE), + PT(50, 24, 2, 2, FALSE), + PT(35, 48, 3, 1, TRUE), + PT(17, 61, 2, 1, FALSE), + PT(26, 22, 6, 2, TRUE), + PT(40, 5, 4, 2, FALSE), + PT(23, 61, 6, 3, TRUE), + PT(46, 9, 5, 3, FALSE), + PT(24, 29, 2, 3, TRUE), + PT(32, 31, 3, 0, FALSE), + PT(35, 44, 5, 3, TRUE), + PT(32, 63, 2, 3, FALSE), + PT(63, 41, 5, 3, FALSE), + PT(35, 59, 5, 0, TRUE), + PT(24, 57, 2, 1, TRUE), + PT(30, 50, 6, 2, TRUE), + PT(20, 29, 5, 1, FALSE), + PT(53, 1, 3, 2, TRUE), + PT(62, 59, 3, 3, FALSE), + PT(34, 30, 2, 3, FALSE), + PT(24, 34, 2, 1, FALSE), + PT(62, 41, 6, 1, TRUE), + PT(47, 20, 3, 0, TRUE), + PT(59, 7, 2, 2, TRUE), + PT( 6, 61, 5, 0, TRUE), + PT(53, 55, 4, 1, TRUE), + PT(52, 29, 5, 2, TRUE), + PT(24, 18, 3, 1, TRUE), + PT(11, 19, 4, 2, FALSE), + PT(19, 56, 3, 2, FALSE), + PT(31, 11, 3, 1, TRUE), + PT(19, 33, 3, 2, FALSE), + PT( 6, 57, 6, 1, FALSE), + PT(55, 61, 4, 3, FALSE), + PT(41, 38, 2, 2, TRUE), + PT(60, 51, 4, 3, TRUE), + PT( 0, 1, 5, 3, FALSE), + PT(21, 24, 6, 0, TRUE), + PT(13, 44, 2, 1, TRUE), + PT(39, 59, 4, 0, FALSE), + PT(45, 1, 4, 3, FALSE), + PT(35, 21, 6, 0, FALSE), + PT(36, 0, 2, 3, TRUE), + PT(55, 63, 6, 1, TRUE), + PT(37, 36, 6, 0, TRUE), + PT( 6, 59, 6, 3, TRUE), + PT( 3, 24, 3, 1, FALSE), + PT(44, 52, 2, 2, FALSE), + PT(29, 54, 3, 0, FALSE), + PT(58, 4, 4, 1, TRUE), + PT(18, 38, 2, 2, TRUE), + PT(43, 25, 3, 1, FALSE), + PT(41, 44, 6, 3, FALSE), + PT( 1, 25, 3, 2, TRUE), + PT(47, 6, 5, 1, TRUE), + PT(12, 18, 4, 3, FALSE), + PT(54, 50, 3, 2, TRUE), + PT(13, 18, 5, 0, FALSE), + PT( 3, 40, 2, 1, TRUE), + PT(41, 6, 2, 3, TRUE), + PT( 3, 56, 4, 0, TRUE), + PT(48, 44, 2, 0, FALSE), + PT(34, 0, 5, 0, FALSE), + PT(36, 59, 3, 2, FALSE), + PT(32, 62, 2, 1, TRUE), + PT( 2, 12, 3, 0, TRUE), + PT(41, 44, 3, 1, FALSE), + PT(57, 48, 4, 1, FALSE), + PT(42, 31, 4, 1, FALSE), + PT(20, 52, 5, 2, FALSE), + PT(20, 37, 3, 1, TRUE), + PT( 6, 59, 2, 2, TRUE), + PT( 6, 28, 2, 1, TRUE), + PT(21, 3, 3, 0, FALSE), + PT(30, 42, 3, 1, TRUE), + PT(23, 37, 5, 3, TRUE), + PT(28, 41, 5, 3, FALSE), + PT( 2, 50, 3, 3, FALSE), + PT(29, 40, 6, 2, TRUE), + PT(54, 3, 6, 2, FALSE), + PT(22, 61, 5, 1, FALSE), + PT(18, 13, 2, 1, TRUE), + PT(29, 45, 4, 0, TRUE), + PT(50, 23, 5, 3, FALSE), + PT(26, 21, 4, 3, FALSE), + PT(34, 47, 2, 2, TRUE), + PT(60, 14, 4, 0, FALSE), + PT(47, 39, 2, 1, TRUE), + PT( 4, 9, 6, 1, FALSE), + PT(30, 1, 6, 2, FALSE), + PT( 6, 22, 3, 3, FALSE), + PT(46, 27, 3, 2, FALSE), + PT(40, 19, 5, 1, FALSE), + PT(48, 52, 2, 1, FALSE), + PT(18, 50, 3, 0, FALSE), + PT(29, 29, 6, 2, TRUE), + PT( 7, 28, 2, 3, FALSE), + PT(45, 61, 6, 2, TRUE), + PT(28, 27, 4, 2, FALSE), + PT(33, 45, 3, 3, FALSE), + PT(16, 9, 2, 2, FALSE), + PT(61, 17, 2, 1, FALSE), + PT(37, 2, 4, 3, FALSE), + PT(35, 2, 3, 0, TRUE), + PT(25, 5, 2, 2, FALSE), + PT(11, 33, 3, 1, FALSE), + PT( 9, 2, 5, 2, FALSE), + PT(24, 40, 5, 2, TRUE), + PT(30, 16, 2, 1, FALSE), + PT(46, 24, 5, 3, FALSE), + PT(31, 2, 5, 2, FALSE), + PT(20, 23, 4, 2, FALSE), + PT(57, 8, 6, 1, FALSE), + PT(22, 20, 4, 1, FALSE), + PT(22, 40, 4, 0, TRUE), + PT(17, 16, 5, 2, FALSE), + PT(35, 54, 5, 1, TRUE), + PT(57, 33, 4, 3, FALSE), + PT(14, 6, 5, 2, TRUE), + PT(60, 62, 4, 3, FALSE), + PT(42, 27, 3, 3, TRUE), + PT( 0, 60, 6, 1, TRUE), + PT(53, 63, 2, 2, FALSE), + PT( 0, 11, 2, 0, FALSE), + PT(52, 60, 2, 3, TRUE), + PT(45, 7, 3, 3, TRUE), + PT(36, 57, 4, 3, TRUE), + PT(22, 0, 3, 2, TRUE), + PT(51, 43, 3, 3, FALSE), + PT(15, 8, 6, 0, TRUE), + PT(58, 9, 2, 1, TRUE), + PT(12, 33, 3, 2, FALSE), + PT(42, 23, 6, 2, FALSE), + PT(41, 39, 2, 0, FALSE), + PT(55, 27, 3, 0, FALSE), + PT(21, 8, 5, 3, TRUE), + PT(31, 22, 2, 1, FALSE), + PT(31, 40, 6, 2, FALSE), + PT(28, 32, 4, 1, FALSE), + PT(18, 1, 2, 1, FALSE), + PT(33, 49, 2, 0, FALSE), + PT(34, 38, 3, 3, FALSE), + PT( 1, 61, 2, 0, TRUE), + PT(30, 39, 4, 2, TRUE), + PT(61, 48, 4, 2, FALSE), + PT(29, 17, 4, 1, FALSE), + PT(54, 48, 2, 3, FALSE), + PT(31, 62, 5, 1, FALSE), + PT(60, 39, 3, 1, TRUE), + PT(31, 41, 2, 0, FALSE), + PT(30, 5, 5, 1, FALSE), + PT(10, 16, 2, 2, FALSE), + PT(31, 0, 5, 3, FALSE), + PT(11, 59, 3, 0, FALSE), + PT(10, 57, 6, 0, FALSE), + PT(55, 11, 3, 3, TRUE), + PT(29, 10, 5, 0, TRUE), + PT(62, 28, 6, 1, TRUE), + PT(19, 46, 5, 0, FALSE), + PT(39, 27, 3, 3, FALSE), + PT(29, 2, 3, 2, FALSE), + PT( 1, 37, 2, 2, FALSE), + PT(58, 16, 3, 2, FALSE), + PT(18, 5, 5, 1, FALSE), + PT(48, 32, 4, 3, FALSE), + PT(47, 46, 5, 3, FALSE), + PT( 3, 7, 4, 2, FALSE), + PT(54, 4, 5, 1, TRUE), + PT(17, 37, 5, 2, TRUE), + PT(40, 14, 5, 3, FALSE), + PT(15, 29, 2, 2, TRUE), + PT(28, 40, 6, 0, FALSE), + PT(31, 35, 4, 3, FALSE), + PT(54, 18, 6, 3, TRUE), + PT(58, 49, 2, 0, FALSE), + PT(44, 44, 5, 3, TRUE), + PT(26, 13, 2, 2, TRUE), + PT(63, 60, 6, 1, FALSE), + PT(53, 28, 2, 3, FALSE), + PT(51, 22, 5, 0, FALSE), + PT(29, 63, 4, 0, TRUE), + PT(44, 62, 5, 1, TRUE), + PT(36, 35, 5, 3, TRUE), + PT(50, 21, 5, 1, FALSE), + PT(27, 16, 6, 2, TRUE), + PT(24, 55, 2, 0, FALSE), + PT(59, 30, 2, 0, TRUE), + PT(43, 22, 4, 2, FALSE), + PT(29, 22, 4, 3, FALSE), + PT(60, 45, 2, 0, TRUE), + PT(21, 40, 5, 0, FALSE), + PT(39, 39, 4, 3, TRUE), + PT(59, 58, 2, 3, FALSE), + PT(26, 12, 3, 1, FALSE), + PT(21, 8, 4, 2, TRUE), + PT(11, 16, 4, 1, FALSE), + PT(26, 62, 2, 3, TRUE), + PT(40, 31, 3, 3, FALSE), + PT( 1, 30, 3, 3, FALSE), + PT(28, 47, 2, 0, FALSE), + PT(37, 11, 6, 2, FALSE), + PT(62, 12, 3, 1, FALSE), + PT(27, 16, 5, 1, FALSE), + PT(15, 20, 2, 3, TRUE), + PT(15, 63, 2, 3, TRUE), + PT( 3, 21, 3, 3, TRUE), + PT( 2, 54, 2, 3, TRUE), + PT(21, 29, 3, 0, FALSE), + PT( 8, 54, 2, 0, FALSE), + PT(20, 13, 5, 1, TRUE), + PT(10, 5, 3, 2, TRUE), + PT(38, 18, 3, 3, FALSE), + PT(62, 24, 3, 0, TRUE), + PT(54, 24, 6, 3, TRUE), + PT(23, 57, 5, 3, FALSE), + PT(13, 4, 3, 0, TRUE), + PT(22, 34, 2, 2, TRUE), + PT(62, 38, 3, 3, TRUE), + PT( 0, 6, 2, 3, TRUE), + PT(51, 34, 3, 2, TRUE), + PT(43, 57, 5, 1, TRUE), + PT(62, 49, 3, 2, FALSE), + PT(34, 63, 2, 1, TRUE), + PT(48, 28, 6, 0, TRUE), + PT( 7, 43, 2, 2, FALSE), + PT(50, 53, 3, 3, FALSE), + PT( 2, 7, 4, 0, FALSE), + PT(15, 59, 2, 0, TRUE), + PT(32, 7, 2, 1, FALSE), + PT(42, 48, 3, 2, TRUE), + PT(40, 56, 6, 3, FALSE), + PT(32, 1, 2, 3, TRUE), + PT(21, 32, 4, 0, TRUE), + PT(58, 27, 3, 3, FALSE), + PT(56, 18, 4, 2, FALSE), + PT( 3, 62, 3, 3, TRUE), + PT(41, 29, 2, 1, TRUE), + PT(32, 39, 3, 0, TRUE), + PT(18, 37, 4, 0, FALSE), + PT(50, 51, 5, 1, TRUE), + PT(63, 5, 6, 0, TRUE), + PT(53, 60, 5, 2, TRUE), + PT(45, 2, 5, 3, FALSE), + PT(16, 42, 2, 3, FALSE), + PT(23, 8, 6, 0, TRUE), + PT(23, 46, 5, 1, TRUE), + PT(48, 30, 2, 2, TRUE), + PT(49, 21, 4, 3, FALSE), + PT( 8, 16, 6, 1, TRUE), + PT(21, 1, 4, 3, TRUE), + PT(18, 7, 5, 3, TRUE), + PT(41, 39, 6, 2, FALSE), + PT(63, 8, 6, 0, TRUE), + PT(28, 32, 3, 1, FALSE), + PT(51, 12, 2, 1, TRUE), + PT(24, 49, 4, 2, FALSE), + PT(55, 45, 5, 3, FALSE), + PT(33, 24, 4, 2, FALSE), + PT(58, 39, 6, 0, TRUE), + PT(53, 62, 6, 0, FALSE), + PT(58, 20, 6, 1, TRUE), + PT(15, 26, 5, 2, TRUE), + PT(48, 46, 2, 0, TRUE), + PT(26, 49, 3, 2, TRUE), + PT(23, 60, 3, 0, FALSE), + PT(51, 49, 4, 1, TRUE), + PT(29, 57, 5, 2, TRUE), + PT(16, 29, 5, 3, TRUE), + PT(36, 21, 3, 2, FALSE), + PT(37, 1, 5, 1, TRUE), + PT(34, 22, 5, 3, FALSE), + PT(27, 37, 6, 2, TRUE), + PT(55, 16, 4, 3, FALSE), + PT(57, 1, 6, 3, FALSE), + PT(23, 43, 2, 2, FALSE), + PT( 9, 22, 2, 3, TRUE), + PT(32, 40, 4, 1, TRUE), + PT(38, 58, 4, 3, FALSE), + PT(39, 42, 4, 2, FALSE), + PT(54, 2, 5, 2, FALSE), + PT(41, 48, 6, 2, TRUE), + PT(54, 1, 3, 3, TRUE), + PT(40, 59, 3, 2, TRUE), + PT(35, 30, 5, 2, TRUE), + PT(17, 30, 5, 2, FALSE), + PT(47, 50, 3, 0, TRUE), + PT(63, 38, 6, 0, TRUE), + PT(56, 30, 2, 3, TRUE), + PT( 5, 24, 5, 3, FALSE), + PT( 0, 46, 2, 1, FALSE), + PT(52, 63, 6, 2, FALSE), + PT(22, 16, 5, 0, TRUE), + PT(32, 61, 6, 3, FALSE), + PT(47, 22, 4, 2, TRUE), + PT(18, 23, 2, 0, FALSE), + PT(33, 55, 6, 2, TRUE), + PT(37, 55, 5, 2, TRUE), + PT( 1, 8, 4, 3, TRUE), + PT( 3, 31, 5, 0, TRUE), + PT(13, 42, 2, 3, FALSE), + PT(58, 63, 6, 1, TRUE), + PT(43, 25, 3, 2, TRUE), + PT(42, 31, 5, 0, TRUE), + PT(40, 44, 2, 0, FALSE), + PT(40, 48, 2, 0, FALSE), + PT(57, 20, 3, 1, TRUE), + PT( 0, 24, 4, 0, TRUE), + PT(40, 12, 6, 3, TRUE), + PT(17, 16, 2, 0, TRUE), + PT(60, 51, 6, 1, FALSE), + PT(51, 54, 3, 1, FALSE), + PT(54, 0, 3, 2, FALSE), + PT(49, 27, 3, 2, TRUE), + PT(56, 29, 2, 0, FALSE), + PT(60, 57, 4, 3, TRUE), + PT(58, 63, 2, 2, FALSE), + PT(25, 18, 2, 2, FALSE), + PT(13, 31, 3, 0, FALSE), + PT( 0, 37, 3, 0, FALSE), + PT(40, 28, 6, 1, FALSE), + PT(39, 3, 3, 1, FALSE), + PT(38, 45, 5, 1, FALSE), + PT(41, 40, 4, 3, TRUE), + PT(10, 42, 3, 0, FALSE), + PT(10, 26, 6, 0, FALSE), + PT(32, 26, 5, 3, FALSE), + PT( 6, 11, 3, 2, TRUE), + PT(15, 12, 3, 2, FALSE), + PT(53, 40, 3, 2, FALSE), + PT(61, 22, 4, 1, TRUE), + PT(33, 28, 6, 0, TRUE), + PT(20, 28, 5, 3, FALSE), + PT(34, 50, 6, 2, TRUE), + PT( 9, 41, 6, 0, FALSE), + PT(32, 26, 2, 0, FALSE), + PT(49, 63, 5, 2, FALSE), + PT(10, 61, 6, 3, TRUE), + PT(11, 46, 5, 2, TRUE), + PT(31, 34, 6, 0, TRUE), + PT( 6, 7, 5, 0, TRUE), + PT(34, 23, 5, 2, TRUE), + PT(48, 17, 3, 0, FALSE), + PT(12, 25, 2, 2, TRUE), + PT( 7, 10, 6, 2, FALSE), + PT(24, 41, 4, 3, TRUE), + PT(51, 12, 6, 0, FALSE), + PT( 3, 26, 6, 3, TRUE), + PT( 6, 1, 5, 2, TRUE), + PT(15, 59, 5, 1, TRUE), + PT(17, 31, 6, 3, TRUE), + PT(43, 33, 6, 3, FALSE), + PT(63, 35, 2, 3, TRUE), + PT(23, 7, 5, 1, TRUE), + PT(43, 14, 6, 0, FALSE), + PT(17, 57, 3, 2, TRUE), + PT(41, 3, 6, 1, TRUE), + PT(48, 3, 5, 3, TRUE), + PT(60, 32, 4, 3, FALSE), + PT( 3, 34, 2, 2, FALSE), + PT(58, 40, 6, 2, TRUE), + PT( 1, 40, 5, 1, TRUE), + PT(62, 21, 3, 0, FALSE), + PT(48, 7, 2, 3, TRUE), + PT(59, 44, 6, 0, FALSE), + PT(21, 7, 5, 2, FALSE), + PT(23, 39, 3, 2, TRUE), + PT(63, 30, 6, 1, TRUE), + PT(13, 23, 2, 0, FALSE), + PT(21, 14, 6, 0, FALSE), + PT( 9, 5, 6, 0, FALSE), + PT(45, 32, 2, 2, TRUE), + PT(60, 61, 6, 0, FALSE), + PT(12, 23, 3, 2, FALSE), + PT(26, 13, 4, 2, TRUE), + PT(43, 43, 5, 1, FALSE), + PT( 2, 22, 5, 2, TRUE), + PT(23, 49, 2, 3, TRUE), + PT( 0, 8, 2, 1, TRUE), + PT(55, 53, 4, 0, TRUE), + PT(30, 28, 3, 3, TRUE), + PT(43, 50, 3, 2, FALSE), + PT(16, 42, 2, 3, FALSE), + PT(58, 51, 6, 0, TRUE), + PT(23, 43, 5, 1, FALSE), + PT(12, 61, 2, 0, TRUE), + PT(40, 10, 6, 0, FALSE), + PT(35, 10, 4, 3, FALSE), + PT(10, 20, 4, 2, FALSE), + PT(11, 15, 6, 0, FALSE), + PT(27, 30, 5, 0, TRUE), + PT( 2, 53, 5, 0, FALSE), + PT(59, 2, 2, 2, FALSE), + PT( 0, 15, 6, 2, TRUE), + PT(28, 60, 5, 3, FALSE), + PT(40, 56, 3, 0, TRUE), + PT(27, 17, 2, 1, FALSE), + PT( 9, 22, 2, 0, FALSE), + PT(46, 13, 4, 0, FALSE), + PT(61, 4, 6, 1, FALSE), + PT(22, 44, 4, 2, TRUE), + PT( 2, 61, 3, 0, FALSE), + PT(11, 19, 3, 2, FALSE), + PT(34, 42, 3, 2, FALSE), + PT(32, 39, 4, 1, FALSE), + PT( 5, 38, 4, 1, FALSE), + PT(18, 29, 5, 2, FALSE), + PT( 8, 5, 5, 3, FALSE), + PT(63, 28, 2, 3, TRUE), + PT(36, 13, 6, 1, TRUE), + PT(54, 8, 4, 2, FALSE), + PT(16, 34, 5, 0, TRUE), + PT(28, 10, 2, 0, TRUE), + PT(37, 15, 2, 0, FALSE), + PT(36, 56, 5, 3, TRUE), + PT(37, 50, 3, 3, FALSE), + PT( 6, 42, 5, 0, TRUE), + PT(62, 58, 5, 0, FALSE), + PT(52, 23, 6, 1, TRUE), + PT(24, 51, 2, 3, TRUE), + PT( 7, 20, 3, 3, TRUE), + PT(17, 23, 4, 0, FALSE), + PT(19, 14, 2, 2, FALSE), + PT(59, 28, 2, 1, FALSE), + PT(42, 19, 6, 3, TRUE), + PT(42, 53, 6, 1, FALSE), + PT(48, 2, 4, 2, TRUE), + PT( 0, 7, 3, 3, TRUE), + PT(12, 4, 5, 2, FALSE), + PT(55, 55, 6, 0, FALSE), + PT(37, 18, 4, 2, TRUE), + PT(18, 34, 4, 0, TRUE), + PT(34, 53, 6, 1, TRUE), + PT( 7, 32, 5, 2, TRUE), + PT(39, 14, 6, 0, FALSE), + PT(52, 25, 3, 1, FALSE), + PT(10, 60, 4, 2, TRUE), + PT( 7, 29, 5, 1, TRUE), + PT(49, 58, 2, 1, FALSE), + PT(26, 61, 6, 3, TRUE), + PT(22, 21, 2, 3, FALSE), + PT(57, 19, 2, 2, TRUE), + PT(45, 3, 5, 3, FALSE), + PT( 6, 57, 5, 2, FALSE), + PT(22, 0, 2, 1, TRUE), + PT(53, 42, 6, 2, TRUE), + PT(36, 1, 3, 0, FALSE), + PT(36, 55, 5, 0, FALSE), + PT(37, 27, 6, 2, FALSE), + PT(37, 25, 2, 3, TRUE), + PT(39, 47, 3, 1, TRUE), + PT(39, 13, 2, 0, FALSE), + PT(54, 60, 6, 0, FALSE), + PT(60, 51, 4, 1, TRUE), + PT(62, 39, 3, 3, FALSE), + PT(37, 45, 5, 0, TRUE), + PT(31, 18, 4, 0, TRUE), + PT(55, 50, 3, 3, TRUE), + PT(17, 33, 6, 2, TRUE), + PT(48, 12, 3, 0, TRUE), + PT(37, 61, 4, 3, FALSE), + PT(23, 2, 3, 2, TRUE), + PT(20, 46, 2, 0, TRUE), + PT(56, 19, 6, 0, FALSE), + PT(10, 43, 4, 0, FALSE), + PT(30, 16, 2, 2, TRUE), + PT(55, 48, 5, 3, FALSE), + PT(30, 4, 5, 2, FALSE), + PT(20, 52, 3, 0, TRUE), + PT( 8, 20, 3, 0, FALSE), + PT(14, 28, 6, 0, FALSE), + PT(26, 46, 3, 1, TRUE), + PT(31, 57, 6, 0, TRUE), + PT(12, 28, 5, 0, FALSE), + PT(62, 51, 4, 1, TRUE), + PT(15, 19, 2, 3, FALSE), + PT(37, 57, 5, 3, TRUE), + PT(20, 27, 3, 1, FALSE), + PT(40, 62, 4, 0, TRUE), + PT(45, 25, 2, 0, TRUE), + PT(12, 52, 6, 1, FALSE), + PT(57, 49, 3, 0, TRUE), + PT(26, 8, 6, 2, FALSE), + PT( 9, 47, 2, 0, TRUE), + PT(48, 4, 3, 2, FALSE), + PT( 2, 59, 3, 1, TRUE), + PT(51, 33, 6, 1, TRUE), + PT(56, 2, 3, 1, FALSE), + PT(49, 56, 6, 1, FALSE), + PT(31, 29, 2, 3, FALSE), + PT(23, 16, 3, 1, TRUE), + PT(50, 32, 2, 3, TRUE), + PT( 0, 51, 2, 1, FALSE), + PT(33, 15, 4, 3, TRUE), + PT(20, 25, 4, 3, TRUE), + PT(36, 44, 6, 3, TRUE), + PT(37, 5, 5, 3, TRUE), + PT(61, 37, 2, 0, TRUE), + PT(18, 48, 3, 1, FALSE), + PT(22, 3, 3, 1, FALSE), + PT(20, 9, 2, 1, TRUE), + PT( 2, 35, 4, 1, FALSE), + PT( 1, 60, 2, 0, FALSE), + PT(63, 45, 4, 1, TRUE), + PT(49, 63, 4, 1, TRUE), + PT(23, 0, 6, 1, TRUE), + PT(63, 15, 5, 3, TRUE), + PT(38, 7, 2, 2, TRUE), + PT(33, 43, 5, 1, FALSE), + PT(56, 57, 3, 3, FALSE), + PT( 9, 37, 5, 1, TRUE), + PT(59, 48, 4, 2, TRUE), + PT(18, 45, 2, 1, TRUE), + PT(50, 25, 5, 0, FALSE), + PT(36, 28, 5, 2, TRUE), + PT(53, 50, 4, 3, FALSE), + PT(13, 35, 3, 3, FALSE), + PT(29, 7, 4, 0, TRUE), + PT(11, 52, 2, 3, TRUE), + PT(45, 50, 6, 1, FALSE), + PT(58, 60, 6, 2, TRUE), + PT(26, 16, 6, 1, TRUE), + PT(26, 7, 4, 1, FALSE), + PT(59, 27, 5, 1, FALSE), + PT(51, 31, 4, 3, FALSE), + PT(14, 53, 3, 1, FALSE), + PT(59, 10, 3, 2, FALSE), + PT(17, 7, 2, 0, TRUE), + PT(13, 60, 5, 2, TRUE), + PT(30, 55, 5, 0, TRUE), + PT(17, 5, 2, 1, FALSE), + PT(21, 47, 3, 2, FALSE), + PT(36, 49, 2, 3, FALSE), + PT(43, 33, 3, 1, TRUE), + PT(35, 16, 6, 0, TRUE), + PT( 2, 20, 5, 0, TRUE), + PT(38, 32, 2, 3, FALSE), + PT(16, 23, 2, 0, FALSE), + PT(11, 15, 6, 1, TRUE), + PT( 1, 46, 2, 2, FALSE), + PT(33, 14, 6, 3, TRUE), + PT(26, 29, 5, 3, TRUE), + PT(30, 48, 4, 2, FALSE), + PT( 4, 20, 5, 2, TRUE), + PT(17, 0, 6, 0, FALSE), + PT( 8, 42, 3, 2, TRUE), + PT(29, 34, 4, 0, TRUE), + PT(36, 44, 6, 3, TRUE), + PT(36, 17, 2, 1, FALSE), + PT( 4, 46, 5, 0, FALSE), + PT(29, 24, 4, 1, TRUE), + PT(60, 22, 2, 3, FALSE), + PT(16, 23, 6, 0, TRUE), + PT(32, 33, 2, 1, FALSE), + PT(51, 62, 6, 2, FALSE), + PT( 6, 19, 2, 1, TRUE), + PT(23, 56, 5, 1, TRUE), + PT(20, 13, 2, 2, TRUE), + PT(36, 59, 5, 1, TRUE), + PT(52, 59, 3, 3, FALSE), + PT(24, 7, 6, 2, FALSE), + PT(55, 29, 3, 3, TRUE), + PT(11, 41, 4, 0, FALSE), + PT(18, 30, 3, 2, TRUE), + PT(26, 36, 4, 2, FALSE), + PT(61, 40, 4, 2, FALSE), + PT(11, 18, 6, 1, TRUE), + PT(27, 58, 4, 1, FALSE), + PT(20, 19, 5, 1, FALSE), + PT(49, 56, 2, 2, TRUE), + PT(55, 43, 5, 3, FALSE), + PT(25, 30, 5, 2, FALSE), + PT(63, 27, 5, 1, FALSE), + PT(51, 31, 6, 1, TRUE), + PT(63, 21, 5, 0, TRUE), + PT( 1, 30, 3, 0, FALSE), + PT(31, 34, 3, 0, TRUE), + PT(51, 60, 6, 2, FALSE), + PT(30, 18, 4, 1, FALSE), + PT(13, 55, 5, 2, FALSE), + PT(15, 8, 6, 0, TRUE), + PT(46, 9, 6, 3, FALSE), + PT( 1, 5, 3, 3, FALSE), + PT(28, 4, 3, 3, FALSE), + PT(12, 1, 3, 2, FALSE), + PT(41, 40, 5, 3, TRUE), + PT(57, 45, 2, 2, FALSE), + PT( 9, 34, 6, 3, FALSE), + PT( 4, 55, 6, 3, TRUE), + PT(45, 47, 6, 2, TRUE), + PT(36, 35, 3, 1, TRUE), + PT( 8, 32, 6, 1, FALSE), + PT(32, 31, 6, 2, FALSE), + PT( 2, 49, 3, 0, TRUE), + PT(24, 19, 6, 3, FALSE), + PT( 6, 43, 3, 3, FALSE), + PT(14, 27, 2, 0, FALSE), + PT(47, 14, 3, 2, FALSE), + PT(17, 56, 2, 1, TRUE), + PT( 1, 55, 3, 0, TRUE), + PT(20, 17, 4, 3, FALSE), + PT(49, 61, 6, 1, TRUE), + PT(29, 27, 6, 2, FALSE), + PT(37, 49, 5, 3, TRUE), + PT(17, 10, 5, 3, TRUE), + PT(57, 23, 3, 1, TRUE), + PT( 5, 14, 2, 1, TRUE), + PT(41, 37, 4, 1, FALSE), + PT(21, 13, 4, 0, FALSE), + PT(43, 39, 4, 0, TRUE), + PT(62, 36, 4, 3, TRUE), + PT(42, 43, 2, 3, FALSE), + PT(36, 61, 2, 2, TRUE), + PT(21, 48, 6, 0, TRUE), + PT(15, 51, 4, 2, FALSE), + PT( 6, 22, 2, 1, TRUE), + PT( 6, 49, 2, 0, FALSE), + PT(46, 63, 2, 0, FALSE), + PT( 5, 13, 5, 3, TRUE), + PT(60, 31, 3, 0, TRUE), + PT(18, 19, 4, 2, FALSE), + PT(15, 51, 6, 3, FALSE), + PT(21, 59, 6, 1, TRUE), + PT( 3, 15, 5, 1, FALSE), + PT(59, 60, 5, 2, FALSE), + PT(54, 9, 5, 0, TRUE), + PT(17, 59, 4, 3, TRUE), + PT(40, 43, 6, 0, TRUE), + PT(26, 14, 5, 3, TRUE), + PT(57, 44, 6, 0, TRUE), + PT(14, 60, 6, 2, TRUE), + PT(44, 36, 6, 1, TRUE), + PT(61, 17, 5, 1, TRUE), + PT( 7, 60, 6, 3, TRUE), + PT(20, 24, 2, 1, TRUE), + PT(29, 63, 5, 3, FALSE), + PT(48, 18, 4, 2, TRUE), + PT(38, 29, 2, 0, TRUE), + PT( 7, 17, 3, 3, FALSE), + PT(52, 1, 2, 0, TRUE), + PT(11, 57, 4, 0, TRUE), + PT(41, 2, 5, 0, TRUE), + PT(21, 16, 3, 1, FALSE), + PT(48, 31, 6, 2, TRUE), + PT(60, 43, 5, 1, FALSE), + PT(48, 59, 6, 3, FALSE), + PT(32, 26, 4, 1, TRUE), + PT(50, 36, 5, 1, TRUE), + PT(21, 32, 3, 2, FALSE), + PT(37, 61, 6, 3, FALSE), + PT(45, 20, 6, 0, TRUE), + PT(24, 35, 2, 3, TRUE), + PT(24, 5, 2, 1, TRUE), + PT(52, 48, 6, 3, TRUE), + PT(14, 57, 4, 1, TRUE), + PT(29, 31, 2, 3, TRUE), + PT( 1, 21, 5, 3, TRUE), + PT(11, 62, 3, 1, TRUE), + PT(13, 25, 5, 3, FALSE), + PT(49, 56, 3, 2, FALSE), + PT(21, 52, 2, 2, TRUE), + PT(19, 25, 5, 0, TRUE), + PT(25, 20, 4, 3, TRUE), + PT(21, 24, 4, 1, TRUE), + PT(41, 12, 4, 3, TRUE), + PT(45, 14, 2, 3, TRUE), + PT(52, 24, 2, 0, FALSE), + PT(59, 30, 5, 0, TRUE), + PT(52, 44, 4, 1, FALSE), + PT(49, 8, 2, 1, TRUE), + PT(29, 24, 3, 1, FALSE), + PT(28, 11, 5, 1, FALSE), + PT(25, 30, 3, 1, FALSE), + PT(35, 39, 2, 3, TRUE), + PT(59, 14, 6, 3, TRUE), + PT(25, 43, 2, 3, FALSE), + PT(47, 8, 4, 0, TRUE), + PT(55, 2, 4, 0, FALSE), + PT(11, 50, 6, 0, FALSE), + PT(22, 5, 6, 0, FALSE), + PT(19, 5, 3, 1, FALSE), + PT( 7, 57, 3, 0, TRUE), + PT(12, 59, 5, 1, FALSE), + PT(21, 5, 6, 0, FALSE), + PT(48, 5, 3, 0, TRUE), + PT(19, 0, 2, 1, FALSE), + PT(39, 22, 5, 1, FALSE), + PT(15, 40, 4, 3, TRUE), + PT(12, 35, 5, 3, TRUE), + PT(57, 40, 5, 1, FALSE), + PT(36, 37, 3, 3, TRUE), + PT(24, 41, 2, 2, FALSE), + PT(22, 5, 3, 1, FALSE), + PT(53, 47, 4, 3, FALSE), + PT(10, 58, 5, 0, TRUE), + PT(52, 44, 6, 3, FALSE), + PT(46, 58, 2, 2, TRUE), + PT(26, 10, 5, 2, TRUE), + PT(22, 20, 5, 3, FALSE), + PT(53, 40, 5, 1, FALSE), + PT(53, 15, 2, 0, TRUE), + PT(17, 50, 3, 0, TRUE), + PT(32, 26, 5, 0, FALSE), + PT(23, 26, 5, 0, FALSE), + PT(22, 51, 4, 2, TRUE), + PT(19, 44, 5, 0, TRUE), + PT( 9, 22, 6, 1, TRUE), + PT(29, 39, 4, 3, FALSE), + PT(21, 12, 5, 3, TRUE), + PT(34, 28, 3, 0, TRUE), + PT(41, 51, 2, 0, FALSE), + PT(45, 17, 3, 1, TRUE), + PT(22, 25, 5, 3, FALSE), + PT(13, 12, 5, 0, FALSE), + PT(55, 58, 6, 2, FALSE), + PT(42, 29, 6, 3, TRUE), + PT(48, 10, 6, 3, FALSE), + PT(36, 57, 3, 1, TRUE), + PT(57, 10, 6, 1, FALSE), + PT(17, 3, 5, 2, TRUE), + PT(50, 29, 6, 0, FALSE), + PT(56, 30, 4, 3, TRUE), + PT(46, 23, 3, 0, FALSE), + PT(22, 23, 5, 1, FALSE), + PT(54, 59, 6, 0, TRUE), + PT(23, 4, 3, 0, TRUE), + PT(58, 37, 5, 2, TRUE), + PT( 0, 54, 4, 3, TRUE), + PT(37, 18, 6, 1, TRUE), + PT( 6, 10, 2, 2, FALSE), + PT(17, 5, 5, 3, TRUE), + PT( 3, 53, 5, 3, TRUE), + PT(11, 52, 5, 0, TRUE), + PT( 0, 49, 2, 1, TRUE), + PT(39, 15, 3, 2, FALSE), + PT(29, 6, 5, 2, TRUE), + PT(28, 48, 4, 3, TRUE), + PT(47, 42, 4, 3, TRUE), + PT(22, 32, 6, 0, TRUE), + PT(51, 43, 5, 1, TRUE), + PT( 5, 48, 6, 3, FALSE), + PT(41, 35, 6, 2, TRUE), + PT(16, 22, 5, 3, TRUE), + PT(45, 32, 5, 0, TRUE), + PT(55, 19, 4, 2, FALSE), + PT(45, 14, 4, 2, TRUE), + PT( 8, 10, 3, 0, FALSE), + PT(15, 3, 3, 1, TRUE), + PT(49, 12, 6, 3, TRUE), + PT(30, 52, 6, 0, TRUE), + PT(27, 14, 4, 2, TRUE), + PT(26, 7, 6, 2, FALSE), + PT(13, 60, 6, 1, TRUE), + PT( 0, 58, 6, 3, FALSE), + PT( 4, 39, 2, 1, FALSE), + PT(35, 24, 4, 2, FALSE), + PT(13, 11, 3, 0, FALSE), + PT(49, 50, 6, 3, TRUE), + PT( 0, 13, 4, 0, TRUE), + PT(50, 16, 2, 1, FALSE), + PT(38, 13, 3, 0, TRUE), + PT(41, 36, 5, 1, TRUE), + PT(61, 33, 3, 3, TRUE), + PT(30, 27, 5, 0, FALSE), + PT(13, 18, 5, 0, FALSE), + PT(53, 30, 4, 1, TRUE), + PT(10, 46, 4, 1, FALSE), + PT(39, 39, 6, 2, TRUE), + PT( 1, 14, 4, 0, FALSE), + PT(49, 57, 5, 0, TRUE), + PT(59, 36, 6, 3, FALSE), + PT(20, 16, 6, 1, TRUE), + PT(24, 44, 4, 3, FALSE), + PT( 4, 45, 2, 2, TRUE), + PT(26, 17, 6, 3, TRUE), + PT(15, 11, 2, 2, FALSE), + PT(14, 44, 5, 2, FALSE), + PT(33, 23, 5, 2, FALSE), + PT(22, 33, 6, 2, TRUE), + PT(62, 16, 2, 0, FALSE), + PT(10, 5, 3, 3, FALSE), + PT(59, 9, 2, 1, TRUE), + PT(38, 24, 3, 3, FALSE), + PT(35, 12, 3, 1, FALSE), + PT(51, 55, 3, 3, TRUE), + PT( 9, 18, 6, 2, TRUE), + PT(61, 13, 2, 2, TRUE), + PT(54, 6, 4, 2, FALSE), + PT(51, 48, 5, 0, TRUE), + PT(59, 15, 5, 0, FALSE), + PT(52, 42, 5, 2, FALSE), + PT( 2, 18, 6, 2, TRUE), + PT( 9, 34, 6, 0, TRUE), + PT(59, 49, 3, 2, FALSE), + PT(51, 34, 4, 3, TRUE), + PT(61, 52, 2, 2, TRUE), + PT(20, 34, 5, 0, FALSE), + PT(40, 16, 3, 3, FALSE), + PT(33, 49, 2, 0, FALSE), + PT(45, 22, 4, 0, TRUE), + PT(30, 5, 6, 1, TRUE), + PT(15, 48, 6, 0, TRUE), + PT(14, 26, 6, 2, TRUE), + PT(56, 46, 5, 0, FALSE), + PT(38, 55, 3, 3, FALSE), + PT(43, 19, 6, 1, TRUE), + PT(31, 30, 6, 3, TRUE), + PT(10, 40, 4, 2, FALSE), + PT(50, 28, 3, 1, FALSE), + PT(31, 63, 3, 0, TRUE), + PT(57, 57, 5, 0, TRUE), + PT(44, 27, 2, 2, FALSE), + PT(21, 42, 2, 3, TRUE), + PT(50, 15, 4, 0, TRUE), + PT(48, 33, 3, 0, FALSE), + PT(35, 42, 4, 3, TRUE), + PT(61, 7, 2, 0, FALSE), + PT(11, 63, 5, 3, TRUE), + PT(49, 2, 5, 3, FALSE), + PT( 8, 57, 5, 3, TRUE), + PT(63, 32, 3, 0, FALSE), + PT(45, 52, 2, 0, TRUE), + PT(46, 52, 2, 0, FALSE), + PT(38, 18, 4, 1, TRUE), + PT(37, 10, 6, 3, TRUE), + PT(52, 9, 4, 2, TRUE), + PT(10, 62, 2, 3, FALSE), + PT(26, 23, 2, 0, TRUE), + PT(56, 28, 4, 0, FALSE), + PT(17, 33, 4, 3, FALSE), + PT( 5, 15, 3, 0, FALSE), + PT(38, 43, 6, 1, FALSE), + PT(10, 12, 2, 3, FALSE), + PT( 3, 41, 3, 2, TRUE), + PT(41, 59, 4, 1, TRUE), + PT(22, 27, 5, 0, TRUE), + PT( 7, 9, 2, 3, TRUE), + PT(23, 44, 3, 2, FALSE), + PT(53, 51, 6, 0, FALSE), + PT(23, 18, 3, 3, FALSE), + PT(61, 26, 5, 1, TRUE), + PT(33, 29, 2, 0, FALSE), + PT(10, 8, 2, 3, TRUE), + PT(20, 60, 6, 3, FALSE), + PT(40, 54, 6, 3, FALSE), + PT(59, 32, 3, 1, TRUE), + PT(19, 34, 3, 2, TRUE), + PT(19, 58, 2, 2, TRUE), + PT( 2, 35, 5, 2, FALSE), + PT(62, 25, 2, 2, FALSE), + PT(57, 60, 3, 1, FALSE), + PT(16, 8, 3, 3, FALSE), + PT(10, 19, 5, 0, TRUE), + PT(63, 56, 5, 2, FALSE), + PT( 7, 35, 3, 3, TRUE), + PT(25, 42, 4, 2, FALSE), + PT(20, 60, 3, 3, TRUE), + PT(13, 4, 6, 3, TRUE), + PT(26, 47, 5, 0, FALSE), + PT(42, 29, 3, 3, FALSE), + PT(17, 55, 5, 0, TRUE), + PT(40, 39, 2, 1, FALSE), + PT(13, 0, 4, 3, FALSE), + PT(10, 60, 4, 3, FALSE), + PT(31, 28, 6, 1, TRUE), + PT( 4, 58, 5, 2, FALSE), + PT(36, 61, 5, 1, TRUE), + PT(38, 49, 5, 3, TRUE), + PT(19, 28, 4, 0, TRUE), + PT(62, 18, 4, 1, TRUE), + PT(54, 10, 3, 1, FALSE), + PT(45, 30, 3, 0, TRUE), + PT( 5, 31, 3, 1, TRUE), + PT(30, 10, 3, 3, TRUE), + PT(32, 8, 4, 2, FALSE), + PT(44, 12, 6, 1, TRUE), + PT(29, 31, 2, 0, TRUE), + PT(14, 18, 2, 0, FALSE), + PT(39, 18, 3, 0, TRUE), + PT(42, 19, 6, 0, TRUE), + PT(28, 4, 6, 0, FALSE), + PT(26, 56, 3, 3, TRUE), + PT(44, 53, 4, 2, TRUE), + PT( 7, 11, 6, 1, TRUE), + PT(45, 2, 3, 1, FALSE), + PT(42, 53, 6, 2, TRUE), + PT(22, 47, 2, 2, FALSE), + PT(17, 49, 6, 1, TRUE), + PT(44, 49, 3, 3, FALSE), + PT(60, 58, 4, 3, TRUE), + PT(60, 43, 2, 1, FALSE), + PT(39, 29, 2, 1, FALSE), + PT(54, 44, 5, 1, TRUE), + PT(37, 59, 6, 2, TRUE), + PT(18, 61, 4, 3, TRUE), + PT(19, 35, 3, 0, TRUE), + PT(51, 44, 4, 3, FALSE), + PT( 9, 60, 2, 1, FALSE), + PT(21, 26, 4, 1, TRUE), + PT(33, 7, 3, 1, FALSE), + PT(34, 37, 4, 0, FALSE), + PT(25, 27, 5, 2, FALSE), + PT(58, 25, 6, 2, TRUE), + PT( 5, 38, 3, 2, TRUE), + PT(35, 34, 4, 2, TRUE), + PT(14, 30, 2, 0, TRUE), + PT(19, 48, 2, 1, FALSE), + PT(44, 34, 4, 2, TRUE), + PT(10, 29, 3, 0, FALSE), + PT(35, 62, 3, 2, TRUE), + PT( 2, 40, 4, 2, TRUE), + PT(33, 14, 4, 0, FALSE), + PT(33, 34, 6, 3, TRUE), + PT(24, 51, 4, 3, TRUE), + PT(35, 35, 6, 0, TRUE), + PT(36, 26, 3, 1, FALSE), + PT(62, 37, 4, 2, FALSE), + PT(36, 1, 3, 0, FALSE), + PT(52, 16, 4, 1, FALSE), + PT( 7, 0, 6, 3, TRUE), + PT( 6, 32, 4, 0, FALSE), + PT(58, 2, 5, 1, TRUE), + PT( 7, 44, 5, 2, FALSE), + PT( 9, 47, 5, 1, FALSE), + PT( 1, 50, 5, 2, FALSE), + PT( 0, 53, 2, 1, TRUE), + PT(43, 60, 3, 3, TRUE), + PT(54, 55, 3, 3, FALSE), + PT(32, 53, 3, 2, TRUE), + PT(12, 7, 6, 1, TRUE), + PT(22, 8, 2, 1, FALSE), + PT(63, 54, 2, 0, TRUE), + PT(11, 31, 5, 2, TRUE), + PT(33, 32, 6, 1, TRUE), + PT(23, 26, 5, 3, FALSE), + PT(22, 1, 5, 3, TRUE), + PT(47, 28, 6, 2, FALSE), + PT(41, 49, 5, 3, FALSE), + PT(59, 56, 6, 0, TRUE), + PT(13, 22, 2, 1, FALSE), + PT( 7, 41, 4, 2, FALSE), + PT(51, 60, 6, 2, FALSE), + PT(62, 30, 3, 0, FALSE), + PT(48, 2, 6, 2, FALSE), + PT(42, 52, 3, 1, TRUE), + PT(46, 35, 3, 0, FALSE), + PT(52, 0, 3, 3, TRUE), + PT(32, 14, 5, 0, FALSE), + PT(21, 51, 6, 3, TRUE), + PT(39, 53, 4, 1, TRUE), + PT(55, 62, 2, 0, TRUE), + PT(50, 46, 6, 3, FALSE), + PT(58, 2, 5, 1, TRUE), + PT( 0, 54, 3, 2, TRUE), + PT(19, 41, 2, 3, FALSE), + PT( 8, 43, 6, 3, TRUE), + PT( 8, 2, 4, 3, TRUE), + PT(50, 45, 6, 2, FALSE), + PT(48, 54, 5, 0, TRUE), + PT(46, 16, 2, 1, FALSE), + PT(60, 46, 5, 1, FALSE), + PT( 4, 51, 6, 0, FALSE), + PT(63, 1, 4, 1, FALSE), + PT(55, 20, 3, 2, TRUE), + PT(39, 0, 5, 3, TRUE), + PT(12, 57, 4, 3, FALSE), + PT(39, 4, 4, 0, TRUE), + PT(25, 8, 3, 2, TRUE), + PT( 1, 4, 3, 3, FALSE), + PT(39, 27, 5, 1, TRUE), + PT(49, 23, 3, 3, TRUE), + PT( 7, 1, 5, 2, TRUE), + PT(46, 59, 3, 3, TRUE), + PT(52, 36, 6, 0, TRUE), + PT(50, 43, 4, 2, FALSE), + PT(14, 7, 3, 3, FALSE), + PT(15, 51, 2, 0, FALSE), + PT(22, 33, 6, 1, FALSE), + PT(57, 2, 3, 1, FALSE), + PT(51, 61, 4, 1, FALSE), + PT(12, 37, 3, 1, FALSE), + PT(41, 41, 5, 0, FALSE), + PT(58, 50, 4, 3, FALSE), + PT(11, 19, 4, 1, FALSE), + PT(31, 15, 3, 2, FALSE), + PT( 4, 44, 4, 0, FALSE), + PT(57, 26, 3, 1, TRUE), + PT(26, 42, 3, 3, TRUE), + PT(36, 19, 3, 1, FALSE), + PT(49, 59, 6, 1, TRUE), + PT(57, 35, 5, 0, FALSE), + PT(49, 7, 6, 0, TRUE), + PT(31, 16, 4, 0, FALSE), + PT(41, 23, 6, 1, FALSE), + PT(38, 59, 5, 2, TRUE), + PT( 2, 60, 3, 2, FALSE), + PT(14, 0, 4, 0, FALSE), + PT(20, 62, 6, 3, TRUE), + PT( 1, 15, 5, 2, TRUE), + PT( 6, 18, 4, 3, TRUE), + PT(48, 19, 3, 0, TRUE), + PT( 0, 51, 5, 1, FALSE), + PT(12, 7, 4, 3, TRUE), + PT(17, 58, 3, 2, FALSE), + PT(21, 10, 2, 1, TRUE), + PT(31, 13, 5, 1, FALSE), + PT(55, 7, 5, 1, FALSE), + PT(52, 53, 6, 2, FALSE), + PT(40, 22, 4, 3, TRUE), + PT( 6, 2, 6, 3, FALSE), + PT( 9, 35, 6, 0, FALSE), + PT(20, 2, 5, 0, FALSE), + PT(57, 50, 6, 2, FALSE), + PT(36, 53, 2, 1, FALSE), + PT(18, 34, 4, 3, FALSE), + PT( 9, 7, 6, 1, TRUE), + PT(15, 62, 3, 3, FALSE), + PT( 0, 60, 6, 1, TRUE), + PT(16, 55, 2, 2, FALSE), + PT(58, 3, 4, 2, TRUE), + PT(45, 30, 4, 2, FALSE), + PT(54, 54, 4, 3, FALSE), + PT(31, 60, 3, 1, FALSE), + PT(55, 51, 4, 2, TRUE), + PT(35, 19, 3, 3, TRUE), + PT(51, 13, 2, 1, TRUE), + PT(37, 48, 3, 3, FALSE), + PT(23, 3, 3, 0, FALSE), + PT(24, 24, 2, 2, FALSE), + PT(48, 7, 4, 1, FALSE), + PT(62, 51, 4, 0, TRUE), + PT(20, 55, 2, 3, FALSE), + PT(22, 0, 2, 1, FALSE), + PT(44, 18, 5, 3, TRUE), + PT(37, 63, 3, 3, FALSE), + PT(36, 25, 2, 3, FALSE), + PT(22, 15, 6, 2, TRUE), + PT(45, 16, 2, 0, TRUE), + PT(36, 42, 5, 0, FALSE), + PT(25, 37, 5, 3, FALSE), + PT(12, 22, 3, 3, TRUE), + PT(56, 33, 6, 3, FALSE), + PT(61, 26, 5, 3, TRUE), + PT(59, 50, 2, 1, FALSE), + PT(54, 19, 5, 0, TRUE), + PT(14, 48, 6, 0, TRUE), + PT(25, 7, 5, 3, TRUE), + PT(37, 35, 5, 0, FALSE), + PT(32, 8, 5, 0, TRUE), + PT(42, 0, 6, 0, FALSE), + PT(48, 56, 4, 1, TRUE), + PT(30, 15, 3, 3, TRUE), + PT(59, 27, 6, 0, FALSE), + PT(58, 55, 5, 3, TRUE), + PT(57, 55, 6, 2, TRUE), + PT(57, 45, 5, 3, TRUE), + PT(31, 46, 3, 3, FALSE), + PT(26, 43, 3, 3, FALSE), + PT(20, 23, 4, 0, FALSE), + PT(47, 3, 2, 0, TRUE), + PT(29, 0, 6, 0, FALSE), + PT(23, 43, 3, 2, TRUE), + PT(53, 40, 4, 2, TRUE), + PT(59, 15, 2, 0, TRUE), + PT( 9, 4, 5, 3, FALSE), + PT(35, 17, 3, 3, FALSE), + PT(19, 55, 3, 3, FALSE), + PT(55, 55, 3, 3, FALSE), + PT( 7, 1, 6, 1, FALSE), + PT(20, 6, 6, 1, FALSE), + PT(17, 12, 5, 3, FALSE), + PT(54, 46, 4, 2, FALSE), + PT(21, 42, 3, 2, FALSE), + PT(34, 21, 6, 2, FALSE), + PT(44, 30, 6, 2, TRUE), + PT(34, 39, 6, 1, TRUE), + PT(25, 63, 5, 2, TRUE), + PT(33, 51, 2, 2, TRUE), + PT(38, 26, 2, 0, TRUE), + PT(22, 62, 2, 1, FALSE), + PT(43, 36, 2, 2, TRUE), + PT(60, 15, 5, 2, TRUE), + PT(49, 21, 6, 3, FALSE), + PT(63, 36, 3, 2, TRUE), + PT(37, 1, 6, 3, TRUE), + PT(51, 22, 3, 1, FALSE), + PT(31, 14, 2, 0, FALSE), + PT(47, 11, 2, 1, FALSE), + PT(42, 26, 4, 2, TRUE), + PT(23, 10, 6, 2, TRUE), + PT( 9, 40, 6, 2, TRUE), + PT( 2, 19, 6, 3, FALSE), + PT(52, 47, 2, 3, TRUE), + PT( 3, 4, 6, 0, TRUE), + PT(62, 38, 2, 0, TRUE), + PT(53, 51, 6, 0, TRUE), + PT(34, 23, 4, 1, TRUE), + PT(29, 5, 5, 1, TRUE), + PT(46, 39, 4, 0, FALSE), + PT( 3, 43, 3, 2, TRUE), + PT( 1, 25, 3, 3, FALSE), + PT(14, 5, 3, 0, FALSE), + PT(22, 37, 2, 3, TRUE), + PT( 2, 40, 3, 0, FALSE), + PT(25, 11, 4, 2, FALSE), + PT(62, 53, 2, 3, FALSE), + PT(46, 41, 4, 2, TRUE), + PT(62, 56, 3, 3, FALSE), + PT(58, 47, 2, 1, FALSE), + PT(20, 23, 5, 2, TRUE), + PT(17, 18, 6, 0, FALSE), + PT(21, 49, 3, 0, FALSE), + PT( 8, 11, 5, 0, TRUE), + PT(45, 0, 6, 1, TRUE), + PT(44, 6, 3, 1, FALSE), + PT(20, 28, 5, 3, FALSE), + PT( 4, 8, 2, 1, FALSE), + PT(27, 43, 5, 2, TRUE), + PT(42, 55, 6, 1, TRUE), + PT(16, 39, 5, 2, FALSE), + PT(29, 14, 6, 2, FALSE), + PT(32, 2, 2, 1, FALSE), + PT(30, 26, 5, 3, FALSE), + PT( 7, 11, 2, 0, FALSE), + PT(54, 30, 6, 1, TRUE), + PT(43, 40, 3, 1, TRUE), + PT(49, 37, 3, 3, TRUE), + PT(56, 58, 5, 3, TRUE), + PT(57, 48, 5, 3, TRUE), + PT(18, 9, 2, 2, FALSE), + PT(14, 8, 3, 0, TRUE), + PT( 0, 13, 5, 2, FALSE), + PT(27, 14, 6, 2, FALSE), + PT(17, 37, 2, 2, TRUE), + PT(12, 45, 4, 3, FALSE), + PT(54, 44, 2, 3, FALSE), + PT(49, 49, 5, 2, FALSE), + PT( 3, 26, 2, 3, FALSE), + PT(28, 50, 2, 2, FALSE), + PT(10, 62, 6, 3, FALSE), + PT(51, 27, 4, 3, TRUE), + PT(31, 50, 3, 0, FALSE), + PT(51, 38, 6, 1, TRUE), + PT(26, 19, 3, 1, FALSE), + PT(15, 52, 3, 2, FALSE), + PT(53, 44, 5, 3, TRUE), + PT(56, 3, 3, 0, FALSE), + PT(21, 15, 4, 3, TRUE), + PT(49, 41, 4, 0, FALSE), + PT(40, 14, 5, 0, FALSE), + PT(49, 44, 5, 3, FALSE), + PT(21, 25, 3, 1, TRUE), + PT(16, 3, 5, 3, TRUE), + PT(46, 42, 6, 1, FALSE), + PT(42, 39, 3, 1, TRUE), + PT(54, 4, 3, 3, FALSE), + PT(59, 4, 4, 0, TRUE), + PT( 7, 47, 3, 0, TRUE), + PT(39, 29, 3, 2, TRUE), + PT(60, 61, 5, 3, FALSE), + PT(37, 8, 6, 1, FALSE), + PT(59, 52, 5, 1, FALSE), + PT(12, 16, 2, 1, TRUE), + PT(37, 53, 3, 1, FALSE), + PT(47, 25, 5, 0, FALSE), + PT(23, 0, 5, 1, TRUE), + PT(10, 28, 2, 3, TRUE), + PT(10, 17, 3, 1, TRUE), + PT(53, 19, 6, 3, TRUE), + PT(41, 28, 5, 0, FALSE), + PT(12, 49, 6, 2, TRUE), + PT(60, 16, 3, 1, FALSE), + PT(27, 58, 5, 2, TRUE), + PT(58, 28, 3, 0, FALSE), + PT(34, 16, 5, 2, TRUE), + PT(28, 60, 2, 1, FALSE), + PT(23, 24, 5, 1, FALSE), + PT(11, 43, 5, 3, TRUE), + PT(45, 4, 5, 3, FALSE), + PT(60, 19, 4, 1, TRUE), + PT( 1, 28, 5, 3, FALSE), + PT(20, 22, 4, 1, FALSE), + PT(12, 36, 2, 1, TRUE), + PT(53, 55, 6, 2, FALSE), + PT(27, 48, 3, 3, FALSE), + PT(58, 28, 4, 0, FALSE), + PT( 6, 6, 6, 3, FALSE), + PT( 9, 21, 3, 1, FALSE), + PT(27, 26, 4, 3, TRUE), + PT(15, 51, 6, 2, TRUE), + PT(55, 6, 4, 1, TRUE), + PT(58, 18, 3, 2, TRUE), + PT( 0, 22, 5, 0, TRUE), + PT(14, 29, 6, 2, TRUE), + PT(63, 56, 2, 3, FALSE), + PT(42, 60, 6, 2, FALSE), + PT(19, 50, 2, 0, FALSE), + PT(23, 44, 6, 3, TRUE), + PT(41, 42, 3, 3, FALSE), + PT(53, 47, 5, 2, TRUE), + PT(60, 42, 2, 0, TRUE), + PT(40, 19, 4, 0, TRUE), + PT(25, 30, 6, 2, FALSE), + PT(12, 6, 5, 2, TRUE), + PT( 9, 4, 3, 2, FALSE), + PT(29, 47, 4, 3, FALSE), + PT(57, 7, 2, 3, FALSE), + PT(20, 4, 5, 2, TRUE), + PT(58, 47, 5, 3, FALSE), + PT(41, 21, 6, 2, TRUE), + PT(36, 2, 6, 3, FALSE), + PT(63, 2, 3, 1, FALSE), + PT(15, 24, 4, 2, FALSE), + PT(22, 29, 3, 0, TRUE), + PT(20, 22, 2, 0, FALSE), + PT(41, 27, 2, 1, TRUE), + PT(21, 14, 3, 0, TRUE), + PT(58, 46, 5, 1, TRUE), + PT( 8, 48, 2, 2, TRUE), + PT(53, 22, 6, 0, FALSE), + PT(46, 24, 6, 2, TRUE), + PT(59, 11, 3, 2, FALSE), + PT(58, 24, 2, 1, TRUE), + PT(41, 19, 3, 3, FALSE), + PT(32, 19, 4, 3, TRUE), + PT( 4, 29, 6, 2, FALSE), + PT( 0, 56, 3, 0, TRUE), + PT( 8, 57, 6, 1, FALSE), + PT(32, 16, 4, 3, FALSE), + PT( 8, 2, 5, 0, FALSE), + PT(63, 15, 2, 3, FALSE), + PT(48, 31, 3, 0, TRUE), + PT(32, 45, 2, 0, FALSE), + PT(56, 23, 3, 2, FALSE), + PT(24, 49, 4, 3, TRUE), + PT(51, 56, 6, 0, FALSE), + PT(22, 51, 4, 1, TRUE), + PT( 0, 1, 6, 3, FALSE), + PT(13, 2, 4, 1, TRUE), + PT(57, 4, 3, 3, TRUE), + PT(14, 48, 4, 2, FALSE), + PT( 6, 1, 5, 2, FALSE), + PT(52, 51, 6, 2, TRUE), + PT(22, 52, 5, 3, FALSE), + PT(50, 22, 4, 2, FALSE), + PT(38, 57, 6, 2, FALSE), + PT(31, 60, 3, 2, TRUE), + PT(40, 29, 6, 3, TRUE), + PT(23, 21, 5, 1, TRUE), + PT(39, 57, 6, 0, FALSE), + PT(11, 27, 3, 0, FALSE), + PT(53, 32, 5, 2, TRUE), + PT(11, 53, 3, 2, FALSE), + PT( 3, 14, 4, 0, TRUE), + PT( 6, 12, 4, 0, FALSE), + PT( 2, 24, 6, 2, FALSE), + PT(30, 54, 5, 2, TRUE), + PT(22, 12, 3, 0, TRUE), + PT(37, 9, 5, 2, FALSE), + PT(55, 5, 5, 3, FALSE), + PT(46, 43, 5, 2, FALSE), + PT(36, 26, 2, 2, FALSE), + PT(39, 4, 2, 0, FALSE), + PT(50, 56, 6, 1, TRUE), + PT(55, 21, 6, 2, TRUE), + PT(17, 63, 3, 2, TRUE), + PT(35, 35, 3, 3, TRUE), + PT(41, 63, 3, 2, TRUE), + PT(26, 60, 5, 1, TRUE), + PT(27, 44, 5, 2, FALSE), + PT(56, 59, 6, 3, FALSE), + PT( 4, 19, 6, 1, TRUE), + PT(44, 20, 2, 1, FALSE), + PT(26, 9, 3, 1, TRUE), + PT(54, 17, 4, 2, FALSE), + PT(58, 63, 2, 0, TRUE), + PT( 1, 14, 5, 1, TRUE), + PT(59, 3, 5, 1, FALSE), + PT( 8, 13, 5, 1, TRUE), + PT(43, 19, 4, 3, TRUE), + PT(58, 60, 3, 2, FALSE), + PT(58, 21, 5, 1, FALSE), + PT(36, 0, 2, 3, TRUE), + PT(62, 10, 2, 2, TRUE), + PT(12, 41, 5, 2, TRUE), + PT(31, 21, 6, 0, FALSE), + PT(53, 24, 3, 0, TRUE), + PT(61, 55, 6, 3, TRUE), + PT(18, 56, 3, 1, TRUE), + PT(59, 2, 4, 0, FALSE), + PT( 8, 33, 3, 0, TRUE), + PT(46, 54, 3, 2, TRUE), + PT(21, 61, 4, 2, FALSE), + PT(34, 12, 4, 3, TRUE), + PT(54, 63, 6, 1, TRUE), + PT(51, 18, 2, 0, TRUE), + PT(26, 25, 3, 3, TRUE), + PT(43, 36, 2, 1, FALSE), + PT(17, 42, 3, 0, FALSE), + PT(37, 50, 5, 1, FALSE), + PT(44, 26, 2, 1, FALSE), + PT(38, 6, 2, 0, FALSE), + PT(17, 41, 6, 1, TRUE), + PT(44, 9, 2, 2, FALSE), + PT(43, 18, 5, 1, TRUE), + PT(29, 3, 4, 2, FALSE), + PT( 0, 18, 2, 2, TRUE), + PT(34, 61, 4, 3, FALSE), + PT(21, 55, 3, 1, FALSE), + PT(15, 18, 6, 3, TRUE), + PT(36, 1, 3, 0, FALSE), + PT(42, 23, 2, 1, TRUE), + PT(20, 59, 5, 0, TRUE), + PT(42, 25, 6, 1, FALSE), + PT(45, 23, 2, 3, TRUE), + PT(11, 44, 6, 1, TRUE), + PT( 7, 45, 6, 2, FALSE), + PT( 7, 56, 3, 2, TRUE), + PT(31, 54, 4, 1, FALSE), + PT(17, 10, 2, 3, TRUE), + PT(20, 17, 2, 1, TRUE), + PT(42, 23, 4, 2, TRUE), + PT( 1, 58, 3, 2, FALSE), + PT(38, 39, 6, 0, FALSE), + PT(45, 59, 6, 2, TRUE), + PT(58, 48, 6, 2, FALSE), + PT( 6, 58, 3, 2, FALSE), + PT(45, 5, 2, 1, TRUE), + PT(33, 50, 2, 1, FALSE), + PT(62, 30, 5, 2, FALSE), + PT(58, 63, 5, 2, TRUE), + PT(32, 42, 6, 2, FALSE), + PT(38, 3, 3, 1, FALSE), + PT(25, 39, 5, 3, FALSE), + PT(49, 4, 4, 3, FALSE), + PT(42, 63, 6, 0, FALSE), + PT(37, 35, 5, 1, FALSE), + PT( 8, 8, 6, 2, TRUE), + PT(44, 48, 3, 3, FALSE), + PT( 8, 5, 3, 0, FALSE), + PT( 6, 9, 5, 2, TRUE), + PT(25, 0, 4, 3, TRUE), + PT(13, 16, 3, 0, TRUE), + PT(28, 0, 2, 1, TRUE), + PT(61, 11, 4, 2, FALSE), + PT(46, 31, 2, 3, FALSE), + PT(61, 24, 6, 2, FALSE), + PT(18, 30, 2, 2, TRUE), + PT(21, 57, 4, 2, TRUE), + PT(51, 15, 2, 3, TRUE), + PT(26, 28, 3, 1, TRUE), + PT(55, 41, 3, 1, TRUE), + PT(59, 56, 2, 1, FALSE), + PT(29, 34, 6, 2, FALSE), + PT(38, 10, 6, 0, TRUE), + PT(22, 45, 2, 1, TRUE), + PT(13, 32, 4, 3, TRUE), + PT(36, 29, 2, 3, FALSE), + PT(46, 43, 3, 0, FALSE), + PT(22, 42, 3, 1, TRUE), + PT(36, 23, 6, 3, FALSE), + PT( 2, 5, 5, 1, TRUE), + PT(55, 26, 2, 3, TRUE), + PT(17, 61, 5, 2, FALSE), + PT(30, 47, 4, 1, FALSE), + PT(44, 41, 3, 1, FALSE), + PT(47, 4, 4, 2, TRUE), + PT(54, 12, 6, 2, TRUE), + PT(48, 62, 2, 1, FALSE), + PT(17, 48, 6, 3, TRUE), + PT(18, 33, 5, 3, FALSE), + PT(33, 48, 2, 3, TRUE), + PT(44, 61, 4, 2, FALSE), + PT(17, 35, 2, 2, FALSE), + PT(26, 50, 2, 3, TRUE), + PT(57, 39, 3, 0, FALSE), + PT(15, 36, 3, 0, TRUE), + PT( 0, 61, 6, 3, TRUE), + PT(44, 60, 3, 2, FALSE), + PT(11, 57, 4, 1, TRUE), + PT(14, 4, 3, 3, TRUE), + PT(28, 49, 2, 2, FALSE), + PT( 0, 4, 2, 2, TRUE), + PT(38, 42, 5, 1, FALSE), + PT(32, 37, 5, 1, FALSE), + PT(11, 60, 6, 1, TRUE), + PT(17, 11, 5, 3, FALSE), + PT(55, 34, 5, 3, FALSE), + PT(14, 34, 4, 3, FALSE), + PT(24, 45, 4, 3, TRUE), + PT( 6, 12, 3, 2, FALSE), + PT(38, 24, 5, 3, TRUE), + PT(58, 1, 5, 1, FALSE), + PT(47, 49, 6, 2, FALSE), + PT(31, 52, 3, 1, FALSE), + PT(49, 5, 2, 0, FALSE), + PT(46, 23, 6, 2, FALSE), + PT(24, 34, 4, 1, TRUE), + PT(35, 33, 6, 1, FALSE), + PT( 7, 8, 4, 1, FALSE), + PT(38, 28, 4, 1, FALSE), + PT(49, 18, 5, 3, TRUE), + PT( 8, 31, 2, 0, FALSE), + PT(39, 21, 5, 1, FALSE), + PT(31, 11, 4, 3, FALSE), + PT(47, 20, 6, 2, TRUE), + PT(36, 31, 4, 3, FALSE), + PT(59, 35, 6, 1, TRUE), + PT(32, 62, 5, 2, TRUE), + PT(23, 12, 2, 2, TRUE), + PT(19, 57, 3, 1, FALSE), + PT(48, 20, 4, 2, TRUE), + PT( 9, 7, 2, 3, TRUE), + PT(56, 56, 3, 3, TRUE), + PT(41, 36, 4, 3, TRUE), + PT(23, 39, 5, 0, FALSE), + PT(27, 18, 5, 1, FALSE), + PT(43, 61, 5, 2, TRUE), + PT(25, 52, 3, 2, FALSE), + PT( 1, 29, 2, 0, FALSE), + PT( 8, 57, 2, 0, TRUE), + PT(14, 54, 3, 1, TRUE), + PT(38, 19, 2, 0, FALSE), + PT(22, 40, 3, 3, FALSE), + PT(60, 40, 2, 3, TRUE), + PT(62, 57, 6, 2, FALSE), + PT(10, 3, 5, 3, FALSE), + PT(55, 26, 2, 1, TRUE), + PT(43, 51, 4, 3, FALSE), + PT(19, 44, 4, 0, TRUE), + PT(37, 20, 2, 0, FALSE), + PT(22, 11, 6, 2, TRUE), + PT(29, 53, 6, 1, TRUE), + PT(33, 8, 6, 1, TRUE), + PT(40, 33, 3, 1, FALSE), + PT(18, 12, 3, 1, TRUE), + PT(54, 42, 3, 0, TRUE), + PT(44, 43, 4, 1, TRUE), + PT( 1, 15, 4, 3, FALSE), + PT(23, 12, 3, 0, FALSE), + PT( 9, 15, 2, 0, TRUE), + PT(43, 36, 3, 2, FALSE), + PT( 9, 9, 2, 2, TRUE), + PT(54, 8, 2, 1, TRUE), + PT(32, 57, 4, 0, TRUE), + PT( 0, 58, 3, 3, TRUE), + PT(43, 54, 6, 0, TRUE), + PT( 2, 55, 2, 1, TRUE), + PT( 4, 52, 6, 2, TRUE), + PT(55, 61, 3, 1, FALSE), + PT(23, 61, 2, 1, TRUE), + PT(43, 54, 5, 3, TRUE), + PT(19, 30, 2, 1, TRUE), + PT(62, 17, 6, 1, TRUE), + PT(39, 58, 5, 2, TRUE), + PT(30, 49, 3, 1, FALSE), + PT( 3, 3, 5, 2, TRUE), + PT(37, 55, 3, 3, TRUE), + PT(17, 1, 4, 1, FALSE), + PT(28, 18, 2, 3, TRUE), + PT(48, 58, 6, 0, FALSE), + PT(23, 29, 5, 0, TRUE), + PT(14, 19, 4, 3, TRUE), + PT(26, 46, 4, 2, FALSE), + PT(45, 0, 3, 2, FALSE), + PT(23, 40, 3, 2, TRUE), + PT( 9, 31, 5, 3, FALSE), + PT(26, 45, 4, 3, FALSE), + PT(10, 19, 6, 1, FALSE), + PT(62, 0, 4, 3, TRUE), + PT(11, 59, 6, 0, FALSE), + PT( 8, 58, 5, 2, TRUE), + PT(34, 18, 3, 3, FALSE), + PT(52, 29, 5, 1, TRUE), + PT(38, 34, 6, 2, TRUE), + PT(23, 44, 2, 3, TRUE), + PT(41, 19, 5, 2, TRUE), + PT(45, 16, 2, 0, FALSE), + PT(32, 49, 4, 1, TRUE), + PT(30, 51, 3, 0, FALSE), + PT(51, 6, 5, 2, TRUE), + PT(38, 20, 4, 3, TRUE), + PT(34, 29, 5, 1, FALSE), + PT(45, 6, 3, 0, FALSE), + PT( 7, 9, 5, 3, FALSE), + PT(33, 21, 5, 3, FALSE), + PT(33, 56, 4, 1, TRUE), + PT(53, 11, 6, 2, FALSE), + PT(36, 11, 4, 1, FALSE), + PT(30, 1, 2, 3, TRUE), + PT(11, 36, 2, 0, TRUE), + PT(23, 7, 4, 0, FALSE), + PT(20, 37, 6, 1, FALSE), + PT(26, 14, 5, 3, TRUE), + PT(53, 23, 3, 3, TRUE), + PT(12, 8, 4, 0, TRUE), + PT(48, 53, 3, 3, TRUE), + PT(12, 11, 4, 0, FALSE), + PT( 4, 16, 2, 0, TRUE), + PT(53, 17, 3, 3, FALSE), + PT(51, 61, 2, 3, FALSE), + PT(30, 43, 3, 2, TRUE), + PT(26, 25, 2, 0, FALSE), + PT( 4, 6, 4, 1, FALSE), + PT( 3, 61, 4, 2, FALSE), + PT(42, 14, 6, 2, TRUE), + PT( 3, 62, 2, 3, TRUE), + PT(11, 24, 6, 3, FALSE), + PT(61, 13, 4, 3, FALSE), + PT(53, 18, 4, 0, FALSE), + PT(31, 13, 2, 3, FALSE), + PT(35, 50, 3, 1, FALSE), + PT( 0, 61, 4, 3, FALSE), + PT(48, 25, 6, 3, FALSE), + PT(18, 14, 4, 1, TRUE), + PT( 1, 35, 5, 0, FALSE), + PT(59, 49, 2, 0, TRUE), + PT(45, 28, 6, 3, FALSE), + PT(42, 5, 2, 3, FALSE), + PT(20, 14, 6, 0, FALSE), + PT(58, 55, 3, 0, TRUE), + PT(31, 48, 4, 2, TRUE), + PT(16, 38, 5, 3, TRUE), + PT(34, 17, 3, 3, TRUE), + PT(46, 43, 3, 3, FALSE), + PT(22, 22, 4, 0, TRUE), + PT(50, 24, 6, 2, TRUE), + PT(35, 50, 3, 1, FALSE), + PT(61, 13, 3, 0, TRUE), + PT(57, 9, 4, 1, TRUE), + PT(48, 46, 4, 2, FALSE), + PT(30, 15, 4, 2, FALSE), + PT( 9, 33, 6, 0, TRUE), + PT( 5, 3, 2, 0, TRUE), + PT( 5, 34, 5, 1, FALSE), + PT( 3, 7, 6, 3, TRUE), + PT( 4, 8, 2, 1, TRUE), + PT( 5, 16, 6, 2, FALSE), + PT(55, 20, 5, 0, TRUE), + PT(10, 36, 6, 1, FALSE), + PT(52, 30, 3, 1, TRUE), + PT(18, 23, 5, 3, FALSE), + PT( 1, 2, 2, 1, TRUE), + PT(10, 12, 2, 0, TRUE), + PT( 2, 20, 2, 1, TRUE), + PT(13, 37, 4, 1, TRUE), + PT( 0, 7, 3, 1, FALSE), + PT(28, 40, 6, 2, TRUE), + PT( 8, 14, 5, 2, FALSE), + PT(27, 60, 2, 2, TRUE), + PT(28, 25, 3, 2, TRUE), + PT(50, 19, 3, 1, FALSE), + PT(28, 0, 6, 3, TRUE), + PT(34, 27, 6, 2, TRUE), + PT(57, 62, 2, 2, FALSE), + PT(50, 6, 6, 0, TRUE), + PT(23, 5, 5, 1, TRUE), + PT( 1, 15, 4, 0, FALSE), + PT(30, 15, 6, 2, FALSE), + PT(24, 3, 3, 3, TRUE), + PT(43, 0, 2, 2, FALSE), + PT(21, 58, 6, 0, FALSE), + PT(37, 48, 4, 0, TRUE), + PT(11, 0, 6, 3, TRUE), + PT(36, 55, 3, 2, TRUE), + PT(41, 33, 2, 3, FALSE), + PT(36, 15, 5, 2, FALSE), + PT(62, 21, 6, 3, FALSE), + PT(60, 45, 4, 1, TRUE), + PT(61, 60, 2, 3, TRUE), + PT(26, 28, 2, 1, TRUE), + PT(10, 41, 4, 1, FALSE), + PT(37, 63, 4, 3, FALSE), + PT(59, 57, 5, 3, TRUE), + PT(29, 8, 2, 3, FALSE), + PT(11, 25, 2, 2, FALSE), + PT(18, 1, 5, 2, FALSE), + PT(53, 17, 5, 1, FALSE), + PT( 2, 0, 2, 1, TRUE), + PT(57, 42, 6, 2, TRUE), + PT( 7, 26, 2, 0, TRUE), + PT(36, 14, 3, 3, FALSE), + PT(14, 44, 2, 2, TRUE), + PT( 8, 49, 3, 1, TRUE), + PT(33, 29, 4, 3, FALSE), + PT(29, 28, 5, 1, FALSE), + PT(29, 36, 2, 1, TRUE), + PT( 1, 0, 3, 0, FALSE), + PT(40, 42, 6, 3, TRUE), + PT(21, 15, 2, 1, TRUE), + PT(16, 50, 6, 3, FALSE), + PT(34, 19, 6, 0, TRUE), + PT(19, 5, 3, 3, FALSE), + PT(23, 53, 6, 2, TRUE), + PT(59, 14, 4, 2, FALSE), + PT(53, 58, 3, 2, TRUE), + PT(27, 54, 3, 1, TRUE), + PT( 3, 29, 4, 2, FALSE), + PT(15, 22, 6, 0, FALSE), + PT(45, 9, 4, 2, TRUE), + PT( 5, 33, 2, 1, TRUE), + PT(10, 39, 6, 3, FALSE), + PT( 4, 13, 3, 2, FALSE), + PT( 6, 62, 4, 0, TRUE), + PT(42, 39, 6, 1, TRUE), + PT(40, 14, 2, 2, TRUE), + PT(11, 23, 3, 2, TRUE), + PT(29, 50, 5, 2, TRUE), + PT( 8, 61, 5, 0, TRUE), + PT(33, 50, 2, 3, TRUE), + PT(51, 49, 4, 1, FALSE), + PT(14, 3, 4, 0, TRUE), + PT(13, 11, 2, 3, FALSE), + PT(62, 42, 5, 3, FALSE), + PT(25, 54, 5, 1, FALSE), + PT(13, 0, 2, 2, FALSE), + PT(34, 7, 6, 3, FALSE), + PT(10, 9, 2, 2, TRUE), + PT(20, 16, 4, 1, FALSE), + PT( 7, 22, 5, 2, FALSE), + PT(54, 19, 2, 2, TRUE), + PT( 9, 47, 3, 1, TRUE), + PT(32, 59, 5, 3, FALSE), + PT(58, 58, 2, 3, FALSE), + PT(13, 21, 5, 1, FALSE), + PT(57, 19, 5, 1, TRUE), + PT(11, 1, 5, 1, FALSE), + PT(19, 23, 3, 3, FALSE), + PT( 8, 23, 3, 3, FALSE), + PT(12, 15, 6, 2, FALSE), + PT(31, 49, 2, 1, FALSE), + PT( 7, 58, 3, 2, TRUE), + PT(53, 30, 2, 1, FALSE), + PT(36, 44, 2, 2, TRUE), + PT(14, 33, 3, 0, TRUE), + PT(52, 59, 6, 1, TRUE), + PT(25, 15, 5, 0, FALSE), + PT(16, 47, 5, 3, FALSE), + PT(35, 39, 6, 0, TRUE), + PT(57, 46, 3, 0, FALSE), + PT(60, 63, 4, 2, FALSE), + PT( 7, 35, 6, 0, FALSE), + PT(40, 19, 6, 2, TRUE), + PT(19, 10, 2, 0, FALSE), + PT(53, 25, 6, 1, TRUE), + PT(35, 40, 5, 0, TRUE), + PT(19, 47, 3, 1, FALSE), + PT(58, 25, 2, 2, FALSE), + PT(55, 54, 4, 3, FALSE), + PT(32, 59, 2, 2, TRUE), + PT(55, 57, 2, 0, FALSE), + PT(60, 33, 6, 2, FALSE), + PT(28, 56, 6, 0, FALSE), + PT(21, 7, 4, 3, FALSE), + PT(39, 33, 3, 0, TRUE), + PT(24, 17, 4, 1, TRUE), + PT(48, 40, 6, 3, TRUE), + PT(50, 45, 3, 3, TRUE), + PT(44, 63, 6, 0, FALSE), + PT(29, 47, 4, 3, FALSE), + PT( 1, 17, 3, 2, FALSE), + PT(59, 15, 2, 1, FALSE), + PT(42, 23, 4, 3, TRUE), + PT( 5, 0, 3, 1, TRUE), + PT(37, 28, 6, 1, FALSE), + PT( 4, 34, 5, 2, TRUE), + PT(16, 15, 4, 2, TRUE), + PT(13, 57, 6, 0, FALSE), + PT(11, 46, 4, 3, TRUE), + PT(45, 52, 2, 2, TRUE), + PT(62, 48, 6, 3, FALSE), + PT(22, 38, 5, 1, FALSE), + PT( 5, 63, 5, 1, TRUE), + PT(32, 59, 5, 3, FALSE), + PT(59, 28, 5, 3, TRUE), + PT( 1, 24, 2, 3, FALSE), + PT(22, 61, 2, 0, FALSE), + PT(10, 31, 3, 0, FALSE), + PT(23, 15, 4, 1, FALSE), + PT( 6, 19, 2, 0, TRUE), + PT(56, 33, 2, 3, TRUE), + PT(23, 10, 6, 3, TRUE), + PT(28, 25, 6, 0, FALSE), + PT(22, 56, 6, 0, TRUE), + PT(48, 16, 6, 3, FALSE), + PT(49, 47, 4, 3, FALSE), + PT(60, 27, 4, 1, TRUE), + PT(51, 47, 3, 0, TRUE), + PT(22, 53, 4, 2, TRUE), + PT(58, 24, 3, 3, TRUE), + PT(55, 1, 3, 3, FALSE), + PT(13, 24, 2, 1, FALSE), + PT(31, 28, 3, 1, TRUE), + PT( 7, 52, 5, 2, TRUE), + PT(11, 63, 6, 1, TRUE), + PT(30, 52, 3, 2, TRUE), + PT(44, 19, 5, 2, FALSE), + PT(32, 32, 2, 1, TRUE), + PT(32, 15, 6, 0, TRUE), + PT( 8, 15, 4, 2, FALSE), + PT(24, 61, 3, 2, FALSE), + PT(54, 52, 4, 3, TRUE), + PT(51, 42, 4, 2, TRUE), + PT(45, 48, 4, 3, FALSE), + PT(61, 55, 4, 3, FALSE), + PT(37, 17, 2, 0, TRUE), + PT( 3, 5, 3, 0, FALSE), + PT(16, 4, 5, 0, TRUE), + PT( 7, 46, 6, 3, FALSE), + PT(42, 41, 2, 2, TRUE), + PT(58, 14, 6, 1, TRUE), + PT(42, 6, 5, 0, TRUE), + PT(61, 1, 5, 0, TRUE), + PT(39, 14, 2, 3, FALSE), + PT(29, 40, 3, 1, TRUE), + PT(16, 51, 5, 1, TRUE), + PT(12, 20, 3, 2, TRUE), + PT(21, 63, 4, 2, TRUE), + PT(55, 35, 3, 3, FALSE), + PT( 4, 44, 3, 2, FALSE), + PT(21, 52, 5, 1, FALSE), + PT( 9, 47, 2, 2, TRUE), + PT( 2, 63, 2, 2, FALSE), + PT(25, 44, 6, 1, TRUE), + PT(57, 50, 4, 0, FALSE), + PT(42, 24, 6, 1, FALSE), + PT(23, 35, 4, 0, TRUE), + PT(11, 45, 4, 2, TRUE), + PT(36, 58, 5, 2, TRUE), + PT(49, 63, 6, 2, FALSE), + PT(24, 25, 4, 2, FALSE), + PT(30, 21, 3, 1, FALSE), + PT(23, 51, 5, 1, TRUE), + PT(35, 9, 4, 3, FALSE), + PT(27, 13, 2, 2, TRUE), + PT(54, 38, 5, 0, FALSE), + PT(58, 28, 2, 2, FALSE), + PT(12, 62, 2, 0, FALSE), + PT(24, 6, 6, 2, TRUE), + PT(55, 38, 6, 3, FALSE), + PT(33, 38, 2, 3, TRUE), + PT(61, 28, 5, 2, FALSE), + PT(22, 37, 3, 2, TRUE), + PT(30, 11, 3, 3, FALSE), + PT(29, 13, 6, 1, FALSE), + PT( 8, 31, 3, 1, TRUE), + PT(18, 28, 2, 1, FALSE), + PT(32, 42, 5, 0, FALSE), + PT( 6, 59, 6, 2, TRUE), + PT(57, 14, 3, 3, FALSE), + PT(49, 48, 5, 0, FALSE), + PT( 2, 33, 2, 2, FALSE), + PT( 6, 30, 5, 0, TRUE), + PT(22, 9, 3, 2, FALSE), + PT(39, 50, 5, 2, TRUE), + PT(57, 3, 4, 3, TRUE), + PT(41, 9, 3, 3, FALSE), + PT(27, 17, 3, 2, FALSE), + PT(40, 58, 5, 2, FALSE), + PT( 3, 3, 3, 0, FALSE), + PT(35, 9, 5, 3, TRUE), + PT(48, 23, 4, 1, TRUE), + PT(15, 37, 6, 1, TRUE), + PT( 6, 36, 6, 3, TRUE), + PT(34, 9, 6, 1, TRUE), + PT(44, 9, 5, 1, FALSE), + PT(12, 18, 5, 1, FALSE), + PT(40, 32, 2, 0, FALSE), + PT(21, 41, 6, 1, TRUE), + PT(15, 26, 2, 1, TRUE), + PT(19, 24, 6, 3, FALSE), + PT(46, 22, 2, 1, TRUE), + PT(60, 26, 2, 2, TRUE), + PT(58, 17, 6, 1, FALSE), + PT( 2, 10, 5, 2, FALSE), + PT(25, 57, 2, 0, TRUE), + PT(49, 62, 3, 2, TRUE), + PT(50, 20, 6, 1, FALSE), + PT(18, 46, 6, 2, FALSE), + PT(62, 54, 4, 1, TRUE), + PT(55, 62, 2, 2, TRUE), + PT(21, 53, 6, 2, FALSE), + PT( 1, 58, 5, 2, FALSE), + PT(38, 37, 4, 1, FALSE), + PT( 1, 43, 6, 3, TRUE), + PT(28, 61, 6, 1, TRUE), + PT(62, 16, 3, 2, FALSE), + PT(38, 51, 3, 0, TRUE), + PT( 5, 25, 2, 3, TRUE), + PT(18, 56, 3, 2, FALSE), + PT(21, 60, 6, 1, FALSE), + PT(63, 15, 6, 3, TRUE), + PT( 2, 57, 6, 1, FALSE), + PT(19, 0, 3, 2, TRUE), + PT(29, 44, 2, 0, FALSE), + PT(57, 19, 6, 0, TRUE), + PT(15, 55, 3, 0, TRUE), + PT( 9, 13, 5, 1, FALSE), + PT(32, 47, 6, 1, FALSE), + PT(59, 52, 4, 1, FALSE), + PT(38, 20, 2, 0, FALSE), + PT(36, 61, 4, 1, FALSE), + PT(11, 49, 4, 1, TRUE), + PT(47, 45, 5, 1, FALSE), + PT(48, 4, 6, 2, TRUE), + PT(25, 32, 5, 1, FALSE), + PT(22, 54, 6, 3, TRUE), + PT(20, 40, 6, 3, TRUE), + PT(17, 11, 4, 3, TRUE), + PT(29, 6, 5, 0, TRUE), + PT(53, 22, 5, 3, FALSE), + PT(36, 46, 5, 0, TRUE), + PT(54, 20, 5, 1, FALSE), + PT(33, 12, 3, 3, TRUE), + PT(63, 57, 3, 0, TRUE), + PT(39, 16, 5, 1, FALSE), + PT(30, 18, 6, 2, FALSE), + PT(16, 36, 6, 2, FALSE), + PT(29, 19, 3, 2, TRUE), + PT(23, 22, 6, 3, TRUE), + PT(39, 27, 4, 3, TRUE), + PT( 7, 36, 4, 0, TRUE), + PT(55, 33, 2, 0, TRUE), + PT(55, 40, 4, 2, FALSE), + PT(25, 2, 3, 2, FALSE), + PT(20, 18, 3, 2, TRUE), + PT(27, 36, 5, 3, FALSE), + PT(46, 58, 2, 2, TRUE), + PT(55, 52, 4, 0, TRUE), + PT(51, 45, 5, 0, TRUE), + PT(47, 30, 6, 2, FALSE), + PT(41, 60, 2, 1, FALSE), + PT( 5, 21, 4, 0, FALSE), + PT( 5, 62, 3, 0, TRUE), + PT(24, 11, 6, 0, FALSE), + PT(47, 2, 4, 3, TRUE), + PT(20, 28, 6, 2, FALSE), + PT(18, 32, 6, 0, FALSE), + PT(43, 34, 3, 1, TRUE), + PT( 6, 49, 5, 0, FALSE), + PT(21, 45, 2, 1, FALSE), + PT( 1, 14, 2, 1, TRUE), + PT(19, 12, 5, 0, FALSE), + PT( 7, 42, 2, 2, FALSE), + PT(29, 54, 2, 2, FALSE), + PT(21, 43, 4, 3, FALSE), + PT( 3, 37, 2, 2, TRUE), + PT(62, 59, 4, 0, FALSE), + PT(53, 12, 4, 2, TRUE), + PT(43, 22, 6, 2, TRUE), + PT(30, 49, 5, 2, FALSE), + PT( 6, 3, 5, 0, TRUE), + PT(36, 7, 3, 3, TRUE), + PT(50, 47, 3, 0, TRUE), + PT(37, 33, 6, 0, TRUE), + PT(34, 38, 3, 2, TRUE), + PT( 0, 27, 3, 0, FALSE), + PT(42, 36, 6, 0, TRUE), + PT(32, 6, 5, 3, TRUE), + PT(30, 50, 4, 3, FALSE), + PT(50, 57, 2, 1, FALSE), + PT(32, 1, 3, 0, TRUE), + PT(15, 21, 2, 2, TRUE), + PT(39, 16, 5, 3, FALSE), + PT( 9, 37, 3, 0, TRUE), + PT(41, 55, 6, 0, FALSE), + PT(19, 28, 3, 2, TRUE), + PT(41, 45, 4, 3, FALSE), + PT( 2, 26, 2, 3, FALSE), + PT(29, 43, 3, 2, FALSE), + PT(24, 4, 6, 2, FALSE), + PT(40, 42, 4, 0, TRUE), + PT(21, 27, 5, 3, FALSE), + PT(22, 1, 2, 0, FALSE), + PT( 5, 9, 2, 2, FALSE), + PT(34, 3, 4, 1, FALSE), + PT( 2, 27, 6, 2, FALSE), + PT(41, 42, 4, 1, TRUE), + PT(38, 54, 2, 1, TRUE), + PT(35, 61, 3, 1, FALSE), + PT(29, 16, 4, 2, FALSE), + PT(37, 43, 6, 3, TRUE), + PT(25, 36, 4, 3, FALSE), + PT(40, 19, 2, 3, FALSE), + PT(23, 20, 3, 0, TRUE), + PT(11, 47, 4, 2, TRUE), + PT(55, 52, 6, 3, TRUE), + PT(57, 33, 3, 1, TRUE), + PT(15, 61, 5, 2, TRUE), + PT(13, 16, 4, 0, FALSE), + PT( 5, 11, 5, 2, TRUE), + PT( 1, 18, 4, 2, FALSE), + PT(24, 61, 6, 1, FALSE), + PT( 9, 33, 4, 3, FALSE), + PT(26, 14, 3, 3, TRUE), + PT(48, 6, 3, 3, TRUE), + PT(11, 60, 5, 0, TRUE), + PT( 7, 62, 4, 3, TRUE), + PT(19, 30, 3, 1, FALSE), + PT(19, 7, 4, 1, TRUE), + PT(16, 52, 3, 3, FALSE), + PT(50, 23, 4, 1, TRUE), + PT(53, 22, 6, 0, TRUE), + PT(50, 46, 3, 1, TRUE), + PT(40, 14, 4, 1, FALSE), + PT(20, 58, 4, 1, TRUE), + PT(34, 3, 5, 0, TRUE), + PT(42, 16, 4, 0, FALSE), + PT(62, 60, 4, 3, TRUE), + PT(22, 32, 2, 1, FALSE), + PT(63, 36, 6, 0, TRUE), + PT(13, 46, 6, 1, FALSE), + PT(47, 23, 5, 2, TRUE), + PT(54, 59, 2, 3, TRUE), + PT(36, 35, 3, 0, FALSE), + PT(55, 29, 2, 1, TRUE), + PT(23, 58, 3, 1, FALSE), + PT(10, 61, 3, 3, FALSE), + PT( 5, 18, 2, 3, FALSE), + PT(51, 50, 4, 2, TRUE), + PT(29, 31, 5, 0, TRUE), + PT(52, 44, 4, 3, FALSE), + PT(32, 41, 6, 2, TRUE), + PT(14, 50, 2, 3, TRUE), + PT( 1, 57, 5, 2, TRUE), + PT(39, 36, 4, 1, TRUE), + PT(40, 63, 3, 0, FALSE), + PT(57, 56, 4, 2, TRUE), + PT(35, 17, 2, 0, TRUE), + PT(25, 44, 5, 0, TRUE), + PT(48, 8, 5, 0, FALSE), + PT(37, 39, 3, 2, TRUE), + PT(23, 37, 4, 0, TRUE), + PT( 9, 61, 2, 3, FALSE), + PT(27, 15, 5, 2, FALSE), + PT(27, 18, 4, 1, FALSE), + PT(40, 62, 4, 3, FALSE), + PT(52, 16, 3, 1, TRUE), + PT( 2, 52, 2, 2, TRUE), + PT(26, 41, 3, 0, TRUE), + PT(41, 17, 6, 0, TRUE), + PT(18, 39, 2, 3, TRUE), + PT(39, 39, 5, 3, TRUE), + PT(52, 39, 4, 2, FALSE), + PT( 3, 25, 6, 3, FALSE), + PT(23, 29, 6, 1, TRUE), + PT(25, 37, 3, 1, FALSE), + PT(43, 57, 2, 1, TRUE), + PT(59, 51, 3, 2, TRUE), + PT(39, 49, 6, 2, FALSE), + PT(40, 51, 6, 3, TRUE), + PT( 9, 48, 3, 1, TRUE), + PT( 3, 58, 4, 3, TRUE), + PT(25, 17, 3, 3, TRUE), + PT(11, 26, 6, 2, FALSE), + PT(61, 42, 2, 2, TRUE), + PT( 4, 36, 6, 3, FALSE), + PT(48, 35, 6, 0, FALSE), + PT(15, 34, 3, 1, TRUE), + PT(61, 61, 4, 2, FALSE), + PT(41, 29, 2, 1, FALSE), + PT(22, 25, 5, 3, FALSE), + PT( 3, 18, 2, 3, TRUE), + PT(24, 37, 6, 1, TRUE), + PT(47, 35, 3, 1, FALSE), + PT(26, 53, 4, 3, TRUE), + PT(33, 38, 3, 0, TRUE), + PT(27, 48, 3, 0, FALSE), + PT(43, 34, 5, 2, TRUE), + PT(44, 26, 6, 2, FALSE), + PT(62, 18, 3, 0, TRUE), + PT(40, 39, 2, 2, TRUE), + PT(27, 17, 2, 1, FALSE), + PT(23, 21, 2, 0, FALSE), + PT(52, 55, 4, 2, TRUE), + PT(18, 63, 2, 2, TRUE), + PT(49, 13, 6, 3, TRUE), + PT(62, 42, 5, 2, TRUE), + PT(15, 36, 4, 2, FALSE), + PT(60, 63, 3, 3, TRUE), + PT(29, 52, 2, 3, TRUE), + PT(26, 35, 3, 3, TRUE), + PT(55, 15, 2, 0, FALSE), + PT(50, 52, 6, 2, TRUE), + PT(25, 5, 4, 1, FALSE), + PT(51, 22, 6, 2, FALSE), + PT(30, 20, 3, 3, FALSE), + PT( 8, 19, 5, 0, TRUE), + PT(58, 55, 6, 0, FALSE), + PT(29, 54, 2, 2, TRUE), + PT(41, 46, 3, 2, TRUE), + PT(50, 46, 4, 1, TRUE), + PT(53, 23, 3, 2, FALSE), + PT(54, 29, 2, 1, TRUE), + PT(35, 52, 6, 2, FALSE), + PT(36, 26, 6, 3, TRUE), + PT(47, 38, 5, 3, FALSE), + PT(30, 23, 3, 1, FALSE), + PT(31, 21, 3, 3, TRUE), + PT(43, 31, 3, 0, TRUE), + PT(10, 51, 3, 1, FALSE), + PT(53, 49, 4, 2, FALSE), + PT(45, 23, 5, 2, FALSE), + PT(12, 33, 6, 3, FALSE), + PT(44, 53, 6, 2, TRUE), + PT(27, 3, 4, 3, TRUE), + PT( 1, 13, 3, 2, TRUE), + PT(28, 14, 2, 0, TRUE), + PT(17, 43, 2, 0, FALSE), + PT(37, 59, 4, 0, FALSE), + PT(31, 23, 3, 0, TRUE), + PT(32, 8, 6, 3, FALSE), + PT(19, 56, 3, 0, TRUE), + PT(27, 43, 4, 2, FALSE), + PT(11, 31, 5, 0, TRUE), + PT(39, 21, 5, 2, FALSE), + PT(55, 57, 2, 0, FALSE), + PT(58, 21, 5, 3, FALSE), + PT(47, 17, 6, 3, FALSE), + PT(36, 4, 4, 0, FALSE), + PT(59, 42, 6, 2, TRUE), + PT(39, 53, 6, 2, FALSE), + PT(13, 27, 4, 0, FALSE), + PT(16, 34, 6, 3, TRUE), + PT(31, 56, 4, 3, TRUE), + PT(49, 15, 5, 0, FALSE), + PT(40, 37, 2, 2, TRUE), + PT( 0, 29, 4, 2, TRUE), + PT(49, 40, 5, 0, FALSE), + PT(11, 58, 3, 2, TRUE), + PT(45, 19, 3, 1, TRUE), + PT( 3, 55, 5, 3, FALSE), + PT(29, 40, 3, 0, TRUE), + PT( 8, 45, 4, 1, FALSE), + PT(39, 57, 6, 1, FALSE), + PT(63, 47, 3, 2, TRUE), + PT(51, 52, 5, 0, FALSE), + PT(24, 8, 6, 0, TRUE), + PT(35, 31, 2, 1, TRUE), + PT(13, 44, 4, 1, TRUE), + PT(58, 45, 3, 1, FALSE), + PT( 2, 37, 2, 1, TRUE), + PT(32, 54, 6, 2, FALSE), + PT(18, 43, 5, 2, TRUE), + PT(53, 53, 6, 2, FALSE), + PT(35, 32, 4, 0, TRUE), + PT(58, 25, 3, 1, TRUE), + PT(31, 43, 3, 0, TRUE), + PT(53, 14, 3, 0, TRUE), + PT(38, 36, 6, 3, TRUE), + PT(24, 8, 2, 0, FALSE), + PT(12, 22, 5, 2, TRUE), + PT(31, 52, 4, 0, TRUE), + PT( 5, 56, 3, 0, TRUE), + PT(20, 33, 4, 2, FALSE), + PT(17, 49, 2, 2, FALSE), + PT(62, 56, 5, 0, TRUE), + PT(63, 8, 4, 2, TRUE), + PT(42, 31, 4, 2, TRUE), + PT(37, 6, 5, 0, FALSE), + PT(11, 30, 2, 2, FALSE), + PT(26, 56, 4, 1, FALSE), + PT(36, 24, 5, 0, TRUE), + PT(26, 17, 4, 0, FALSE), + PT(59, 58, 3, 3, FALSE), + PT(28, 38, 3, 1, FALSE), + PT( 5, 50, 3, 0, TRUE), + PT(57, 42, 6, 0, TRUE), + PT( 9, 7, 4, 2, TRUE), + PT( 5, 62, 2, 3, FALSE), + PT(52, 38, 2, 2, FALSE), + PT(27, 50, 4, 3, FALSE), + PT( 5, 8, 6, 3, TRUE), + PT(15, 3, 4, 0, FALSE), + PT(42, 57, 6, 0, TRUE), + PT( 8, 1, 3, 3, FALSE), + PT(29, 35, 6, 0, TRUE), + PT(40, 27, 5, 0, FALSE), + PT(30, 55, 2, 2, FALSE), + PT(19, 14, 5, 0, FALSE), + PT(42, 59, 6, 3, TRUE), + PT(47, 28, 5, 0, FALSE), + PT(48, 48, 3, 1, FALSE), + PT(54, 31, 2, 3, FALSE), + PT(62, 13, 2, 2, TRUE), + PT(46, 22, 3, 0, FALSE), + PT(21, 55, 4, 0, FALSE), + PT(42, 51, 6, 0, FALSE), + PT(43, 14, 4, 2, TRUE), + PT(24, 32, 2, 3, FALSE), + PT( 2, 25, 4, 2, TRUE), + PT(10, 46, 6, 0, FALSE), + PT(22, 3, 2, 0, TRUE), + PT( 4, 39, 4, 2, TRUE), + PT(27, 28, 4, 0, TRUE), + PT(41, 4, 4, 3, TRUE), + PT(61, 32, 3, 3, FALSE), + PT(40, 51, 6, 0, TRUE), + PT(30, 57, 2, 0, FALSE), + PT(49, 41, 3, 3, FALSE), + PT( 6, 37, 5, 0, FALSE), + PT(25, 59, 2, 1, FALSE), + PT(11, 27, 3, 2, FALSE), + PT(62, 55, 4, 0, FALSE), + PT(10, 55, 6, 1, TRUE), + PT( 2, 44, 4, 2, TRUE), + PT(21, 24, 2, 2, FALSE), + PT(59, 32, 3, 2, FALSE), + PT(34, 59, 3, 2, FALSE), + PT(36, 52, 6, 2, TRUE), + PT(15, 47, 6, 0, TRUE), + PT(59, 23, 6, 2, TRUE), + PT(48, 57, 6, 3, TRUE), + PT(13, 21, 2, 0, TRUE), + PT(16, 3, 3, 3, FALSE), + PT(26, 57, 6, 1, TRUE), + PT(47, 46, 5, 0, FALSE), + PT(28, 40, 6, 3, FALSE), + PT(40, 24, 3, 3, TRUE), + PT(21, 1, 6, 0, FALSE), + PT(62, 50, 5, 0, FALSE), + PT(52, 47, 4, 1, TRUE), + PT( 7, 12, 6, 3, FALSE), + PT(40, 44, 6, 2, FALSE), + PT(42, 12, 3, 3, TRUE), + PT(63, 32, 2, 1, TRUE), + PT(43, 23, 4, 3, TRUE), + PT(40, 41, 5, 1, FALSE), + PT(60, 19, 6, 3, FALSE), + PT(38, 45, 5, 1, FALSE), + PT(10, 6, 3, 3, FALSE), + PT(32, 4, 3, 1, FALSE), + PT( 2, 7, 6, 2, TRUE), + PT(14, 24, 6, 0, FALSE), + PT( 0, 52, 6, 2, FALSE), + PT(47, 20, 6, 3, TRUE), + PT(33, 48, 3, 3, TRUE), + PT(21, 55, 3, 1, TRUE), + PT(58, 11, 6, 1, FALSE), + PT(34, 34, 4, 0, TRUE), + PT(27, 53, 4, 1, TRUE), + PT(13, 3, 3, 2, FALSE), + PT(35, 59, 2, 1, TRUE), + PT(14, 29, 3, 3, TRUE), + PT(29, 63, 5, 3, FALSE), + PT(57, 39, 5, 3, FALSE), + PT(15, 56, 4, 0, FALSE), + PT(49, 60, 6, 2, TRUE), + PT(11, 15, 5, 3, FALSE), + PT( 6, 6, 5, 0, FALSE), + PT(37, 57, 4, 1, TRUE), + PT(10, 50, 2, 2, TRUE), + PT(15, 29, 4, 2, TRUE), + PT(12, 13, 6, 2, FALSE), + PT(18, 46, 4, 0, TRUE), + PT(54, 24, 3, 3, TRUE), + PT(31, 52, 3, 1, TRUE), + PT( 5, 58, 6, 3, FALSE), + PT(43, 1, 2, 3, TRUE), + PT(14, 22, 5, 1, TRUE), + PT(14, 11, 4, 3, FALSE), + PT(13, 45, 2, 0, FALSE), + PT(33, 17, 4, 3, TRUE), + PT(61, 19, 6, 1, FALSE), + PT(21, 37, 5, 1, FALSE), + PT(27, 45, 6, 2, TRUE), + PT(44, 43, 4, 3, FALSE), + PT(38, 31, 4, 0, FALSE), + PT(34, 43, 2, 1, FALSE), + PT(63, 61, 4, 3, TRUE), + PT(48, 10, 6, 3, FALSE), + PT(53, 31, 2, 3, TRUE), + PT(33, 8, 5, 0, TRUE), + PT(29, 32, 6, 1, TRUE), + PT(52, 17, 2, 3, FALSE), + PT( 5, 56, 5, 2, TRUE), +}; + +#undef PT diff --git a/src/data/text/contest_de.h b/src/data/text/contest_de.h new file mode 100644 index 000000000..11940d943 --- /dev/null +++ b/src/data/text/contest_de.h @@ -0,0 +1,470 @@ +const u8 ContestString_DescHighlyAppealing[] = _("Eine sehr ansprechende\nVorführung."); +const u8 ContestString_DescStartled1[] = _("Einsatz der Attacke macht\nPKMN leichter irritierbar."); +const u8 ContestString_DescGreatLock[] = _("Großartiger Ausdruck, der\nsich nicht steigern lässt."); +const u8 ContestString_DescRepeatable[] = _("Langweilt den JUROR auch\nbei Wiederholung nicht."); +const u8 ContestString_DescStartled2[] = _("Kann Irritation durch\nandere einmal verhindern."); +const u8 ContestString_DescStartled3[] = _("Kann Irritation durch\nandere verhindern."); +const u8 ContestString_DescStartled4[] = _("Kann Irritation durch an-\ndere ein wenig eindämmen."); +const u8 ContestString_DescStartled5[] = _("Einsatz der Attacke dämmt\ndanach Irritation ein."); +const u8 ContestString_DescStartled6[] = _("Irritiert das vordere\nPOKéMON ein wenig."); +const u8 ContestString_DescStartled7[] = _("Irritiert die POKéMON ein\nwenig, die schon auftraten."); +const u8 ContestString_DescStartled8[] = _("Irritiert das POKéMON, das\nvorher aufgetreten ist."); +const u8 ContestString_DescStartled9[] = _("Irritiert alle POKéMON,\ndie bisher auftraten."); +const u8 ContestString_DescStartled10[] = _("Irritiert das vordere\nPOKéMON sehr stark."); +const u8 ContestString_DescStartled11[] = _("Irritiert die POKéMON, die\nschon aufgetreten sind."); +const u8 ContestString_DescStartled12[] = _("Irritiert das POKéMON, das\nvorher aufgetreten ist."); +const u8 ContestString_DescStartled13[] = _("Irritiert alle POKéMON, die\nvorher aufgetreten sind."); +const u8 ContestString_DescAttentionShift[] = _("Lenkt den JUROR von den\nanderen POKéMON ab."); +const u8 ContestString_DescStartled14[] = _("Irritiert PKMN, bes. die,\nauf die der JUROR achtet."); +const u8 ContestString_DescJamOthersMissTurn[] = _("Stört die anderen und An-\nwender setzt 1 Runde aus."); +const u8 ContestString_DescStartled15[] = _("Irritiert PKMN, bes. die, die\nAusdruck gl. Typs zeigten."); +const u8 ContestString_DescStartled16[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs COOL vorführten."); +const u8 ContestString_DescStartled17[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs SCHÖN vorführten."); +const u8 ContestString_DescStartled18[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs ANMUT vorführten."); +const u8 ContestString_DescStartled19[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs KLUG vorführten."); +const u8 ContestString_DescStartled20[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs STARK vorführten."); + +const u8 ContestString_DescNervousOne[] = _("Macht nachfolgendes\nPOKéMON nervös."); + +const u8 ContestString_DescNervousAllAfter[] = _("Macht alle nachfolgenden\nPOKéMON nervös."); + +const u8 ContestString_DescConditionWorseBefore[] = _("Schwächt Kondition der\nPKMN, die bisher auftraten."); + +const u8 ContestString_DescStartled21[] = _("Irritiert POKéMON, die eine\ngute Kondition haben."); +const u8 ContestString_DescGreatWhenFirst[] = _("Ausdruck gelingt sehr gut,\nwenn als Erster vorgeführt."); +const u8 ContestString_DescGreatWhenLast[] = _("Ausdruck gelingt sehr gut,\nwenn zuletzt vorgeführt."); +const u8 ContestString_DescAppealGoodBeforeAll[] = _("Ausdruck gelingt so gut\nwie die der Vorgänger."); +const u8 ContestString_DescAppealGoodBeforeOne[] = _("Ausdruck gelingt so gut\nwie der des Vorgängers."); +const u8 ContestString_DescBetterWhenLater[] = _("Je später der Auftritt,\ndesto besser der Ausdruck."); +const u8 ContestString_DescAffectedByTiming[] = _("Die Qualität des Ausdrucks\nhängt vom Timing ab."); +const u8 ContestString_DescBetterWhenSameType[] = _("Gelingt gut, wenn vom\nselben Typ wie der vorige."); +const u8 ContestString_DescBetterWhenDiffType[] = _("Gelingt gut, wenn vom\nanderen Typ als der vorige."); +const u8 ContestString_DescAffectedByFront[] = _("Hängt von Qualität des Aus-\ndrucks des Vorgängers ab."); +const u8 ContestString_DescConditionUp[] = _("Verbessert die Kondition\nund verhindert Nervosität."); +const u8 ContestString_DescAffectedByCondition[] = _("Ausdruck gelingt gut, wenn\nKondition des PKMN gut ist."); +const u8 ContestString_DescAppealEarlier[] = _("Der nächste Ausdruck kann\nfrüher vorgeführt werden."); +const u8 ContestString_DescAppealLater[] = _("Der nächste Ausdruck kann\nspäter vorgeführt werden."); +const u8 ContestString_DescRandomOrderEasier[] = _("Ändert die Reihenfolge der\nnächst. Auftritte leichter."); +const u8 ContestString_DescRandomOrder[] = _("Ändert die Reihenfolge der\nnächsten Auftritte."); +const u8 ContestString_DescAnyExcitement[] = _("Verzückt das Publikum in \njedem WETTBEWERB."); +const u8 ContestString_DescStartled22[] = _("Irritiert alle POKéMON,\nderen Ausdruck gut war."); +const u8 ContestString_DescScaleWithExcitement[] = _("Gelingt am besten, wenn\ndas Publikum gespannt ist."); +const u8 ContestString_DescStopExcitement[] = _("Bremst zeitweise Begeis-\nterung des Publikums."); + +const u8 *const gContestEffectStrings[] = { + ContestString_DescHighlyAppealing, + ContestString_DescStartled1, + ContestString_DescGreatLock, + ContestString_DescRepeatable, + ContestString_DescStartled2, + ContestString_DescStartled3, + ContestString_DescStartled4, + ContestString_DescStartled5, + ContestString_DescStartled6, + ContestString_DescStartled7, + ContestString_DescStartled8, + ContestString_DescStartled9, + ContestString_DescStartled10, + ContestString_DescStartled11, + ContestString_DescStartled12, + ContestString_DescStartled13, + ContestString_DescAttentionShift, + ContestString_DescStartled14, + ContestString_DescJamOthersMissTurn, + ContestString_DescStartled15, + ContestString_DescStartled16, + ContestString_DescStartled17, + ContestString_DescStartled18, + ContestString_DescStartled19, + ContestString_DescStartled20, + ContestString_DescNervousOne, + ContestString_DescNervousAllAfter, + ContestString_DescConditionWorseBefore, + ContestString_DescStartled21, + ContestString_DescGreatWhenFirst, + ContestString_DescGreatWhenLast, + ContestString_DescAppealGoodBeforeAll, + ContestString_DescAppealGoodBeforeOne, + ContestString_DescBetterWhenLater, + ContestString_DescAffectedByTiming, + ContestString_DescBetterWhenSameType, + ContestString_DescBetterWhenDiffType, + ContestString_DescAffectedByFront, + ContestString_DescConditionUp, + ContestString_DescAffectedByCondition, + ContestString_DescAppealEarlier, + ContestString_DescAppealLater, + ContestString_DescRandomOrderEasier, + ContestString_DescRandomOrder, + ContestString_DescAnyExcitement, + ContestString_DescStartled22, + ContestString_DescScaleWithExcitement, + ContestString_DescStopExcitement, +}; + +const u8 ContestString_MoveRainDance[] = _("REGENTANZ"); +const u8 ContestString_MoveRage[] = _("RASEREI"); +const u8 ContestString_MoveFocusEnergy[] = _("ENERGIEFOKUS"); +const u8 ContestString_MoveHypnosis[] = _("HYPNOSE"); +const u8 ContestString_MoveSoftboiled[] = _("WEICHEI"); +const u8 ContestString_MoveHornAttack[] = _("HORNATTACKE"); +const u8 ContestString_MoveSwordsDance[] = _("SCHWERTTANZ"); +const u8 ContestString_MoveConversion[] = _("UMWANDLUNG"); +const u8 ContestString_MoveSunnyDay[] = _("SONNENTAG"); +const u8 ContestString_MoveRest[] = _("ERHOLUNG"); +const u8 ContestString_MoveVicegrip[] = _("KLAMMER"); +const u8 ContestString_MoveDefenseCurl[] = _("EINIGLER"); +const u8 ContestString_MoveLockOn[] = _("ZIELSCHUSS"); + +const u8 *const gContestStrings_UnreferencedTable1[] = { + ContestString_MoveRainDance, + ContestString_MoveRainDance, + ContestString_MoveRage, + ContestString_MoveFocusEnergy, + ContestString_MoveHypnosis, + ContestString_MoveSoftboiled, + ContestString_MoveHornAttack, + ContestString_MoveSwordsDance, + ContestString_MoveConversion, + ContestString_MoveSunnyDay, + ContestString_MoveRest, + ContestString_MoveVicegrip, + ContestString_MoveDefenseCurl, + ContestString_MoveLockOn, +}; + +const u8 ContestString_Cool[] = _("COOL."); +const u8 ContestString_Beauty[] = _("SCHÖN."); +const u8 ContestString_Cute[] = _("ANMUT"); +const u8 ContestString_Smart[] = _("KLUG."); +const u8 ContestString_Tough[] = _("STÄRKE"); + +const u8 *const gContestCategoryNames[] = { + ContestString_Cool, + ContestString_Beauty, + ContestString_Cute, + ContestString_Smart, + ContestString_Tough, +}; + +const u8 gText_Contest_WhichMoveWillBePlayed[] = _("Ausdruck {NAME_END}! Welche\nAttacke wird gezeigt?"); + +const u8 gText_Contest_ButItCantParticipate[] = _("Ausdruck {NAME_END}! Aber es\nkann nicht teilnehmen!"); + +const u8 gText_MonAppealedWithMove[] = _("{STR_VAR_1} führt\n{STR_VAR_2} vor!"); + +const u8 gText_OtherPokemonMadeMoves[] = _("Die anderen POKéMON\nzeigten ihre Attacken!"); + +const u8 gText_MonWasWatchingOthers[] = _("{STR_VAR_1} beobachtet\ndie anderen.{PAUSE 60}"); + +const u8 gText_AllOutOfAppealTime[] = _("Soweit zur\nAusdruckskraft!{PAUSE 60}"); +const u8 gText_Strvar1sStrvar3Move[] = _("{STR_VAR_3}-\nAtt. {STR_VAR_2}\nvon {STR_VAR_1}!"); +const u8 gText_TRICK[] = _("TRICK"); +const u8 gText_SPECIAL[] = _("SPEZIAL"); + +const u8 ContestString_AppealJammed[] = _("Der Auftritt\nwurde gestört."); +const u8 ContestString_FollowLead[] = _("Es folgte einem\nanderen POKéMON."); +const u8 ContestString_MessedUp[] = _("Es scheiterte."); +const u8 ContestString_BetterUsual[] = _("Das lief besser\nals sonst."); +const u8 ContestString_JudgeLookAway[] = _("Der JUROR war\nirgendwie abgelenkt."); +const u8 ContestString_WorkHard[] = _("Es strengte sich an,\nFehler auszubügeln."); +const u8 ContestString_NoMoreMoves[] = _("Es kann keine Attacken\nmehr ausführen."); +const u8 ContestString_WorkReallyWell[] = _("Das lief unheimlich gut."); +const u8 ContestString_WorkHardStandout[] = _("Es strengte sich genauso\nwie das beste POKéMON an."); +const u8 ContestString_JudgeExpectantly[] = _("Der JUROR schaute es\nbesonders aufmerksam an."); +const u8 ContestString_WorkRatherWell[] = _("Das lief bedeutend\nbesser."); +const u8 ContestString_WorkBetter[] = _("Es lief etwas besser\nals sonst."); + +const u8 *const gContestStrings_UnreferencedTable2[] = { + ContestString_AppealJammed, + ContestString_FollowLead, + ContestString_MessedUp, + ContestString_BetterUsual, + ContestString_BetterUsual, + ContestString_JudgeLookAway, + ContestString_WorkHard, + ContestString_NoMoreMoves, + ContestString_WorkReallyWell, + ContestString_WorkHardStandout, + ContestString_JudgeExpectantly, + ContestString_WorkRatherWell, + ContestString_WorkBetter, +}; + +const u8 ContestString_StandOutNone[] = _("{STR_VAR_1} stach\nüberhaupt nicht hervor...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutNotMuch[] = _("{STR_VAR_1} stach nicht\nbesonders hervor...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLittle[] = _("{STR_VAR_1} erregte ein\nwenig Aufmerksamkeit.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLot[] = _("{STR_VAR_1} erregte eine\nMenge Aufmerksamkeit.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutTotal[] = _("{STR_VAR_1} erhielt die\nvolle Aufmerksamkeit.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutDidnt[] = _("{STR_VAR_1} konnte\nkeinen Ausdruck zeigen.{PAUSE_UNTIL_PRESS}"); + +const u8 *const gContestStandOutStrings[] = { + ContestString_StandOutNone, + ContestString_StandOutNotMuch, + ContestString_StandOutLittle, + ContestString_StandOutLot, + ContestString_StandOutTotal, + ContestString_StandOutDidnt, +}; + +const u8 ContestString_AppealAnticipation3[] = _("Heiß ersehnt: Der Aus-\ndruck von {STR_VAR_1}."); +const u8 ContestString_JudgeSatisfied[] = _("Der JUROR war sehr\nzufrieden."); +const u8 ContestString_Terminator[] = _(""); +const u8 ContestString_JudgeHeldFirm[] = _("Der JUROR behält\n{STR_VAR_1} fest im Blick."); +const u8 ContestString_ChangedPerceptions[] = _("{STR_VAR_3} von {STR_VAR_1}\nändert die Wahrnehmung."); +const u8 ContestString_AppealWoreOff[] = _("Wirkung von {STR_VAR_1}\nlässt nach."); +const u8 ContestString_AppealWoreOff2[] = _("Die besondere Wirkung\nlässt nach."); +const u8 ContestString_AppealLookSame[] = _("Jeder Ausdruck wird sich\nnun gleichen."); +const u8 ContestString_AppealCheapened[] = _("Ausdruck von {STR_VAR_2}\nwurde abgewertet."); +const u8 ContestString_AppealCheapened2[] = _("Es wertete die Ausdrücke\nder anderen PKMN ab."); +const u8 ContestString_AppealAttentionStolen[] = _("Es stahl {STR_VAR_2} die\nAufmerksamkeit."); +const u8 ContestString_AppealCheapened3[] = _("Es wertete Ausdruck\nvon {STR_VAR_2} ab."); +const u8 ContestString_AppealCheapened4[] = _("Es wertete die Ausdrücke\nder anderen stark ab."); +const u8 ContestString_AppealAnticipation[] = _("Alle warten sehnsüchtig\nauf {STR_VAR_1}."); +const u8 ContestString_AppealCheapened5[] = _("Es wertete den Ausdruck\nder PKMN vor ihm ab."); +const u8 ContestString_AppealCheapened6[] = _("Es wertete den Lieblings-\nausdruck des JURORS ab."); +const u8 ContestString_AppealCheapened7[] = _("Der Ausdruckswert der\nanderen wurde halbiert."); +const u8 ContestString_JammedStoodOut[] = _("Es macht sich bereit, die\nanderen zu beeindrucken."); +const u8 ContestString_AppealNoMore[] = _("Es kann an keiner Vor-\nführung mehr teilnehmen."); +const u8 ContestString_AppealTouched[] = _("Der fantastische Aus-\ndruck berührte den JUROR."); +const u8 ContestString_AppealAnticipation2[] = _("Die Erwartung für die fol-\ngenden Ausdrücke steigt."); +const u8 ContestString_AppealStoodOut2[] = _("Es war so beeindruckend\nwie ein Spezialausdruck."); +const u8 ContestString_AppealStoodOut3[] = _("Es war so beeindruckend\nwie {STR_VAR_1}."); +const u8 ContestString_JammedAppealsNotice[] = _("Ein Ausdruck, der gestört\nwurde, ist unauffälliger."); +const u8 ContestString_AppealSame[] = _("Jeder Teilnehmer hat nun\nden gleichen Ausdruck."); +const u8 ContestString_AppealFullWorse[] = _("{STR_VAR_1} ist voll. Der\nAusdruck wird schlechter."); + +const u8 *const gContestString_UnreferencedPtrTable3[] = { + ContestString_JudgeHeldFirm, + ContestString_ChangedPerceptions, + ContestString_Terminator, + ContestString_AppealWoreOff, + ContestString_AppealWoreOff2, + ContestString_AppealLookSame, + ContestString_AppealCheapened, + ContestString_AppealCheapened2, + ContestString_AppealAttentionStolen, + ContestString_AppealCheapened3, + ContestString_AppealCheapened4, + ContestString_AppealAnticipation, + ContestString_AppealCheapened5, + ContestString_AppealCheapened6, + ContestString_AppealCheapened7, + ContestString_JammedStoodOut, + ContestString_AppealNoMore, + ContestString_AppealTouched, + ContestString_AppealAnticipation2, + ContestString_AppealStoodOut2, + ContestString_AppealStoodOut3, + ContestString_Terminator, + ContestString_Terminator, + ContestString_Terminator, + ContestString_JammedAppealsNotice, + ContestString_AppealSame, +}; + +const u8 ContestString_MoreConscious[] = _("Es wird sich der anderen\nPKMN mehr bewusst.{PAUSE 60}"); +const u8 ContestString_NoAppeal[] = _("{STR_VAR_1} kann danach\nkeinen Ausdruck zeigen.{PAUSE 60}"); +const u8 ContestString_SettleDown[] = _("Es kommt ein wenig\nzur Ruhe.{PAUSE 60}"); +const u8 ContestString_ObliviousToOthers[] = _("Die anderen PKMN nehmen\nes überhaupt nicht wahr.{PAUSE 60}"); +const u8 ContestString_LessAware[] = _("Es ist sich der anderen\nPKMN kaum bewusst.{PAUSE 60}"); +const u8 ContestString_StoppedCaring[] = _("Es kümmert sich nicht\nmehr viel um andere PKMN.{PAUSE 60}"); +const u8 ContestString_StartleAttempt[] = _("Es versucht, die anderen\nPKMN zu erschrecken.{PAUSE 60}"); +const u8 ContestString_DazzleAttempt[] = _("Es versucht, die anderen\nPKMN zu blenden.{PAUSE 60}"); +const u8 ContestString_JudgeLookAway2[] = _("Der JUROR schaut\n{STR_VAR_1} nicht mehr an.{PAUSE 60}"); +const u8 ContestString_UnnerveAttempt[] = _("Es versucht, die folgenden\nPKMN zu entnerven.{PAUSE 60}"); +const u8 ContestString_Nervous[] = _("{STR_VAR_1} wird\nnervös.{PAUSE 60}"); +const u8 ContestString_UnnerveWaiting[] = _("Dieser Ausdruck soll die\nanderen PKMN entnerven.{PAUSE 60}"); +const u8 ContestString_TauntWell[] = _("Es verhöhnt die\nbesseren PKMN.{PAUSE 60}"); +const u8 ContestString_RegainedForm[] = _("{STR_VAR_1} findet zu\nseiner Form zurück.{PAUSE 60}"); +const u8 ContestString_JamWell[] = _("Es versucht, die besseren\nPKMN zu beeindrucken.{PAUSE 60}"); +const u8 ContestString_HustleStandout[] = _("{STR_VAR_1} an der Spitze\nengagiert sich noch mehr.{PAUSE 60}"); +const u8 ContestString_WorkHardUnnoticed[] = _("Das bisher unauffällige\n{STR_VAR_1} gibt alles."); +const u8 ContestString_WorkBefore[] = _("Es strengt sich genauso\nan wie die PKMN vor ihm.{PAUSE 60}"); +const u8 ContestString_AppealNotWell[] = _("Ausdruck von {STR_VAR_1}:\nKam nicht gut an.{PAUSE 60}"); +const u8 ContestString_WorkPreceding[] = _("Es strengt sich an wie die\nvorangegangenen PKMN.{PAUSE 60}"); +const u8 ContestString_AppealNotWell2[] = _("Ausdruck von {STR_VAR_1}:\nVerlief nicht so gut.{PAUSE 60}"); +const u8 ContestString_AppealNotShownWell[] = _("Ausdruck v. {STR_VAR_1}: \nWurde gestört.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell[] = _("Ausdruck von {STR_VAR_1}:\nVerlief ganz gut.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell[] = _("Ausdruck von {STR_VAR_1}:\nKam ganz gut an.{PAUSE 60}"); +const u8 ContestString_AppealExcellently[] = _("{STR_VAR_1} führte seinen\nAusdruck exzellent vor.{PAUSE 60}"); +const u8 ContestString_AppealDud[] = _("Ausdruck von {STR_VAR_1}:\nEr war absolut mies.{PAUSE 60}"); +const u8 ContestString_AppealNotVeryWell[] = _("Ausdruck von {STR_VAR_1}:\nEr war nicht so gut.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell2[] = _("Ausdruck von {STR_VAR_1}:\nEr war nicht schlecht.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell2[] = _("Ausdruck von {STR_VAR_1}:\nEr war recht gut.{PAUSE 60}"); +const u8 ContestString_AppealVeryWell[] = _("Ausdruck von {STR_VAR_1}:\nEr war sehr gut.{PAUSE 60}"); +const u8 ContestString_AppealExcellently2[] = _("Ausdruck von {STR_VAR_1}:\nEr war exzellent.{PAUSE 60}"); +const u8 ContestString_SameTypeGood[] = _("Der gleiche Typ wie das\nvorhergehende PKMN - gut!{PAUSE 60}"); +const u8 ContestString_DiffTypeGood[] = _("Nicht der gleiche Typ wie\ndas vorherige PKMN - gut!{PAUSE 60}"); +const u8 ContestString_StoodOutAsMuch[] = _("Es ist viel besser als die\nvorhergehenden PKMN.{PAUSE 60}"); +const u8 ContestString_NotAsWell[] = _("Es war nicht so gut wie\ndas PKMN vor ihm.{PAUSE 60}"); +const u8 ContestString_ConditionRose[] = _("Die Kondition von\n{STR_VAR_1} stieg.{PAUSE 60}"); +const u8 ContestString_HotStatus[] = _("Status von {STR_VAR_1}:\nBewirkt guten Ausdruck!{PAUSE 60}"); +const u8 ContestString_MoveUpLine[] = _("Es steigt in der Reihen-\nfolge auf.{PAUSE 60}"); +const u8 ContestString_MoveBackLine[] = _("Es fällt in der Reihen-\nfolge zurück.{PAUSE 60}"); +const u8 ContestString_ScrambleOrder[] = _("Es bringt die Reihenfolge\ndurcheinander.{PAUSE 60}"); + +const u8 ContestString_JudgeExpectantly2[] = _("Der JUROR betrachtet\n{STR_VAR_1} interessiert.{PAUSE 60}"); + +const u8 ContestString_WentOverWell[] = _("Die Combo der Ausdrücke\nkam gut an.{PAUSE 60}"); + +const u8 ContestString_WentOverVeryWell[] = _("Die Combo der Ausdrücke\nkam sehr gut an.{PAUSE 60}"); + +const u8 ContestString_AppealComboExcellently[] = _("Die Combo der Ausdrücke\nkam exzellent an.{PAUSE 60}"); +const u8 ContestString_AvertGaze[] = _("{STR_VAR_1} gelingt es,\nden Blick abzuwenden.{PAUSE 60}"); +const u8 ContestString_AvoidSeeing[] = _("{STR_VAR_1} wandte den\nBlick erfolgreich ab.{PAUSE 60}"); +const u8 ContestString_NotFazed[] = _("{STR_VAR_1} lässt sich\ndavon nicht ablenken.{PAUSE 60}"); +const u8 ContestString_LittleDistracted[] = _("{STR_VAR_1} wurde etwas\nunruhig.{PAUSE 60}"); +const u8 ContestString_AttemptStartle[] = _("Es versucht, die anderen\nPKMN zu verschrecken.{PAUSE 60}"); +const u8 ContestString_LookedDown[] = _("{STR_VAR_1} blickt\nirritiert zu Boden.{PAUSE 60}"); +const u8 ContestString_TurnedBack[] = _("{STR_VAR_1} dreht sich\nirritiert um.{PAUSE 60}"); +const u8 ContestString_UtterCry[] = _("{STR_VAR_1} kann einen \nLaut nicht unterdrücken.{PAUSE 60}"); +const u8 ContestString_LeaptUp[] = _("{STR_VAR_1} kann nicht\nanders und springt auf.{PAUSE 60}"); +const u8 ContestString_TrippedOver[] = _("{STR_VAR_1} ist so irri-\ntiert, dass es stolpert.{PAUSE 60}"); + +const u8 ContestString_TooNervous[] = _("{STR_VAR_1} ist zu nervös,\num etwas vorzuführen.{PAUSE 60}"); +const u8 ContestString_MessedUp2[] = _("Es hatte keinen Erfolg.{PAUSE 60}"); +const u8 ContestString_FailedTargetNervous[] = _("Es konnte keine\nNervosität erzeugen.{PAUSE 60}"); +const u8 ContestString_FailedAnyoneNervous[] = _("Aber es konnte niemanden\nnervös machen.{PAUSE 60}"); +const u8 ContestString_Ignored[] = _("Es wurde ignoriert...{PAUSE 60}"); +const u8 ContestString_NoConditionImprove[] = _("Es konnte seinen Aus-\ndruck nicht verstärken...{PAUSE 60}"); +const u8 ContestString_BadConditionWeakAppeal[] = _("Schwacher Ausdruck we-\ngen schlechter Konditon.{PAUSE 60}"); +const u8 ContestString_Unaffected[] = _("{STR_VAR_1} blieb\nunbeeindruckt.{PAUSE 60}"); + +const u8 ContestString_DissapointedRepeat[] = _("{STR_VAR_1} enttäuscht\ndurch Wiederholung.{PAUSE 60}"); + +const u8 ContestString_WentOverGreat[] = _("Die {STR_VAR_3} von\n{STR_VAR_1} war sehr gut.{PAUSE 60}"); + +const u8 ContestString_DidntGoWell[] = _("Die {STR_VAR_3} von\n{STR_VAR_1} war nicht gut.{PAUSE 60}"); + +const u8 ContestString_GotCrowdGoing[] = _("{STR_VAR_1} begeistert\nPublikum mit {STR_VAR_3}.{PAUSE 60}"); + +const u8 ContestString_CantAppealNextTurn[] = _("{STR_VAR_1} setzt in der \nfolgenden Runde aus.{PAUSE 60}"); +const u8 ContestString_AttractedAttention[] = _("Die Aufmerksamkeit des\nPublikums liegt auf ihm.{PAUSE 60}"); + +const u8 ContestString_CrowdWatches[] = _("Das Publikum beobachtet\nweiterhin {STR_VAR_3}.{PAUSE 60}"); + +const u8 ContestString_Ignored2[] = _("{STR_VAR_2} von\n{STR_VAR_1} ist ignoriert.{PAUSE 60}"); + +const u8 *const gUnknown_083CC188[] = { + ContestString_MoreConscious, + ContestString_NoAppeal, + ContestString_SettleDown, + ContestString_ObliviousToOthers, + ContestString_LessAware, + ContestString_StoppedCaring, + ContestString_StartleAttempt, + ContestString_DazzleAttempt, + ContestString_JudgeLookAway2, + ContestString_UnnerveAttempt, + ContestString_Nervous, + ContestString_UnnerveWaiting, + ContestString_TauntWell, + ContestString_RegainedForm, + ContestString_JamWell, + ContestString_HustleStandout, + ContestString_WorkHardUnnoticed, + ContestString_WorkBefore, + ContestString_AppealNotWell, + ContestString_WorkPreceding, + ContestString_AppealNotWell2, + ContestString_AppealNotShownWell, + ContestString_AppealSlightlyWell, + ContestString_AppealPrettyWell, + ContestString_AppealExcellently, + ContestString_AppealDud, + ContestString_AppealNotVeryWell, + ContestString_AppealSlightlyWell2, + ContestString_AppealPrettyWell2, + ContestString_AppealVeryWell, + ContestString_AppealExcellently2, + ContestString_SameTypeGood, + ContestString_DiffTypeGood, + ContestString_StoodOutAsMuch, + ContestString_NotAsWell, + ContestString_ConditionRose, + ContestString_HotStatus, + ContestString_MoveUpLine, + ContestString_MoveBackLine, + ContestString_ScrambleOrder, + ContestString_JudgeExpectantly2, + ContestString_WentOverWell, + ContestString_WentOverVeryWell, + ContestString_AppealComboExcellently, + ContestString_AvertGaze, + ContestString_AvoidSeeing, + ContestString_NotFazed, + ContestString_LittleDistracted, + ContestString_AttemptStartle, + ContestString_LookedDown, + ContestString_TurnedBack, + ContestString_UtterCry, + ContestString_LeaptUp, + ContestString_TrippedOver, + ContestString_MessedUp2, + ContestString_FailedTargetNervous, + ContestString_FailedAnyoneNervous, + ContestString_Ignored, + ContestString_NoConditionImprove, + ContestString_BadConditionWeakAppeal, + ContestString_Unaffected, + ContestString_AttractedAttention, +}; + +const u8 gText_Contest_Shyness[] = _("Scheu"); + +const u8 gText_Contest_Anxiety[] = _("Besorgnis"); + +const u8 gText_Contest_Laziness[] = _("Faulheit"); + +const u8 gText_Contest_Hesitancy[] = _("Zögern"); + +const u8 gText_Contest_Fear[] = _("Furcht"); + +const u8 ContestString_Coolness[] = _("Coolness"); +const u8 ContestString_Beauty2[] = _("Schönheit"); +const u8 ContestString_Cuteness[] = _("Anmut"); +const u8 ContestString_Smartness[] = _("Klugheit"); +const u8 ContestString_Toughness[] = _("Stärke"); + +const u8 *const gContestCategoryStrings[] = { + ContestString_Coolness, + ContestString_Beauty2, + ContestString_Cuteness, + ContestString_Smartness, + ContestString_Toughness, +}; + +const u8 gUnknown_083CC2EC[] = _("SPANNUNG:"); + +const u8 ContestString_CoolMove[] = _("COOLE Att."); + +const u8 ContestString_BeautyMove[] = _("SCHÖNE Att."); + +const u8 ContestString_CuteMove[] = _("ANMUT-Att."); + +const u8 ContestString_SmartMove[] = _("KLUGE Att."); + +const u8 ContestString_ToughMove[] = _("STARKE Att."); + +const u8 ContestString_UnknownMoveType[] = _("???"); + +const u8 *const sInvalidContestMoveNames[] = { + ContestString_CoolMove, + ContestString_BeautyMove, + ContestString_CuteMove, + ContestString_SmartMove, + ContestString_ToughMove, + ContestString_UnknownMoveType, +}; + +// unused? +const u8 ContestString_Rank[] = _("KLASSE"); + +const u8 ContestString_HighlightTransparent_ColorMagenta[] = _("{HIGHLIGHT TRANSPARENT}{COLOR MAGENTA} "); + +const u8 gUnknownText_MissedTurn[] = _("Verpasste Chance"); + +const u8 gUnknownText_LinkStandbyAndWinner[] = _("Verbindung..."); +const u8 gUnknownText_ColorWhite2[] = _("{COLOR WHITE2}"); +const u8 gUnknownText_LinkWinner[] = _("Der Sieger ist {STR_VAR_2} von\n{STR_VAR_1}! Herzlichen Glückwunsch!");
\ No newline at end of file diff --git a/src/data/text/contest_en.h b/src/data/text/contest_en.h new file mode 100644 index 000000000..39a4c9cff --- /dev/null +++ b/src/data/text/contest_en.h @@ -0,0 +1,453 @@ +const u8 ContestString_DescHighlyAppealing[] = _("A highly appealing move."); +const u8 ContestString_DescStartled1[] = _("After this move, the user is\nmore easily startled."); +const u8 ContestString_DescGreatLock[] = _("Makes a great appeal, but\nallows no more to the end."); +const u8 ContestString_DescRepeatable[] = _("Can be repeatedly used\nwithout boring the JUDGE."); +const u8 ContestString_DescStartled2[] = _("Can avoid being startled\nby others once."); +const u8 ContestString_DescStartled3[] = _("Can avoid being startled\nby others."); +const u8 ContestString_DescStartled4[] = _("Can avoid being startled\nby others a little."); +const u8 ContestString_DescStartled5[] = _("After this move, the user is\nless likely to be startled."); +const u8 ContestString_DescStartled6[] = _("Slightly startles the\nPOKéMON in front."); +const u8 ContestString_DescStartled7[] = _("Slightly startles those\nthat have made appeals."); +const u8 ContestString_DescStartled8[] = _("Startles the POKéMON that\nappealed before the user."); +const u8 ContestString_DescStartled9[] = _("Startles all POKéMON that\nhave done their appeals."); +const u8 ContestString_DescStartled10[] = _("Badly startles the\nPOKéMON in front."); +const u8 ContestString_DescStartled11[] = _("Badly startles those that\nhave made appeals."); +const u8 ContestString_DescStartled12[] = _("Startles the POKéMON that\nappealed before the user."); +const u8 ContestString_DescStartled13[] = _("Startles all POKéMON that\nappealed before the user."); +const u8 ContestString_DescAttentionShift[] = _("Shifts the JUDGE's\nattention from others."); +const u8 ContestString_DescStartled14[] = _("Startles the POKéMON that\nhas the JUDGE's attention."); +const u8 ContestString_DescJamOthersMissTurn[] = _("Jams the others, and misses\none turn of appeals."); +const u8 ContestString_DescStartled15[] = _("Startles POKéMON that\nmade a same-type appeal."); +const u8 ContestString_DescStartled16[] = _("Badly startles POKéMON\nthat made COOL appeals."); +const u8 ContestString_DescStartled17[] = _("Badly startles POKéMON\nthat made BEAUTY appeals."); +const u8 ContestString_DescStartled18[] = _("Badly startles POKéMON\nthat made CUTE appeals."); +const u8 ContestString_DescStartled19[] = _("Badly startles POKéMON\nthat made SMART appeals."); +const u8 ContestString_DescStartled20[] = _("Badly startles POKéMON\nthat made TOUGH appeals."); +const u8 ContestString_DescNervousOne[] = _("Makes one POKéMON after\nthe user nervous."); +const u8 ContestString_DescNervousAllAfter[] = _("Makes all POKéMON after\nthe user nervous."); +const u8 ContestString_DescConditionWorseBefore[] = _("Worsens the condition of\nthose that made appeals."); +const u8 ContestString_DescStartled21[] = _("Badly startles POKéMON in\ngood condition."); +const u8 ContestString_DescGreatWhenFirst[] = _("The appeal works great if\nperformed first."); +const u8 ContestString_DescGreatWhenLast[] = _("The appeal works great if\nperformed last."); +const u8 ContestString_DescAppealGoodBeforeAll[] = _("Makes the appeal as good\nas those before it."); +const u8 ContestString_DescAppealGoodBeforeOne[] = _("Makes the appeal as good\nas the one before it."); +const u8 ContestString_DescBetterWhenLater[] = _("The appeal works better\nthe later it is performed."); +const u8 ContestString_DescAffectedByTiming[] = _("The appeal's quality varies\ndepending on its timing."); +const u8 ContestString_DescBetterWhenSameType[] = _("Works well if it's the same\ntype as the one before."); +const u8 ContestString_DescBetterWhenDiffType[] = _("Works well if different in\ntype than the one before."); +const u8 ContestString_DescAffectedByFront[] = _("Affected by how well the\nappeal in front goes."); +const u8 ContestString_DescConditionUp[] = _("Ups the user's condition.\nHelps prevent nervousness."); +const u8 ContestString_DescAffectedByCondition[] = _("The appeal works well if the\nuser's condition is good."); +const u8 ContestString_DescAppealEarlier[] = _("The next appeal can be made\nearlier next turn."); +const u8 ContestString_DescAppealLater[] = _("The next appeal can be made\nlater next turn."); +const u8 ContestString_DescRandomOrderEasier[] = _("Makes the next turn's order\nmore easily scrambled."); +const u8 ContestString_DescRandomOrder[] = _("Scrambles the order of\nappeals on the next turn."); +const u8 ContestString_DescAnyExcitement[] = _("An appeal that excites the\naudience in any CONTEST."); +const u8 ContestString_DescStartled22[] = _("Badly startles all POKéMON\nthat made good appeals."); +const u8 ContestString_DescScaleWithExcitement[] = _("The appeal works best the\nmore the crowd is excited."); +const u8 ContestString_DescStopExcitement[] = _("Temporarily stops the\ncrowd from growing excited."); + +const u8 *const gContestEffectStrings[] = { + ContestString_DescHighlyAppealing, + ContestString_DescStartled1, + ContestString_DescGreatLock, + ContestString_DescRepeatable, + ContestString_DescStartled2, + ContestString_DescStartled3, + ContestString_DescStartled4, + ContestString_DescStartled5, + ContestString_DescStartled6, + ContestString_DescStartled7, + ContestString_DescStartled8, + ContestString_DescStartled9, + ContestString_DescStartled10, + ContestString_DescStartled11, + ContestString_DescStartled12, + ContestString_DescStartled13, + ContestString_DescAttentionShift, + ContestString_DescStartled14, + ContestString_DescJamOthersMissTurn, + ContestString_DescStartled15, + ContestString_DescStartled16, + ContestString_DescStartled17, + ContestString_DescStartled18, + ContestString_DescStartled19, + ContestString_DescStartled20, + ContestString_DescNervousOne, + ContestString_DescNervousAllAfter, + ContestString_DescConditionWorseBefore, + ContestString_DescStartled21, + ContestString_DescGreatWhenFirst, + ContestString_DescGreatWhenLast, + ContestString_DescAppealGoodBeforeAll, + ContestString_DescAppealGoodBeforeOne, + ContestString_DescBetterWhenLater, + ContestString_DescAffectedByTiming, + ContestString_DescBetterWhenSameType, + ContestString_DescBetterWhenDiffType, + ContestString_DescAffectedByFront, + ContestString_DescConditionUp, + ContestString_DescAffectedByCondition, + ContestString_DescAppealEarlier, + ContestString_DescAppealLater, + ContestString_DescRandomOrderEasier, + ContestString_DescRandomOrder, + ContestString_DescAnyExcitement, + ContestString_DescStartled22, + ContestString_DescScaleWithExcitement, + ContestString_DescStopExcitement, +}; + +const u8 ContestString_MoveRainDance[] = _("RAIN DANCE"); +const u8 ContestString_MoveRage[] = _("RAGE"); +const u8 ContestString_MoveFocusEnergy[] = _("FOCUS ENERGY"); +const u8 ContestString_MoveHypnosis[] = _("HYPNOSIS"); +const u8 ContestString_MoveSoftboiled[] = _("SOFTBOILED"); +const u8 ContestString_MoveHornAttack[] = _("HORN ATTACK"); +const u8 ContestString_MoveSwordsDance[] = _("SWORDS DANCE"); +const u8 ContestString_MoveConversion[] = _("CONVERSION"); +const u8 ContestString_MoveSunnyDay[] = _("SUNNY DAY"); +const u8 ContestString_MoveRest[] = _("REST"); +const u8 ContestString_MoveVicegrip[] = _("VICEGRIP"); +const u8 ContestString_MoveDefenseCurl[] = _("DEFENSE CURL"); +const u8 ContestString_MoveLockOn[] = _("LOCK-ON"); + +const u8 *const gContestStrings_UnreferencedTable1[] = { + ContestString_MoveRainDance, + ContestString_MoveRainDance, + ContestString_MoveRage, + ContestString_MoveFocusEnergy, + ContestString_MoveHypnosis, + ContestString_MoveSoftboiled, + ContestString_MoveHornAttack, + ContestString_MoveSwordsDance, + ContestString_MoveConversion, + ContestString_MoveSunnyDay, + ContestString_MoveRest, + ContestString_MoveVicegrip, + ContestString_MoveDefenseCurl, + ContestString_MoveLockOn, +}; + +const u8 ContestString_Cool[] = _("COOL"); +const u8 ContestString_Beauty[] = _("BEAUTY"); +const u8 ContestString_Cute[] = _("CUTE"); +const u8 ContestString_Smart[] = _("SMART"); +const u8 ContestString_Tough[] = _("TOUGH"); + +const u8 *const gContestCategoryNames[] = { + ContestString_Cool, + ContestString_Beauty, + ContestString_Cute, + ContestString_Smart, + ContestString_Tough, +}; + +const u8 gText_Contest_WhichMoveWillBePlayed[] = _("Appeal no. {NAME_END}!\nWhich move will be played?"); + +const u8 gText_Contest_ButItCantParticipate[] = _("Appeal no. {NAME_END}!\nBut it can't participate!"); + +const u8 gText_MonAppealedWithMove[] = _("{STR_VAR_1} appealed with\n{STR_VAR_2}!"); + +const u8 gText_OtherPokemonMadeMoves[] = _("The other POKéMON\nmade moves.{PAUSE 60}"); + +const u8 gText_MonWasWatchingOthers[] = _("{STR_VAR_1} was watching\nthe others.{PAUSE 60}"); + +const u8 gText_AllOutOfAppealTime[] = _("We're all out of\nAppeal Time!{PAUSE 60}"); +const u8 gText_Strvar1sStrvar3Move[] = _("{STR_VAR_1}'s {STR_VAR_3}\nmove {STR_VAR_2}!{PAUSE 60}"); +const u8 gText_TRICK[] = _("TRICK"); +const u8 gText_SPECIAL[] = _("SPECIAL"); +const u8 ContestString_AppealJammed[] = _("But the appeal was\njammed."); +const u8 ContestString_FollowLead[] = _("It followed another\nPOKéMON's lead."); +const u8 ContestString_MessedUp[] = _("But it messed up."); +const u8 ContestString_BetterUsual[] = _("It went better than\nusual."); +const u8 ContestString_JudgeLookAway[] = _("The JUDGE looked away\nfor some reason."); +const u8 ContestString_WorkHard[] = _("It worked hard to build on\npast mistakes."); +const u8 ContestString_NoMoreMoves[] = _("It can't make any more\nmoves."); +const u8 ContestString_WorkReallyWell[] = _("It worked frighteningly\nwell."); +const u8 ContestString_WorkHardStandout[] = _("It worked as hard as the\nstandout POKéMON."); +const u8 ContestString_JudgeExpectantly[] = _("The JUDGE looked on\nexpectantly."); +const u8 ContestString_WorkRatherWell[] = _("It worked rather well."); +const u8 ContestString_WorkBetter[] = _("It worked a little better\nthan usual."); + +const u8 *const gContestStrings_UnreferencedTable2[] = { + ContestString_AppealJammed, + ContestString_FollowLead, + ContestString_MessedUp, + ContestString_BetterUsual, + ContestString_BetterUsual, + ContestString_JudgeLookAway, + ContestString_WorkHard, + ContestString_NoMoreMoves, + ContestString_WorkReallyWell, + ContestString_WorkHardStandout, + ContestString_JudgeExpectantly, + ContestString_WorkRatherWell, + ContestString_WorkBetter, +}; + +const u8 ContestString_StandOutNone[] = _("{STR_VAR_1} failed to\nstand out at all...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutNotMuch[] = _("{STR_VAR_1} didn't stand\nout very much...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLittle[] = _("{STR_VAR_1} caught a\nlittle attention.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLot[] = _("{STR_VAR_1} attracted a\nlot of attention.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutTotal[] = _("{STR_VAR_1} commanded\ntotal attention.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutDidnt[] = _("{STR_VAR_1} hasn't made\nits appeal.{PAUSE_UNTIL_PRESS}"); + +const u8 *const gContestStandOutStrings[] = { + ContestString_StandOutNone, + ContestString_StandOutNotMuch, + ContestString_StandOutLittle, + ContestString_StandOutLot, + ContestString_StandOutTotal, + ContestString_StandOutDidnt, +}; + +const u8 ContestString_AppealAnticipation3[] = _("Anticipation swelled for\n{STR_VAR_1}'s appeal next."); +const u8 ContestString_JudgeSatisfied[] = _("The JUDGE was very\nsatisfied."); +const u8 ContestString_Terminator[] = _(""); +const u8 ContestString_JudgeHeldFirm[] = _("The JUDGE 's views on\n{STR_VAR_1} held firm."); +const u8 ContestString_ChangedPerceptions[] = _("{STR_VAR_1}'s {STR_VAR_3}\nchanged perceptions."); +const u8 ContestString_AppealWoreOff[] = _("{STR_VAR_1}'s appeal\neffect wore off."); +const u8 ContestString_AppealWoreOff2[] = _("The special appeal's\neffect wore off."); +const u8 ContestString_AppealLookSame[] = _("Everyone's appeals were\nmade to look the same."); +const u8 ContestString_AppealCheapened[] = _("{STR_VAR_2}'s appeal was\ncheapened."); +const u8 ContestString_AppealCheapened2[] = _("It cheapened the appeal\nof those ahead."); +const u8 ContestString_AppealAttentionStolen[] = _("It stole attention away\nfrom {STR_VAR_2}."); +const u8 ContestString_AppealCheapened3[] = _("It cheapened\n{STR_VAR_2}'s appeal."); +const u8 ContestString_AppealCheapened4[] = _("It severely cheapened\nother appeals."); +const u8 ContestString_AppealAnticipation[] = _("Anticipation swelled for\n{STR_VAR_1}'s appeal next."); +const u8 ContestString_AppealCheapened5[] = _("It cheapened the appeal\nof those ahead."); +const u8 ContestString_AppealCheapened6[] = _("It cheapened the JUDGE's\nfavorite appeal."); +const u8 ContestString_AppealCheapened7[] = _("The appeals of others\nwere cheapened by half."); +const u8 ContestString_JammedStoodOut[] = _("It stood out to make up\nfor being jammed."); +const u8 ContestString_AppealNoMore[] = _("It can't participate in\nappeals any more."); +const u8 ContestString_AppealTouched[] = _("It touched the JUDGE for\na fantastic appeal."); +const u8 ContestString_AppealAnticipation2[] = _("Anticipation rose for\nupcoming appeals."); +const u8 ContestString_AppealStoodOut2[] = _("It stood out as much as\nspecial appeals."); +const u8 ContestString_AppealStoodOut3[] = _("It stood out as much as\n{STR_VAR_1}."); +const u8 ContestString_JammedAppealsNotice[] = _("Jammed appeals were made\neven less noticeable."); +const u8 ContestString_AppealSame[] = _("Everyone's appeals were\nmade the same."); +const u8 ContestString_AppealFullWorse[] = _("Its {STR_VAR_1} is full.\nIt worsened its appeal."); + +const u8 *const gContestString_UnreferencedPtrTable3[] = { + ContestString_JudgeHeldFirm, + ContestString_ChangedPerceptions, + ContestString_Terminator, + ContestString_AppealWoreOff, + ContestString_AppealWoreOff2, + ContestString_AppealLookSame, + ContestString_AppealCheapened, + ContestString_AppealCheapened2, + ContestString_AppealAttentionStolen, + ContestString_AppealCheapened3, + ContestString_AppealCheapened4, + ContestString_AppealAnticipation, + ContestString_AppealCheapened5, + ContestString_AppealCheapened6, + ContestString_AppealCheapened7, + ContestString_JammedStoodOut, + ContestString_AppealNoMore, + ContestString_AppealTouched, + ContestString_AppealAnticipation2, + ContestString_AppealStoodOut2, + ContestString_AppealStoodOut3, + ContestString_Terminator, + ContestString_Terminator, + ContestString_Terminator, + ContestString_JammedAppealsNotice, + ContestString_AppealSame, +}; + +const u8 ContestString_MoreConscious[] = _("It became more conscious\nof the other POKéMON.{PAUSE 60}"); +const u8 ContestString_NoAppeal[] = _("{STR_VAR_1} can't make an\nappeal after this.{PAUSE 60}"); +const u8 ContestString_SettleDown[] = _("It settled down just a\nlittle bit.{PAUSE 60}"); +const u8 ContestString_ObliviousToOthers[] = _("It became oblivious to\nthe other POKéMON.{PAUSE 60}"); +const u8 ContestString_LessAware[] = _("It became less aware of\nthe other POKéMON.{PAUSE 60}"); +const u8 ContestString_StoppedCaring[] = _("It stopped caring about\nother POKéMON much.{PAUSE 60}"); +const u8 ContestString_StartleAttempt[] = _("It tried to startle the\nother POKéMON.{PAUSE 60}"); +const u8 ContestString_DazzleAttempt[] = _("It tried to dazzle the\nothers.{PAUSE 60}"); +const u8 ContestString_JudgeLookAway2[] = _("The JUDGE looked away\nfrom {STR_VAR_1}.{PAUSE 60}"); +const u8 ContestString_UnnerveAttempt[] = _("It tried to unnerve the\nnext POKéMON.{PAUSE 60}"); +const u8 ContestString_Nervous[] = _("{STR_VAR_1} became\nnervous.{PAUSE 60}"); +const u8 ContestString_UnnerveWaiting[] = _("The appeal tried to\nunnerve waiting POKéMON.{PAUSE 60}"); +const u8 ContestString_TauntWell[] = _("It taunted POKéMON\ndoing well.{PAUSE 60}"); +const u8 ContestString_RegainedForm[] = _("{STR_VAR_1} regained its\nform.{PAUSE 60}"); +const u8 ContestString_JamWell[] = _("It tried to jam POKéMON\ndoing well.{PAUSE 60}"); +const u8 ContestString_HustleStandout[] = _("The standout {STR_VAR_1}\nhustled even more.{PAUSE 60}"); +const u8 ContestString_WorkHardUnnoticed[] = _("The largely unnoticed\n{STR_VAR_1} worked hard.{PAUSE 60}"); +const u8 ContestString_WorkBefore[] = _("It worked as much as\nPOKéMON before it.{PAUSE 60}"); +const u8 ContestString_AppealNotWell[] = _("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 60}"); +const u8 ContestString_WorkPreceding[] = _("It worked as much as the\npreceding POKéMON.{PAUSE 60}"); +const u8 ContestString_AppealNotWell2[] = _("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 60}"); +const u8 ContestString_AppealNotShownWell[] = _("{STR_VAR_1}'s appeal\ncouldn't be shown well.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell[] = _("{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell[] = _("{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 60}"); +const u8 ContestString_AppealExcellently[] = _("{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 60}"); +const u8 ContestString_AppealDud[] = _("{STR_VAR_1}'s appeal was\na dud.{PAUSE 60}"); +const u8 ContestString_AppealNotVeryWell[] = _("{STR_VAR_1}'s appeal did\nnot work very well.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell2[] = _("{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell2[] = _("{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 60}"); +const u8 ContestString_AppealVeryWell[] = _("{STR_VAR_1}'s appeal\nwent very well.{PAUSE 60}"); +const u8 ContestString_AppealExcellently2[] = _("{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 60}"); +const u8 ContestString_SameTypeGood[] = _("It's the same type as the\nPOKéMON before - good!{PAUSE 60}"); +const u8 ContestString_DiffTypeGood[] = _("It's not the same type as\nthe one before - good!{PAUSE 60}"); +const u8 ContestString_StoodOutAsMuch[] = _("It stood out much more\nthan the POKéMON before.{PAUSE 60}"); +const u8 ContestString_NotAsWell[] = _("It didn't do as well as the\nPOKéMON before.{PAUSE 60}"); +const u8 ContestString_ConditionRose[] = _("{STR_VAR_1}'s condition\nrose above usual.{PAUSE 60}"); +const u8 ContestString_HotStatus[] = _("{STR_VAR_1}'s hot status\nmade it a great appeal!{PAUSE 60}"); +const u8 ContestString_MoveUpLine[] = _("It moved up in line for\nthe next appeal.{PAUSE 60}"); +const u8 ContestString_MoveBackLine[] = _("It moved back in line once\nfor the next appeal.{PAUSE 60}"); +const u8 ContestString_ScrambleOrder[] = _("It scrambled up the\norder for the next turn.{PAUSE 60}"); +const u8 ContestString_JudgeExpectantly2[] = _("The JUDGE looked at\n{STR_VAR_1} expectantly.{PAUSE 60}"); +const u8 ContestString_WentOverWell[] = _("The appeal combo went\nover well.{PAUSE 60}"); +const u8 ContestString_WentOverVeryWell[] = _("The appeal combo went\nover very well.{PAUSE 60}"); +const u8 ContestString_AppealComboExcellently[] = _("The appeal combo went\nover excellently.{PAUSE 60}"); +const u8 ContestString_AvertGaze[] = _("{STR_VAR_1} managed to\navert its gaze.{PAUSE 60}"); +const u8 ContestString_AvoidSeeing[] = _("{STR_VAR_1} managed to\navoid seeing it.{PAUSE 60}"); +const u8 ContestString_NotFazed[] = _("{STR_VAR_1} isn't fazed\nby that sort of thing.{PAUSE 60}"); +const u8 ContestString_LittleDistracted[] = _("{STR_VAR_1} became a\nlittle distracted.{PAUSE 60}"); +const u8 ContestString_AttemptStartle[] = _("It tried to startle the\nother POKéMON.{PAUSE 60}"); +const u8 ContestString_LookedDown[] = _("{STR_VAR_1} looked down\nout of distraction.{PAUSE 60}"); +const u8 ContestString_TurnedBack[] = _("{STR_VAR_1} turned back\nout of distraction.{PAUSE 60}"); +const u8 ContestString_UtterCry[] = _("{STR_VAR_1} couldn't help\nuttering a cry.{PAUSE 60}"); +const u8 ContestString_LeaptUp[] = _("{STR_VAR_1} couldn't help\nleaping up.{PAUSE 60}"); +const u8 ContestString_TrippedOver[] = _("{STR_VAR_1} tripped over\nout of distraction.{PAUSE 60}"); +const u8 ContestString_TooNervous[] = _("{STR_VAR_1} was too\nnervous to move.{PAUSE 60}"); +const u8 ContestString_MessedUp2[] = _("But it messed up.{PAUSE 60}"); +const u8 ContestString_FailedTargetNervous[] = _("But it failed to make\nthe target nervous.{PAUSE 60}"); +const u8 ContestString_FailedAnyoneNervous[] = _("But it failed to make\nanyone nervous.{PAUSE 60}"); +const u8 ContestString_Ignored[] = _("But it was ignored...{PAUSE 60}"); +const u8 ContestString_NoConditionImprove[] = _("But it couldn't improve\nits condition...{PAUSE 60}"); +const u8 ContestString_BadConditionWeakAppeal[] = _("Its bad condition\nresulted in a weak appeal.{PAUSE 60}"); +const u8 ContestString_Unaffected[] = _("{STR_VAR_1} was\nunaffected.{PAUSE 60}"); +const u8 ContestString_DissapointedRepeat[] = _("{STR_VAR_1} disappointed\nby repeating an appeal.{PAUSE 60}"); +const u8 ContestString_WentOverGreat[] = _("{STR_VAR_1}'s {STR_VAR_3}\nwent over great.{PAUSE 60}"); +const u8 ContestString_DidntGoWell[] = _("{STR_VAR_1}'s {STR_VAR_3}\ndidn't go over well here...{PAUSE 60}"); +const u8 ContestString_GotCrowdGoing[] = _("{STR_VAR_1}'s {STR_VAR_3}\ngot the crowd going.{PAUSE 60}"); +const u8 ContestString_CantAppealNextTurn[] = _("{STR_VAR_1} can't appeal\nnext turn...{PAUSE 60}"); +const u8 ContestString_AttractedAttention[] = _("It attracted the crowd's\nattention.{PAUSE 60}"); +const u8 ContestString_CrowdWatches[] = _("The crowd continues to\nwatch {STR_VAR_3}.{PAUSE 60}"); +const u8 ContestString_Ignored2[] = _("{STR_VAR_1}'s\n{STR_VAR_2} is ignored.{PAUSE 60}"); + +const u8 *const gUnknown_083CC188[] = { + ContestString_MoreConscious, + ContestString_NoAppeal, + ContestString_SettleDown, + ContestString_ObliviousToOthers, + ContestString_LessAware, + ContestString_StoppedCaring, + ContestString_StartleAttempt, + ContestString_DazzleAttempt, + ContestString_JudgeLookAway2, + ContestString_UnnerveAttempt, + ContestString_Nervous, + ContestString_UnnerveWaiting, + ContestString_TauntWell, + ContestString_RegainedForm, + ContestString_JamWell, + ContestString_HustleStandout, + ContestString_WorkHardUnnoticed, + ContestString_WorkBefore, + ContestString_AppealNotWell, + ContestString_WorkPreceding, + ContestString_AppealNotWell2, + ContestString_AppealNotShownWell, + ContestString_AppealSlightlyWell, + ContestString_AppealPrettyWell, + ContestString_AppealExcellently, + ContestString_AppealDud, + ContestString_AppealNotVeryWell, + ContestString_AppealSlightlyWell2, + ContestString_AppealPrettyWell2, + ContestString_AppealVeryWell, + ContestString_AppealExcellently2, + ContestString_SameTypeGood, + ContestString_DiffTypeGood, + ContestString_StoodOutAsMuch, + ContestString_NotAsWell, + ContestString_ConditionRose, + ContestString_HotStatus, + ContestString_MoveUpLine, + ContestString_MoveBackLine, + ContestString_ScrambleOrder, + ContestString_JudgeExpectantly2, + ContestString_WentOverWell, + ContestString_WentOverVeryWell, + ContestString_AppealComboExcellently, + ContestString_AvertGaze, + ContestString_AvoidSeeing, + ContestString_NotFazed, + ContestString_LittleDistracted, + ContestString_AttemptStartle, + ContestString_LookedDown, + ContestString_TurnedBack, + ContestString_UtterCry, + ContestString_LeaptUp, + ContestString_TrippedOver, + ContestString_MessedUp2, + ContestString_FailedTargetNervous, + ContestString_FailedAnyoneNervous, + ContestString_Ignored, + ContestString_NoConditionImprove, + ContestString_BadConditionWeakAppeal, + ContestString_Unaffected, + ContestString_AttractedAttention, +}; + +const u8 gText_Contest_Shyness[] = _("shyness"); + +const u8 gText_Contest_Anxiety[] = _("anxiety"); + +const u8 gText_Contest_Laziness[] = _("laziness"); + +const u8 gText_Contest_Hesitancy[] = _("hesitancy"); + +const u8 gText_Contest_Fear[] = _("fear"); + +const u8 ContestString_Coolness[] = _("coolness"); +const u8 ContestString_Beauty2[] = _("beauty"); +const u8 ContestString_Cuteness[] = _("cuteness"); +const u8 ContestString_Smartness[] = _("smartness"); +const u8 ContestString_Toughness[] = _("toughness"); + +const u8 *const gContestCategoryStrings[] = { + ContestString_Coolness, + ContestString_Beauty2, + ContestString_Cuteness, + ContestString_Smartness, + ContestString_Toughness, +}; + +const u8 gUnknown_083CC2EC[] = _("TENSION:"); + +const u8 ContestString_CoolMove[] = _("COOL Move"); + +const u8 ContestString_BeautyMove[] = _("BEAUTY Move"); + +const u8 ContestString_CuteMove[] = _("CUTE Move"); + +const u8 ContestString_SmartMove[] = _("SMART Move"); + +const u8 ContestString_ToughMove[] = _("TOUGH Move"); + +const u8 ContestString_UnknownMoveType[] = _("???"); + +const u8 *const sInvalidContestMoveNames[] = { + ContestString_CoolMove, + ContestString_BeautyMove, + ContestString_CuteMove, + ContestString_SmartMove, + ContestString_ToughMove, + ContestString_UnknownMoveType, +}; + +// unused? +const u8 ContestString_Rank[] = _("RANK"); + +const u8 ContestString_HighlightTransparent_ColorMagenta[] = _("{HIGHLIGHT TRANSPARENT}{COLOR MAGENTA} "); + +const u8 gUnknownText_MissedTurn[] = _("Missed turn"); + +const u8 gUnknownText_LinkStandbyAndWinner[] = _("Link standby..."); +const u8 gUnknownText_ColorWhite2[] = _("{COLOR WHITE2}"); +const u8 gUnknownText_LinkWinner[] = _("The winner is {STR_VAR_1}'s {STR_VAR_2}!\nCongratulations!"); diff --git a/src/debug/crash.c b/src/debug/crash.c index 85058d285..3f9e2d685 100644 --- a/src/debug/crash.c +++ b/src/debug/crash.c @@ -4,7 +4,7 @@ #include "text.h" #include "palette.h" -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; static void CB2_CrashIdle(void); @@ -37,9 +37,9 @@ void Crash(u8 *text) SetMainCallback2(CB2_CrashIdle); DmaFill32Large(3, 0, (void *)VRAM, 0x18000, 0x1000); Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6FD8); LoadFontDefaultPalette(&gWindowTemplate_81E6FD8); - Text_InitWindowAndPrintText(&gUnknown_03004210, text, 1, 9, 7); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, text, 1, 9, 7); } static void CB2_CrashIdle(void) diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 27d2db66b..c099ecc87 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -2,21 +2,21 @@ #include "matsuda_debug_menu.h" #include "battle.h" #include "contest.h" -#include "contest_link_80C2020.h" -#include "contest_link_80C857C.h" +#include "contest_link.h" +#include "contest_link_util.h" #include "data2.h" +#include "ewram.h" #include "link.h" #include "main.h" #include "menu.h" -#include "palette.h" #include "overworld.h" +#include "palette.h" +#include "scanline_effect.h" #include "sprite.h" #include "start_menu.h" #include "string_util.h" #include "task.h" #include "text.h" -#include "scanline_effect.h" -#include "ewram.h" extern u8 gUnknown_0203856C; extern u8 gContestMonPartyIndex; @@ -109,7 +109,7 @@ static void sub_80A9BE4(u8 taskId) DestroyTask(taskId); if (!(gIsLinkContest & 1)) - sub_80AF668(); + CalculateFinalScores(); sub_80C2358(); } @@ -149,12 +149,12 @@ static void sub_80A9C98(u8 taskId) static void sub_80A9CC0(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80A9CDC); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRng, sub_80A9CDC); } static void sub_80A9CDC(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80A9D58); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIds, sub_80A9D58); } static void sub_80A9CF8(u8 taskId) @@ -169,7 +169,7 @@ static void sub_80A9CF8(u8 taskId) static void sub_80A9D30(u8 taskId) { - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80A9CF8; } @@ -181,15 +181,15 @@ static void sub_80A9D58(u8 taskId) for (i = 0; i < 4; i++) dest[i] = gTasks[taskId].data[5 + i]; - gUnknown_0203869B = sub_80C4B34(dest); - InitContestMonConditions((u8)gSpecialVar_ContestCategory); - sub_80B0F28(0); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80A9DBC); + gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(dest); + CalculateRound1Points((u8)gSpecialVar_ContestCategory); + SortContestants(0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_80A9DBC); } static void sub_80A9DBC(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80A9DD8); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80A9DD8); } static void sub_80A9DD8(u8 taskId) @@ -607,7 +607,7 @@ void sub_80AA5E8(u8 var) static void sub_80AA614(u8 var1, u8 var2) { - u16 var = InitContestMonConditionI(var1, var2); + u16 var = CalculateContestantRound1Points(var1, var2); ConvertIntToDecimalStringN(gSharedMem, var, STR_CONV_MODE_RIGHT_ALIGN, 3); Text_InitWindowAndPrintText(&gMenuWindow, gSharedMem, 0xE2, 3, 0xC); @@ -859,7 +859,7 @@ void sub_80AACC4(void) { SetDebugMonForContest(); if (!(gIsLinkContest & 1)) - InitContestMonConditions(eMatsudaDebugVar); + CalculateRound1Points(eMatsudaDebugVar); SetMainCallback2(CB2_StartContest); } } @@ -882,7 +882,7 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2) SetDebugMonForContest(); for (i = 0; i < 4; i++) - gContestMonConditions[i] = InitContestMonConditionI(i, gSpecialVar_ContestCategory); + gContestMonRound1Points[i] = CalculateContestantRound1Points(i, gSpecialVar_ContestCategory); SetMainCallback2(c2_exit_to_overworld_1_sub_8080DEC); } } @@ -950,16 +950,16 @@ void sub_80AAF30(void) for (i = 0; i < 3; i++) { - gContestMonConditions[i] = 0; - gUnknown_02038680[i] = 0; - gUnknown_02038678[i] = 0; + gContestMonRound1Points[i] = 0; + gContestMonAppealPointTotals[i] = 0; + gContestMonTotalPoints[i] = 0; gContestMons[i] = gContestMons[3]; } - gContestMonConditions[3] = 0x12C; - gUnknown_02038680[3] = 0x190; - gUnknown_02038678[3] = 0x190; - Contest_SaveWinner(0xFE); + gContestMonRound1Points[3] = 0x12C; + gContestMonAppealPointTotals[3] = 0x190; + gContestMonTotalPoints[3] = 0x190; + Contest_SaveWinner(CONTEST_SAVE_FOR_ARTIST); } u8 MatsudaDebugMenu_SetHighScore(void) @@ -976,9 +976,9 @@ u8 MatsudaDebugMenu_ResetHighScore(void) gUnknown_0203856C = 0; for (i = 0; i < 4; i++) { - gContestMonConditions[i] = 0; - gUnknown_02038680[i] = 0; - gUnknown_02038678[i] = 0; + gContestMonRound1Points[i] = 0; + gContestMonAppealPointTotals[i] = 0; + gContestMonTotalPoints[i] = 0; } CloseMenu(); return 1; diff --git a/src/debug/sound_check_menu.c b/src/debug/sound_check_menu.c index 5b7a26f97..6f6ee58dd 100644 --- a/src/debug/sound_check_menu.c +++ b/src/debug/sound_check_menu.c @@ -56,7 +56,7 @@ static EWRAM_DATA u8 gUnknown_020387D8 = 0; static EWRAM_DATA u8 gUnknown_020387D9 = 0; u16 gSoundTestCryNum; -extern u8 gUnknown_03005E98; +extern u8 gDexCryScreenState; struct MusicPlayerInfo *gUnknown_03005D30; @@ -1208,7 +1208,7 @@ SOUND_LIST_SE void Task_InitCryTest(u8 taskId) { - struct CryRelatedStruct cryStruct, cryStruct2; + struct CryScreenWindow cryStruct, cryStruct2; u8 zero; Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C); @@ -1217,26 +1217,26 @@ void Task_InitCryTest(u8 taskId) ResetSpriteData(); FreeAllSpritePalettes(); - cryStruct.unk0 = 0x2000; - cryStruct.unk2 = 29; + cryStruct.charBase = 0x2000; + cryStruct.screenBase = 29; cryStruct.paletteNo = 12; cryStruct.yPos = 30; cryStruct.xPos = 4; zero = 0; // wtf? - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; - while (sub_8119E3C(&cryStruct, 3) == FALSE) + while (LoadCryWaveformWindow(&cryStruct, 3) == FALSE) ; - cryStruct2.unk0 = 0; - cryStruct2.unk2 = 15; + cryStruct2.charBase = 0; + cryStruct2.screenBase = 15; cryStruct2.paletteNo = 13; cryStruct2.xPos = 12; cryStruct2.yPos = 12; zero = 0; // wtf? - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; while (ShowPokedexCryScreen(&cryStruct2, 2) == FALSE) ; @@ -1255,11 +1255,11 @@ void Task_InitCryTest(u8 taskId) void Task_ProcessCryTestInput(u8 taskId) { - sub_8119F88(3); + UpdateCryWaveformWindow(3); if (gMain.newKeys & A_BUTTON) { - sub_811A050(gSoundTestCryNum); + CryScreenPlayButton(gSoundTestCryNum); } if (gMain.newKeys & R_BUTTON) { diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c index 1501fdd49..acb7a97b1 100644 --- a/src/debug/start_menu_debug.c +++ b/src/debug/start_menu_debug.c @@ -1015,7 +1015,7 @@ u8 DebugMenu_NationalDex(void) GetSetPokedexFlag(i + 1, 2); GetSetPokedexFlag(i + 1, 3); } - gUnknown_03005CE8 = TRUE; + gUnusedPokedexU8 = TRUE; CloseMenu(); return TRUE; } @@ -1030,7 +1030,7 @@ u8 DebugMenu_HoennDex(void) GetSetPokedexFlag(nati, 2); GetSetPokedexFlag(nati, 3); } - gUnknown_03005CE8 = TRUE; + gUnusedPokedexU8 = TRUE; CloseMenu(); return TRUE; } @@ -2589,10 +2589,10 @@ void DebugMenu_8078E68(u8 a0, u8 * a1, u32 a2) } struct GameTimeDebugMenuStruct { - u16 unk0; - u16 unk2; - u8 unk4; - u8 unk5; + u16 totalPoints; + u16 excitementAppealBonus; + u8 round1Points; + u8 contestant; }; const struct GameTimeDebugMenuStruct gUnknown_Debug_839C5F4[] = { @@ -2604,7 +2604,7 @@ const struct GameTimeDebugMenuStruct gUnknown_Debug_839C5F4[] = { void DebugMenu_8078E80(s16 * a0) { Menu_BlankWindowRect(2, 15, 22, 16); - sub_8071F60(0xd0, gUnknown_Debug_839C5F4[*a0].unk4, 15); + sub_8071F60(0xd0, gUnknown_Debug_839C5F4[*a0].round1Points, 15); } void DebugMenu_8078EB0(s16 * a0) @@ -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->unk0, r2->unk2, gMain.newAndRepeatedKeys) == TRUE) + if (DebugMenu_8077DD8(data + r2->contestant, r2->totalPoints, r2->excitementAppealBonus, gMain.newAndRepeatedKeys) == TRUE) DebugMenu_8078EB0(data); } } diff --git a/src/debug/taya_debug_window.c b/src/debug/taya_debug_window.c index ca66ca01a..9a997a566 100644 --- a/src/debug/taya_debug_window.c +++ b/src/debug/taya_debug_window.c @@ -69,7 +69,7 @@ const u8 gUnknown_Debug_083C4EB0[] = _("Interview(BT)"); const struct { const u8 * text; - u32 unk4; + u32 round1Points; } gUnknown_Debug_083C4EC0[] = { {gUnknown_Debug_083C4E54, 0x0}, {gUnknown_Debug_083C4E5C, 0x1}, @@ -281,7 +281,7 @@ bool8 debug_sub_809089C(void) case -2: return FALSE; default: - gSpecialVar_0x8004 = gUnknown_Debug_083C4EC0[input].unk4; + gSpecialVar_0x8004 = gUnknown_Debug_083C4EC0[input].round1Points; switch (gSpecialVar_0x8004) { case 5: diff --git a/src/debug/tomomichi_debug_menu.c b/src/debug/tomomichi_debug_menu.c index 64da15dc7..94b697954 100644 --- a/src/debug/tomomichi_debug_menu.c +++ b/src/debug/tomomichi_debug_menu.c @@ -4470,47 +4470,47 @@ NAKED void PicTest_Redraw(u8 a0) static void PrepareDebugOverlayBeforeShowingContestPainting(u8 a0) { - struct ContestEntry *contestEntry = &ewram15DE0; + struct ContestWinner *contestEntry = &eCurContestWinner; contestEntry->species = sPicTest_Species; contestEntry->otId = sPicTest_OTID; contestEntry->personality = sPicTest_Personality; switch (a0) { case 0: - ewram15DDF = 0; - ewram15DDE = 0; - contestEntry->contestType = sPicTest_ContestType - 1; - StringCopy(contestEntry->trainer_name, sDummyTrainerName); - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 0; + contestEntry->contestCategory = sPicTest_ContestType - 1; + StringCopy(contestEntry->trainerName, sDummyTrainerName); + StringCopy(contestEntry->nickname, sDummyNickname); break; case 1: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = sPicTest_MuseumArtTitleType - 1; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = sPicTest_MuseumArtTitleType - 1; + StringCopy(contestEntry->nickname, sDummyNickname); break; case 2: - ewram15DDF = 1; - ewram15DDE = 8; - contestEntry->contestType = sPicTest_PreviewType - 1; + eCurContestWinnerIsForArtist = TRUE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = sPicTest_PreviewType - 1; break; case 3: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = 0; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = 0; + StringCopy(contestEntry->nickname, sDummyNickname); break; case 4: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = 3; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = 3; + StringCopy(contestEntry->nickname, sDummyNickname); break; case 5: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = 9; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = 9; + StringCopy(contestEntry->nickname, sDummyNickname); break; } } diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c index 205d4d5e3..fb6f3e7d2 100644 --- a/src/debug/watanabe_debug_menu.c +++ b/src/debug/watanabe_debug_menu.c @@ -33,9 +33,9 @@ #include "field_effect.h" struct WatanabeDebugMenuItemSubstruct { - u32 unk0; - u32 unk4; - u8 unk8; + u32 totalPoints; + u32 round1Points; + u8 random; u8 unk9; }; @@ -54,13 +54,13 @@ struct WatanabeEwram17000 { u8 unk1_0:4; u8 unk1_4:1; u8 unk1_5:3; - u8 unk2; + u8 excitementAppealBonus; u8 unk3; u8 fill4[5]; u8 unk9; u8 unkA; u8 unkB; - u8 unkC; + u8 contestant; }; struct WatanabeEwram18000 { @@ -74,14 +74,14 @@ struct WatanabeEwram18000 { }; struct WatanabeEwram18000_2 { - u16 unk0; - u8 unk2; + u16 totalPoints; + u8 excitementAppealBonus; u8 unk3; - u8 unk4; - u8 unk5; + u8 round1Points; + u8 contestant; u8 unk6; u8 unk7; - u8 unk8; + u8 random; u8 unk9; u8 unkA; struct PlttData unkC; @@ -446,7 +446,7 @@ void debug_80C3A50(u8 taskId) debug_80C3800(species, 18, 17); - spriteId = sub_8091A4C(saveBlock2->playerGender, 0x98, 0x28, 0); + spriteId = CreateSizeScreenTrainerPic(saveBlock2->playerGender, 0x98, 0x28, 0); gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 2; gSprites[spriteId].oam.priority = 0; @@ -458,7 +458,7 @@ void debug_80C3A50(u8 taskId) gTasks[taskId].data[4] = gPokedexEntries[natDexNum].trainerOffset; gTasks[taskId].data[6] = gPokedexEntries[natDexNum].trainerScale; - spriteId2 = sub_80918EC(natDexNum, 0x58, 0x28, 1); + spriteId2 = CreateMonSpriteFromNationalDexNumber(natDexNum, 0x58, 0x28, 1); gSprites[spriteId2].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId2].oam.matrixNum = 1; gSprites[spriteId2].oam.priority = 0; @@ -601,7 +601,7 @@ NAKED void debug_80C3A50(u8 taskId) "\tmov\tr1, #0x98\n" "\tmov\tr2, #0x28\n" "\tmov\tr3, #0x0\n" - "\tbl\tsub_8091A4C\n" + "\tbl\tCreateSizeScreenTrainerPic\n" "\tmov\tr2, sp\n" "\tstrh\tr0, [r2, #0x10]\n" "\tadd\tr3, r0, #0\n" @@ -668,7 +668,7 @@ NAKED void debug_80C3A50(u8 taskId) "\tmov\tr1, #0x58\n" "\tmov\tr2, #0x28\n" "\tmov\tr3, #0x1\n" - "\tbl\tsub_80918EC\n" + "\tbl\tCreateMonSpriteFromNationalDexNumber\n" "\tmov\tr3, sp\n" "\tstrh\tr0, [r3, #0x1c]\n" "\tlsl\tr0, r0, #0x10\n" @@ -1362,12 +1362,12 @@ void debug_80C4AC4(u8 taskId) PlaySE(SE_SELECT); gTrainerBattleOpponent = SECRET_BASE_OPPONENT; eWatanabe17000.unk1_4 = 0; - eWatanabe17000.unk2 = 0xAC; + eWatanabe17000.excitementAppealBonus = 0xAC; eWatanabe17000.unk3 = 0xFF; eWatanabe17000.unk9 = 0; eWatanabe17000.unkA = 0; eWatanabe17000.unkB = 0; - eWatanabe17000.unkC = 0; + eWatanabe17000.contestant = 0; gTasks[taskId].func = debug_80C4F48; } else if (gMain.newAndRepeatedKeys & DPAD_UP) @@ -2362,11 +2362,11 @@ const u32 gUnknown_Debug_083F8768[] = { void debug_80C6544(u8 a0) { u32 r7 = debug_80C5B60(gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]); - u32 r5 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->unk0; - u32 r4 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->unk4; + u32 r5 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->totalPoints; + u32 r4 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->round1Points; u32 r3 = gUnknown_Debug_083F8768[gUnknown_Debug_2038A1C->unk16a]; - if (gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->unk8 == 0) + if (gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->random == 0) { switch (a0) { @@ -2568,13 +2568,13 @@ void InitSeePokemonGraphics(void) REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; CreateTask(debug_80C6B00, 0); gUnknown_Debug_2038A20 = &eWatanabe18000_2; - gUnknown_Debug_2038A20->unk0 = 0x115; - gUnknown_Debug_2038A20->unk2 = 0; + 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->unk8 = 0; + gUnknown_Debug_2038A20->random = 0; spriteId = CreateSprite(&gSpriteTemplate_83F8874, 0x6C, 0x74, 0); gSprites[spriteId].data[0] = 0; StartSpriteAnim(gSprites + spriteId, 0); @@ -2670,33 +2670,33 @@ void debug_80C6B00(u8 taskId) void debug_80C6CB8(u8 taskId) { - DecompressPicFromTable_2(gMonFrontPicTable + gUnknown_Debug_2038A20->unk0, gMonFrontPicCoords[gUnknown_Debug_2038A20->unk0].coords, gMonFrontPicCoords[gUnknown_Debug_2038A20->unk0].y_offset, gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], gUnknown_Debug_2038A20->unk0); - LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->unk0); - GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->unk0, 1); - gUnknown_Debug_2038A20->unk2 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0); - gSprites[gUnknown_Debug_2038A20->unk2].callback = debug_69; - gSprites[gUnknown_Debug_2038A20->unk2].oam.priority = 0; - - DecompressPicFromTable_2(gMonBackPicTable + gUnknown_Debug_2038A20->unk0, gMonBackPicCoords[gUnknown_Debug_2038A20->unk0].coords, gMonBackPicCoords[gUnknown_Debug_2038A20->unk0].y_offset, gUnknown_081FAF4C[0], gUnknown_081FAF4C[2], gUnknown_Debug_2038A20->unk0); - LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->unk0); - GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->unk0, 2); - gUnknown_Debug_2038A20->unk3 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x78, 0); + DecompressPicFromTable_2(gMonFrontPicTable + gUnknown_Debug_2038A20->totalPoints, gMonFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gMonFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], gUnknown_Debug_2038A20->totalPoints); + LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->totalPoints); + GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->totalPoints, 1); + gUnknown_Debug_2038A20->excitementAppealBonus = CreateSprite(&gCreatingSpriteTemplate, 0x28, 0x28, 0); + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].callback = debug_69; + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.priority = 0; + + DecompressPicFromTable_2(gMonBackPicTable + gUnknown_Debug_2038A20->totalPoints, gMonBackPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gMonBackPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[2], gUnknown_Debug_2038A20->totalPoints); + LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->totalPoints); + GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->totalPoints, 2); + gUnknown_Debug_2038A20->unk3 = CreateSprite(&gCreatingSpriteTemplate, 0x28, 0x78, 0); gSprites[gUnknown_Debug_2038A20->unk3].callback = debug_69; gSprites[gUnknown_Debug_2038A20->unk3].oam.priority = 0; - gUnknown_Debug_2038A20->unk4 = CreateMonIcon(gUnknown_Debug_2038A20->unk0, sub_809D62C, 0x68, 0x2C, 0, 0); + gUnknown_Debug_2038A20->round1Points = CreateMonIcon(gUnknown_Debug_2038A20->totalPoints, sub_809D62C, 0x68, 0x2C, 0, 0); - sub_8091738(SpeciesToNationalPokedexNum(gUnknown_Debug_2038A20->unk0), 2, 0x3fc); + PrintFootprint(SpeciesToNationalPokedexNum(gUnknown_Debug_2038A20->totalPoints), 2, 0x3fc); ((u16 *)(VRAM + 0xF858))[0] = 0xF3FC; ((u16 *)(VRAM + 0xF858))[1] = 0xF3FD; ((u16 *)(VRAM + 0xF858))[32] = 0xF3FE; ((u16 *)(VRAM + 0xF858))[33] = 0xF3FF; - debug_80C3800(gUnknown_Debug_2038A20->unk0, 17, 3); - debug_80C376C(gUnknown_Debug_2038A20->unk0, 26, 5); + debug_80C3800(gUnknown_Debug_2038A20->totalPoints, 17, 3); + debug_80C376C(gUnknown_Debug_2038A20->totalPoints, 26, 5); - gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum; + gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum; CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 0x20); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 0x20); @@ -2704,7 +2704,7 @@ void debug_80C6CB8(u8 taskId) gUnknown_Debug_2038A20->unk9 = 0; StopCryAndClearCrySongs(); - PlayCry1(gUnknown_Debug_2038A20->unk0, 0); + PlayCry1(gUnknown_Debug_2038A20->totalPoints, 0); } void debug_80C6EE8(u8 taskId) @@ -2734,17 +2734,17 @@ void debug_80C6FA8(u8 taskId) } else if (gMain.newAndRepeatedKeys & R_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C3878(0, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C3878(0, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C71FC; } else if (gMain.newAndRepeatedKeys & L_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C3878(1, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C3878(1, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C71FC; } 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; @@ -2767,9 +2767,9 @@ void debug_80C6FA8(u8 taskId) { gUnknown_Debug_2038A20->unk9 ^= 1; if (gUnknown_Debug_2038A20->unk9) - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); else - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 32); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 32); gTasks[taskId].func = debug_80C6EE8; @@ -2779,11 +2779,11 @@ void debug_80C6FA8(u8 taskId) if (gMain.newKeys & SELECT_BUTTON) { StopCryAndClearCrySongs(); - PlayCry1(gUnknown_Debug_2038A20->unk0, 0); + PlayCry1(gUnknown_Debug_2038A20->totalPoints, 0); } - gUnknown_Debug_2038A20->unk8 += 4; - gUnknown_Debug_2038A20->unk8 &= 0x1f; - ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->unk8]; + gUnknown_Debug_2038A20->random += 4; + gUnknown_Debug_2038A20->random &= 0x1f; + ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->random]; } } #else @@ -3088,11 +3088,11 @@ NAKED void debug_80C6FA8(u8 taskId) void debug_80C71FC(u8 taskId) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum)); - DestroySprite(gSprites + gUnknown_Debug_2038A20->unk2); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum)); + DestroySprite(gSprites + gUnknown_Debug_2038A20->excitementAppealBonus); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk3].oam.paletteNum)); DestroySprite(gSprites + gUnknown_Debug_2038A20->unk3); - sub_809D510(gSprites + gUnknown_Debug_2038A20->unk4); + sub_809D510(gSprites + gUnknown_Debug_2038A20->round1Points); gTasks[taskId].func = debug_80C6CB8; } @@ -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 { @@ -3237,13 +3237,13 @@ void InitSeeTrainers(void) REG_DISPCNT = 0x3340; CreateTask(debug_80C777C, 0); gUnknown_Debug_2038A20 = &eWatanabe18000_2; - gUnknown_Debug_2038A20->unk0 = 0; - gUnknown_Debug_2038A20->unk2 = 0; + 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->unk8 = 0; + gUnknown_Debug_2038A20->random = 0; spriteId = CreateSprite(&gSpriteTemplate_83F8874, 0x6c, 0x74, 0); gSprites[spriteId].data[0] = 0; StartSpriteAnim(gSprites + spriteId, 0); @@ -3297,16 +3297,16 @@ void debug_80C777C(u8 taskId) void debug_80C7934(u8 taskId) { - DecompressPicFromTable_2(gTrainerFrontPicTable + gUnknown_Debug_2038A20->unk0, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->unk0].coords, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->unk0].y_offset, gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], gUnknown_Debug_2038A20->unk0); - LoadCompressedObjectPalette(gTrainerFrontPicPaletteTable + gUnknown_Debug_2038A20->unk0); - GetMonSpriteTemplate_803C5A0(gUnknown_Debug_2038A20->unk0, 1); - gUnknown_Debug_2038A20->unk2 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0); - gSprites[gUnknown_Debug_2038A20->unk2].callback = debug_69; - gSprites[gUnknown_Debug_2038A20->unk2].oam.priority = 0; + DecompressPicFromTable_2(gTrainerFrontPicTable + gUnknown_Debug_2038A20->totalPoints, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], gUnknown_Debug_2038A20->totalPoints); + LoadCompressedObjectPalette(gTrainerFrontPicPaletteTable + gUnknown_Debug_2038A20->totalPoints); + GetMonSpriteTemplate_803C5A0(gUnknown_Debug_2038A20->totalPoints, 1); + gUnknown_Debug_2038A20->excitementAppealBonus = CreateSprite(&gCreatingSpriteTemplate, 0x28, 0x28, 0); + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].callback = debug_69; + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.priority = 0; - debug_80C376C(gUnknown_Debug_2038A20->unk0, 26, 5); + debug_80C376C(gUnknown_Debug_2038A20->totalPoints, 26, 5); - gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum; + gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum; CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 0x20); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 0x20); @@ -3342,17 +3342,17 @@ void debug_80C7B14(u8 taskId) } else if (gMain.newAndRepeatedKeys & R_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C38B4(0, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C38B4(0, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C7D44; } else if (gMain.newAndRepeatedKeys & L_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C38B4(1, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C38B4(1, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C7D44; } 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; @@ -3376,11 +3376,11 @@ void debug_80C7B14(u8 taskId) gUnknown_Debug_2038A20->unk9 ^= 1; if (gUnknown_Debug_2038A20->unk9) { - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); } else { - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); } CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 32); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 32); @@ -3388,9 +3388,9 @@ void debug_80C7B14(u8 taskId) } else { - gUnknown_Debug_2038A20->unk8 += 4; - gUnknown_Debug_2038A20->unk8 &= 0x1f; - ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->unk8]; + gUnknown_Debug_2038A20->random += 4; + gUnknown_Debug_2038A20->random &= 0x1f; + ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->random]; } } #else @@ -3679,11 +3679,11 @@ NAKED void debug_80C7B14(u8 taskId) void debug_80C7D44(u8 taskId) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum)); - DestroySprite(gSprites + gUnknown_Debug_2038A20->unk2); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum)); + DestroySprite(gSprites + gUnknown_Debug_2038A20->excitementAppealBonus); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk3].oam.paletteNum)); DestroySprite(gSprites + gUnknown_Debug_2038A20->unk3); - sub_809D510(gSprites + gUnknown_Debug_2038A20->unk4); + sub_809D510(gSprites + gUnknown_Debug_2038A20->round1Points); gTasks[taskId].func = debug_80C7934; } @@ -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/decompress.c b/src/decompress.c index c0158ada8..7069facf7 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -67,20 +67,22 @@ void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, u8 coords LZ77UnCompWram(src->data, dest); } -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 coords, u32 y_offset, u32 d, void *dest, s32 species, u32 pid) +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 coords, u32 y_offset, + void *decompBuf, void *dest, s32 species, u32 pid) { u32 frontOrBack; - // gUnknown_081FAF4C appears to be a list of pointers to locations to store poke pics for back and front pic here. the first and third pointers are used for back while the others are used for front. - if (dest == gUnknown_081FAF4C[0] || dest == gUnknown_081FAF4C[2]) + // gMonSpriteGfx_Sprite_ptr appears to be a list of pointers to locations to store poke pics for back and front pic here. the first and third pointers are used for back while the others are used for front. + if (dest == gMonSpriteGfx_Sprite_ptr[0] || dest == gMonSpriteGfx_Sprite_ptr[2]) frontOrBack = 0; // backPic else frontOrBack = 1; // frontPic - LoadSpecialPokePic(src, coords, y_offset, d, dest, species, pid, frontOrBack); + LoadSpecialPokePic(src, coords, y_offset, decompBuf, dest, species, pid, frontOrBack); } -void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 pid, u32 frontOrBack) +void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, + void *decompBuffer, void *dest, s32 species, u32 pid, u32 frontOrBack) { u8 frontOrBack8 = frontOrBack; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index fdc12129e..f0c8f232a 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -24,7 +24,7 @@ #include "trig.h" #include "trade.h" -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; struct EggHatchData { @@ -356,13 +356,13 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) { u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, ewram0_6, gUnknown_081FAF4C[2 * a0 + 1], species, pid); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gSharedMem, gMonSpriteGfx_Sprite_ptr[2 * a0 + 1], species, pid); LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); } break; case 1: GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(mon)->tag, r5); - spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6); + spriteID = CreateSprite(&gCreatingSpriteTemplate, 120, 70, 6); gSprites[spriteID].invisible = TRUE; gSprites[spriteID].callback = SpriteCallbackDummy; break; @@ -716,9 +716,6 @@ static void SpriteCB_EggShard(struct Sprite* sprite) DestroySprite(sprite); } -// Converts a number to Q8.8 fixed-point format -#define Q_8_8(n) ((s16)((n) * 256)) - static const s16 sEggShardVelocities[][2] = { {Q_8_8(-1.5), Q_8_8(-3.75)}, @@ -764,7 +761,8 @@ static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 static void EggHatchPrintMessage1(u8* src) { - Text_InitWindow8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); + Contest_StartTextPrinter( + &gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); } static void EggHatchPrintMessage2(u8* src) diff --git a/src/event_data.c b/src/event_data.c index e114af901..b71ad77bd 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -62,9 +62,9 @@ void EnableNationalPokedex(void) gSaveBlock2.pokedex.nationalMagic = 0xDA; *nationalDexVar = 0x302; FlagSet(FLAG_SYS_NATIONAL_DEX); - gSaveBlock2.pokedex.unknown1 = 1; + gSaveBlock2.pokedex.mode = 1; gSaveBlock2.pokedex.order = 0; - sub_808C0A0(); + ResetPokedexScrollPositions(); } bool32 IsNationalPokedexEnabled(void) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 47a453693..f97004422 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -64,11 +64,11 @@ void sub_8023AD8(void); void nullsub_6(void); bool32 IsHMMove2(u16 move); -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; extern u16 gMoveToLearn; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern bool8 gAffineAnimsDisabled; extern u8 gDisplayedStringBattle[]; extern u8 gBattleTextBuff2[]; @@ -204,7 +204,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gBattle_BG3_X = 256; gBattle_BG3_Y = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); @@ -228,13 +228,13 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gMonFrontPicCoords[currSpecies].coords, gMonFrontPicCoords[currSpecies].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[1], currSpecies); + gMonSpriteGfx_Sprite_ptr[1], currSpecies); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(currSpecies, TiD, PiD); LoadCompressedPalette(*pokePal, 0x110, 0x20); GetMonSpriteTemplate_803C56C(currSpecies, 1); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 1; @@ -245,13 +245,13 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gMonFrontPicCoords[speciesToEvolve].coords, gMonFrontPicCoords[speciesToEvolve].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[3], speciesToEvolve); + gMonSpriteGfx_Sprite_ptr[3], speciesToEvolve); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); GetMonSpriteTemplate_803C56C(speciesToEvolve, 3); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; gSprites[ID].invisible = TRUE; @@ -312,7 +312,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) gBattle_BG3_X = 256; gBattle_BG3_Y = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); @@ -325,13 +325,13 @@ static void CB2_EvolutionSceneLoadGraphics(void) gMonFrontPicCoords[postEvoSpecies].coords, gMonFrontPicCoords[postEvoSpecies].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[3], postEvoSpecies); + gMonSpriteGfx_Sprite_ptr[3], postEvoSpecies); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -395,7 +395,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) gMonFrontPicCoords[postEvoSpecies].coords, gMonFrontPicCoords[postEvoSpecies].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[3], postEvoSpecies); + gMonSpriteGfx_Sprite_ptr[3], postEvoSpecies); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); gMain.state++; @@ -406,8 +406,8 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) u8 ID; GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -445,13 +445,13 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri gMonFrontPicCoords[speciesToEvolve].coords, gMonFrontPicCoords[speciesToEvolve].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[1], speciesToEvolve); + gMonSpriteGfx_Sprite_ptr[1], speciesToEvolve); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); GetMonSpriteTemplate_803C56C(speciesToEvolve, 1); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -476,7 +476,7 @@ static void CB2_EvolutionSceneUpdate(void) { AnimateSprites(); BuildOamBuffer(); - Text_UpdateWindowInBattle(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gWindowTemplate_Contest_MoveDescription); UpdatePaletteFade(); RunTasks(); } @@ -549,12 +549,13 @@ static void Task_EvolutionScene(u8 taskID) if (!gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, BattleText_StartEvo); - Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gStringVar4, 144, 2, 15); gTasks[taskID].tState++; } break; case 2: // wait for string, play cry - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) { PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); gTasks[taskID].tState++; @@ -637,7 +638,8 @@ static void Task_EvolutionScene(u8 taskID) if (IsCryFinished() && !gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo); - Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gStringVar4, 144, 2, 15); PlayBGM(MUS_EVOLVED); gTasks[taskID].tState++; SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); @@ -649,7 +651,7 @@ static void Task_EvolutionScene(u8 taskID) } break; case 14: // check if it wants to learn a new move - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) { var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove); if (var != 0 && !gTasks[taskID].tEvoWasStopped) @@ -706,59 +708,64 @@ static void Task_EvolutionScene(u8 taskID) if (IsCryFinished()) { StringExpandPlaceholders(gStringVar4, BattleText_StopEvo); - Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gStringVar4, 144, 2, 15); gTasks[taskID].tEvoWasStopped = TRUE; gTasks[taskID].tState = 14; } break; case 19: // pokemon learned a new move, print string and play a fanfare - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { sub_8024CEC(); PlayFanfare(MUS_LEVEL_UP); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[3]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } break; case 20: // wait a bit and check if can learn another move - if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0) gTasks[taskID].tState = 14; break; case 21: // try to learn a new move switch (gTasks[taskID].tLearnMoveState) { case 0: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { sub_8024CEC(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[4]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; } break; case 1: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[5]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; } break; case 2: - if (gUnknown_03004210.state != 0) + if (gWindowTemplate_Contest_MoveDescription.state != 0) break; if (!IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[6]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 5; gTasks[taskID].tdata10 = 9; gTasks[taskID].tLearnMoveState++; } case 3: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { sub_8023A80(); gTasks[taskID].tLearnMoveState++; @@ -785,7 +792,8 @@ static void Task_EvolutionScene(u8 taskID) { sub_8023AD8(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; @@ -800,7 +808,8 @@ static void Task_EvolutionScene(u8 taskID) { sub_8023AD8(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; } @@ -826,7 +835,11 @@ static void Task_EvolutionScene(u8 taskID) if (IsHMMove2(move)) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[307]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter(&gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 144, + 2, + 15); gTasks[taskID].tLearnMoveState = 11; } else @@ -839,42 +852,50 @@ static void Task_EvolutionScene(u8 taskID) RemoveMonPPBonus(mon, var); SetMonMoveSlot(mon, gMoveToLearn, var); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[207]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter(&gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 144, + 2, + 15); gTasks[taskID].tLearnMoveState++; } } } break; case 7: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[7]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; } break; case 8: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[208]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tState = 19; } break; case 9: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[8]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 10; gTasks[taskID].tdata10 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[9]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tState = 14; break; case 11: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) gTasks[taskID].tLearnMoveState = 5; break; } @@ -891,7 +912,11 @@ static void Task_TradeEvolutionScene(u8 taskID) { case 0: StringExpandPlaceholders(gStringVar4, BattleText_StartEvo); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gStringVar4, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState++; break; case 1: @@ -979,7 +1004,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsCryFinished() && !gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gStringVar4, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); PlayFanfare(MUS_EVOLVED); gTasks[taskID].tState++; SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); @@ -1013,7 +1042,11 @@ static void Task_TradeEvolutionScene(u8 taskID) else { PlayBGM(MUS_EVOLUTION); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gOtherText_LinkStandby2, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gOtherText_LinkStandby2, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState++; } } @@ -1031,7 +1064,11 @@ static void Task_TradeEvolutionScene(u8 taskID) sub_8024CEC(); PlayFanfare(MUS_LEVEL_UP); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[3]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } @@ -1048,7 +1085,11 @@ static void Task_TradeEvolutionScene(u8 taskID) { sub_8024CEC(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[4]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } break; @@ -1056,7 +1097,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->window.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[5]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } break; @@ -1066,7 +1111,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[6]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tData9 = 5; gTasks[taskID].tdata10 = 9; gTasks[taskID].tLearnMoveState++; @@ -1104,7 +1153,11 @@ static void Task_TradeEvolutionScene(u8 taskID) Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD); DestroyMenuCursor(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; @@ -1120,7 +1173,11 @@ static void Task_TradeEvolutionScene(u8 taskID) Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD); DestroyMenuCursor(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); PlaySE(SE_SELECT); gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; } @@ -1146,7 +1203,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsHMMove2(move)) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[307]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState = 11; } else @@ -1159,7 +1220,11 @@ static void Task_TradeEvolutionScene(u8 taskID) RemoveMonPPBonus(mon, var); SetMonMoveSlot(mon, gMoveToLearn, var); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[207]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } } @@ -1169,7 +1234,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->window.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[7]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } break; @@ -1177,20 +1246,32 @@ static void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->window.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[208]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState = 15; } break; case 9: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[8]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tData9 = 10; gTasks[taskID].tdata10 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[9]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState = 13; break; case 11: @@ -1229,7 +1310,7 @@ void unref_sub_8113B50(u8 *a, u8 *b) for (sp8 = 0; sp8 < 64; sp8++) { sEvoInfo.unk84[sp8] = 0; - sEvoInfo.unk4[sp8] = 0; + sEvoInfo.round1Points[sp8] = 0; sEvoInfo.unk44[sp8] = 0; for (r6 = 0; r6 < 32; r6++) { @@ -1268,14 +1349,14 @@ void unref_sub_8113B50(u8 *a, u8 *b) case 0: if (*r2 & 0xF) { - sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6; + sEvoInfo.unk10C4[sp8][sEvoInfo.round1Points[sp8]] = r6; r3 = 1; } break; case 1: if (*r2 & 0xF0) { - sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6; + sEvoInfo.unk10C4[sp8][sEvoInfo.round1Points[sp8]] = r6; r3 = 1; } break; @@ -1287,16 +1368,16 @@ void unref_sub_8113B50(u8 *a, u8 *b) case 0: if (*r2 & 0xF) { - sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1; - sEvoInfo.unk4[sp8]++; + sEvoInfo.unk18C4[sp8][sEvoInfo.round1Points[sp8]] = r6 - 1; + sEvoInfo.round1Points[sp8]++; r3 = 0; } break; case 1: if (*r2 & 0xF0) { - sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1; - sEvoInfo.unk4[sp8]++; + sEvoInfo.unk18C4[sp8][sEvoInfo.round1Points[sp8]] = r6 - 1; + sEvoInfo.round1Points[sp8]++; r3 = 0; } break; @@ -1310,8 +1391,8 @@ void unref_sub_8113B50(u8 *a, u8 *b) } if (r3) { - sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6; - sEvoInfo.unk4[sp8]++; + sEvoInfo.unk18C4[sp8][sEvoInfo.round1Points[sp8]] = r6; + sEvoInfo.round1Points[sp8]++; } //_08113D26 if (!((sp8 + 1) & 7)) @@ -1392,9 +1473,9 @@ void unref_sub_8113B50(u8 *a, u8 *b) for (sp8 = 0; sp8 < 0x40; sp8++) //_08113E3A { - if (sEvoInfo.unk4[sp8] < sEvoInfo.unk44[sp8]) + if (sEvoInfo.round1Points[sp8] < sEvoInfo.unk44[sp8]) { - for (spC = 0; spC < sEvoInfo.unk4[sp8]; spC++) + for (spC = 0; spC < sEvoInfo.round1Points[sp8]; spC++) { sp14 = 0x100; @@ -1431,19 +1512,19 @@ void unref_sub_8113B50(u8 *a, u8 *b) } } //_08113F9E - if (sEvoInfo.unk4[sp8] == sEvoInfo.unk44[sp8]) + if (sEvoInfo.round1Points[sp8] == sEvoInfo.unk44[sp8]) { - for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + for (r6 = 0; r6 < sEvoInfo.round1Points[sp8]; r6++) sub_81141F0(r6, r6, sp8); } //_08113FCC - if (sEvoInfo.unk4[sp8] > sEvoInfo.unk44[sp8]) + if (sEvoInfo.round1Points[sp8] > sEvoInfo.unk44[sp8]) { for (sp10 = 0; sp10 < sEvoInfo.unk44[sp8]; sp10++) { sp14 = 0x100; - for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + for (r6 = 0; r6 < sEvoInfo.round1Points[sp8]; r6++) { s32 r3; @@ -1472,7 +1553,7 @@ void unref_sub_8113B50(u8 *a, u8 *b) sEvoInfo.unkC4[sp8][spC] = 1; } //_08114104 - for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + for (r6 = 0; r6 < sEvoInfo.round1Points[sp8]; r6++) { sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk30C4[sp8][r6]; sEvoInfo.unk28C4[sp8][r6] = sEvoInfo.unk38C4[sp8][r6]; diff --git a/src/field_effect.c b/src/field_effect.c index 280eb20bc..80f3d25d1 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -543,25 +543,25 @@ u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority) u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) { - DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species); + DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gMonSpriteGfx_Sprite_ptr[3], gMonSpriteGfx_Sprite_ptr[3], species); LoadCompressedObjectPalette(&gMonPaletteTable[species]); GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag; + gCreatingSpriteTemplate.paletteTag = gMonPaletteTable[0].tag; PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); + return CreateSprite(&gCreatingSpriteTemplate, x, y, subpriority); } u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) { const struct CompressedSpritePalette *spritePalette; - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gMonSpriteGfx_Sprite_ptr[3] /* this is actually u8* or something, pointing to ewram */, gMonSpriteGfx_Sprite_ptr[3], species, g); spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); LoadCompressedObjectPalette(spritePalette); GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = spritePalette->tag; + gCreatingSpriteTemplate.paletteTag = spritePalette->tag; PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); + return CreateSprite(&gCreatingSpriteTemplate, x, y, subpriority); } void FreeResourcesAndDestroySprite(struct Sprite *sprite) diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index fea93f215..5ca114f49 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -490,7 +490,7 @@ void sub_8081050(u8 taskId) case 1: if (!PaletteFadeActive() && BGMusicStopped()) { - sub_800832C(); + SetCloseLinkCallback(); data[0]++; } break; diff --git a/src/field_message_box.c b/src/field_message_box.c index 44fd4ac49..7df3373ce 100644 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -117,13 +117,13 @@ bool8 unref_sub_8064BD0(const u8 *message) static void PrintFieldMessage(const u8 *message) { StringExpandPlaceholders(gStringVar4, message); - Text_InitWindow8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); + Contest_StartTextPrinter(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); CreateFieldMessageBoxTask(); } static void PrintFieldMessageFromStringVar4(void) { - Text_InitWindow8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); + Contest_StartTextPrinter(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); CreateFieldMessageBoxTask(); } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 2dd3266a3..ca0022b39 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -23,13 +23,13 @@ #include "pc_screen_effect.h" #include "ewram.h" -static EWRAM_DATA u32 sUnknown_0203931C = 0; +static EWRAM_DATA u32 sHofFadePalettes = 0; -extern bool8 gUnknown_02039324; // has hall of fame records +extern bool8 gHasHallOfFameRecords; // has hall of fame records extern void (*gGameContinueCallback)(void); extern struct MusicPlayerInfo gMPlayInfo_BGM; extern u8 gReservedSpritePaletteCount; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern const u8 gContestConfetti_Gfx[]; extern const u8 gContestConfetti_Pal[]; @@ -54,7 +54,7 @@ struct HallofFameMons static void sub_8141FF8(u8 taskID); static void sub_81422E8(u8 taskID); -static void sub_814217C(u8 taskID); +static void Task_Hof_InitTeamSaveData(u8 taskID); static void sub_8142274(u8 taskID); static void sub_81422B8(u8 taskID); static void sub_8142320(u8 taskID); @@ -150,69 +150,69 @@ static const struct OamData sOamData_840B598 = void* const gUnknown_0840B5A0[] = { - ewram8000, - ewramA000, - ewramC000, - ewramE000, - ewram10000, - ewram14000, - ewram18000_2 + eHofGfxPtr + 0x0000, + eHofGfxPtr + 0x2000, + eHofGfxPtr + 0x4000, + eHofGfxPtr + 0x6000, + eHofGfxPtr + 0x8000, + eHofGfxPtr + 0xC000, + eHofGfxPtr + 0x10000 }; static const struct SpriteFrameImage sSpriteImageTable_840B5BC[] = { - {ewram8000, 0x800}, - {ewram8800, 0x800}, - {ewram9000, 0x800}, - {ewram9800, 0x800} + {eHofGfxPtr + 0x0000, 0x800}, + {eHofGfxPtr + 0x800, 0x800}, + {eHofGfxPtr + 0x1000, 0x800}, + {eHofGfxPtr + 0x1800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B5DC[] = { - {ewramA000, 0x800}, - {ewramA800, 0x800}, - {ewramB000, 0x800}, - {ewramB800, 0x800} + {eHofGfxPtr + 0x2000, 0x800}, + {eHofGfxPtr + 0x2800, 0x800}, + {eHofGfxPtr + 0x3000, 0x800}, + {eHofGfxPtr + 0x3800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B5FC[] = { - {ewramC000, 0x800}, - {ewramC800, 0x800}, - {ewramD000, 0x800}, - {ewramD800, 0x800} + {eHofGfxPtr + 0x4000, 0x800}, + {eHofGfxPtr + 0x4800, 0x800}, + {eHofGfxPtr + 0x5000, 0x800}, + {eHofGfxPtr + 0x5800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B61C[] = { - {ewramE000, 0x800}, - {ewramE800, 0x800}, - {ewramF000, 0x800}, - {ewramF800, 0x800} + {eHofGfxPtr + 0x6000, 0x800}, + {eHofGfxPtr + 0x6800, 0x800}, + {eHofGfxPtr + 0x7000, 0x800}, + {eHofGfxPtr + 0x7800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B63C[] = { - {ewram10000, 0x800}, - {ewram10800, 0x800}, - {ewram11000, 0x800}, - {ewram11800, 0x800} + {eHofGfxPtr + 0x8000, 0x800}, + {eHofGfxPtr + 0x8800, 0x800}, + {eHofGfxPtr + 0x9000, 0x800}, + {eHofGfxPtr + 0x9800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B65C[] = { - {ewram14000, 0x800}, - {ewram14800, 0x800}, - {ewram15000, 0x800}, - {ewram15800, 0x800} + {eHofGfxPtr + 0xC000, 0x800}, + {eHofGfxPtr + 0xC800, 0x800}, + {eHofGfxPtr + 0xD000, 0x800}, + {eHofGfxPtr + 0xD800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B67C[] = { - {ewram18000_2, 0x800}, - {ewram18800, 0x800}, - {ewram19000, 0x800}, - {ewram19800, 0x800} + {eHofGfxPtr + 0x10000, 0x800}, + {eHofGfxPtr + 0x10800, 0x800}, + {eHofGfxPtr + 0x11000, 0x800}, + {eHofGfxPtr + 0x11800, 0x800} }; static const struct SpriteFrameImage* const sUnknown_0840B69C[7] = @@ -480,7 +480,7 @@ static void sub_8141FC4(void) static void sub_8141FF8(u8 taskID) { u16 i, j; - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; gTasks[taskID].tPokesNumber = 0; // valid pokes for (i = 0; i < 6; i++) @@ -508,7 +508,7 @@ static void sub_8141FF8(u8 taskID) fameMons->mons[i].nick[0] = EOS; } } - sUnknown_0203931C = 0; + sHofFadePalettes = 0; gTasks[taskID].tDisplayedPoke = 0; gTasks[taskID].data[4] = 0xFF; for (i = 0; i < 6; i++) @@ -518,19 +518,19 @@ static void sub_8141FF8(u8 taskID) if (gTasks[taskID].data[0]) gTasks[taskID].func = sub_81422E8; else - gTasks[taskID].func = sub_814217C; + gTasks[taskID].func = Task_Hof_InitTeamSaveData; } -static void sub_814217C(u8 taskID) +static void Task_Hof_InitTeamSaveData(u8 taskID) { u16 i; - struct HallofFameMons* fameMons = eHallOfFameMons1; - struct HallofFameMons* lastSavedTeam = eHallOfFameMons2; + struct HallofFameMons* fameMons = eHofMonPtr; + struct HallofFameMons* lastSavedTeam = (struct HallofFameMons *)gDecompressionBuffer; - if (gUnknown_02039324 == FALSE) + if (gHasHallOfFameRecords == FALSE) { for (i = 0; i < 0x2000; i++) - ewram1E000(i) = 0; + gSharedMem[0x1E000 + i] = 0; // gDecompressionBuffer[i] = 0; } else Save_LoadGameData(SAVE_HALL_OF_FAME); @@ -542,12 +542,12 @@ static void sub_814217C(u8 taskID) } if (i >= HALL_OF_FAME_MAX_TEAMS) { - struct HallofFameMons* r5 = eHallOfFameMons2; - struct HallofFameMons* r6 = eHallOfFameMons2; - r5++; - for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++) + struct HallofFameMons *afterTeam = (struct HallofFameMons *)gDecompressionBuffer; + struct HallofFameMons *beforeTeam = (struct HallofFameMons *)gDecompressionBuffer; + afterTeam++; + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, beforeTeam++, afterTeam++) { - *r6 = *r5; + *beforeTeam = *afterTeam; } lastSavedTeam--; } @@ -586,7 +586,7 @@ static void sub_8142320(u8 taskID) u8 spriteID; s16 xPos, yPos, field4, field6; - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -617,7 +617,7 @@ static void sub_8142320(u8 taskID) static void sub_8142404(u8 taskID) { - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -633,7 +633,7 @@ static void sub_8142404(u8 taskID) static void sub_8142484(u8 taskID) { - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -641,11 +641,11 @@ static void sub_8142484(u8 taskID) gTasks[taskID].tFrameCount--; else { - sUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); + sHofFadePalettes |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); if (gTasks[taskID].tDisplayedPoke <= 4 && currMon[1].species != 0) // there is another pokemon to display { gTasks[taskID].tDisplayedPoke++; - BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, RGB(31, 26, 28)); + BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(31, 26, 28)); gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.priority = 1; gTasks[taskID].func = sub_8142320; } @@ -687,7 +687,7 @@ static void sub_8142618(u8 taskID) if (gTasks[taskID].tMonSpriteID(i) != 0xFF) gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1; } - BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, RGB(31, 26, 28)); + BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(31, 26, 28)); Menu_EraseWindowRect(0, 14, 29, 19); gTasks[taskID].tFrameCount = 7; gTasks[taskID].func = sub_81426F8; @@ -836,7 +836,7 @@ static void sub_8142A28(u8 taskID) u16 *vram1, *vram2; u16 i; - struct HallofFameMons* savedTeams = eHallOfFameMons2; + struct HallofFameMons* savedTeams = (struct HallofFameMons *)gDecompressionBuffer; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) { if (savedTeams->mons[0].species == 0) @@ -861,7 +861,7 @@ static void sub_8142A28(u8 taskID) static void sub_8142B04(u8 taskID) { - struct HallofFameMons* savedTeams = eHallOfFameMons2; + struct HallofFameMons* savedTeams = (struct HallofFameMons *)gDecompressionBuffer; struct HallofFameMon* currMon; u16 i; u8* stringPtr; @@ -870,7 +870,7 @@ static void sub_8142B04(u8 taskID) savedTeams++; currMon = &savedTeams->mons[0]; - sUnknown_0203931C = 0; + sHofFadePalettes = 0; gTasks[taskID].tCurrPokeID = 0; gTasks[taskID].tPokesNo = 0; @@ -926,7 +926,7 @@ static void sub_8142B04(u8 taskID) static void sub_8142CC8(u8 taskID) { - struct HallofFameMons* savedTeams = eHallOfFameMons2; + struct HallofFameMons* savedTeams = (struct HallofFameMons *)gDecompressionBuffer; struct HallofFameMon* currMon; u16 i; u16 currMonID; @@ -943,8 +943,8 @@ static void sub_8142CC8(u8 taskID) currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID); gSprites[currMonID].oam.priority = 0; - sUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; - BlendPalettesUnfaded(sUnknown_0203931C, 12, RGB(31, 26, 28)); + sHofFadePalettes = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; + BlendPalettesUnfaded(sHofFadePalettes, 12, RGB(31, 26, 28)); currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID]; if (currMon->species != SPECIES_EGG) @@ -1224,7 +1224,7 @@ static void sub_81433E0(void) *((u16*)(VRAM + 0x3000) + i) = 2; } - DmaFill16Large(3, 0, ewram0_6, 0x4000, 0x1000); + DmaFill16Large(3, 0, gSharedMem, 0x4000, 0x1000); ResetPaletteFade(); LoadPalette(gHallOfFame_Pal, 0, 0x20); } @@ -1279,18 +1279,18 @@ static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite) void sub_8143648(u16 paletteTag, u8 animID) { - gUnknown_02024E8C = sUnknown_0840B6B8; - gUnknown_02024E8C.paletteTag = paletteTag; - gUnknown_02024E8C.images = sUnknown_0840B69C[animID]; - gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; + gCreatingSpriteTemplate = sUnknown_0840B6B8; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sUnknown_0840B69C[animID]; + gCreatingSpriteTemplate.anims = gSpriteAnimTable_81E7C64; } void sub_8143680(u16 paletteTag, u8 animID) { - gUnknown_02024E8C = sUnknown_0840B6B8; - gUnknown_02024E8C.paletteTag = paletteTag; - gUnknown_02024E8C.images = sUnknown_0840B69C[animID]; - gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; + gCreatingSpriteTemplate = sUnknown_0840B6B8; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sUnknown_0840B69C[animID]; + gCreatingSpriteTemplate.anims = gUnknown_081EC2A4[0]; } static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid) @@ -1298,13 +1298,13 @@ static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID u8 spriteID; const u8* pokePal; - LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, EWRAM, gUnknown_0840B5A0[pokeID], species, pid, 1); + LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)EWRAM, gUnknown_0840B5A0[pokeID], species, pid, 1); pokePal = GetMonSpritePalFromOtIdPersonality(species, tid, pid); LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20); sub_8143648(pokeID, pokeID); - spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 10 - pokeID); + spriteID = CreateSprite(&gCreatingSpriteTemplate, posX, posY, 10 - pokeID); gSprites[spriteID].oam.paletteNum = pokeID; return spriteID; } @@ -1318,7 +1318,7 @@ static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a LoadCompressedPalette(gTrainerFrontPicPaletteTable[trainerPicID].data, 16 * a3 + 256, 0x20); sub_8143680(a3, a3); - spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 1); + spriteID = CreateSprite(&gCreatingSpriteTemplate, posX, posY, 1); gSprites[spriteID].oam.paletteNum = a3; return spriteID; diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c new file mode 100644 index 000000000..fe5fc5dd9 --- /dev/null +++ b/src/image_processing_effects.c @@ -0,0 +1,1204 @@ +#include "global.h" +#include "image_processing_effects.h" +#include "contest_painting.h" + +#define GET_R(color) ((color) & 0x1F) +#define GET_G(color) (((color) >> 5) & 0x1F) +#define GET_B(color) (((color) >> 10) & 0x1F) + +#define RGB_ALPHA (1 << 15) +#define IS_ALPHA(color) ((color) & RGB_ALPHA) + +#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) + +u16 *gCanvasPixels; +u8 gCanvasColumnStart; +u8 gCanvasRowEnd; +u8 gCanvasRowStart; +u8 gCanvasColumnEnd; +u8 gCanvasHeight; +u8 gCanvasMonPersonality; +u8 gCanvasWidth; +u16 * gCanvasPalette; +u16 gCanvasPaletteStart; + +// this file's functions +void ApplyImageEffect_Pointillism(void); +void ApplyImageEffect_Blur(void); +void ApplyImageEffect_BlackOutline(void); +void ApplyImageEffect_Invert(void); +void ApplyImageEffect_BlackAndWhite(void); +void ApplyImageEffect_BlurRight(void); +void ApplyImageEffect_BlurDown(void); +void ApplyImageEffect_Shimmer(void); +void ApplyImageEffect_Grayscale(void); +void ApplyImageEffect_PersonalityColor(u8 personality); +void ApplyImageEffect_RedChannelGrayscale(u8); +void ApplyImageEffect_RedChannelGrayscaleHighlight(u8); +void AddPointillismPoints(u16); +u16 ConvertColorToGrayscale(u16*); +u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel); +u16 ConvertCoolColor(u16*, u8); +u16 QuantizePixel_BlackAndWhite(u16*); +u16 QuantizePixel_BlackOutline(u16 *colorA, u16 *colorB); +u16 QuantizePixel_Invert(u16*); +u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel); +u16 QuantizePixel_MotionBlur(u16*, u16*); +u16 GetCoolColorFromPersonality(u8); +void QuantizePalette_Standard(bool8); +void SetPresetPalette_PrimaryColors(void); +void QuantizePalette_PrimaryColors(void); +void SetPresetPalette_Grayscale(void); +void QuantizePalette_Grayscale(void); +void SetPresetPalette_GrayscaleSmall(void); +void QuantizePalette_GrayscaleSmall(void); +void SetPresetPalette_BlackAndWhite(void); +void QuantizePalette_BlackAndWhite(void); +u16 QuantizePixel_Standard(u16 *); +u16 QuantizePixel_GrayscaleSmall(u16 *); +u16 QuantizePixel_Grayscale(u16 *); +u16 QuantizePixel_PrimaryColors(u16 *); + +#define MAX_DIMENSION 64 + +#include "data/pointillism_points.h" + +void ApplyImageProcessingEffects(struct ImageProcessingContext* info) +{ + gCanvasPixels = info->canvasPixels; + gCanvasMonPersonality = info->personality; + gCanvasColumnStart = info->columnStart; + gCanvasRowStart = info->rowStart; + gCanvasColumnEnd = info->columnEnd; + gCanvasRowEnd = info->rowEnd; + gCanvasWidth = info->canvasWidth; + gCanvasHeight = info->canvasHeight; + switch (info->effect) + { + case IMAGE_EFFECT_POINTILLISM: + ApplyImageEffect_Pointillism(); + break; + case IMAGE_EFFECT_BLUR: + ApplyImageEffect_Blur(); + break; + case IMAGE_EFFECT_OUTLINE_COLORED: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_PersonalityColor(gCanvasMonPersonality); + break; + case IMAGE_EFFECT_INVERT_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_Invert(); + ApplyImageEffect_BlackAndWhite(); + case IMAGE_EFFECT_INVERT: + ApplyImageEffect_Invert(); + break; + case IMAGE_EFFECT_THICK_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + break; + case IMAGE_EFFECT_SHIMMER: + ApplyImageEffect_Shimmer(); + break; + case IMAGE_EFFECT_OUTLINE: + ApplyImageEffect_BlackOutline(); + break; + case IMAGE_EFFECT_BLUR_RIGHT: + ApplyImageEffect_BlurRight(); + break; + case IMAGE_EFFECT_BLUR_DOWN: + ApplyImageEffect_BlurDown(); + break; + case IMAGE_EFFECT_GRAYSCALE_LIGHT: + ApplyImageEffect_Grayscale(); + ApplyImageEffect_RedChannelGrayscale(3); + break; + case IMAGE_EFFECT_CHARCOAL: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + ApplyImageEffect_Blur(); + ApplyImageEffect_Blur(); + ApplyImageEffect_RedChannelGrayscale(2); + ApplyImageEffect_RedChannelGrayscaleHighlight(4); + break; + } +} + +void ApplyImageEffect_RedChannelGrayscale(u8 delta) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (!IS_ALPHA(*pal)) + { + u8 val = (31 & *pal); + val += delta; + if (val > 31) + val = 31; + + *pal = RGB2(val, val, val); + } + } + } +} + +void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (!IS_ALPHA(*pal)) + { + u8 val = (31 & *pal); + if (val > 31 - highlight) + val = 31 - (highlight >> 1); + + *pal = RGB2(val, val, val); + } + } + } +} + +void ApplyImageEffect_Pointillism(void) +{ + u32 i; + for (i = 0; i < 3200; i++) + AddPointillismPoints(i); +} + +void ApplyImageEffect_Grayscale(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* color = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, color++) + { + if (!IS_ALPHA(*color)) + { + *color = ConvertColorToGrayscale(color); + } + } + } +} + +void ApplyImageEffect_Blur(void) +{ + u8 i, j; + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16* var0 = &gCanvasPixels[gCanvasRowStart * gCanvasWidth]; + u16* palette = &var0[gCanvasColumnStart + i]; + u16 color = *palette; + j = 1; + palette += gCanvasWidth; + while (j < gCanvasRowEnd - 1) + { + if (!IS_ALPHA(*palette)) + { + *palette = QuantizePixel_Blur(&color, palette, palette + gCanvasWidth); + color = *palette; + } + + j++; + palette += gCanvasWidth; + } + } +} + +void ApplyImageEffect_PersonalityColor(u8 personality) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = ConvertCoolColor(pixel, personality); + } + } + } +} + +void ApplyImageEffect_BlackAndWhite(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_BlackAndWhite(pixel); + } + } + } +} + +void ApplyImageEffect_BlackOutline(void) +{ + u8 i, j; + u16 *pixel; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + pixel = &pixelRow[gCanvasColumnStart]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + for (j = 1, pixel = pixel + 1; j < gCanvasColumnEnd - 1; j++, pixel++) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + for (j = 0; j < gCanvasColumnEnd; j++) + { + u16* var0 = &gCanvasPixels[gCanvasRowStart * gCanvasWidth]; + pixel = &var0[gCanvasColumnStart + j]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + for (i = 1, pixel = pixel + gCanvasWidth; i < gCanvasRowEnd - 1; i++, pixel += gCanvasWidth) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } +} + +void ApplyImageEffect_Invert(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_Invert(pixel); + } + } + } +} + +void ApplyImageEffect_Shimmer(void) +{ + u8 i, j; + u16 *pixel; + u16 color; + + pixel = gCanvasPixels; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_Invert(pixel); + } + } + } + + for (j = 0; j < 64; j++) + { + pixel = &gCanvasPixels[j]; + color = *pixel; + *pixel = RGB_ALPHA; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_BlurHard(&color, pixel, pixel + 64); + color = *pixel; + } + } + + *pixel = RGB_ALPHA; + pixel = &gCanvasPixels[j]; + color = *pixel; + *pixel = RGB_ALPHA; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_BlurHard(&color, pixel, pixel + 64); + color = *pixel; + } + } + + *pixel = RGB_ALPHA; + } + + pixel = gCanvasPixels; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_Invert(pixel); + } + } + } +} + +void ApplyImageEffect_BlurRight(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + u16 color = *pixel; + for (j = 1, pixel++; j < gCanvasColumnEnd - 1; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_MotionBlur(&color, pixel); + color = *pixel; + } + } + } +} + +void ApplyImageEffect_BlurDown(void) +{ + u8 i, j; + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16* pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart + i]; + u16 prevPixel = *pixel; + for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel); + prevPixel = *pixel; + } + } + } +} + +struct PointillismPoint +{ + u8 column; + u8 row; + u16 delta; +}; + +void AddPointillismPoints(u16 point) +{ + u8 i; + bool8 offsetDownLeft; + u8 colorType; + struct PointillismPoint points[6]; + + points[0].column = sPointillismPoints[point][0]; + points[0].row = sPointillismPoints[point][1]; + points[0].delta = GET_POINT_DELTA(sPointillismPoints[point][2]); + + colorType = GET_POINT_COLOR_TYPE(sPointillismPoints[point][2]); + offsetDownLeft = GET_POINT_OFFSET_DL(sPointillismPoints[point][2]); + for (i = 1; i < points[0].delta; i++) + { + if (!offsetDownLeft) + { + points[i].column = points[0].column - i; + points[i].row = points[0].row + i; + } + else + { + points[i].column = points[0].column + 1; + points[i].row = points[0].row - 1; + } + + if (points[i].column >= MAX_DIMENSION || points[i].row >= MAX_DIMENSION) + { + points[0].delta = i - 1; + break; + } + + points[i].delta = points[0].delta - i; + } + + for (i = 0; i < points[0].delta; i++) + { + u16 *pixel = &gCanvasPixels[points[i].row * MAX_DIMENSION] + points[i].column; + + if (!IS_ALPHA(*pixel)) + { + u16 red = GET_R(*pixel); + u16 green = GET_G(*pixel); + u16 blue = GET_B(*pixel); + + switch (colorType) + { + case 0: + case 1: + switch (GET_POINT_DELTA(sPointillismPoints[point][2]) % 3) + { + case 0: + if (red >= points[i].delta) + red -= points[i].delta; + else + red = 0; + break; + case 1: + if (green >= points[i].delta) + green -= points[i].delta; + else + green = 0; + break; + case 2: + if (blue >= points[i].delta) + blue -= points[i].delta; + else + blue = 0; + break; + } + break; + case 2: + case 3: + red += points[i].delta; + green += points[i].delta; + blue += points[i].delta; + if (red > 31) + red = 31; + if (green > 31) + green = 31; + if (blue > 31) + blue = 31; + break; + } + + *pixel = RGB2(red, green, blue); + } + } +} + +u16 ConvertColorToGrayscale(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + u16 average = (red + green + blue) / 3; + return RGB2(average, average, average); +} + +// The dark colors are the colored edges of the Cool painting effect. +// Everything else is white. +u16 ConvertCoolColor(u16 *color, u8 personality) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + if (red < 17 && green < 17 && blue < 17) + return GetCoolColorFromPersonality(personality); + else + return RGB_WHITE; +} + +// Based on the given value, which comes from the first 8 bits of +// the mon's personality value, return a color. +u16 GetCoolColorFromPersonality(u8 personality) +{ + u16 red = 0; + u16 green = 0; + u16 blue = 0; + u8 strength = (personality / 6) % 3; + u8 colorType = personality % 6; + + switch (colorType) + { + case 0: + // Teal color + green = 21 - strength; + blue = green; + red = 0; + break; + case 1: + // Yellow color + blue = 0; + red = 21 - strength; + green = red; + break; + case 2: + // Purple color + blue = 21 - strength; + green = 0; + red = blue; + break; + case 3: + // Red color + blue = 0; + green = 0; + red = 23 - strength; + break; + case 4: + // Blue color + blue = 23 - strength; + green = 0; + red = 0; + break; + case 5: + // Green color + blue = 0; + green = 23 - strength; + red = 0; + break; + } + + return RGB2(red, green, blue); +} + +u16 QuantizePixel_BlackAndWhite(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + if (red < 17 && green < 17 && blue < 17) + return RGB_BLACK; + else + return RGB_WHITE; +} + +u16 QuantizePixel_BlackOutline(u16 *colorA, u16 *colorB) +{ + if (*colorA) + { + if (IS_ALPHA(*colorA)) + return RGB_ALPHA; + if (IS_ALPHA(*colorB)) + return RGB_BLACK; + + return *colorA; + } + + return RGB_BLACK; +} + +u16 QuantizePixel_Invert(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + red = 31 - red; + green = 31 - green; + blue = 31 - blue; + + return RGB2(red, green, blue); +} + +u16 QuantizePixel_MotionBlur(u16 *prevPixel, u16 *curPixel) +{ + u16 pixelChannels[2][3]; + u16 diffs[3]; + u8 i; + u16 largestDiff; + u16 r, g, b; + + if (*prevPixel == *curPixel) + return *curPixel; + + pixelChannels[0][0] = GET_R(*prevPixel); + pixelChannels[0][1] = GET_G(*prevPixel); + pixelChannels[0][2] = GET_B(*prevPixel); + pixelChannels[1][0] = GET_R(*curPixel); + pixelChannels[1][1] = GET_G(*curPixel); + pixelChannels[1][2] = GET_B(*curPixel); + + if (pixelChannels[0][0] > 25 && pixelChannels[0][1] > 25 && pixelChannels[0][2] > 25) + return *curPixel; + if (pixelChannels[1][0] > 25 && pixelChannels[1][1] > 25 && pixelChannels[1][2] > 25) + return *curPixel; + + for (i = 0; i < 3; i++) + { + if (pixelChannels[0][i] > pixelChannels[1][i]) + diffs[i] = pixelChannels[0][i] - pixelChannels[1][i]; + else + diffs[i] = pixelChannels[1][i] - pixelChannels[0][i]; + } + + if (diffs[0] >= diffs[1]) + { + if (diffs[0] >= diffs[2]) + largestDiff = diffs[0]; + else if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else + largestDiff = diffs[2]; + } + else + { + if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else if (diffs[2] >= diffs[0]) + largestDiff = diffs[2]; + else + largestDiff = diffs[0]; + } + + r = (pixelChannels[1][0] * (31 - largestDiff / 2)) / 31; + g = (pixelChannels[1][1] * (31 - largestDiff / 2)) / 31; + b = (pixelChannels[1][2] * (31 - largestDiff / 2)) / 31; + return RGB2(r, g, b); +} + +u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 avg0, avg1, avg2; + u16 diff1, diff2; + u32 minimum; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = GET_R(*curPixel); + green = GET_G(*curPixel); + blue = GET_B(*curPixel); + + avg0 = ((GET_R(*prevPixel)) + (GET_G(*prevPixel)) + (GET_B(*prevPixel))) / 3; + avg1 = ((GET_R(*curPixel)) + (GET_G(*curPixel)) + (GET_B(*curPixel))) / 3; + avg2 = ((GET_R(*nextPixel)) + (GET_G(*nextPixel)) + (GET_B(*nextPixel))) / 3; + + if (avg0 == avg1 && avg2 == avg1) + return *curPixel; + + if (avg0 > avg1) + diff1 = avg0 - avg1; + else + diff1 = avg1 - avg0; + + if (avg2 > avg1) + diff2 = avg2 - avg1; + else + diff2 = avg1 - avg2; + + if (diff1 >= diff2) + minimum = diff1; + else + minimum = diff2; + + factor = 31 - minimum / 2; + red = red * factor / 31; + green = green * factor / 31; + blue = blue * factor / 31; + return RGB2(red, green, blue); +} + +u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 avg0, avg1, avg2; + u16 diff1, diff2; + u32 minimum; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = GET_R(*curPixel); + green = GET_G(*curPixel); + blue = GET_B(*curPixel); + + avg0 = ((GET_R(*prevPixel)) + (GET_G(*prevPixel)) + (GET_B(*prevPixel))) / 3; + avg1 = ((GET_R(*curPixel)) + (GET_G(*curPixel)) + (GET_B(*curPixel))) / 3; + avg2 = ((GET_R(*nextPixel)) + (GET_G(*nextPixel)) + (GET_B(*nextPixel))) / 3; + + if (avg0 == avg1 && avg2 == avg1) + return *curPixel; + + if (avg0 > avg1) + diff1 = avg0 - avg1; + else + diff1 = avg1 - avg0; + + if (avg2 > avg1) + diff2 = avg2 - avg1; + else + diff2 = avg1 - avg2; + + if (diff1 >= diff2) + minimum = diff1; + else + minimum = diff2; + + factor = 31 - minimum; + red = red * factor / 31; + green = green * factor / 31; + blue = blue * factor / 31; + return RGB2(red, green, blue); +} + +void ConvertImageProcessingToGBA(struct ImageProcessingContext *context) +{ + u16 i, j, k; + u16 *src, *dest, *src_, *dest_; + u16 width, height; + + width = context->canvasWidth >> 3; + height = context->canvasHeight >> 3; + src_ = context->canvasPixels; + dest_ = context->dest; + + if (context->bgType == 2) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 5) + (k << 2); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 8); + dest[1] = src[2] | (src[3] << 8); + dest[2] = src[4] | (src[5] << 8); + dest[3] = src[6] | (src[7] << 8); + } + } + } + } + else + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 4) + (k << 1); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 4) | (src[2] << 8) | (src[3] << 12); + dest[1] = src[4] | (src[5] << 4) | (src[6] << 8) | (src[7] << 12); + } + } + } + } +} + +void ApplyImageProcessingQuantization(struct ImageProcessingContext *arg0) +{ + gCanvasPaletteStart = arg0->paletteStart * 16; + gCanvasPalette = &arg0->canvasPalette[gCanvasPaletteStart]; + gCanvasPixels = arg0->canvasPixels; + gCanvasColumnStart = arg0->columnStart; + gCanvasRowStart = arg0->rowStart; + gCanvasColumnEnd = arg0->columnEnd; + gCanvasRowEnd = arg0->rowEnd; + gCanvasWidth = arg0->canvasWidth; + gCanvasHeight = arg0->canvasHeight; + + switch (arg0->quantizeEffect) + { + case QUANTIZE_EFFECT_STANDARD: + QuantizePalette_Standard(FALSE); + break; + case QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS: + QuantizePalette_Standard(TRUE); + break; + case QUANTIZE_EFFECT_PRIMARY_COLORS: + SetPresetPalette_PrimaryColors(); + QuantizePalette_PrimaryColors(); + break; + case QUANTIZE_EFFECT_GRAYSCALE: + SetPresetPalette_Grayscale(); + QuantizePalette_Grayscale(); + break; + case QUANTIZE_EFFECT_GRAYSCALE_SMALL: + SetPresetPalette_GrayscaleSmall(); + QuantizePalette_GrayscaleSmall(); + break; + case QUANTIZE_EFFECT_BLACK_WHITE: + SetPresetPalette_BlackAndWhite(); + QuantizePalette_BlackAndWhite(); + break; + } +} + +void SetPresetPalette_PrimaryColors(void) +{ + gCanvasPalette[0] = RGB_BLACK; + gCanvasPalette[1] = RGB2(6, 6, 6); + gCanvasPalette[2] = RGB2(29, 29, 29); + gCanvasPalette[3] = RGB2(11, 11, 11); + gCanvasPalette[4] = RGB2(29, 6, 6); + gCanvasPalette[5] = RGB2(6, 29, 6); + gCanvasPalette[6] = RGB2(6, 6, 29); + gCanvasPalette[7] = RGB2(29, 29, 6); + gCanvasPalette[8] = RGB2(29, 6, 29); + gCanvasPalette[9] = RGB2(6, 29, 29); + gCanvasPalette[10] = RGB2(29, 11, 6); + gCanvasPalette[11] = RGB2(11, 29, 6); + gCanvasPalette[12] = RGB2(6, 11, 29); + gCanvasPalette[13] = RGB2(29, 6, 11); + gCanvasPalette[14] = RGB2(6, 29, 11); + gCanvasPalette[15] = RGB2(11, 6, 29); +} + +void SetPresetPalette_BlackAndWhite(void) +{ + gCanvasPalette[0] = RGB_BLACK; + gCanvasPalette[1] = RGB_BLACK; + gCanvasPalette[2] = RGB_WHITE; +} + +void SetPresetPalette_GrayscaleSmall(void) +{ + u8 i; + + gCanvasPalette[0] = RGB_BLACK; + gCanvasPalette[1] = RGB_BLACK; + for (i = 0; i < 14; i++) + gCanvasPalette[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); +} + +void SetPresetPalette_Grayscale(void) +{ + u8 i; + + gCanvasPalette[0] = RGB_BLACK; + for (i = 0; i < 32; i++) + gCanvasPalette[i + 1] = RGB2(i, i, i); +} + +void QuantizePalette_Standard(bool8 arg0) +{ + u8 i, j; + u16 maxIndex; + + maxIndex = 0xDF; + if (!arg0) + maxIndex = 0xFF; + + for (j = 0; j < maxIndex; j++) + gCanvasPalette[j] = 0; + + gCanvasPalette[maxIndex] = RGB2(15, 15, 15); + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + { + *pal = gCanvasPaletteStart; + } + else + { + u16 color = QuantizePixel_Standard(pal); + u8 curIndex = 1; + if (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + gCanvasPalette[curIndex] = color; + *pal = gCanvasPaletteStart + curIndex; + } + else + { + while (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + gCanvasPalette[curIndex] = color; + *pal = gCanvasPaletteStart + curIndex; + break; + } + + if (gCanvasPalette[curIndex] == color) + { + *pal = gCanvasPaletteStart + curIndex; + break; + } + + curIndex++; + } + } + } + + if (curIndex == maxIndex) + { + curIndex = maxIndex; + *pal = curIndex; + } + } + } + } +} + +void QuantizePalette_BlackAndWhite(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + { + *pal = gCanvasPaletteStart; + } + else + { + if (QuantizePixel_BlackAndWhite(pal) == RGB_BLACK) + *pal = gCanvasPaletteStart + 1; + else + *pal = gCanvasPaletteStart + 2; + } + } + } +} + +void QuantizePalette_GrayscaleSmall(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + *pal = gCanvasPaletteStart; + else + *pal = QuantizePixel_GrayscaleSmall(pal) + gCanvasPaletteStart; + } + } +} + +void QuantizePalette_Grayscale(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + *pal = gCanvasPaletteStart; + else + *pal = QuantizePixel_Grayscale(pal) + gCanvasPaletteStart; + } + } +} + +void QuantizePalette_PrimaryColors(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + *pal = gCanvasPaletteStart; + else + *pal = QuantizePixel_PrimaryColors(pal) + gCanvasPaletteStart; + } + } +} + +u16 QuantizePixel_Standard(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + + if (red & 3) + red = (red & 0x1C) + 4; + if (green & 3) + green = (green & 0x1C) + 4; + if (blue & 3) + blue = (blue & 0x1C) + 4; + + if (red < 6) + red = 6; + if (red > 30) + red = 30; + + if (green < 6) + green = 6; + if (green > 30) + green = 30; + + if (blue < 6) + blue = 6; + if (blue > 30) + blue = 30; + + return RGB2(red, green, blue); +} + +u16 QuantizePixel_PrimaryColors(u16* color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + + if (red < 12 && green < 11 && blue < 11) + return 1; + + if (red > 19 && green > 19 && blue > 19) + return 2; + + if (red > 19) + { + if (green > 19) + { + if (blue > 14) + return 2; + else + return 7; + } + else if (blue > 19) + { + if (green > 14) + return 2; + else + return 8; + } + } + + if (green > 19 && blue > 19) + { + if (red > 14) + return 2; + else + return 9; + } + + if (red > 19) + { + if (green > 11) + { + if (blue > 11) + { + if (green < blue) + return 8; + else + return 7; + } + else + { + return 10; + } + } + else if (blue > 11) + { + return 13; + } + else + { + return 4; + } + } + + if (green > 19) + { + if (red > 11) + { + if (blue > 11) + { + if (red < blue) + return 9; + else + return 7; + } + else + { + return 11; + } + } + else + { + if (blue > 11) + return 14; + else + return 5; + } + } + + if (blue > 19) + { + if (red > 11) + { + if (green > 11) + { + if (red < green) + return 9; + else + return 8; + } + } + else if (green > 11) + { + return 12; + } + + if (blue > 11) + return 15; + else + return 6; + } + + return 3; +} + +u16 QuantizePixel_GrayscaleSmall(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + u16 average = ((red + green + blue) / 3) & 0x1E; + if (average == 0) + return 1; + else + return average / 2; +} + +u16 QuantizePixel_Grayscale(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + u16 average = (red + green + blue) / 3; + return average + 1; +} diff --git a/src/intro.c b/src/intro.c index f1904f86e..f0fda8862 100644 --- a/src/intro.c +++ b/src/intro.c @@ -22,7 +22,7 @@ #include "scanline_effect.h" #include "ewram.h" -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u16 gUnknown_02039358; extern u16 gUnknown_0203935A; extern u16 gSaveFileStatus; @@ -1601,13 +1601,13 @@ static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) u8 spriteId; if (front) - LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, EWRAM, gUnknown_0840B5A0[d], species, 0, 1); + LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)EWRAM, gUnknown_0840B5A0[d], species, 0, 1); else - LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, EWRAM, gUnknown_0840B5A0[d], species, 0, 0); + LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, (void *)EWRAM, gUnknown_0840B5A0[d], species, 0, 0); lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF); LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20); sub_8143648(d, d); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, (d + 1) * 4); gSprites[spriteId].oam.paletteNum = d; gSprites[spriteId].oam.priority = 1; return spriteId; @@ -1620,8 +1620,8 @@ static u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) DecompressPicFromTable_2(&gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, (void *)EWRAM, gUnknown_0840B5A0[d], a); LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + d * 0x10, 0x20); sub_8143680(d, d); - gUnknown_02024E8C.anims = gUnknown_0840B064; - spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 1); + gCreatingSpriteTemplate.anims = gUnknown_0840B064; + spriteId = CreateSprite(&gCreatingSpriteTemplate, b, c, 1); gSprites[spriteId].oam.paletteNum = d; gSprites[spriteId].oam.priority = 1; return spriteId; diff --git a/src/link.c b/src/link.c index 73652a194..213f9f7e3 100644 --- a/src/link.c +++ b/src/link.c @@ -414,7 +414,7 @@ static void LinkTestProcessKeyInput(void) if (gMain.newKeys & R_BUTTON) Save_WriteData(SAVE_LINK); if (gMain.newKeys & SELECT_BUTTON) - sub_800832C(); + SetCloseLinkCallback(); if (gLinkTestDebugValuesEnabled) { u32 vblankCounter1 = gMain.vblankCounter1; @@ -1145,7 +1145,7 @@ u8 GetDummy2(void) return sDummy2; } -void sub_800832C(void) +void SetCloseLinkCallback(void) { if (!gLinkCallback) { diff --git a/src/main_menu.c b/src/main_menu.c index 3237663a5..fda5db547 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -39,7 +39,7 @@ extern u8 gBirchSpeech_SoItsPlayer[]; extern u8 gBirchSpeech_AhOkayYouArePlayer[]; extern u8 gBirchSpeech_AreYouReady[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; //Menu layouts enum @@ -1424,12 +1424,12 @@ u8 CreateAzurillSprite(u8 x, u8 y) &gMonFrontPicTable[SPECIES_AZURILL], gMonFrontPicCoords[SPECIES_AZURILL].coords, gMonFrontPicCoords[SPECIES_AZURILL].y_offset, - gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[0], + gMonSpriteGfx_Sprite_ptr[1], SPECIES_AZURILL); LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]); GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1); - return CreateSprite(&gUnknown_02024E8C, x, y, 0); + return CreateSprite(&gCreatingSpriteTemplate, x, y, 0); } void AddBirchSpeechObjects(u8 taskId) diff --git a/src/mauville_man.c b/src/mauville_man.c index a71ce5fe8..acd6af5bc 100644 --- a/src/mauville_man.c +++ b/src/mauville_man.c @@ -690,7 +690,7 @@ static void Task_BardSong(u8 taskId) case 0: // Initialize song PrepareSongText(); Text_InitWindowWithTemplate(gMenuWindowPtr, &gMenuTextWindowTemplate); - Text_InitWindow8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); + Contest_StartTextPrinter(gMenuWindowPtr, gStringVar4, 2, 4, 15); task->data[1] = 0; task->data[2] = 0; task->tCharIndex = 0; diff --git a/src/menu.c b/src/menu.c index 5bb5f96d1..2b454417a 100644 --- a/src/menu.c +++ b/src/menu.c @@ -204,12 +204,12 @@ void Menu_DisplayDialogueFrame(void) void MenuPrintMessage(const u8 *str, u8 left, u8 top) { - Text_InitWindow8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); + Contest_StartTextPrinter(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } void MenuPrintMessageDefaultCoords(const u8 *str) { - Text_InitWindow8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); + Contest_StartTextPrinter(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); } void Menu_SetText(const u8 *str) @@ -733,12 +733,12 @@ void MenuPrint_RightAligned(const u8 *str, u8 right, u8 top) Text_InitWindow_RightAligned(gMenuWindowPtr, str, gMenuTextTileOffset, right, top); } -void sub_8072B80(const u8 *src, u8 a2, u8 a3, const u8 *text) +void MenuPrint_AlignedToRightOfReferenceString(const u8 *src, u8 left, u8 top, const u8 *widthRefStr) { u8 buffer[64]; - u8 width = GetStringWidth(gMenuWindowPtr, text); + u8 width = GetStringWidth(gMenuWindowPtr, widthRefStr); AlignString(gMenuWindowPtr, buffer, src, width, 1); - Text_InitWindowAndPrintText(gMenuWindowPtr, buffer, gMenuTextTileOffset, a2, a3); + Text_InitWindowAndPrintText(gMenuWindowPtr, buffer, gMenuTextTileOffset, left, top); } void MenuPrint_Centered(const u8 *text, u8 left, u8 top, u16 width) diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index b39804b79..987249f50 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -156,7 +156,7 @@ static void CB2_MysteryEventMenu(void) if (GetLinkPlayerDataExchangeStatusTimed() == 3) { - sub_800832C(); + SetCloseLinkCallback(); Menu_EraseWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); MenuPrintMessageDefaultCoords(gStringVar4); @@ -220,7 +220,7 @@ static void CB2_MysteryEventMenu(void) if (GetLinkPlayerDataExchangeStatusTimed() == 3) { - sub_800832C(); + SetCloseLinkCallback(); Menu_EraseWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); MenuPrintMessageDefaultCoords(gStringVar4); @@ -282,7 +282,7 @@ static void CB2_MysteryEventMenu(void) gMain.state++; break; case 10: - sub_800832C(); + SetCloseLinkCallback(); gMain.state++; break; case 11: @@ -461,7 +461,7 @@ void debug_sub_815D1D8(void) gMain.state++; break; case 8: - sub_800832C(); + SetCloseLinkCallback(); gMain.state++; break; case 9: diff --git a/src/new_game.c b/src/new_game.c index 63a13be5e..dede514bb 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -1,11 +1,12 @@ #include "global.h" -#include "constants/maps.h" -#include "constants/species.h" -#include "clock.h" #include "new_game.h" #include "battle_records.h" #include "berry.h" +#include "clock.h" +#include "constants/maps.h" +#include "constants/species.h" #include "contest.h" +#include "contest_util.h" #include "decoration_inventory.h" #include "dewford_trend.h" #include "easy_chat.h" @@ -15,6 +16,7 @@ #include "lottery_corner.h" #include "mail_data.h" #include "mauville_man.h" +#include "overworld.h" #include "play_time.h" #include "player_pc.h" #include "pokeblock.h" @@ -23,8 +25,6 @@ #include "pokemon_storage_system.h" #include "random.h" #include "roamer.h" -#include "script_pokemon_80C4.h" -#include "overworld.h" #include "rtc.h" #include "script.h" #include "secret_base.h" @@ -35,7 +35,7 @@ EWRAM_DATA u8 gDifferentSaveFile = 0; EWRAM_DATA u8 gUnknown_020297ED = 0; extern u8 gPlayerPartyCount; -extern u8 gUnknown_03005CE8; +extern u8 gUnusedPokedexU8; extern u16 gSaveFileStatus; extern u8 EventScript_ResetAllMapFlags[]; @@ -91,7 +91,7 @@ void SetDefaultOptions(void) void ClearPokedexFlags(void) { - gUnknown_03005CE8 = 0; + gUnusedPokedexU8 = 0; memset(&gSaveBlock2.pokedex.owned, 0, sizeof(gSaveBlock2.pokedex.owned)); memset(&gSaveBlock2.pokedex.seen, 0, sizeof(gSaveBlock2.pokedex.seen)); } @@ -152,7 +152,7 @@ void sub_8052E4C(void) #if DEBUG gUnknown_020297ED = 0; #endif - sub_808C0A0(); + ResetPokedexScrollPositions(); ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetBagScrollPositions(); diff --git a/src/overworld.c b/src/overworld.c index a0e7939f5..8bd3825b5 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -4,12 +4,17 @@ #include "berry.h" #include "cable_club.h" #include "clock.h" +#include "constants/map_types.h" +#include "constants/maps.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest_util.h" #include "event_data.h" +#include "event_object_movement.h" #include "field_camera.h" #include "field_control_avatar.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "event_object_movement.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -22,8 +27,8 @@ #include "heal_location.h" #include "link.h" #include "load_save.h" -#include "main.h" #include "m4a.h" +#include "main.h" #include "map_name_popup.h" #include "menu.h" #include "metatile_behavior.h" @@ -34,8 +39,8 @@ #include "roamer.h" #include "rotating_gate.h" #include "safari_zone.h" +#include "scanline_effect.h" #include "script.h" -#include "script_pokemon_80C4.h" #include "secret_base.h" #include "sound.h" #include "start_menu.h" @@ -43,12 +48,7 @@ #include "tileset_anim.h" #include "time_events.h" #include "tv.h" -#include "scanline_effect.h" #include "wild_encounter.h" -#include "constants/map_types.h" -#include "constants/maps.h" -#include "constants/songs.h" -#include "constants/species.h" #ifdef SAPPHIRE #define LEGENDARY_MUSIC MUS_WEATHER_KYOGRE // Heavy Rain diff --git a/src/party_menu.c b/src/party_menu.c index b5b00c947..6154d5db5 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -480,7 +480,7 @@ extern u16 gMoveToLearn; extern u16 gUnknown_08E9A300[]; extern struct Coords8 const gUnknown_08376738[12][6]; extern u8 gUnknown_02039460[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern const u8 gPartyMenuMisc_Gfx[]; extern const u8 gPartyMenuMisc_Tilemap[]; @@ -678,8 +678,8 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 8: - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C90); - MultistepInitWindowTileData(&gUnknown_03004210, 1); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C90); + MultistepInitWindowTileData(&gWindowTemplate_Contest_MoveDescription, 1); gMain.state++; break; case 9: @@ -2710,7 +2710,7 @@ void sub_806D5B8(u8 monIndex) u8 right = gUnknown_08376948[IsDoubleBattle()][monIndex].right; u8 bottom = gUnknown_08376948[IsDoubleBattle()][monIndex].bottom; - Text_EraseWindowRect(&gUnknown_03004210, left, top, right, bottom); + Text_EraseWindowRect(&gWindowTemplate_Contest_MoveDescription, left, top, right, bottom); var1 = 0; CpuFastSet(&var1, OBJ_VRAM1 + monIndex * 0x400, 0x1000100); @@ -2724,7 +2724,7 @@ void sub_806D668(u8 monIndex) u8 right = gUnknown_08376978[IsDoubleBattle()][monIndex].right; u8 bottom = gUnknown_08376978[IsDoubleBattle()][monIndex].bottom; - Text_EraseWindowRect(&gUnknown_03004210, left, top, right, bottom); + Text_EraseWindowRect(&gWindowTemplate_Contest_MoveDescription, left, top, right, bottom); var1 = 0; CpuFastSet(&var1, OBJ_VRAM1 + 0x300 + monIndex * 0x400, 0x1000040); @@ -2828,7 +2828,7 @@ void unref_sub_806D964(u8 taskId) TryCreatePartyMenuMonIcon(taskId, i, &gPlayerParty[i]); } -void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon) +void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct MultiBattlePokemonTx *pokemon) { u8 x = gUnknown_08376678[menuType][monIndex].x; u8 y = gUnknown_08376678[menuType][monIndex].y; diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index cb3d8789e..b3dafef72 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -616,7 +616,7 @@ static bool8 sub_8147B20(struct Pokemon* mon) case 0: species = GetMonData(mon, MON_DATA_SPECIES2); PiD = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, EWRAM, gUnknown_081FAF4C[1], species, PiD); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)EWRAM, gMonSpriteGfx_Sprite_ptr[1], species, PiD); ewram1FFFF++; break; case 1: @@ -758,7 +758,7 @@ static void Task_PaletteFadeToReturn(u8 taskID) static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2); - u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2); + u8 spriteID = CreateSprite(&gCreatingSpriteTemplate, 48, 80, 2); gPokeblockFeedMonSpecies = species; gPokeblockFeedMonSpriteID = spriteID; diff --git a/src/pokedex.c b/src/pokedex.c index f0be616d0..85d330d5c 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -35,43 +35,42 @@ struct PokedexListItem struct PokedexView { - struct PokedexListItem unk0[NATIONAL_DEX_COUNT]; - struct PokedexListItem monData; + struct PokedexListItem pokedexList[NATIONAL_DEX_COUNT + 1]; u16 pokemonListCount; u16 selectedPokemon; - u16 unk610; + u16 selectedPokemonBackup; u16 dexMode; - u16 unk614; + u16 dexModeBackup; u16 dexOrder; - u16 unk618; - u16 unk61A; - u16 unk61C; - u16 unk61E[4]; + u16 dexOrderBackup; + u16 seenCount; + u16 ownCount; + u16 monSpriteIds[4]; u16 selectedMonSpriteId; - s16 unk628; - s16 unk62A; - u8 unk62C; - u8 unk62D; - u8 unk62E; - u8 unk62F; - s16 unk630; - s16 unk632; - s16 unk634; - s16 unk636; - u16 unk638; - u16 unk63A[8]; - u8 unk64A; - u8 unk64B; - u8 unk64C_1:1; + s16 pokeBallRotationStep; + s16 pokeBallRotationBackup; + u8 pokeBallRotation; + u8 initialVOffset; + u8 scrollTimer; + u8 scrollDirection; + s16 listVOffset; + s16 listMovingVOffset; + s16 scrollMonIncrement; + s16 maxScrollTimer; + u16 scrollSpeed; + u16 unk63A[4]; // Cleared, never read + u8 unk642[8]; + u8 currentPage; + u8 currentPageBackup; + u8 isSearchResults:1; u8 selectedScreen; u8 descriptionPageNum; - u8 unk64F; - u8 menuIsOpen; //menuIsOpen - u8 unk651; - u16 menuCursorPos; //Menu cursor position + u8 screenSwitchState; + u8 menuIsOpen; + u16 menuCursorPos; s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this) - u8 unk656[8]; - u8 unk65E[8]; + u8 unk656[8]; // Cleared, never read + u8 unk65E[8]; // Cleared, never read }; enum @@ -88,71 +87,71 @@ enum SIZE_SCREEN }; -struct UnknownStruct2 +struct SearchOptionText { - const u8 *text1; - const u8 *text2; + const u8 *description; + const u8 *title; }; -struct UnknownStruct1 +struct SearchOption { - const struct UnknownStruct2 *unk0; - u8 unk4; - u8 unk5; - u16 unk6; + const struct SearchOptionText *texts; + u8 taskDataCursorPos; + u8 taskDataScrollOffset; + u16 numOptions; }; -struct UnknownStruct3 +struct SearchMenuTopBarItem { const u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; + u8 highlightX; + u8 highlightY; + u8 highlightWidth; }; -struct UnknownStruct4 +struct SearchMenuItem { const u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; + u8 titleBgX; + u8 titleBgY; + u8 titleBgWidth; + u8 selectionBgX; + u8 selectionBgY; + u8 selectionBgWidth; }; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern u8 gReservedSpritePaletteCount; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_03005E98; +extern struct SpriteTemplate gCreatingSpriteTemplate; +extern u8 gDexCryScreenState; extern const u8 gPokedexMenu_Gfx[]; extern const u8 gUnknown_08E96738[]; -extern const u8 gUnknown_08E96888[]; -extern const u8 gUnknown_08E96994[]; +extern const u8 gPokedexStartMenuMain_Tilemap[]; +extern const u8 gPokedexStartMenuSearchResults_Tilemap[]; extern const u8 gUnknown_08E9C6DC[]; extern const u8 gUnknown_08E96BD4[]; -extern const u8 gUnknown_08E96ACC[]; -extern const u8 gUnknown_08E96B58[]; +extern const u8 gPokedexScreenSelectBarMain_Tilemap[]; +extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap[]; extern const u16 gPokedexMenu_Pal[]; extern const u16 gPokedexMenu2_Pal[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; extern const struct PokedexEntry gPokedexEntries[]; extern const u8 gPokedexMenuSearch_Gfx[]; -extern const u8 gUnknown_08E96D2C[]; +extern const u8 gPokedexMenuSearch_Tilemap[]; extern const u16 gPokedexMenuSearch_Pal[]; extern const u8 gTypeNames[][7]; extern const u8 gPokedexMenu2_Gfx[]; static EWRAM_DATA struct PokedexView *gPokedexView = NULL; -static EWRAM_DATA u16 gUnknown_0202FFB8 = 0; -static EWRAM_DATA u8 gUnknown_0202FFBA = 0; -static EWRAM_DATA struct PokedexListItem *gUnknown_0202FFBC = NULL; +static EWRAM_DATA u16 sLastSelectedPokemon = 0; +static EWRAM_DATA u8 sPokeBallRotation = 0; +static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; -u8 gUnknown_03005CE8; -IntrCallback gUnknown_03005CEC; +u8 gUnusedPokedexU8; +IntrCallback gPokedexVBlankCB; -static u8 sub_8091E3C(void); +static u8 LoadSearchMenu(void); static const u16 sPokedexSearchPalette[] = INCBIN_U16("graphics/pokedex/search.gbapal"); static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/national.gbapal"); @@ -403,7 +402,7 @@ static const union AnimCmd *const gSpriteAnimTable_83A0520[] = { gSpriteAnim_83A04CC, }; -static void sub_808EF38(struct Sprite *); +static void SpriteCB_Scrollbar(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A0524 = { .tileTag = 4096, @@ -412,10 +411,10 @@ static const struct SpriteTemplate gSpriteTemplate_83A0524 = .anims = gSpriteAnimTable_83A04D4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808EF38, + .callback = SpriteCB_Scrollbar, }; -static void sub_808EF8C(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A053C = +static void SpriteCB_ScrollArrow(struct Sprite *); +static const struct SpriteTemplate sScrollArrowSpriteTemplate = { .tileTag = 4096, .paletteTag = 4096, @@ -423,9 +422,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A053C = .anims = gSpriteAnimTable_83A04D8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808EF8C, + .callback = SpriteCB_ScrollArrow, }; -static void sub_808F08C(struct Sprite *); +static void SpriteCB_DexListInterfaceText(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A0554 = { .tileTag = 4096, @@ -434,9 +433,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A0554 = .anims = gSpriteAnimTable_83A04E0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F08C, + .callback = SpriteCB_DexListInterfaceText, }; -static void sub_808F0B4(struct Sprite *); +static void SpriteCB_RotatingPokeBall(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A056C = { .tileTag = 4096, @@ -445,9 +444,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A056C = .anims = gSpriteAnimTable_83A04DC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F0B4, + .callback = SpriteCB_RotatingPokeBall, }; -static void sub_808ED94(struct Sprite *); +static void SpriteCB_SeenOwnInfo(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A0584 = { .tileTag = 4096, @@ -456,7 +455,7 @@ static const struct SpriteTemplate gSpriteTemplate_83A0584 = .anims = gSpriteAnimTable_83A04F0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808ED94, + .callback = SpriteCB_SeenOwnInfo, }; static const struct SpriteTemplate gSpriteTemplate_83A059C = { @@ -466,9 +465,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A059C = .anims = gSpriteAnimTable_83A04F8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808ED94, + .callback = SpriteCB_SeenOwnInfo, }; -static void sub_808F168(struct Sprite *); +static void SpriteCB_DexListStartMenuCursor(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A05B4 = { .tileTag = 4096, @@ -477,14 +476,14 @@ static const struct SpriteTemplate gSpriteTemplate_83A05B4 = .anims = gSpriteAnimTable_83A0520, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F168, + .callback = SpriteCB_DexListStartMenuCursor, }; -static const struct CompressedSpriteSheet gUnknown_083A05CC[] = +static const struct CompressedSpriteSheet sInterfaceSpriteSheet[] = { {gPokedexMenu2_Gfx, 0x1F00, 0x1000}, {NULL, 0, 0}, }; -static const struct SpritePalette gUnknown_083A05DC[] = +static const struct SpritePalette sInterfaceSpritePalette[] = { {gPokedexMenu_Pal, 0x1000}, {NULL, 0}, @@ -498,7 +497,7 @@ static const u8 gUnknown_083A05F8[] = _(""); #elif GERMAN #include "data/pokedex_entries_de.h" #endif -static const u16 gUnknown_083B4EC4[16] = {0}; +static const u16 sSizeScreenSilhouette_Pal[16] = {0}; static const u8 *const sMonFootprintTable[] = { gMonFootprint_Bulbasaur, @@ -915,9 +914,9 @@ static const u8 *const sMonFootprintTable[] = gMonFootprint_Chimecho, gMonFootprint_Bulbasaur, }; -static const u8 gUnknown_083B5558[] = _("{CLEAR_TO 0}"); +static const u8 sText_ClearTo0[] = _("{CLEAR_TO 0}"); const u8 gUnknown_083B555C[] = INCBIN_U8("graphics/unknown/unknown_3B555C.bin"); -static const struct OamData gOamData_83B557C = +static const struct OamData sOamData_MonOrTrainerPic = { .y = 0, .affineMode = 0, @@ -933,108 +932,119 @@ static const struct OamData gOamData_83B557C = .paletteNum = 0, .affineParam = 0, }; -static void *const gUnknown_083B5584[] = + +static void *const sMonOrTrainerPicDecompressDestPtrs[] = { - ePokedexPalAddr1, - ePokedexPalAddr2, - ePokedexPalAddr3, - ePokedexPalAddr4, + ePokedexGraphicsBuffer + 0x0000, + ePokedexGraphicsBuffer + 0x4000, + ePokedexGraphicsBuffer + 0x8000, + ePokedexGraphicsBuffer + 0xC000, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5594[] = -{ - {ewram8000, 0x800}, - {ewram8800, 0x800}, - {ewram9000, 0x800}, - {ewram9800, 0x800}, - {ewramA000, 0x800}, - {ewramA800, 0x800}, - {ewramB000, 0x800}, - {ewramB800, 0x800}, - {ewramC000, 0x800}, - {ewramC800, 0x800}, - {ewramD000, 0x800}, - {ewramD800, 0x800}, - {ewramE000, 0x800}, - {ewramE800, 0x800}, - {ewramF000, 0x800}, - {ewramF800, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_0[] = +{ + {ePokedexGraphicsBuffer + 0x0000, 0x800}, + {ePokedexGraphicsBuffer + 0x0800, 0x800}, + {ePokedexGraphicsBuffer + 0x1000, 0x800}, + {ePokedexGraphicsBuffer + 0x1800, 0x800}, + {ePokedexGraphicsBuffer + 0x2000, 0x800}, + {ePokedexGraphicsBuffer + 0x2800, 0x800}, + {ePokedexGraphicsBuffer + 0x3000, 0x800}, + {ePokedexGraphicsBuffer + 0x3800, 0x800}, + {ePokedexGraphicsBuffer + 0x4000, 0x800}, + {ePokedexGraphicsBuffer + 0x4800, 0x800}, + {ePokedexGraphicsBuffer + 0x5000, 0x800}, + {ePokedexGraphicsBuffer + 0x5800, 0x800}, + {ePokedexGraphicsBuffer + 0x6000, 0x800}, + {ePokedexGraphicsBuffer + 0x6800, 0x800}, + {ePokedexGraphicsBuffer + 0x7000, 0x800}, + {ePokedexGraphicsBuffer + 0x7800, 0x800}, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5614[] = -{ - {ewramC000, 0x800}, - {ewramC800, 0x800}, - {ewramD000, 0x800}, - {ewramD800, 0x800}, - {ewramE000, 0x800}, - {ewramE800, 0x800}, - {ewramF000, 0x800}, - {ewramF800, 0x800}, - {ewram10000, 0x800}, - {ewram10800, 0x800}, - {ewram11000, 0x800}, - {ewram11800, 0x800}, - {ewram12000, 0x800}, - {ewram12800, 0x800}, - {ewram13000, 0x800}, - {ewram13800, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_1[] = +{ + {ePokedexGraphicsBuffer + 0x4000, 0x800}, + {ePokedexGraphicsBuffer + 0x4800, 0x800}, + {ePokedexGraphicsBuffer + 0x5000, 0x800}, + {ePokedexGraphicsBuffer + 0x5800, 0x800}, + {ePokedexGraphicsBuffer + 0x6000, 0x800}, + {ePokedexGraphicsBuffer + 0x6800, 0x800}, + {ePokedexGraphicsBuffer + 0x7000, 0x800}, + {ePokedexGraphicsBuffer + 0x7800, 0x800}, + {ePokedexGraphicsBuffer + 0x8000, 0x800}, + {ePokedexGraphicsBuffer + 0x8800, 0x800}, + {ePokedexGraphicsBuffer + 0x9000, 0x800}, + {ePokedexGraphicsBuffer + 0x9800, 0x800}, + {ePokedexGraphicsBuffer + 0xA000, 0x800}, + {ePokedexGraphicsBuffer + 0xA800, 0x800}, + {ePokedexGraphicsBuffer + 0xB000, 0x800}, + {ePokedexGraphicsBuffer + 0xB800, 0x800}, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5694[] = -{ - {ewram10000, 0x800}, - {ewram10800, 0x800}, - {ewram11000, 0x800}, - {ewram11800, 0x800}, - {ewram12000, 0x800}, - {ewram12800, 0x800}, - {ewram13000, 0x800}, - {ewram13800, 0x800}, - {ewram14000, 0x800}, - {ewram14800, 0x800}, - {ewram15000, 0x800}, - {ewram15800, 0x800}, - {ewram16000_2, 0x800}, - {ewram16800, 0x800}, - {ewram17000, 0x800}, - {ewram17800_2, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_2[] = +{ + {ePokedexGraphicsBuffer + 0x8000, 0x800}, + {ePokedexGraphicsBuffer + 0x8800, 0x800}, + {ePokedexGraphicsBuffer + 0x9000, 0x800}, + {ePokedexGraphicsBuffer + 0x9800, 0x800}, + {ePokedexGraphicsBuffer + 0xA000, 0x800}, + {ePokedexGraphicsBuffer + 0xA800, 0x800}, + {ePokedexGraphicsBuffer + 0xB000, 0x800}, + {ePokedexGraphicsBuffer + 0xB800, 0x800}, + {ePokedexGraphicsBuffer + 0xC000, 0x800}, + {ePokedexGraphicsBuffer + 0xC800, 0x800}, + {ePokedexGraphicsBuffer + 0xD000, 0x800}, + {ePokedexGraphicsBuffer + 0xD800, 0x800}, + {ePokedexGraphicsBuffer + 0xE000, 0x800}, + {ePokedexGraphicsBuffer + 0xE800, 0x800}, + {ePokedexGraphicsBuffer + 0xF000, 0x800}, + {ePokedexGraphicsBuffer + 0xF800, 0x800}, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5714[] = -{ - {ewram14000, 0x800}, - {ewram14800, 0x800}, - {ewram15000, 0x800}, - {ewram15800, 0x800}, - {ewram16000_2, 0x800}, - {ewram16800, 0x800}, - {ewram17000, 0x800}, - {ewram17800_2, 0x800}, - {ewram18000_2, 0x800}, - {ewram18800, 0x800}, - {ewram19000, 0x800}, - {ewram19800, 0x800}, - {ewram1A000, 0x800}, - {ewram1A800, 0x800}, - {ewram1B000_2, 0x800}, - {ewram1B800, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_3[] = +{ + {ePokedexGraphicsBuffer + 0xC000, 0x800}, + {ePokedexGraphicsBuffer + 0xC800, 0x800}, + {ePokedexGraphicsBuffer + 0xD000, 0x800}, + {ePokedexGraphicsBuffer + 0xD800, 0x800}, + {ePokedexGraphicsBuffer + 0xE000, 0x800}, + {ePokedexGraphicsBuffer + 0xE800, 0x800}, + {ePokedexGraphicsBuffer + 0xF000, 0x800}, + {ePokedexGraphicsBuffer + 0xF800, 0x800}, + // UB: may overlap ePokedexView1-4 + {ePokedexGraphicsBuffer + 0x10000, 0x800}, + {ePokedexGraphicsBuffer + 0x10800, 0x800}, + {ePokedexGraphicsBuffer + 0x11000, 0x800}, + {ePokedexGraphicsBuffer + 0x11800, 0x800}, + {ePokedexGraphicsBuffer + 0x12000, 0x800}, + {ePokedexGraphicsBuffer + 0x12800, 0x800}, + {ePokedexGraphicsBuffer + 0x13000, 0x800}, + {ePokedexGraphicsBuffer + 0x13800, 0x800}, }; -static const struct SpriteFrameImage *const gUnknown_083B5794[] = + +static const struct SpriteFrameImage *const sSpriteFrameImages_MonOrTrainerPic[] = { - gSpriteImageTable_83B5594, - gSpriteImageTable_83B5614, - gSpriteImageTable_83B5694, - gSpriteImageTable_83B5714, + sSpriteFrameImages_MonOrTrainerPic_0, + sSpriteFrameImages_MonOrTrainerPic_1, + sSpriteFrameImages_MonOrTrainerPic_2, + sSpriteFrameImages_MonOrTrainerPic_3, }; -static void nullsub_59(struct Sprite *); -static const struct SpriteTemplate gUnknown_083B57A4 = + +static void _SpriteCB_Dummy(struct Sprite *); + +static const struct SpriteTemplate sMonOrTrainerPicSpriteTemplate = { .tileTag = 0xFFFF, .paletteTag = 0, - .oam = &gOamData_83B557C, + .oam = &sOamData_MonOrTrainerPic, .anims = NULL, - .images = gSpriteImageTable_83B5594, + .images = sSpriteFrameImages_MonOrTrainerPic_0, .affineAnims = gDummySpriteAffineAnimTable, - .callback = nullsub_59, + .callback = _SpriteCB_Dummy, }; -static const u8 gUnknown_083B57BC[][4] = + +// First character in range followed by number of characters in range for upper and lowercase +static const u8 sLetterSearchRanges[][4] = { {0, 0, 0, 0}, {CHAR_A, 3, CHAR_a, 3}, @@ -1047,13 +1057,13 @@ static const u8 gUnknown_083B57BC[][4] = {CHAR_V, 3, CHAR_v, 3}, {CHAR_Y, 2, CHAR_y, 2}, }; -static const struct UnknownStruct3 gUnknown_083B57E4[] = +static const struct SearchMenuTopBarItem sSearchMenuTopBarItems[] = { {DexText_SearchForPoke, 0, 0, 5}, {DexText_SwitchDex, 6, 0, 5}, {DexText_ReturnToDex, 12, 0, 5}, }; -static const struct UnknownStruct4 gUnknown_083B57FC[] = +static const struct SearchMenuItem sSearchMenuItems[] = { {DexText_ListByABC, 0, 2, 5, 5, 2, 12}, {DexText_ListByColor, 0, 4, 5, 5, 4, 12}, @@ -1063,7 +1073,7 @@ static const struct UnknownStruct4 gUnknown_083B57FC[] = {DexText_SelectDexMode, 0, 10, 5, 5, 10, 12}, {DexText_ExecuteSearchSwitch, 0, 12, 5, 0, 0, 0}, }; -static const u8 gUnknown_083B5850[][4] = +static const u8 sSearchMovementMap_SearchNatDex[][4] = { {0xFF, 0xFF, 0xFF, 1}, {0xFF, 0xFF, 0, 2}, @@ -1073,7 +1083,7 @@ static const u8 gUnknown_083B5850[][4] = {0xFF, 0xFF, 4, 6}, {0xFF, 0xFF, 5, 0xFF}, }; -static const u8 gUnknown_083B586C[][4] = +static const u8 sSearchMovementMap_ShiftNatDex[][4] = { {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, @@ -1083,7 +1093,7 @@ static const u8 gUnknown_083B586C[][4] = {0xFF, 0xFF, 4, 6}, {0xFF, 0xFF, 5, 0xFF}, }; -static const u8 gUnknown_083B5888[][4] = +static const u8 sSearchMovementMap_SearchHoennDex[][4] = { {0xFF, 0xFF, 0xFF, 1}, {0xFF, 0xFF, 0, 2}, @@ -1093,7 +1103,7 @@ static const u8 gUnknown_083B5888[][4] = {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 4, 0xFF}, }; -static const u8 gUnknown_083B58A4[][4] = +static const u8 sSearchMovementMap_ShiftHoennDex[][4] = { {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, @@ -1103,13 +1113,13 @@ static const u8 gUnknown_083B58A4[][4] = {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 4, 0xFF}, }; -static const struct UnknownStruct2 gUnknown_083B58C0[] = +static const struct SearchOptionText sDexModeOptions[] = { {DexText_HoennDex2, DexText_HoennDex}, {DexText_NationalDex2, DexText_NationalDex}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B58D8[] = +static const struct SearchOptionText sDexOrderOptions[] = { {DexText_ListByNumber, DexText_NumericalMode}, {DexText_ListByABC2, DexText_ABCMode}, @@ -1119,7 +1129,7 @@ static const struct UnknownStruct2 gUnknown_083B58D8[] = {DexText_ListBySmallToTallest, DexText_SmallestMode}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B5910[] = +static const struct SearchOptionText sDexSearchNameOptions[] = { {DexText_Terminator5, DexText_DontSpecify}, {DexText_Terminator5, DexText_ABC}, @@ -1133,7 +1143,7 @@ static const struct UnknownStruct2 gUnknown_083B5910[] = {DexText_Terminator5, DexText_YZ}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B5968[] = +static const struct SearchOptionText sDexSearchColorOptions[] = { {DexText_Terminator5, DexText_DontSpecify}, {DexText_Terminator5, DexText_Red}, @@ -1148,7 +1158,7 @@ static const struct UnknownStruct2 gUnknown_083B5968[] = {DexText_Terminator5, DexText_Pink}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B59C8[] = +static const struct SearchOptionText sDexSearchTypeOptions[] = { {DexText_Terminator5, DexText_None}, {DexText_Terminator5, gTypeNames[TYPE_NORMAL]}, @@ -1170,17 +1180,17 @@ static const struct UnknownStruct2 gUnknown_083B59C8[] = {DexText_Terminator5, gTypeNames[TYPE_DARK]}, {NULL, NULL}, }; -static const u8 gUnknown_083B5A60[] = {0, 1}; -static const u8 gUnknown_083B5A62[] = {0, 1, 2, 3, 4, 5}; -static const u8 gUnknown_083B5A68[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17}; -static const struct UnknownStruct1 gUnknown_083B5A7C[] = -{ - {gUnknown_083B5910, 6, 7, 10}, - {gUnknown_083B5968, 8, 9, 11}, - {gUnknown_083B59C8, 10, 11, 18}, - {gUnknown_083B59C8, 12, 13, 18}, - {gUnknown_083B58D8, 4, 5, 6}, - {gUnknown_083B58C0, 2, 3, 2}, +static const u8 sPokedexModes[] = {0, 1}; +static const u8 sOrderOptions[] = {0, 1, 2, 3, 4, 5}; +static const u8 sDexSearchTypeIds[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17}; +static const struct SearchOption sSearchOptions[] = +{ + { sDexSearchNameOptions, 6, 7, 10}, + { sDexSearchColorOptions, 8, 9, 11}, + { sDexSearchTypeOptions, 10, 11, 18}, + { sDexSearchTypeOptions, 12, 13, 18}, + { sDexOrderOptions, 4, 5, 6}, + { sDexModeOptions, 2, 3, 2}, }; static const u8 gUnknown_083B5AAC[] = _("{STR_VAR_1}{CLEAR_TO 43}"); static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}"); @@ -1188,105 +1198,105 @@ static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}"); static void MainCB(void); static void Task_PokedexShowMainScreen(u8 taskId); static void Task_PokedexMainScreen(u8 taskId); -static void sub_808C898(u8 taskId); +static void Task_WaitForScroll(u8 taskId); static void Task_PokedexMainScreenMenu(u8 taskId); -static void sub_808CA64(u8 taskId); -static void sub_808CAE4(u8 taskId); -static void sub_808CB8C(u8 taskId); +static void Task_OpenInfoScreenAfterMonMovement(u8 taskId); +static void Task_WaitForExitInfoScreen(u8 taskId); +static void Task_WaitForExitSearch(u8 taskId); static void Task_ClosePokedex(u8 taskId); -static void sub_808CCC4(u8 taskId); +static void Task_OpenSearchResults(u8 taskId); static void Task_PokedexResultsScreen(u8 taskId); -static void sub_808CEF8(u8 taskId); +static void Task_WaitForSearchResultsScroll(u8 taskId); static void Task_PokedexResultsScreenMenu(u8 taskId); -static void sub_808D118(u8 taskId); -static void sub_808D198(u8 taskId); +static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId); +static void Task_WaitForExitSearchResultsInfoScreen(u8 taskId); static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId); static void Task_PokedexResultsScreenExitPokedex(u8 taskId); -static bool8 sub_808D344(u8 a); -static void sub_808D640(void); +static bool8 LoadPokedexListPage(u8 a); +static void LoadPokedexBgPalette(void); static void SortPokedex(u8 dexMode, u8 sortMode); -static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d); -static void sub_808DF88(u16 a, u8 b, u8 c, u16 d); -static u8 sub_808DFE4(u16 num, u8 b, u8 c); -static void sub_808E090(u8 a, u8 b, u16 c); -static void sub_808E0CC(u16 a, u16 b); -static bool8 sub_808E208(u8 a, u8 b, u8 c); -static u16 sub_808E48C(u16 a, u16 b); -static void sub_808E6BC(void); -static u8 sub_808E71C(void); -static u8 sub_808E82C(void); -static u16 sub_808E888(u16 a1); -static u32 sub_808E8C8(u16 a, s16 b, s16 c); -static void sub_808E978(u8 a); -static void sub_808EDB8(struct Sprite *sprite); -static void sub_808EE28(struct Sprite *sprite); -static u8 sub_808F210(struct PokedexListItem *, u8); -static bool8 sub_808F250(u8 taskId); +static void CreateMonDexNum(u16 entryNum, u8 x, u8 y, u16 screenBase); +static void CreateCaughtBall(u16 owned, u8 x, u8 y, u16 screenBase); +static u8 CreateMonName(u16 num, u8 b, u8 c); +static void ClearMonListEntry(u8 x, u8 y, u16 screenBase); +static void CreateMonSpritesAtPos(u16 selectedMon, u16 b); +static bool8 UpdateDexListScroll(u8 direction, u8 monMoveIncrement, u8 scrollTimerMax); +static u16 TryDoPokedexScroll(u16 a, u16 b); +static void UpdateSelectedMonSpriteId(void); +static u8 TryDoInfoScreenScroll(void); +static u8 ClearMonSprites(void); +static u16 GetPokemonSpriteToDisplay(u16 species); +static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y); +static void CreateInterfaceSprites(u8 a); +static void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite); +static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite); +static u8 LoadInfoScreen(struct PokedexListItem *, u8); +static bool8 IsInfoScreenScrolling(u8 taskId); static u8 sub_808F284(struct PokedexListItem *, u8); static void Task_InitPageScreenMultistep(u8 taskId); static void Task_PageScreenProcessInput(u8 taskId); -static void sub_808F888(u8 taskId); +static void Task_LoadInfoScreenWaitForFade(u8 taskId); static void Task_ClosePageScreen(u8 taskId); static void Task_InitAreaScreenMultistep(u8 taskId); static void Task_AreaScreenProcessInput(u8 taskId); static void sub_808FA00(u8 taskId); static void Task_InitCryScreenMultistep(u8 taskId); static void Task_CryScreenProcessInput(u8 taskId); -static void sub_808FFBC(u8 taskId); -static void sub_8090040(u8 a); +static void Task_SwitchScreensFromCryScreen(u8 taskId); +static void LoadPlayArrowPalette(u8 cryPlaying); static void Task_InitSizeScreenMultistep(u8 taskId); static void Task_SizeScreenProcessInput(u8 taskId); -static void sub_8090498(u8 taskId); -static void sub_80904FC(u16 a); -static void sub_8090540(u16 a); -static void sub_8090584(u8 a, u16 b); +static void Task_SwitchScreensFromSizeScreen(u8 taskId); +static void LoadScreenSelectBarMain(u16 screenBase); +static void LoadScreenSelectBarSubmenu(u16 screenBase); +static void HighlightScreenSelectBarItem(u8 a, u16 b); static void sub_8090644(u8 a, u16 b); static void sub_8090750(u8); static void sub_8090A3C(u8); static void sub_8090B8C(u8); static void sub_8090C28(struct Sprite *); static void sub_8090C68(void); -static void sub_8091060(u16); -static void sub_8091154(u16 order, u8, u8); -static u8 sub_80911C8(u16 num, u8, u8); -static u8 sub_8091260(u16 num, u8, u8, u8); -static void sub_8091304(const u8 *name, u8, u8); +static void ResetOtherVideoRegisters(u16); +static void PrintEntryScreenDexNum(u16 order, u8, u8); +static u8 PrintEntryScreenSpeciesName(u16 num, u8, u8); +static u8 PrintCryScreenSpeciesName(u16 num, u8, u8, u8); +static void UnusedPrintMonName(const u8 *name, u8, u8); static void sub_8091458(u16 height, u8 i, u8 i1); static void sub_8091564(u16 weight, u8 i, u8 i1); -void sub_8091738(u16, u16, u16); -static void sub_80917CC(u16 i, u16 i1); -static u16 sub_8091818(u8, u16, u16, u16); -u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); -static void sub_8091E54(u8); -static void sub_809204C(u8); -static void sub_809207C(u8); -static void sub_809217C(u8); -static void sub_80921B0(u8); -static void sub_80923FC(u8); -static void sub_80924A4(u8); -static void sub_8092508(u8); -static void sub_80925CC(u8); -static void sub_8092644(u8); -static void sub_80927B8(u8); -static void sub_80927F0(u8); -static void sub_8092AB0(u8); -static void sub_8092AD4(u8, u8); -static void sub_8092B68(u8); -static void sub_8092C8C(u8); -static void sub_8092D78(u8); -static u8 sub_8092E10(u8, u8); -static void sub_8092EB0(u8); -static void sub_809308C(u8); +void PrintFootprint(u16 num, u16 b, u16 c); +static void sub_80C0DC0(u16 a, u16 b); +static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max); +u16 CreateMonSpriteFromNationalDexNumber(u16 num, s16 x, s16 y, u16 paletteNum); +static void Task_LoadSearchMenu(u8 taskId); +static void Task_SwitchToSearchMenuTopBar(u8 taskId); +static void Task_HandleSearchTopBarInput(u8 taskId); +static void Task_SwitchToSearchMenu(u8 taskId); +static void Task_HandleSearchMenuInput(u8 taskId); +static void Task_StartPokedexSearch(u8 taskId); +static void Task_WaitAndCompleteSearch(u8 taskId); +static void Task_SearchCompleteWaitForInput(u8 taskId); +static void Task_SelectSearchMenuItem(u8 taskId); +static void Task_HandleSearchParameterInput(u8 taskId); +static void Task_ExitSearch(u8 taskId); +static void Task_ExitSearchWaitForFade(u8 taskId); +static void HighlightSelectedSearchTopBarItem(u8 topBarItem); +static void HighlightSelectedSearchMenuItem(u8 topBarItem, u8 menuItem); +static void PrintSelectedSearchParameters(u8 taskId); +static void DrawOrEraseSearchParameterBox(bool8 erase); +static void PrintSearchParameterText(u8 taskId); +static u8 GetSearchModeSelection(u8 taskId, u8 b); +static void SetDefaultSearchModeAndOrder(u8 taskId); +static void CreateSearchParameterScrollArrows(u8 taskId); void ResetPokedex(void) { u16 i; - gUnknown_0202FFB8 = 0; - gUnknown_0202FFBA = 0x40; - gUnknown_03005CE8 = 0; - gSaveBlock2.pokedex.unknown1 = 0; + sLastSelectedPokemon = 0; + sPokeBallRotation = 0x40; + gUnusedPokedexU8 = 0; + gSaveBlock2.pokedex.mode = 0; gSaveBlock2.pokedex.order = 0; gSaveBlock2.pokedex.nationalMagic = 0; gSaveBlock2.pokedex.unknown2 = 0; @@ -1294,7 +1304,7 @@ void ResetPokedex(void) gSaveBlock2.pokedex.spindaPersonality = 0; gSaveBlock2.pokedex.unknown3 = 0; DisableNationalPokedex(); - for (i = 0; i <= 51; i++) + for (i = 0; i < DEX_FLAGS_NO; i++) { gSaveBlock2.pokedex.owned[i] = 0; gSaveBlock2.pokedex.seen[i] = 0; @@ -1303,13 +1313,13 @@ void ResetPokedex(void) } } -void sub_808C0A0(void) +void ResetPokedexScrollPositions(void) { - gUnknown_0202FFB8 = 0; - gUnknown_0202FFBA = 0x40; + sLastSelectedPokemon = 0; + sPokeBallRotation = 0x40; } -static void sub_808C0B8(void) +static void VBlankCB_Pokedex(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -1322,42 +1332,42 @@ static void ClearPokedexView(struct PokedexView *pokedexView) for (i = 0; i < NATIONAL_DEX_COUNT; i++) { - pokedexView->unk0[i].dexNum |= 0xFFFF; - pokedexView->unk0[i].seen = 0; - pokedexView->unk0[i].owned = 0; + pokedexView->pokedexList[i].dexNum |= 0xFFFF; + pokedexView->pokedexList[i].seen = 0; + pokedexView->pokedexList[i].owned = 0; } - pokedexView->monData.dexNum = 0; - pokedexView->monData.seen = 0; - pokedexView->monData.owned = 0; + pokedexView->pokedexList[NATIONAL_DEX_COUNT].dexNum = 0; + pokedexView->pokedexList[NATIONAL_DEX_COUNT].seen = 0; + pokedexView->pokedexList[NATIONAL_DEX_COUNT].owned = 0; pokedexView->pokemonListCount = 0; pokedexView->selectedPokemon = 0; - pokedexView->unk610 = 0; + pokedexView->selectedPokemonBackup = 0; pokedexView->dexMode = 0; - pokedexView->unk614 = 0; + pokedexView->dexModeBackup = 0; pokedexView->dexOrder = 0; - pokedexView->unk618 = 0; - pokedexView->unk61A = 0; - pokedexView->unk61C = 0; + pokedexView->dexOrderBackup = 0; + pokedexView->seenCount = 0; + pokedexView->ownCount = 0; for (i = 0; i < 4; i++) - pokedexView->unk61E[i] |= 0xFFFF; - pokedexView->unk628 = 0; - pokedexView->unk62A = 0; - pokedexView->unk62C = 0; - pokedexView->unk62D = 0; - pokedexView->unk62E = 0; - pokedexView->unk62F = 0; - pokedexView->unk630 = 0; - pokedexView->unk632 = 0; - pokedexView->unk634 = 0; - pokedexView->unk636 = 0; - pokedexView->unk638 = 0; + pokedexView->monSpriteIds[i] |= 0xFFFF; + pokedexView->pokeBallRotationStep = 0; + pokedexView->pokeBallRotationBackup = 0; + pokedexView->pokeBallRotation = 0; + pokedexView->initialVOffset = 0; + pokedexView->scrollTimer = 0; + pokedexView->scrollDirection = 0; + pokedexView->listVOffset = 0; + pokedexView->listMovingVOffset = 0; + pokedexView->scrollMonIncrement = 0; + pokedexView->maxScrollTimer = 0; + pokedexView->scrollSpeed = 0; for (i = 0; i < 4; i++) pokedexView->unk63A[i] = 0; - pokedexView->unk64A = 0; - pokedexView->unk64B = 0; - pokedexView->unk64C_1 = 0; + pokedexView->currentPage = 0; + pokedexView->currentPageBackup = 0; + pokedexView->isSearchResults = 0; pokedexView->selectedScreen = 0; - pokedexView->unk64F = 0; + pokedexView->screenSwitchState = 0; pokedexView->menuIsOpen = 0; pokedexView->menuCursorPos = 0; pokedexView->menuY = 0; @@ -1374,7 +1384,7 @@ void CB2_InitPokedex(void) case 0: default: SetVBlankCallback(NULL); - sub_8091060(0); + ResetOtherVideoRegisters(0); DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000); DmaClear32(3, OAM, OAM_SIZE); DmaClear16(3, PLTT, PLTT_SIZE); @@ -1410,25 +1420,25 @@ void CB2_InitPokedex(void) } ClearPokedexView(gPokedexView); CreateTask(Task_PokedexShowMainScreen, 0); - gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1; + gPokedexView->dexMode = gSaveBlock2.pokedex.mode; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; gPokedexView->dexOrder = gSaveBlock2.pokedex.order; - gPokedexView->selectedPokemon = gUnknown_0202FFB8; - gPokedexView->unk62C = gUnknown_0202FFBA; + gPokedexView->selectedPokemon = sLastSelectedPokemon; + gPokedexView->pokeBallRotation = sPokeBallRotation; gPokedexView->selectedScreen = PAGE_SCREEN; gPokedexView->descriptionPageNum = 0; if (!IsNationalPokedexEnabled()) { - gPokedexView->unk61A = GetHoennPokedexCount(0); - gPokedexView->unk61C = GetHoennPokedexCount(1); + gPokedexView->seenCount = GetHoennPokedexCount(0); + gPokedexView->ownCount = GetHoennPokedexCount(1); } else { - gPokedexView->unk61A = GetNationalPokedexCount(0); - gPokedexView->unk61C = GetNationalPokedexCount(1); + gPokedexView->seenCount = GetNationalPokedexCount(0); + gPokedexView->ownCount = GetNationalPokedexCount(1); } - gPokedexView->unk62D = 8; + gPokedexView->initialVOffset = 8; gMain.state++; break; case 3: @@ -1437,10 +1447,10 @@ void CB2_InitPokedex(void) savedIme = REG_IME; REG_IME = 0; - REG_IE |= 1; + REG_IE |= INTR_FLAG_VBLANK; REG_IME = savedIme; - REG_DISPSTAT |= 8; - SetVBlankCallback(sub_808C0B8); + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB_Pokedex); SetMainCallback2(MainCB); SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80); @@ -1449,27 +1459,28 @@ void CB2_InitPokedex(void) } } +UNUSED u8 unref_sub_808C540(void (*func)(u8)) { u16 savedIme; u8 taskId; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); ScanlineEffect_Stop(); ResetTasks(); ResetPaletteFade(); savedIme = REG_IME; REG_IME = 0; - REG_IE |= 1; + REG_IE |= INTR_FLAG_VBLANK; REG_IME = savedIme; - REG_DISPSTAT |= 0x8; - SetVBlankCallback(sub_808C0B8); + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB_Pokedex); SetMainCallback2(MainCB); - if (!gPokedexView->unk64B) - taskId = CreateTask(sub_808CAE4, 0); + if (!gPokedexView->currentPageBackup) + taskId = CreateTask(Task_WaitForExitInfoScreen, 0); else - taskId = CreateTask(sub_808D198, 0); + taskId = CreateTask(Task_WaitForExitSearchResultsInfoScreen, 0); gTasks[taskId].data[0] = CreateTask(func, 0); return gTasks[taskId].data[0]; } @@ -1484,8 +1495,8 @@ static void MainCB(void) static void Task_PokedexShowMainScreen(u8 taskId) { - gPokedexView->unk64C_1 = 0; - if (sub_808D344(0)) + gPokedexView->isSearchResults = 0; + if (LoadPokedexListPage(0)) gTasks[taskId].func = Task_PokedexMainScreen; } @@ -1499,14 +1510,14 @@ void Task_PokedexMainScreen(u8 taskId) gPokedexView->menuY -= 8; else { - if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) + if ((gMain.newKeys & A_BUTTON) && gPokedexView->pokedexList[gPokedexView->selectedPokemon].seen) { - sub_808E6BC(); + UpdateSelectedMonSpriteId(); BeginNormalPaletteFade( ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 16, RGB(0, 0, 0)); - gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; - gTasks[taskId].func = sub_808CA64; + gSprites[gPokedexView->selectedMonSpriteId].callback = SpriteCB_MoveMonForInfoScreen; + gTasks[taskId].func = Task_OpenInfoScreenAfterMonMovement; PlaySE(SE_PIN); } else if (gMain.newKeys & START_BUTTON) @@ -1522,13 +1533,13 @@ void Task_PokedexMainScreen(u8 taskId) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].data[0] = sub_8091E3C(); - gPokedexView->unk64F = 0; - gPokedexView->unk62A = gPokedexView->unk62C; - gPokedexView->unk610 = gPokedexView->selectedPokemon; - gPokedexView->unk614 = gPokedexView->dexMode; - gPokedexView->unk618 = gPokedexView->dexOrder; - gTasks[taskId].func = sub_808CB8C; + gTasks[taskId].data[0] = LoadSearchMenu(); + gPokedexView->screenSwitchState = 0; + gPokedexView->pokeBallRotationBackup = gPokedexView->pokeBallRotation; + gPokedexView->selectedPokemonBackup = gPokedexView->selectedPokemon; + gPokedexView->dexModeBackup = gPokedexView->dexMode; + gPokedexView->dexOrderBackup = gPokedexView->dexOrder; + gTasks[taskId].func = Task_WaitForExitSearch; PlaySE(SE_PC_LOGIN); } else if (gMain.newKeys & B_BUTTON) @@ -1540,16 +1551,18 @@ void Task_PokedexMainScreen(u8 taskId) else { //Handle D-pad - gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); - if (gPokedexView->unk62E) - gTasks[taskId].func = sub_808C898; + gPokedexView->selectedPokemon = TryDoPokedexScroll(gPokedexView->selectedPokemon, 0xE); + if (gPokedexView->scrollTimer) + gTasks[taskId].func = Task_WaitForScroll; } } } -static void sub_808C898(u8 taskId) +static void Task_WaitForScroll(u8 taskId) { - if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) + if (UpdateDexListScroll(gPokedexView->scrollDirection, + gPokedexView->scrollMonIncrement, + gPokedexView->maxScrollTimer)) gTasks[taskId].func = Task_PokedexMainScreen; } @@ -1573,16 +1586,16 @@ static void Task_PokedexMainScreenMenu(u8 taskId) break; case 1: //LIST TOP gPokedexView->selectedPokemon = 0; - gPokedexView->unk62C = 0x40; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = 0x40; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; case 2: //LIST BOTTOM gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; - gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = gPokedexView->pokemonListCount * 16 + 0x30; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; case 3: //CLOSE POKEDEX @@ -1613,52 +1626,52 @@ static void Task_PokedexMainScreenMenu(u8 taskId) } } -static void sub_808CA64(u8 taskId) +static void Task_OpenInfoScreenAfterMonMovement(u8 taskId) { if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) { - gPokedexView->unk64B = gPokedexView->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); - gTasks[taskId].func = sub_808CAE4; + gPokedexView->currentPageBackup = gPokedexView->currentPage; + gTasks[taskId].data[0] = LoadInfoScreen(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); + gTasks[taskId].func = Task_WaitForExitInfoScreen; } } -static void sub_808CAE4(u8 taskId) +static void Task_WaitForExitInfoScreen(u8 taskId) { if (gTasks[gTasks[taskId].data[0]].isActive) { - if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) - sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); + if (gPokedexView->currentPage == 1 && !IsInfoScreenScrolling(gTasks[taskId].data[0]) && TryDoInfoScreenScroll()) + sub_808F284(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); } else { - gUnknown_0202FFB8 = gPokedexView->selectedPokemon; - gUnknown_0202FFBA = gPokedexView->unk62C; + sLastSelectedPokemon = gPokedexView->selectedPokemon; + sPokeBallRotation = gPokedexView->pokeBallRotation; gTasks[taskId].func = Task_PokedexShowMainScreen; } } -static void sub_808CB8C(u8 taskId) +static void Task_WaitForExitSearch(u8 taskId) { bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive; if (!isActive) { - if (gPokedexView->unk64F != 0) + if (gPokedexView->screenSwitchState != 0) { gPokedexView->selectedPokemon = isActive; - gPokedexView->unk62C = 0x40; - gTasks[taskId].func = sub_808CCC4; + gPokedexView->pokeBallRotation = 0x40; + gTasks[taskId].func = Task_OpenSearchResults; } else { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; + gPokedexView->pokeBallRotation = gPokedexView->pokeBallRotationBackup; + gPokedexView->selectedPokemon = gPokedexView->selectedPokemonBackup; + gPokedexView->dexMode = gPokedexView->dexModeBackup; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; + gPokedexView->dexOrder = gPokedexView->dexOrderBackup; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -1668,9 +1681,9 @@ static void Task_ClosePokedex(u8 taskId) { if (!gPaletteFade.active) { - gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode; + gSaveBlock2.pokedex.mode = gPokedexView->dexMode; if (!IsNationalPokedexEnabled()) - gSaveBlock2.pokedex.unknown1 = 0; + gSaveBlock2.pokedex.mode = 0; gSaveBlock2.pokedex.order = gPokedexView->dexOrder; DestroyTask(taskId); SetMainCallback2(c2_exit_to_overworld_1_sub_8080DEC); @@ -1678,10 +1691,10 @@ static void Task_ClosePokedex(u8 taskId) } } -static void sub_808CCC4(u8 taskId) +static void Task_OpenSearchResults(u8 taskId) { - gPokedexView->unk64C_1 = 1; - if (sub_808D344(3)) + gPokedexView->isSearchResults = 1; + if (LoadPokedexListPage(3)) gTasks[taskId].func = Task_PokedexResultsScreen; } @@ -1695,15 +1708,15 @@ static void Task_PokedexResultsScreen(u8 taskId) } else { - if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) + if ((gMain.newKeys & A_BUTTON) && gPokedexView->pokedexList[gPokedexView->selectedPokemon].seen) { u32 excludedPalettes; - sub_808E6BC(); + UpdateSelectedMonSpriteId(); excludedPalettes = (1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)); - gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; + gSprites[gPokedexView->selectedMonSpriteId].callback = SpriteCB_MoveMonForInfoScreen; BeginNormalPaletteFade(~excludedPalettes, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_808D118; + gTasks[taskId].func = Task_OpenSearchResultsInfoScreenAfterMonMovement; PlaySE(SE_PIN); } else if (gMain.newKeys & START_BUTTON) @@ -1717,9 +1730,9 @@ static void Task_PokedexResultsScreen(u8 taskId) else if (gMain.newKeys & SELECT_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].data[0] = sub_8091E3C(); - gPokedexView->unk64F = 0; - gTasks[taskId].func = sub_808CB8C; + gTasks[taskId].data[0] = LoadSearchMenu(); + gPokedexView->screenSwitchState = 0; + gTasks[taskId].func = Task_WaitForExitSearch; PlaySE(SE_PC_LOGIN); } else if (gMain.newKeys & B_BUTTON) @@ -1731,16 +1744,18 @@ static void Task_PokedexResultsScreen(u8 taskId) else { //Handle D-pad - gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); - if (gPokedexView->unk62E) - gTasks[taskId].func = sub_808CEF8; + gPokedexView->selectedPokemon = TryDoPokedexScroll(gPokedexView->selectedPokemon, 0xE); + if (gPokedexView->scrollTimer) + gTasks[taskId].func = Task_WaitForSearchResultsScroll; } } } -static void sub_808CEF8(u8 taskId) +static void Task_WaitForSearchResultsScroll(u8 taskId) { - if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) + if (UpdateDexListScroll(gPokedexView->scrollDirection, + gPokedexView->scrollMonIncrement, + gPokedexView->maxScrollTimer)) gTasks[taskId].func = Task_PokedexResultsScreen; } @@ -1764,16 +1779,16 @@ static void Task_PokedexResultsScreenMenu(u8 taskId) break; case 1: //LIST TOP gPokedexView->selectedPokemon = 0; - gPokedexView->unk62C = 0x40; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = 0x40; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; case 2: //LIST BOTTOM gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; - gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = gPokedexView->pokemonListCount * 16 + 0x30; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; case 3: //BACK TO POKEDEX @@ -1809,27 +1824,27 @@ static void Task_PokedexResultsScreenMenu(u8 taskId) } } -static void sub_808D118(u8 taskId) +static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId) { if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) { - gPokedexView->unk64B = gPokedexView->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); - gTasks[taskId].func = sub_808D198; + gPokedexView->currentPageBackup = gPokedexView->currentPage; + gTasks[taskId].data[0] = LoadInfoScreen(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); + gTasks[taskId].func = Task_WaitForExitSearchResultsInfoScreen; } } -static void sub_808D198(u8 taskId) +static void Task_WaitForExitSearchResultsInfoScreen(u8 taskId) { if (gTasks[gTasks[taskId].data[0]].isActive) { - if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) - sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); + if (gPokedexView->currentPage == 1 && !IsInfoScreenScrolling(gTasks[taskId].data[0]) && TryDoInfoScreenScroll()) + sub_808F284(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); } else { - gTasks[taskId].func = sub_808CCC4; + gTasks[taskId].func = Task_OpenSearchResults; } } @@ -1837,12 +1852,12 @@ static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId) { if (!gPaletteFade.active) { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; + gPokedexView->pokeBallRotation = gPokedexView->pokeBallRotationBackup; + gPokedexView->selectedPokemon = gPokedexView->selectedPokemonBackup; + gPokedexView->dexMode = gPokedexView->dexModeBackup; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; + gPokedexView->dexOrder = gPokedexView->dexOrderBackup; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -1851,17 +1866,17 @@ static void Task_PokedexResultsScreenExitPokedex(u8 taskId) { if (!gPaletteFade.active) { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; + gPokedexView->pokeBallRotation = gPokedexView->pokeBallRotationBackup; + gPokedexView->selectedPokemon = gPokedexView->selectedPokemonBackup; + gPokedexView->dexMode = gPokedexView->dexModeBackup; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; + gPokedexView->dexOrder = gPokedexView->dexOrderBackup; gTasks[taskId].func = Task_ClosePokedex; } } -static bool8 sub_808D344(u8 a) +static bool8 LoadPokedexListPage(u8 a) { switch (gMain.state) { @@ -1870,32 +1885,32 @@ static bool8 sub_808D344(u8 a) if (gPaletteFade.active) return 0; SetVBlankCallback(NULL); - gPokedexView->unk64A = a; - sub_8091060(0); - REG_BG2VOFS = gPokedexView->unk62D; + gPokedexView->currentPage = a; + ResetOtherVideoRegisters(0); + REG_BG2VOFS = gPokedexView->initialVOffset; LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM)); LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800)); LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800)); DmaClear16(3, VRAM + 0x6000, 0x500); if (a == 0) - LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500)); + LZ77UnCompVram(gPokedexStartMenuMain_Tilemap, (void *)(VRAM + 0x6500)); else - LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500)); + LZ77UnCompVram(gPokedexStartMenuSearchResults_Tilemap, (void *)(VRAM + 0x6500)); ResetPaletteFade(); if (a == 0) - gPokedexView->unk64C_1 = 0; + gPokedexView->isSearchResults = 0; else - gPokedexView->unk64C_1 = 1; - sub_808D640(); + gPokedexView->isSearchResults = 1; + LoadPokedexBgPalette(); gMain.state = 1; break; case 1: ResetSpriteData(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; - LoadCompressedObjectPic(&gUnknown_083A05CC[0]); - LoadSpritePalettes(gUnknown_083A05DC); - sub_808E978(a); + LoadCompressedObjectPic(&sInterfaceSpriteSheet[0]); + LoadSpritePalettes(sInterfaceSpritePalette); + CreateInterfaceSprites(a); gMain.state++; break; case 2: @@ -1907,14 +1922,14 @@ static bool8 sub_808D344(u8 a) case 3: if (a == 0) SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gPokedexView->menuIsOpen = 0; gPokedexView->menuY = 0; gMain.state++; break; case 4: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(sub_808C0B8); + SetVBlankCallback(VBlankCB_Pokedex); gMain.state++; break; case 5: @@ -1944,9 +1959,9 @@ static bool8 sub_808D344(u8 a) return FALSE; } -static void sub_808D640(void) +static void LoadPokedexBgPalette(void) { - if (gPokedexView->unk64C_1) + if (gPokedexView->isSearchResults) LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16)); else if (!IsNationalPokedexEnabled()) LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE); @@ -1990,10 +2005,10 @@ static void SortPokedex(u8 dexMode, u8 sortMode) for (i = 0; i < vars[0]; i++) { vars[2] = HoennToNationalOrder(i + 1); - gPokedexView->unk0[i].dexNum = vars[2]; - gPokedexView->unk0[i].seen = GetSetPokedexFlag(vars[2], 0); - gPokedexView->unk0[i].owned = GetSetPokedexFlag(vars[2], 1); - if (gPokedexView->unk0[i].seen) + gPokedexView->pokedexList[i].dexNum = vars[2]; + gPokedexView->pokedexList[i].seen = GetSetPokedexFlag(vars[2], 0); + gPokedexView->pokedexList[i].owned = GetSetPokedexFlag(vars[2], 1); + if (gPokedexView->pokedexList[i].seen) gPokedexView->pokemonListCount = i + 1; } } @@ -2006,10 +2021,10 @@ static void SortPokedex(u8 dexMode, u8 sortMode) r10 = 1; if (r10) { - gPokedexView->unk0[r5].dexNum = vars[2]; - gPokedexView->unk0[r5].seen = GetSetPokedexFlag(vars[2], 0); - gPokedexView->unk0[r5].owned = GetSetPokedexFlag(vars[2], 1); - if (gPokedexView->unk0[r5].seen) + gPokedexView->pokedexList[r5].dexNum = vars[2]; + gPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(vars[2], 0); + gPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(vars[2], 1); + if (gPokedexView->pokedexList[r5].seen) gPokedexView->pokemonListCount = r5 + 1; r5++; } @@ -2023,9 +2038,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1); + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1); gPokedexView->pokemonListCount++; } } @@ -2037,9 +2052,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2051,9 +2066,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2065,9 +2080,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2079,9 +2094,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2090,103 +2105,104 @@ static void SortPokedex(u8 dexMode, u8 sortMode) for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) { - gPokedexView->unk0[i].dexNum |= 0xFFFF; - gPokedexView->unk0[i].seen = 0; - gPokedexView->unk0[i].owned = 0; + gPokedexView->pokedexList[i].dexNum |= 0xFFFF; + gPokedexView->pokedexList[i].seen = 0; + gPokedexView->pokedexList[i].owned = 0; } } -static void sub_808DBE8(u8 a, u16 b, u16 c) +static void CreateMonListEntry(u8 position, u16 b, u16 screenBase) { - s16 _b; + s16 entryNum; u16 i; u16 r2; - switch (a) + switch (position) { case 0: default: - _b = b - 5; + entryNum = b - 5; for (i = 0; i <= 10; i++) { - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - sub_808E090(0x11, i * 2, c); + ClearMonListEntry(0x11, i * 2, screenBase); } else { - sub_808E090(0x11, i * 2, c); - if (gPokedexView->unk0[_b].seen) + ClearMonListEntry(0x11, i * 2, screenBase); + if (gPokedexView->pokedexList[entryNum].seen) { - sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2); + CreateMonDexNum(entryNum, 0x12, i * 2, screenBase); + CreateCaughtBall(gPokedexView->pokedexList[entryNum].owned, 0x11, i * 2, screenBase); + CreateMonName(gPokedexView->pokedexList[entryNum].dexNum, 0x17, i * 2); } else { - sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(0, 0x11, i * 2, c); - sub_808DFE4(0, 0x17, i * 2); + CreateMonDexNum(entryNum, 0x12, i * 2, screenBase); + CreateCaughtBall(0, 0x11, i * 2, screenBase); + CreateMonName(0, 0x17, i * 2); } } - _b++; + entryNum++; } break; case 1: - _b = b - 5; - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + entryNum = b - 5; + if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - sub_808E090(0x11, gPokedexView->unk630 * 2, c); + ClearMonListEntry(0x11, gPokedexView->listVOffset * 2, screenBase); } else { - sub_808E090(0x11, gPokedexView->unk630 * 2, c); - if (gPokedexView->unk0[_b].seen) + ClearMonListEntry(0x11, gPokedexView->listVOffset * 2, screenBase); + if (gPokedexView->pokedexList[entryNum].seen) { - sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2); + CreateMonDexNum(entryNum, 0x12, gPokedexView->listVOffset * 2, screenBase); + CreateCaughtBall(gPokedexView->pokedexList[entryNum].owned, 0x11, gPokedexView->listVOffset * 2, + screenBase); + CreateMonName(gPokedexView->pokedexList[entryNum].dexNum, 0x17, gPokedexView->listVOffset * 2); } else { - sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); - sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c); - sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2); + CreateMonDexNum(entryNum, 0x12, gPokedexView->listVOffset * 2, screenBase); + CreateCaughtBall(0, 0x11, gPokedexView->listVOffset * 2, screenBase); + CreateMonName(0, 0x17, gPokedexView->listVOffset * 2); } } break; case 2: - _b = b + 5; - r2 = gPokedexView->unk630 + 10; + entryNum = b + 5; + r2 = gPokedexView->listVOffset + 10; if (r2 > 15) r2 -= 16; - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) - sub_808E090(0x11, r2 * 2, c); + if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) + ClearMonListEntry(0x11, r2 * 2, screenBase); else { - sub_808E090(0x11, r2 * 2, c); - if (gPokedexView->unk0[_b].seen) + ClearMonListEntry(0x11, r2 * 2, screenBase); + if (gPokedexView->pokedexList[entryNum].seen) { - sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2); + CreateMonDexNum(entryNum, 0x12, r2 * 2, screenBase); + CreateCaughtBall(gPokedexView->pokedexList[entryNum].owned, 0x11, r2 * 2, screenBase); + CreateMonName(gPokedexView->pokedexList[entryNum].dexNum, 0x17, r2 * 2); } else { - sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(0, 0x11, r2 * 2, c); - sub_808DFE4(0, 0x17, r2 * 2); + CreateMonDexNum(entryNum, 0x12, r2 * 2, screenBase); + CreateCaughtBall(0, 0x11, r2 * 2, screenBase); + CreateMonName(0, 0x17, r2 * 2); } } break; } } -static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) +static void CreateMonDexNum(u16 entryNum, u8 x, u8 y, u16 screenBase) { u8 text[4]; u16 unk[2]; - u16 r7 = gPokedexView->unk0[a].dexNum; + u16 r7 = gPokedexView->pokedexList[entryNum].dexNum; if (gPokedexView->dexMode == DEX_MODE_HOENN) r7 = NationalToHoennOrder(r7); @@ -2196,16 +2212,16 @@ static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) text[1] = CHAR_0 + (r7 % 100) / 10; text[2] = CHAR_0 + (r7 % 100) % 10; text[3] = EOS; - *(u16 *)(BG_VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; - *(u16 *)(BG_VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; - Menu_PrintText(text, b - 15, c); + *(u16 *)(BG_VRAM + screenBase * 0x800 + y * 0x40 + x * 2) = unk[0]; + *(u16 *)(BG_VRAM + screenBase * 0x800 + (y + 1) * 0x40 + x * 2) = unk[1]; + Menu_PrintText(text, x - 15, y); } -static void sub_808DF88(u16 a, u8 b, u8 c, u16 d) +static void CreateCaughtBall(u16 owned, u8 x, u8 y, u16 screenBase) { u16 unk[2]; - if (a) + if (owned) { unk[0] = 0x3FE; unk[1] = 0x3FF; @@ -2215,11 +2231,11 @@ static void sub_808DF88(u16 a, u8 b, u8 c, u16 d) unk[0] = 0; unk[1] = 0; } - *(u16 *)(BG_VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; - *(u16 *)(BG_VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; + *(u16 *)(BG_VRAM + screenBase * 0x800 + y * 0x40 + x * 2) = unk[0]; + *(u16 *)(BG_VRAM + screenBase * 0x800 + (y + 1) * 0x40 + x * 2) = unk[1]; } -static u8 sub_808DFE4(u16 num, u8 b, u8 c) +static u8 CreateMonName(u16 num, u8 b, u8 c) { u8 text[POKEMON_NAME_LENGTH + (MODERN ? 1 : 0)]; u8 i; @@ -2244,136 +2260,136 @@ static u8 sub_808DFE4(u16 num, u8 b, u8 c) return i; } -static void sub_808E090(u8 a, u8 b, u16 c) +static void ClearMonListEntry(u8 x, u8 y, u16 screenBase) { u8 i; for (i = 0; i < 12; i++) { - *(u16 *)(BG_VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0; - *(u16 *)(BG_VRAM + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0; + *(u16 *)(BG_VRAM + screenBase * 0x800 + y * 64 + (x + i) * 2) = 0; + *(u16 *)(BG_VRAM + screenBase * 0x800 + (y + 1) * 64 + (x + i) * 2) = 0; } } -static void sub_808E0CC(u16 a, u16 b) +static void CreateMonSpritesAtPos(u16 selectedMon, u16 b) { u8 i; u16 unk; u8 spriteId; for (i = 0; i < 4; i++) - gPokedexView->unk61E[i] = 0xFFFF; + gPokedexView->monSpriteIds[i] = 0xFFFF; gPokedexView->selectedMonSpriteId = 0xFFFF; - sub_808DBE8(0, a, b); - REG_BG2VOFS = gPokedexView->unk62D; + CreateMonListEntry(0, selectedMon, b); + REG_BG2VOFS = gPokedexView->initialVOffset; - unk = sub_808E888(a - 1); + unk = GetPokemonSpriteToDisplay(selectedMon - 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -32; } - unk = sub_808E888(a); + unk = GetPokemonSpriteToDisplay(selectedMon); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 0; } - unk = sub_808E888(a + 1); + unk = GetPokemonSpriteToDisplay(selectedMon + 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 32; } - gPokedexView->unk630 = 0; - gPokedexView->unk632 = 0; + gPokedexView->listVOffset = 0; + gPokedexView->listMovingVOffset = 0; } -static bool8 sub_808E208(u8 a, u8 b, u8 c) +static bool8 UpdateDexListScroll(u8 direction, u8 monMoveIncrement, u8 scrollTimerMax) { u16 i; u8 foo; - if (gPokedexView->unk62E) + if (gPokedexView->scrollTimer) { - gPokedexView->unk62E--; - switch (a) + gPokedexView->scrollTimer--; + switch (direction) { case 1: for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data[5] += b; + if (gPokedexView->monSpriteIds[i] != 0xFFFF) + gSprites[gPokedexView->monSpriteIds[i]].data[5] += monMoveIncrement; } - foo = 16 * (c - gPokedexView->unk62E) / c; - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo; - gPokedexView->unk62C -= gPokedexView->unk628; + foo = 16 * (scrollTimerMax - gPokedexView->scrollTimer) / scrollTimerMax; + REG_BG2VOFS = gPokedexView->initialVOffset + gPokedexView->listMovingVOffset * 16 - foo; + gPokedexView->pokeBallRotation -= gPokedexView->pokeBallRotationStep; break; case 2: for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data[5] -= b; + if (gPokedexView->monSpriteIds[i] != 0xFFFF) + gSprites[gPokedexView->monSpriteIds[i]].data[5] -= monMoveIncrement; } - foo = 16 * (c - gPokedexView->unk62E) / c; - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo; - gPokedexView->unk62C += gPokedexView->unk628; + foo = 16 * (scrollTimerMax - gPokedexView->scrollTimer) / scrollTimerMax; + REG_BG2VOFS = gPokedexView->initialVOffset + gPokedexView->listMovingVOffset * 16 + foo; + gPokedexView->pokeBallRotation += gPokedexView->pokeBallRotationStep; break; } return FALSE; } else { - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16; + REG_BG2VOFS = gPokedexView->initialVOffset + gPokedexView->listVOffset * 16; return TRUE; } } -static void sub_808E398(u8 a, u16 b) +static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) { u16 unk; u8 spriteId; - gPokedexView->unk632 = gPokedexView->unk630; - switch (a) + gPokedexView->listMovingVOffset = gPokedexView->listVOffset; + switch (direction) { case 1: - unk = sub_808E888(b - 1); + unk = GetPokemonSpriteToDisplay(selectedMon - 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -64; } - if (gPokedexView->unk630 > 0) - gPokedexView->unk630--; + if (gPokedexView->listVOffset > 0) + gPokedexView->listVOffset--; else - gPokedexView->unk630 = 15; + gPokedexView->listVOffset = 15; break; case 2: - unk = sub_808E888(b + 1); + unk = GetPokemonSpriteToDisplay(selectedMon + 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 0x40; } - if (gPokedexView->unk630 <= 0xE) - gPokedexView->unk630++; + if (gPokedexView->listVOffset <= 0xE) + gPokedexView->listVOffset++; else - gPokedexView->unk630 = 0; + gPokedexView->listVOffset = 0; break; } } // Ugly, ugly, ugly. I couldn't get it to match otherwise. -static u16 sub_808E48C(u16 a, u16 b) +static u16 TryDoPokedexScroll(u16 a, u16 b) { u8 r3; u8 r5; @@ -2392,10 +2408,10 @@ static u16 sub_808E48C(u16 a, u16 b) r6 = a; //_0808E4E0 for (i = 0; i < 7; i++) - a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); - gPokedexView->unk62C += 16 * (a - r6); - sub_808E82C(); - sub_808E0CC(a, 0xE); + a = GetNextPosition(1, a, 0, gPokedexView->pokemonListCount - 1); + gPokedexView->pokeBallRotation += 16 * (a - r6); + ClearMonSprites(); + CreateMonSpritesAtPos(a, 0xE); PlaySE(0x6D); } //_0808E53C @@ -2403,16 +2419,16 @@ static u16 sub_808E48C(u16 a, u16 b) { r6 = a; for (i = 0; i < 7; i++) - a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); - gPokedexView->unk62C += (a - r6) * 16; - sub_808E82C(); - sub_808E0CC(a, 0xE); + a = GetNextPosition(0, a, 0, gPokedexView->pokemonListCount - 1); + gPokedexView->pokeBallRotation += (a - r6) * 16; + ClearMonSprites(); + CreateMonSpritesAtPos(a, 0xE); PlaySE(0x6D); } _0808E5A2: if (r10 == 0) { - gPokedexView->unk638 = 0; + gPokedexView->scrollSpeed = 0; return a; } } @@ -2420,10 +2436,10 @@ static u16 sub_808E48C(u16 a, u16 b) { // to _0808E5C4 r10 = 2; - a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); - sub_808E398(2, a); + a = GetNextPosition(0, a, 0, gPokedexView->pokemonListCount - 1); + CreateScrollingPokemonSprite(2, a); //goto _0808E60E - sub_808DBE8(2, a, b); + CreateMonListEntry(2, a, b); PlaySE(0x6C); goto _0808E5A2; } @@ -2432,41 +2448,43 @@ static u16 sub_808E48C(u16 a, u16 b) { //to _0808E5E4 r10 = 1; - a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); - sub_808E398(1, a); + a = GetNextPosition(1, a, 0, gPokedexView->pokemonListCount - 1); + CreateScrollingPokemonSprite(1, a); //_0808E60E - sub_808DBE8(1, a, b); + CreateMonListEntry(1, a, b); PlaySE(0x6C); goto _0808E5A2; } //_0808E628 - r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4]; - r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4]; - gPokedexView->unk62E = r3; - gPokedexView->unk636 = r3; - gPokedexView->unk634 = r5; - gPokedexView->unk62F = r10; - gPokedexView->unk628 = r5 / 2; - sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636); - if (gPokedexView->unk638 <= 0xB) - gPokedexView->unk638++; + r5 = gUnknown_083A05EC[gPokedexView->scrollSpeed / 4]; + r3 = gUnknown_083A05F1[gPokedexView->scrollSpeed / 4]; + gPokedexView->scrollTimer = r3; + gPokedexView->maxScrollTimer = r3; + gPokedexView->scrollMonIncrement = r5; + gPokedexView->scrollDirection = r10; + gPokedexView->pokeBallRotationStep = r5 / 2; + UpdateDexListScroll(gPokedexView->scrollDirection, + gPokedexView->scrollMonIncrement, + gPokedexView->maxScrollTimer); + if (gPokedexView->scrollSpeed <= 0xB) + gPokedexView->scrollSpeed++; return a; } -static void sub_808E6BC(void) +static void UpdateSelectedMonSpriteId(void) { u16 i; for (i = 0; i < 4; i++) { - u16 spriteId = gPokedexView->unk61E[i]; + u16 spriteId = gPokedexView->monSpriteIds[i]; if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF) gPokedexView->selectedMonSpriteId = spriteId; } } -static u8 sub_808E71C(void) +static u8 TryDoInfoScreenScroll(void) { u16 r2; u16 r4 = gPokedexView->selectedPokemon; @@ -2476,9 +2494,9 @@ static u8 sub_808E71C(void) r2 = r4; while (r2 != 0) { - r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1); + r2 = GetNextPosition(1, r2, 0, gPokedexView->pokemonListCount - 1); - if (gPokedexView->unk0[r2].seen) + if (gPokedexView->pokedexList[r2].seen) { r4 = r2; break; @@ -2490,7 +2508,7 @@ static u8 sub_808E71C(void) else { gPokedexView->selectedPokemon = r4; - gPokedexView->unk62C -= 16; + gPokedexView->pokeBallRotation -= 16; return 1; } } @@ -2499,9 +2517,9 @@ static u8 sub_808E71C(void) r2 = r4; while (r2 < gPokedexView->pokemonListCount - 1) { - r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1); + r2 = GetNextPosition(0, r2, 0, gPokedexView->pokemonListCount - 1); - if (gPokedexView->unk0[r2].seen) + if (gPokedexView->pokedexList[r2].seen) { r4 = r2; break; @@ -2513,69 +2531,69 @@ static u8 sub_808E71C(void) else { gPokedexView->selectedPokemon = r4; - gPokedexView->unk62C += 16; + gPokedexView->pokeBallRotation += 16; return 1; } } return 0; } -static u8 sub_808E82C(void) +static u8 ClearMonSprites(void) { u16 i; for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] != 0xFFFF) + if (gPokedexView->monSpriteIds[i] != 0xFFFF) { - DestroySprite(&gSprites[gPokedexView->unk61E[i]]); - gPokedexView->unk61E[i] |= 0xFFFF; + DestroySprite(&gSprites[gPokedexView->monSpriteIds[i]]); + gPokedexView->monSpriteIds[i] |= 0xFFFF; } } return 0; } -static u16 sub_808E888(u16 a1) +static u16 GetPokemonSpriteToDisplay(u16 species) { - if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF) + if (species >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[species].dexNum == 0xFFFF) return 0xFFFF; - else if (gPokedexView->unk0[a1].seen) - return gPokedexView->unk0[a1].dexNum; + else if (gPokedexView->pokedexList[species].seen) + return gPokedexView->pokedexList[species].dexNum; else return 0; } -static u32 sub_808E8C8(u16 a, s16 b, s16 c) +static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y) { u8 i; for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] == 0xFFFF) + if (gPokedexView->monSpriteIds[i] == 0xFFFF) { - u8 spriteId = sub_80918EC(a, b, c, i); + u8 spriteId = CreateMonSpriteFromNationalDexNumber(num, x, y, i); - gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.priority = 3; gSprites[spriteId].data[0] = 0; gSprites[spriteId].data[1] = i; - gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(a); - gPokedexView->unk61E[i] = spriteId; + gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(num); + gPokedexView->monSpriteIds[i] = spriteId; return spriteId; } } return 0xFFFF; } -static void sub_808E978(u8 a) +static void CreateInterfaceSprites(u8 a) { u8 spriteId; u16 r5; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 4, 0); gSprites[spriteId].data[1] = 0; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 156, 0); gSprites[spriteId].data[1] = 1; gSprites[spriteId].vFlip = TRUE; @@ -2615,7 +2633,7 @@ static void sub_808E978(u8 a) _a = 0; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1); - r5 = gPokedexView->unk61A / 100; + r5 = gPokedexView->seenCount / 100; StartSpriteAnim(&gSprites[spriteId], r5); if (r5 != 0) _a = 1; @@ -2623,19 +2641,19 @@ static void sub_808E978(u8 a) gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 48, 1); - r5 = (gPokedexView->unk61A % 100) / 10; + r5 = (gPokedexView->seenCount % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1); - r5 = (gPokedexView->unk61A % 100) % 10; + r5 = (gPokedexView->seenCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); _a = 0; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1); - r5 = gPokedexView->unk61C / 100; + r5 = gPokedexView->ownCount / 100; StartSpriteAnim(&gSprites[spriteId], r5); if (r5 != 0) _a = 1; @@ -2643,14 +2661,14 @@ static void sub_808E978(u8 a) gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 80, 1); - r5 = (gPokedexView->unk61C % 100) / 10; + r5 = (gPokedexView->ownCount % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1); - r5 = (gPokedexView->unk61C % 100) % 10; + r5 = (gPokedexView->ownCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1); @@ -2663,18 +2681,18 @@ static void sub_808E978(u8 a) } } -static void nullsub_58(struct Sprite *sprite) +static void SpriteCB_EndMoveMonForInfoScreen(struct Sprite *sprite) { } -static void sub_808ED94(struct Sprite *sprite) +static void SpriteCB_SeenOwnInfo(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0) + if (gPokedexView->currentPage != 0) DestroySprite(sprite); } //Move Pokemon into position for description page -static void sub_808EDB8(struct Sprite *sprite) +static void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) { sprite->oam.priority = 0; sprite->oam.affineMode = 0; @@ -2694,18 +2712,18 @@ static void sub_808EDB8(struct Sprite *sprite) } else { - sprite->callback = nullsub_58; + sprite->callback = SpriteCB_EndMoveMonForInfoScreen; } } -static void sub_808EE28(struct Sprite *sprite) +static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite) { u8 data1 = sprite->data[1]; - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); - gPokedexView->unk61E[data1] = 0xFFFF; + gPokedexView->monSpriteIds[data1] = 0xFFFF; } else { @@ -2731,22 +2749,22 @@ static void sub_808EE28(struct Sprite *sprite) if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0) { DestroySprite(sprite); - gPokedexView->unk61E[data1] = 0xFFFF; + gPokedexView->monSpriteIds[data1] = 0xFFFF; } } } -static void sub_808EF38(struct Sprite *sprite) +static void SpriteCB_Scrollbar(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) DestroySprite(sprite); else sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1); } -static void sub_808EF8C(struct Sprite *sprite) +static void SpriteCB_ScrollArrow(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); } @@ -2779,15 +2797,15 @@ static void sub_808EF8C(struct Sprite *sprite) } } -static void sub_808F08C(struct Sprite *sprite) +static void SpriteCB_DexListInterfaceText(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) DestroySprite(sprite); } -static void sub_808F0B4(struct Sprite *sprite) +static void SpriteCB_RotatingPokeBall(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); } @@ -2797,12 +2815,12 @@ static void sub_808F0B4(struct Sprite *sprite) s16 r3; s16 r0; - val = gPokedexView->unk62C + sprite->data[1]; + val = gPokedexView->pokeBallRotation + sprite->data[1]; r3 = gSineTable[val]; r0 = gSineTable[val + 0x40]; SetOamMatrix(sprite->data[0], r0, r3, -r3, r0); - val = gPokedexView->unk62C + (sprite->data[1] + 0x40); + val = gPokedexView->pokeBallRotation + (sprite->data[1] + 0x40); r3 = gSineTable[val]; r0 = gSineTable[val + 0x40]; sprite->pos2.x = r0 * 40 / 256; @@ -2810,15 +2828,15 @@ static void sub_808F0B4(struct Sprite *sprite) } } -static void sub_808F168(struct Sprite *sprite) +static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); } else { - u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96; + u16 r1 = gPokedexView->currentPage == 0 ? 80 : 96; if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1) { @@ -2834,11 +2852,11 @@ static void sub_808F168(struct Sprite *sprite) } } -static u8 sub_808F210(struct PokedexListItem *item, u8 b) +static u8 LoadInfoScreen(struct PokedexListItem *item, u8 b) { u8 taskId; - gUnknown_0202FFBC = item; + sPokedexListItem = item; taskId = CreateTask(Task_InitPageScreenMultistep, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 1; @@ -2848,7 +2866,7 @@ static u8 sub_808F210(struct PokedexListItem *item, u8 b) return taskId; } -static bool8 sub_808F250(u8 taskId) +static bool8 IsInfoScreenScrolling(u8 taskId) { if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput) return FALSE; @@ -2858,7 +2876,7 @@ static bool8 sub_808F250(u8 taskId) static u8 sub_808F284(struct PokedexListItem *item, u8 b) { - gUnknown_0202FFBC = item; + sPokedexListItem = item; gTasks[b].data[0] = 1; gTasks[b].data[1] = 0; gTasks[b].data[2] = 0; @@ -2882,29 +2900,29 @@ static void Task_InitPageScreenMultistep(u8 taskId) { u16 r2; - gPokedexView->unk64A = 1; + gPokedexView->currentPage = 1; gPokedexView->descriptionPageNum = 0; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); r2 = 0; if (gTasks[taskId].data[1] != 0) r2 += 0x1000; if (gTasks[taskId].data[2] != 0) r2 |= 0x200; - sub_8091060(r2); + ResetOtherVideoRegisters(r2); gMain.state = 1; } break; case 1: LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); - sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC); + PrintFootprint(sPokedexListItem->dexNum, 2, 0x3FC); gMain.state++; break; case 2: - sub_80904FC(0xD); - sub_8090584(gPokedexView->selectedScreen, 0xD); - sub_808D640(); + LoadScreenSelectBarMain(0xD); + HighlightScreenSelectBarItem(gPokedexView->selectedScreen, 0xD); + LoadPokedexBgPalette(); gMain.state++; break; case 3: @@ -2914,20 +2932,20 @@ static void Task_InitPageScreenMultistep(u8 taskId) break; case 4: if (gPokedexView->dexMode == DEX_MODE_HOENN) - sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3); + PrintEntryScreenDexNum(NationalToHoennOrder(sPokedexListItem->dexNum), 0xD, 3); else - sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3); - sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3); + PrintEntryScreenDexNum(sPokedexListItem->dexNum, 0xD, 3); + PrintEntryScreenSpeciesName(sPokedexListItem->dexNum, 0x10, 3); Menu_PrintText(gDexText_UnknownPoke, CATEGORY_LEFT, 5); Menu_PrintText(gDexText_UnknownHeight, 16, 7); Menu_PrintText(gDexText_UnknownWeight, 16, 9); - if (gUnknown_0202FFBC->owned) + if (sPokedexListItem->owned) { - sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5); - sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7); - sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9); - Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); - sub_80917CC(14, 0x3FC); + UnusedPrintMonName(gPokedexEntries[sPokedexListItem->dexNum].categoryName, CATEGORY_LEFT, 5); + sub_8091458(gPokedexEntries[sPokedexListItem->dexNum].height, 16, 7); + sub_8091564(gPokedexEntries[sPokedexListItem->dexNum].weight, 16, 9); + Menu_PrintText(gPokedexEntries[sPokedexListItem->dexNum].descriptionPage1, 2, 13); + sub_80C0DC0(14, 0x3FC); } else { @@ -2939,7 +2957,7 @@ static void Task_InitPageScreenMultistep(u8 taskId) case 5: if (gTasks[taskId].data[1] == 0) { - gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); + gTasks[taskId].data[4] = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 0x30, 0x38, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; } gMain.state++; @@ -2953,7 +2971,7 @@ static void Task_InitPageScreenMultistep(u8 taskId) if (gTasks[taskId].data[1] != 0) excludedPalettes |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16)); BeginNormalPaletteFade(~excludedPalettes, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gMain.state++; } break; @@ -2973,7 +2991,7 @@ static void Task_InitPageScreenMultistep(u8 taskId) if (gTasks[taskId].data[3] == 0) { StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA); + PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); } else { @@ -3001,7 +3019,7 @@ static void Task_PageScreenProcessInput(u8 taskId) if (gTasks[taskId].data[0] != 0) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_808F888; + gTasks[taskId].func = Task_LoadInfoScreenWaitForFade; PlaySE(SE_DEX_SCROLL); return; } @@ -3030,7 +3048,7 @@ static void Task_PageScreenProcessInput(u8 taskId) PlaySE(SE_PIN); break; case SIZE_SCREEN: - if (!gUnknown_0202FFBC->owned) + if (!sPokedexListItem->owned) { PlaySE(SE_FAILURE); } @@ -3049,7 +3067,7 @@ static void Task_PageScreenProcessInput(u8 taskId) && gPokedexView->selectedScreen > 0) { gPokedexView->selectedScreen--; - sub_8090584(gPokedexView->selectedScreen, 0xD); + HighlightScreenSelectBarItem(gPokedexView->selectedScreen, 0xD); PlaySE(SE_DEX_PAGE); return; } @@ -3058,13 +3076,13 @@ static void Task_PageScreenProcessInput(u8 taskId) && gPokedexView->selectedScreen < 3) { gPokedexView->selectedScreen++; - sub_8090584(gPokedexView->selectedScreen, 0xD); + HighlightScreenSelectBarItem(gPokedexView->selectedScreen, 0xD); PlaySE(SE_DEX_PAGE); return; } } -static void sub_808F888(u8 taskId) +static void Task_LoadInfoScreenWaitForFade(u8 taskId) { if (!gPaletteFade.active) gTasks[taskId].func = Task_InitPageScreenMultistep; @@ -3084,25 +3102,25 @@ static void Task_InitAreaScreenMultistep(u8 taskId) default: if (!gPaletteFade.active) { - gPokedexView->unk64A = 5; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexView->currentPage = 5; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); gPokedexView->selectedScreen = AREA_SCREEN; gMain.state = 1; } break; case 1: - sub_8090540(0xD); + LoadScreenSelectBarSubmenu(0xD); sub_8090644(1, 0xD); - sub_808D640(); + LoadPokedexBgPalette(); REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; gMain.state++; break; case 2: - ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F); - SetVBlankCallback(gUnknown_03005CEC); - gPokedexView->unk64F = 0; + ShowPokedexAreaScreen(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), &gPokedexView->screenSwitchState); + SetVBlankCallback(gPokedexVBlankCB); + gPokedexView->screenSwitchState = 0; gMain.state = 0; gTasks[taskId].func = Task_AreaScreenProcessInput; break; @@ -3111,7 +3129,7 @@ static void Task_InitAreaScreenMultistep(u8 taskId) static void Task_AreaScreenProcessInput(u8 taskId) { - if (gPokedexView->unk64F != 0) + if (gPokedexView->screenSwitchState != 0) gTasks[taskId].func = sub_808FA00; } @@ -3119,7 +3137,7 @@ static void sub_808FA00(u8 taskId) { if (!gPaletteFade.active) { - switch (gPokedexView->unk64F) + switch (gPokedexView->screenSwitchState) { case 1: default: @@ -3141,10 +3159,10 @@ static void Task_InitCryScreenMultistep(u8 taskId) if (!gPaletteFade.active) { m4aMPlayStop(&gMPlayInfo_BGM); - gPokedexView->unk64A = 6; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexView->currentPage = 6; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); gPokedexView->selectedScreen = CRY_SCREEN; gMain.state = 1; } @@ -3155,9 +3173,9 @@ static void Task_InitCryScreenMultistep(u8 taskId) gMain.state++; break; case 2: - sub_8090540(0xD); + LoadScreenSelectBarSubmenu(0xD); sub_8090644(2, 0xD); - sub_808D640(); + LoadPokedexBgPalette(); DmaClear16(3, (void *)(VRAM + 0xF800), 0x500); gMain.state++; break; @@ -3169,37 +3187,38 @@ static void Task_InitCryScreenMultistep(u8 taskId) break; case 4: Menu_PrintText(gDexText_CryOf, 10, 4); - sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2); + PrintCryScreenSpeciesName(sPokedexListItem->dexNum, 10, 6, 2); gMain.state++; break; case 5: - gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); + gTasks[taskId].data[4] = + CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 0x30, 0x38, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; gMain.state++; break; case 6: { - struct CryRelatedStruct sp8; - - sp8.unk0 = 0x4020; - sp8.unk2 = 0x1F; - sp8.paletteNo = 8; - sp8.yPos = 0x1E; - sp8.xPos = 0xC; - if (sub_8119E3C(&sp8, 0) != 0) + struct CryScreenWindow waveformWindow; + + waveformWindow.charBase = 0x4020; + waveformWindow.screenBase = 0x1F; + waveformWindow.paletteNo = 8; + waveformWindow.yPos = 0x1E; + waveformWindow.xPos = 0xC; + if (LoadCryWaveformWindow(&waveformWindow, 0) != 0) { gMain.state++; - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; } } break; case 7: { - struct CryRelatedStruct sp10; + struct CryScreenWindow sp10; - sp10.unk0 = 0x3000; - sp10.unk2 = 0xE; + sp10.charBase = 0x3000; + sp10.screenBase = 0xE; sp10.paletteNo = 9; sp10.xPos = 0x12; sp10.yPos = 3; @@ -3209,7 +3228,7 @@ static void Task_InitCryScreenMultistep(u8 taskId) break; case 8: BeginNormalPaletteFade(0xFFFFFFEB, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gMain.state++; break; case 9: @@ -3223,7 +3242,7 @@ static void Task_InitCryScreenMultistep(u8 taskId) gMain.state++; break; case 10: - gPokedexView->unk64F = 0; + gPokedexView->screenSwitchState = 0; gMain.state = 0; gTasks[taskId].func = Task_CryScreenProcessInput; break; @@ -3232,17 +3251,17 @@ static void Task_InitCryScreenMultistep(u8 taskId) static void Task_CryScreenProcessInput(u8 taskId) { - sub_8119F88(0); + UpdateCryWaveformWindow(0); if (IsCryPlaying()) - sub_8090040(1); + LoadPlayArrowPalette(1); else - sub_8090040(0); + LoadPlayArrowPalette(0); if (gMain.newKeys & A_BUTTON) { - sub_8090040(1); - sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum)); + LoadPlayArrowPalette(1); + CryScreenPlayButton(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); return; } else if (!gPaletteFade.active) @@ -3251,8 +3270,8 @@ static void Task_CryScreenProcessInput(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); m4aMPlayContinue(&gMPlayInfo_BGM); - gPokedexView->unk64F = 1; - gTasks[taskId].func = sub_808FFBC; + gPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromCryScreen; PlaySE(SE_PC_OFF); return; } @@ -3261,15 +3280,15 @@ static void Task_CryScreenProcessInput(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); m4aMPlayContinue(&gMPlayInfo_BGM); - gPokedexView->unk64F = 2; - gTasks[taskId].func = sub_808FFBC; + gPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromCryScreen; PlaySE(SE_DEX_PAGE); return; } if ((gMain.newKeys & DPAD_RIGHT) || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { - if (!gUnknown_0202FFBC->owned) + if (!sPokedexListItem->owned) { PlaySE(SE_FAILURE); } @@ -3277,8 +3296,8 @@ static void Task_CryScreenProcessInput(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); m4aMPlayContinue(&gMPlayInfo_BGM); - gPokedexView->unk64F = 3; - gTasks[taskId].func = sub_808FFBC; + gPokedexView->screenSwitchState = 3; + gTasks[taskId].func = Task_SwitchScreensFromCryScreen; PlaySE(SE_DEX_PAGE); } return; @@ -3286,12 +3305,12 @@ static void Task_CryScreenProcessInput(u8 taskId) } } -static void sub_808FFBC(u8 taskId) +static void Task_SwitchScreensFromCryScreen(u8 taskId) { if (!gPaletteFade.active) { DestroyCryMeterNeedleSprite(); - switch (gPokedexView->unk64F) + switch (gPokedexView->screenSwitchState) { default: case 1: @@ -3307,15 +3326,15 @@ static void sub_808FFBC(u8 taskId) } } -static void sub_8090040(u8 a) +static void LoadPlayArrowPalette(u8 cryPlaying) { - u16 unk; + u16 color; - if (a != 0) - unk = 0x392; + if (cryPlaying) + color = RGB(18, 28, 0); else - unk = 0x2AF; - LoadPalette(&unk, 0x5D, 2); + color = RGB(15, 21, 0); + LoadPalette(&color, 0x5D, 2); } static void Task_InitSizeScreenMultistep(u8 taskId) @@ -3328,10 +3347,10 @@ static void Task_InitSizeScreenMultistep(u8 taskId) case 0: if (!gPaletteFade.active) { - gPokedexView->unk64A = 7; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexView->currentPage = 7; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); gPokedexView->selectedScreen = SIZE_SCREEN; gMain.state = 1; } @@ -3342,13 +3361,14 @@ static void Task_InitSizeScreenMultistep(u8 taskId) gMain.state++; break; case 2: - sub_8090540(0xD); + LoadScreenSelectBarSubmenu(0xD); sub_8090644(3, 0xD); - sub_808D640(); + LoadPokedexBgPalette(); gMain.state++; break; case 3: { + // This only needs to be 25 chars long (31 in German). u8 string[40]; //I hope this is the correct size Text_LoadWindowTemplate(&gWindowTemplate_81E702C); @@ -3365,28 +3385,28 @@ static void Task_InitSizeScreenMultistep(u8 taskId) gMain.state++; break; case 5: - spriteId = sub_8091A4C(gSaveBlock2.playerGender, 152, 56, 0); + spriteId = CreateSizeScreenTrainerPic(gSaveBlock2.playerGender, 152, 56, 0); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 1; gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset; - SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale); - LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); + gSprites[spriteId].pos2.y = gPokedexEntries[sPokedexListItem->dexNum].trainerOffset; + SetOamMatrix(1, gPokedexEntries[sPokedexListItem->dexNum].trainerScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].trainerScale); + LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(sSizeScreenSilhouette_Pal)); gMain.state++; break; case 6: - spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 88, 56, 1); + spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 88, 56, 1); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 2; gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset; - SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale); - LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); + gSprites[spriteId].pos2.y = gPokedexEntries[sPokedexListItem->dexNum].pokemonOffset; + SetOamMatrix(2, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale); + LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(sSizeScreenSilhouette_Pal)); gMain.state++; break; case 7: BeginNormalPaletteFade(0xFFFFFFEB, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gMain.state++; break; case 8: @@ -3400,7 +3420,7 @@ static void Task_InitSizeScreenMultistep(u8 taskId) case 9: if (!gPaletteFade.active) { - gPokedexView->unk64F = 0; + gPokedexView->screenSwitchState = 0; gMain.state = 0; gTasks[taskId].func = Task_SizeScreenProcessInput; } @@ -3413,25 +3433,25 @@ static void Task_SizeScreenProcessInput(u8 taskId) if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); - gPokedexView->unk64F = 1; - gTasks[taskId].func = sub_8090498; + gPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_PC_OFF); } else if ((gMain.newKeys & DPAD_LEFT) || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); - gPokedexView->unk64F = 2; - gTasks[taskId].func = sub_8090498; + gPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_DEX_PAGE); } } -static void sub_8090498(u8 taskId) +static void Task_SwitchScreensFromSizeScreen(u8 taskId) { if (!gPaletteFade.active) { - switch (gPokedexView->unk64F) + switch (gPokedexView->screenSwitchState) { default: case 1: @@ -3444,20 +3464,20 @@ static void sub_8090498(u8 taskId) } } -static void sub_80904FC(u16 a) +static void LoadScreenSelectBarMain(u16 screenBase) { - LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800)); - DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); + LZ77UnCompVram(gPokedexScreenSelectBarMain_Tilemap, (void *)(VRAM + screenBase * 0x800)); + DmaClear16(3, (void *)(VRAM + screenBase * 0x800 + 0xC0), 0x440); } -static void sub_8090540(u16 a) +static void LoadScreenSelectBarSubmenu(u16 screenBase) { - LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800)); - DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); + LZ77UnCompVram(gPokedexScreenSelectBarSubmenu_Tilemap, (void *)(VRAM + screenBase * 0x800)); + DmaClear16(3, (void *)(VRAM + screenBase * 0x800 + 0xC0), 0x440); } #ifdef NONMATCHING -static void sub_8090584(u8 a, u16 b) +static void HighlightScreenSelectBarItem(u8 a, u16 b) { u8 i; //r1 u8 j; //r3 @@ -3497,7 +3517,7 @@ static void sub_8090584(u8 a, u16 b) } #else NAKED -static void sub_8090584(u8 a, u16 b) +static void HighlightScreenSelectBarItem(u8 a, u16 b) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -3776,9 +3796,9 @@ static void sub_8090750(u8 taskId) default: if (!gPaletteFade.active) { - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x100); + ResetOtherVideoRegisters(0x100); gTasks[taskId].data[0] = 1; } break; @@ -3792,7 +3812,7 @@ static void sub_8090750(u8 taskId) #endif *(u16 *)(BG_VRAM + 0x7800 + 2 * i) += 0x2000; } - sub_8091738(gTasks[taskId].data[1], 2, 0x3FC); + PrintFootprint(gTasks[taskId].data[1], 2, 0x3FC); ResetPaletteFade(); LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E); gTasks[taskId].data[0]++; @@ -3806,25 +3826,25 @@ static void sub_8090750(u8 taskId) case 3: MenuPrint_Centered(gDexText_RegisterComplete, 2, 0, 0xD0); if (!IsNationalPokedexEnabled()) - sub_8091154(NationalToHoennOrder(dexNum), 13, 3); + PrintEntryScreenDexNum(NationalToHoennOrder(dexNum), 13, 3); else - sub_8091154(dexNum, 13, 3); - sub_80911C8(dexNum, 16, 3); + PrintEntryScreenDexNum(dexNum, 13, 3); + PrintEntryScreenSpeciesName(dexNum, 16, 3); Menu_PrintText(gDexText_UnknownPoke, CATEGORY_LEFT, 5); Menu_PrintText(gDexText_UnknownHeight, 16, 7); Menu_PrintText(gDexText_UnknownWeight, 16, 9); - sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5); + UnusedPrintMonName(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5); sub_8091458(gPokedexEntries[dexNum].height, 16, 7); sub_8091564(gPokedexEntries[dexNum].weight, 16, 9); Menu_PrintText(gPokedexEntries[dexNum].descriptionPage1, 2, 13); - sub_80917CC(14, 0x3FC); + sub_80C0DC0(14, 0x3FC); gTasks[taskId].data[0]++; break; case 4: - spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0); + spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, 0x30, 0x38, 0); gSprites[spriteId].oam.priority = 0; BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gTasks[taskId].data[3] = spriteId; gTasks[taskId].data[0]++; break; @@ -3923,12 +3943,12 @@ static void sub_8090C28(struct Sprite *sprite) static void sub_8090C68(void) { - if (gUnknown_0202FFBC->owned) + if (sPokedexListItem->owned) { if (gPokedexView->descriptionPageNum == 0) { Menu_EraseWindowRect(2, 13, 27, 19); - Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage2, 2, 13); + Menu_PrintText(gPokedexEntries[sPokedexListItem->dexNum].descriptionPage2, 2, 13); gPokedexView->descriptionPageNum = 1; (*(u16 *)(BG_VRAM + 0x7ACA))++; (*(u16 *)(BG_VRAM + 0x7B0A))++; @@ -3937,7 +3957,7 @@ static void sub_8090C68(void) else { Menu_EraseWindowRect(2, 13, 27, 19); - Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); + Menu_PrintText(gPokedexEntries[sPokedexListItem->dexNum].descriptionPage1, 2, 13); gPokedexView->descriptionPageNum = 0; (*(u16 *)(BG_VRAM + 0x7ACA))--; (*(u16 *)(BG_VRAM + 0x7B0A))--; @@ -4109,7 +4129,7 @@ bool16 CompletedNationalPokedex(void) return TRUE; } -static void sub_8091060(u16 a) +static void ResetOtherVideoRegisters(u16 a) { if (!(a & 0x100)) { @@ -4148,7 +4168,7 @@ static void sub_8091060(u16 a) } } -static void sub_8091154(u16 order, u8 b, u8 c) +static void PrintEntryScreenDexNum(u16 order, u8 b, u8 c) { u8 str[4]; @@ -4159,7 +4179,7 @@ static void sub_8091154(u16 order, u8 b, u8 c) Menu_PrintText(str, b, c); } -static u8 sub_80911C8(u16 num, u8 b, u8 c) +static u8 PrintEntryScreenSpeciesName(u16 num, u8 b, u8 c) { u8 str[11]; u8 i; @@ -4181,13 +4201,13 @@ static u8 sub_80911C8(u16 num, u8 b, u8 c) return i; } -static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d) +static u8 PrintCryScreenSpeciesName(u16 num, u8 b, u8 c, u8 d) { u8 str[40]; u8 *end; u8 i; - end = StringCopy(str, gUnknown_083B5558); + end = StringCopy(str, sText_ClearTo0); str[2] = d; num = NationalPokedexNumToSpecies(num); switch (num) @@ -4206,7 +4226,7 @@ static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d) return i; } -static void sub_8091304(const u8 *name, u8 left, u8 top) +static void UnusedPrintMonName(const u8 *name, u8 left, u8 top) { u8 str[32]; u8 i; @@ -4217,18 +4237,18 @@ static void sub_8091304(const u8 *name, u8 left, u8 top) for (i = 0; name[i] != EOS && i < 11; i++) str[i] = name[i]; #if ENGLISH - for (j = 0; gDexText_UnknownPoke[j] == 0xAC || gDexText_UnknownPoke[j] == 0; j++) + for (j = 0; gDexText_UnknownPoke[j] == CHAR_QUESTION_MARK || gDexText_UnknownPoke[j] == CHAR_SPACE; j++) ; j--; while (gDexText_UnknownPoke[j] != EOS) str[i++] = gDexText_UnknownPoke[j++]; #endif str[i] = EOS; - sub_8072B80(str, left, top, gDexText_UnknownPoke); + MenuPrint_AlignedToRightOfReferenceString(str, left, top, gDexText_UnknownPoke); } #if ENGLISH -void unref_sub_80913A4(u16 a, u8 left, u8 top) +void UnusedPrintDecimalNum(u16 a, u8 left, u8 top) { u8 str[6]; bool8 outputted = FALSE; @@ -4265,7 +4285,7 @@ void unref_sub_80913A4(u16 a, u8 left, u8 top) Menu_PrintText(str, left, top); } #elif GERMAN -void unref_sub_80913A4(u16 arg0, u8 left, u8 top) { +void UnusedPrintDecimalNum(u16 arg0, u8 left, u8 top) { u8 buffer[8]; int offset; u8 result; @@ -4348,7 +4368,7 @@ static void sub_8091458(u16 height, u8 left, u8 top) #else static void sub_8091458(u16 height, u8 left, u8 top) { - unref_sub_80913A4(height, left, top); + UnusedPrintDecimalNum(height, left, top); } #endif @@ -4418,11 +4438,11 @@ static void sub_8091564(u16 weight, u8 left, u8 top) #else static void sub_8091564(u16 arg0, u8 left, u8 top) { - unref_sub_80913A4(arg0, left, top); + UnusedPrintDecimalNum(arg0, left, top); } #endif -void sub_8091738(u16 num, u16 b, u16 c) +void PrintFootprint(u16 num, u16 b, u16 c) { u8 arr[0x80]; u16 i, j, r7; @@ -4449,7 +4469,7 @@ void sub_8091738(u16 num, u16 b, u16 c) CpuCopy16((void*)arr, (void *)(BG_VRAM + b * 0x4000 + c * 0x20), 0x80); } -static void sub_80917CC(u16 a, u16 b) +static void sub_80C0DC0(u16 a, u16 b) { *(u16 *)(BG_VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0; *(u16 *)(BG_VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1; @@ -4457,55 +4477,55 @@ static void sub_80917CC(u16 a, u16 b) *(u16 *)(BG_VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3; } -static u16 sub_8091818(u8 a, u16 b, u16 c, u16 d) +static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max) { - switch (a) + switch (direction) { case 1: - if (b > c) - b--; + if (position > min) + position--; break; case 0: - if (b < d) - b++; + if (position < max) + position++; break; case 3: - if (b > c) - b--; + if (position > min) + position--; else - b = d; + position = max; break; case 2: - if (b < d) - b++; + if (position < max) + position++; else - b = c; + position = min; break; } - return b; + return position; } -static void nullsub_59(struct Sprite *sprite) +static void _SpriteCB_Dummy(struct Sprite *sprite) { } -static void sub_8091878(u16 a, u8 b) +static void SetSpriteTemplateForPokemonPic(u16 paletteTag, u8 imagesSet) { - gUnknown_02024E8C = gUnknown_083B57A4; - gUnknown_02024E8C.paletteTag = a; - gUnknown_02024E8C.images = gUnknown_083B5794[b]; - gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; + gCreatingSpriteTemplate = sMonOrTrainerPicSpriteTemplate; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sSpriteFrameImages_MonOrTrainerPic[imagesSet]; + gCreatingSpriteTemplate.anims = gSpriteAnimTable_81E7C64; } -static void sub_80918B0(u16 a, u8 b) +static void SetSpriteTemplateForSizeComparisonTrainerPic(u16 paletteTag, u8 imagesSet) { - gUnknown_02024E8C = gUnknown_083B57A4; - gUnknown_02024E8C.paletteTag = a; - gUnknown_02024E8C.images = gUnknown_083B5794[b]; - gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; + gCreatingSpriteTemplate = sMonOrTrainerPicSpriteTemplate; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sSpriteFrameImages_MonOrTrainerPic[imagesSet]; + gCreatingSpriteTemplate.anims = gUnknown_081EC2A4[0]; } -u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) +u16 CreateMonSpriteFromNationalDexNumber(u16 num, s16 x, s16 y, u16 paletteNum) { u8 spriteId; @@ -4517,8 +4537,8 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - (void*)ewram_addr, - gUnknown_083B5584[paletteNum], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[paletteNum], num); break; case SPECIES_SPINDA: @@ -4526,8 +4546,8 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - ewram_addr, - gUnknown_083B5584[paletteNum], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[paletteNum], num, gSaveBlock2.pokedex.spindaPersonality, 1); @@ -4537,21 +4557,21 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - ewram_addr, - gUnknown_083B5584[paletteNum], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[paletteNum], num, gSaveBlock2.pokedex.unownPersonality, 1); break; } LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + paletteNum * 16, 32); - sub_8091878(paletteNum, paletteNum); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + SetSpriteTemplateForPokemonPic(paletteNum, paletteNum); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].oam.paletteNum = paletteNum; return spriteId; } -u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) +u16 CreateSizeScreenTrainerPic(u16 gender, s16 x, s16 y, u16 paletteNum) { u8 spriteId; @@ -4559,29 +4579,29 @@ u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) &gTrainerFrontPicTable[gender], gTrainerFrontPicCoords[gender].coords, gTrainerFrontPicCoords[gender].y_offset, - (void*)ewram_addr, - gUnknown_083B5584[0], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[0], gender); - sub_80918B0(gender, 0); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + SetSpriteTemplateForSizeComparisonTrainerPic(gender, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].oam.paletteNum = paletteNum; return spriteId; } -int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) +int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { u16 species; u16 i; u16 resultsCount; u8 types[2]; - SortPokedex(a, b); + SortPokedex(dexMode, order); for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) { - if (gPokedexView->unk0[i].seen) + if (gPokedexView->pokedexList[i].seen) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4594,12 +4614,12 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { u8 r3; - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); r3 = gSpeciesNames[species][0]; - if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1]) - || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3])) + if ((r3 >= sLetterSearchRanges[abcGroup][0] && r3 < sLetterSearchRanges[abcGroup][0] + sLetterSearchRanges[abcGroup][1]) + || (r3 >= sLetterSearchRanges[abcGroup][2] && r3 < sLetterSearchRanges[abcGroup][2] + sLetterSearchRanges[abcGroup][3])) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4611,11 +4631,11 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); if (bodyColor == gBaseStats[species].bodyColor) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4635,15 +4655,15 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) { - if (gPokedexView->unk0[i].owned) + if (gPokedexView->pokedexList[i].owned) { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); types[0] = gBaseStats[species].type1; types[1] = gBaseStats[species].type2; if (types[0] == type1 || types[1] == type1) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4653,15 +4673,15 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) { - if (gPokedexView->unk0[i].owned) + if (gPokedexView->pokedexList[i].owned) { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); types[0] = gBaseStats[species].type1; types[1] = gBaseStats[species].type2; if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1)) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4674,9 +4694,9 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) { - gPokedexView->unk0[i].dexNum = 0xFFFF; - gPokedexView->unk0[i].seen = FALSE; - gPokedexView->unk0[i].owned = FALSE; + gPokedexView->pokedexList[i].dexNum = 0xFFFF; + gPokedexView->pokedexList[i].seen = FALSE; + gPokedexView->pokedexList[i].owned = FALSE; } } @@ -4690,17 +4710,17 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) #define SUB_8091E20_WIDTH (216) #endif -void sub_8091E20(const u8 *str) +void EraseAndPrintSearchTextBox(const u8 *str) { sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 32, 1); } -u8 sub_8091E3C(void) +u8 LoadSearchMenu(void) { - return CreateTask(sub_8091E54, 0); + return CreateTask(Task_LoadSearchMenu, 0); } -static void sub_8091E54(u8 taskId) +static void Task_LoadSearchMenu(u8 taskId) { u16 i; @@ -4710,10 +4730,10 @@ static void sub_8091E54(u8 taskId) case 0: if (!gPaletteFade.active) { - gPokedexView->unk64A = 2; - sub_8091060(0); + gPokedexView->currentPage = 2; + ResetOtherVideoRegisters(0); LZ77UnCompVram(gPokedexMenuSearch_Gfx, (void *)VRAM); - LZ77UnCompVram(gUnknown_08E96D2C, (void *)(VRAM + 0x7800)); + LZ77UnCompVram(gPokedexMenuSearch_Tilemap, (void *)(VRAM + 0x7800)); LoadPalette(gPokedexMenuSearch_Pal + 1, 1, 0x7E); if (!IsNationalPokedexEnabled()) { @@ -4731,14 +4751,14 @@ static void sub_8091E54(u8 taskId) case 1: Text_LoadWindowTemplate(&gWindowTemplate_81E7064); InitMenuWindow(&gWindowTemplate_81E7064); - LoadCompressedObjectPic(&gUnknown_083A05CC[0]); - LoadSpritePalettes(gUnknown_083A05DC); - sub_809308C(taskId); + LoadCompressedObjectPic(&sInterfaceSpriteSheet[0]); + LoadSpritePalettes(sInterfaceSpritePalette); + CreateSearchParameterScrollArrows(taskId); for (i = 0; i < 16; i++) gTasks[taskId].data[i] = 0; - sub_8092EB0(taskId); - sub_8092AB0(0); - sub_8092B68(taskId); + SetDefaultSearchModeAndOrder(taskId); + HighlightSelectedSearchTopBarItem(0); + PrintSelectedSearchParameters(taskId); gMain.state++; break; case 2: @@ -4753,26 +4773,26 @@ static void sub_8091E54(u8 taskId) case 4: if (!gPaletteFade.active) { - gTasks[taskId].func = sub_809204C; + gTasks[taskId].func = Task_SwitchToSearchMenuTopBar; gMain.state = 0; } break; } } -static void sub_809204C(u8 taskId) +static void Task_SwitchToSearchMenuTopBar(u8 taskId) { - sub_8092AB0(gTasks[taskId].data[0]); - sub_8092B68(taskId); - gTasks[taskId].func = sub_809207C; + HighlightSelectedSearchTopBarItem(gTasks[taskId].data[0]); + PrintSelectedSearchParameters(taskId); + gTasks[taskId].func = Task_HandleSearchTopBarInput; } -static void sub_809207C(u8 taskId) +static void Task_HandleSearchTopBarInput(u8 taskId) { if (gMain.newKeys & B_BUTTON) { PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; + gTasks[taskId].func = Task_ExitSearch; return; } if (gMain.newKeys & A_BUTTON) @@ -4782,16 +4802,16 @@ static void sub_809207C(u8 taskId) case 0: PlaySE(SE_PIN); gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; break; case 1: PlaySE(SE_PIN); gTasks[taskId].data[1] = 4; - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; break; case 2: PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; + gTasks[taskId].func = Task_ExitSearch; break; } return; @@ -4800,47 +4820,47 @@ static void sub_809207C(u8 taskId) { PlaySE(SE_DEX_PAGE); gTasks[taskId].data[0]--; - sub_8092AB0(gTasks[taskId].data[0]); + HighlightSelectedSearchTopBarItem(gTasks[taskId].data[0]); } if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].data[0] < 2) { PlaySE(SE_DEX_PAGE); gTasks[taskId].data[0]++; - sub_8092AB0(gTasks[taskId].data[0]); + HighlightSelectedSearchTopBarItem(gTasks[taskId].data[0]); } } -static void sub_809217C(u8 taskId) +static void Task_SwitchToSearchMenu(u8 taskId) { - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - sub_8092B68(taskId); - gTasks[taskId].func = sub_80921B0; + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); + PrintSelectedSearchParameters(taskId); + gTasks[taskId].func = Task_HandleSearchMenuInput; } -static void sub_80921B0(u8 taskId) +static void Task_HandleSearchMenuInput(u8 taskId) { const u8 (*r6)[4]; if (gTasks[taskId].data[0] != 0) { if (!IsNationalPokedexEnabled()) - r6 = gUnknown_083B58A4; + r6 = sSearchMovementMap_ShiftHoennDex; else - r6 = gUnknown_083B586C; + r6 = sSearchMovementMap_ShiftNatDex; } else { if (!IsNationalPokedexEnabled()) - r6 = gUnknown_083B5888; + r6 = sSearchMovementMap_SearchHoennDex; else - r6 = gUnknown_083B5850; + r6 = sSearchMovementMap_SearchNatDex; } if (gMain.newKeys & B_BUTTON) { PlaySE(SE_BALL); - sub_8092EB0(taskId); - gTasks[taskId].func = sub_809204C; + SetDefaultSearchModeAndOrder(taskId); + gTasks[taskId].func = Task_SwitchToSearchMenuTopBar; return; } if (gMain.newKeys & A_BUTTON) @@ -4849,30 +4869,30 @@ static void sub_80921B0(u8 taskId) { if (gTasks[taskId].data[0] != 0) { - gUnknown_0202FFBA = 0x40; - gPokedexView->unk62A = 0x40; - gUnknown_0202FFB8 = 0; - gPokedexView->unk610 = 0; - gSaveBlock2.pokedex.unknown1 = sub_8092E10(taskId, 5); + sPokeBallRotation = 0x40; + gPokedexView->pokeBallRotationBackup = 0x40; + sLastSelectedPokemon = 0; + gPokedexView->selectedPokemonBackup = 0; + gSaveBlock2.pokedex.mode = GetSearchModeSelection(taskId, 5); if (!IsNationalPokedexEnabled()) - gSaveBlock2.pokedex.unknown1 = 0; - gPokedexView->unk614 = gSaveBlock2.pokedex.unknown1; - gSaveBlock2.pokedex.order = sub_8092E10(taskId, 4); - gPokedexView->unk618 = gSaveBlock2.pokedex.order; + gSaveBlock2.pokedex.mode = 0; + gPokedexView->dexModeBackup = gSaveBlock2.pokedex.mode; + gSaveBlock2.pokedex.order = GetSearchModeSelection(taskId, 4); + gPokedexView->dexOrderBackup = gSaveBlock2.pokedex.order; PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; + gTasks[taskId].func = Task_ExitSearch; } else { - sub_8091E20(gDexText_Searching); - gTasks[taskId].func = sub_80923FC; + EraseAndPrintSearchTextBox(gDexText_Searching); + gTasks[taskId].func = Task_StartPokedexSearch; PlaySE(SE_DEX_SEARCH); } } else { PlaySE(SE_PIN); - gTasks[taskId].func = sub_80925CC; + gTasks[taskId].func = Task_SelectSearchMenuItem; } return; } @@ -4881,123 +4901,123 @@ static void sub_80921B0(u8 taskId) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][0]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } if ((gMain.newKeys & DPAD_RIGHT) && r6[gTasks[taskId].data[1]][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][1]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } if ((gMain.newKeys & DPAD_UP) && r6[gTasks[taskId].data[1]][2] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][2]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } if ((gMain.newKeys & DPAD_DOWN) && r6[gTasks[taskId].data[1]][3] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][3]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } } -static void sub_80923FC(u8 taskId) +static void Task_StartPokedexSearch(u8 taskId) { - u8 r10 = sub_8092E10(taskId, 5); - u8 r9 = sub_8092E10(taskId, 4); - u8 r8 = sub_8092E10(taskId, 0); - u8 r6 = sub_8092E10(taskId, 1); - u8 r4 = sub_8092E10(taskId, 2); - u8 r0 = sub_8092E10(taskId, 3); + u8 r10 = GetSearchModeSelection(taskId, 5); + u8 r9 = GetSearchModeSelection(taskId, 4); + u8 r8 = GetSearchModeSelection(taskId, 0); + u8 r6 = GetSearchModeSelection(taskId, 1); + u8 r4 = GetSearchModeSelection(taskId, 2); + u8 r0 = GetSearchModeSelection(taskId, 3); - sub_8091AF8(r10, r9, r8, r6, r4, r0); - gTasks[taskId].func = sub_80924A4; + DoPokedexSearch(r10, r9, r8, r6, r4, r0); + gTasks[taskId].func = Task_WaitAndCompleteSearch; } -static void sub_80924A4(u8 taskId) +static void Task_WaitAndCompleteSearch(u8 taskId) { if (!IsSEPlaying()) { if (gPokedexView->pokemonListCount != 0) { PlaySE(SE_SUCCESS); - sub_8091E20(gDexText_SearchComplete); + EraseAndPrintSearchTextBox(gDexText_SearchComplete); } else { PlaySE(SE_FAILURE); - sub_8091E20(gDexText_NoMatching); + EraseAndPrintSearchTextBox(gDexText_NoMatching); } - gTasks[taskId].func = sub_8092508; + gTasks[taskId].func = Task_SearchCompleteWaitForInput; } } -static void sub_8092508(u8 taskId) +static void Task_SearchCompleteWaitForInput(u8 taskId) { if (gMain.newKeys & A_BUTTON) { if (gPokedexView->pokemonListCount != 0) { - gPokedexView->unk64F = 1; - gPokedexView->dexMode = sub_8092E10(taskId, 5); - gPokedexView->dexOrder = sub_8092E10(taskId, 4); - gTasks[taskId].func = sub_80927B8; + gPokedexView->screenSwitchState = 1; + gPokedexView->dexMode = GetSearchModeSelection(taskId, 5); + gPokedexView->dexOrder = GetSearchModeSelection(taskId, 4); + gTasks[taskId].func = Task_ExitSearch; PlaySE(SE_PC_OFF); } else { - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; PlaySE(SE_BALL); } } } -static void sub_80925B4(u16 a, int unused) +static void PrintSelectorArrow(u16 a, int unused) { MenuCursor_SetPos814AD7C(0x90, (a * 2 + 1) * 8); } -static void sub_80925CC(u8 taskId) +static void Task_SelectSearchMenuItem(u8 taskId) { u8 r0; u16 *p1; u16 *p2; - sub_8092C8C(0); + DrawOrEraseSearchParameterBox(0); r0 = gTasks[taskId].data[1]; - p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4]; - p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5]; + p1 = (u16 *)&gTasks[taskId].data[sSearchOptions[r0].taskDataCursorPos]; + p2 = (u16 *)&gTasks[taskId].data[sSearchOptions[r0].taskDataScrollOffset]; gTasks[taskId].data[14] = *p1; gTasks[taskId].data[15] = *p2; - sub_8092D78(taskId); + PrintSearchParameterText(taskId); CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11); - sub_80925B4(*p1, 1); - gTasks[taskId].func = sub_8092644; + PrintSelectorArrow(*p1, 1); + gTasks[taskId].func = Task_HandleSearchParameterInput; } -static void sub_8092644(u8 taskId) +static void Task_HandleSearchParameterInput(u8 taskId) { u8 r1; - const struct UnknownStruct2 *r8; + const struct SearchOptionText *r8; u16 *p1; u16 *p2; u16 r2; bool8 r3; r1 = gTasks[taskId].data[1]; - r8 = gUnknown_083B5A7C[r1].unk0; - p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4]; - p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5]; - r2 = gUnknown_083B5A7C[r1].unk6 - 1; + r8 = sSearchOptions[r1].texts; + p1 = (u16 *)&gTasks[taskId].data[sSearchOptions[r1].taskDataCursorPos]; + p2 = (u16 *)&gTasks[taskId].data[sSearchOptions[r1].taskDataScrollOffset]; + r2 = sSearchOptions[r1].numOptions - 1; if (gMain.newKeys & A_BUTTON) { sub_814ADC8(); PlaySE(SE_PIN); Menu_EraseWindowRect(18, 1, 28, 12); - sub_8092C8C(1); - gTasks[taskId].func = sub_809217C; + DrawOrEraseSearchParameterBox(1); + gTasks[taskId].func = Task_SwitchToSearchMenu; return; } if (gMain.newKeys & B_BUTTON) @@ -5005,10 +5025,10 @@ static void sub_8092644(u8 taskId) sub_814ADC8(); PlaySE(SE_BALL); Menu_EraseWindowRect(18, 1, 28, 12); - sub_8092C8C(1); + DrawOrEraseSearchParameterBox(1); *p1 = gTasks[taskId].data[14]; *p2 = gTasks[taskId].data[15]; - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; return; } r3 = FALSE; @@ -5016,22 +5036,22 @@ static void sub_8092644(u8 taskId) { if (*p1 != 0) { - sub_80925B4(*p1, 0); + PrintSelectorArrow(*p1, 0); (*p1)--; - sub_80925B4(*p1, 1); + PrintSelectorArrow(*p1, 1); r3 = TRUE; } else if (*p2 != 0) { (*p2)--; - sub_8092D78(taskId); - sub_80925B4(*p1, 1); + PrintSearchParameterText(taskId); + PrintSelectorArrow(*p1, 1); r3 = TRUE; } if (r3) { PlaySE(SE_SELECT); - sub_8091E20(r8[*p1 + *p2].text1); + EraseAndPrintSearchTextBox(r8[*p1 + *p2].description); } return; } @@ -5039,41 +5059,41 @@ static void sub_8092644(u8 taskId) { if (*p1 < 5 && *p1 < r2) { - sub_80925B4(*p1, 0); + PrintSelectorArrow(*p1, 0); (*p1)++; - sub_80925B4(*p1, 1); + PrintSelectorArrow(*p1, 1); r3 = TRUE; } else if (r2 > 5 && *p2 < r2 - 5) { (*p2)++; - sub_8092D78(taskId); - sub_80925B4(5, 1); + PrintSearchParameterText(taskId); + PrintSelectorArrow(5, 1); r3 = TRUE; } if (r3) { PlaySE(SE_SELECT); - sub_8091E20(r8[*p1 + *p2].text1); + EraseAndPrintSearchTextBox(r8[*p1 + *p2].description); } return; } } -static void sub_80927B8(u8 taskId) +static void Task_ExitSearch(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_80927F0; + gTasks[taskId].func = Task_ExitSearchWaitForFade; } -static void sub_80927F0(u8 taskId) +static void Task_ExitSearchWaitForFade(u8 taskId) { if (!gPaletteFade.active) DestroyTask(taskId); } #define VRAM_ADDR(a, b, c) *(u16 *)(BG_VRAM + (15 * 0x800) + (c) * 64 + ((b) + (a))*2) -void sub_8092810(u8 a, u8 b, u8 c, u8 d) +void SetSearchRectHighlight(u8 a, u8 b, u8 c, u8 d) { u16 i, j; @@ -5092,156 +5112,172 @@ void sub_8092810(u8 a, u8 b, u8 c, u8 d) } } -static void sub_809286C(u8 a, u8 b, u8 c) +static void DrawSearchMenuItemBgHighlight(u8 searchBg, u8 unselected, u8 disabled) { - u8 r5 = (b & 1) | ((c & 1) << 1); + u8 r5 = (unselected & 1) | ((disabled & 1) << 1); - switch (a) + switch (searchBg) { case 0: case 1: case 2: - sub_8092810(r5, gUnknown_083B57E4[a].unk4, gUnknown_083B57E4[a].unk5, gUnknown_083B57E4[a].unk6); + SetSearchRectHighlight(r5, + sSearchMenuTopBarItems[searchBg].highlightX, + sSearchMenuTopBarItems[searchBg].highlightY, + sSearchMenuTopBarItems[searchBg].highlightWidth); break; case 3: case 4: case 7: case 8: - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].titleBgX, + sSearchMenuItems[searchBg - 3].titleBgY, + sSearchMenuItems[searchBg - 3].titleBgWidth); // fall through case 5: case 6: - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk7, gUnknown_083B57FC[a - 3].unk8, gUnknown_083B57FC[a - 3].unk9); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].selectionBgX, + sSearchMenuItems[searchBg - 3].selectionBgY, + sSearchMenuItems[searchBg - 3].selectionBgWidth); break; case 10: - sub_8092810(r5, gUnknown_083B57FC[2].unk4, gUnknown_083B57FC[2].unk5, gUnknown_083B57FC[2].unk6); + SetSearchRectHighlight( + r5, sSearchMenuItems[2].titleBgX, sSearchMenuItems[2].titleBgY, sSearchMenuItems[2].titleBgWidth); break; case 9: if (!IsNationalPokedexEnabled()) - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5 - 2, gUnknown_083B57FC[a - 3].unk6); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].titleBgX, + sSearchMenuItems[searchBg - 3].titleBgY - 2, + sSearchMenuItems[searchBg - 3].titleBgWidth); else - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].titleBgX, + sSearchMenuItems[searchBg - 3].titleBgY, + sSearchMenuItems[searchBg - 3].titleBgWidth); break; } } -static void sub_8092964(u8 a) +static void SetInitialSearchMenuBgHighlights(u8 topBarItem) { - switch (a) + switch (topBarItem) { case 0: - sub_809286C(0, 0, 0); - sub_809286C(1, 1, 0); - sub_809286C(2, 1, 0); - sub_809286C(3, 1, 0); - sub_809286C(4, 1, 0); - sub_809286C(10, 1, 0); - sub_809286C(5, 1, 0); - sub_809286C(6, 1, 0); - sub_809286C(7, 1, 0); - sub_809286C(8, 1, 0); - sub_809286C(9, 1, 0); + DrawSearchMenuItemBgHighlight(0, 0, 0); + DrawSearchMenuItemBgHighlight(1, 1, 0); + DrawSearchMenuItemBgHighlight(2, 1, 0); + DrawSearchMenuItemBgHighlight(3, 1, 0); + DrawSearchMenuItemBgHighlight(4, 1, 0); + DrawSearchMenuItemBgHighlight(10, 1, 0); + DrawSearchMenuItemBgHighlight(5, 1, 0); + DrawSearchMenuItemBgHighlight(6, 1, 0); + DrawSearchMenuItemBgHighlight(7, 1, 0); + DrawSearchMenuItemBgHighlight(8, 1, 0); + DrawSearchMenuItemBgHighlight(9, 1, 0); break; case 1: - sub_809286C(0, 1, 0); - sub_809286C(1, 0, 0); - sub_809286C(2, 1, 0); - sub_809286C(3, 1, 1); - sub_809286C(4, 1, 1); - sub_809286C(10, 1, 1); - sub_809286C(5, 1, 1); - sub_809286C(6, 1, 1); - sub_809286C(7, 1, 0); - sub_809286C(8, 1, 0); - sub_809286C(9, 1, 0); + DrawSearchMenuItemBgHighlight(0, 1, 0); + DrawSearchMenuItemBgHighlight(1, 0, 0); + DrawSearchMenuItemBgHighlight(2, 1, 0); + DrawSearchMenuItemBgHighlight(3, 1, 1); + DrawSearchMenuItemBgHighlight(4, 1, 1); + DrawSearchMenuItemBgHighlight(10, 1, 1); + DrawSearchMenuItemBgHighlight(5, 1, 1); + DrawSearchMenuItemBgHighlight(6, 1, 1); + DrawSearchMenuItemBgHighlight(7, 1, 0); + DrawSearchMenuItemBgHighlight(8, 1, 0); + DrawSearchMenuItemBgHighlight(9, 1, 0); break; case 2: - sub_809286C(0, 1, 0); - sub_809286C(1, 1, 0); - sub_809286C(2, 0, 0); - sub_809286C(3, 1, 1); - sub_809286C(4, 1, 1); - sub_809286C(10, 1, 1); - sub_809286C(5, 1, 1); - sub_809286C(6, 1, 1); - sub_809286C(7, 1, 1); - sub_809286C(8, 1, 1); - sub_809286C(9, 1, 1); + DrawSearchMenuItemBgHighlight(0, 1, 0); + DrawSearchMenuItemBgHighlight(1, 1, 0); + DrawSearchMenuItemBgHighlight(2, 0, 0); + DrawSearchMenuItemBgHighlight(3, 1, 1); + DrawSearchMenuItemBgHighlight(4, 1, 1); + DrawSearchMenuItemBgHighlight(10, 1, 1); + DrawSearchMenuItemBgHighlight(5, 1, 1); + DrawSearchMenuItemBgHighlight(6, 1, 1); + DrawSearchMenuItemBgHighlight(7, 1, 1); + DrawSearchMenuItemBgHighlight(8, 1, 1); + DrawSearchMenuItemBgHighlight(9, 1, 1); break; } } -static void sub_8092AB0(u8 a) +static void HighlightSelectedSearchTopBarItem(u8 topBarItem) { - sub_8092964(a); - sub_8091E20(gUnknown_083B57E4[a].text); + SetInitialSearchMenuBgHighlights(topBarItem); + EraseAndPrintSearchTextBox(sSearchMenuTopBarItems[topBarItem].text); } -static void sub_8092AD4(u8 a, u8 b) +static void HighlightSelectedSearchMenuItem(u8 topBarItem, u8 menuItem) { - sub_8092964(a); - switch (b) + SetInitialSearchMenuBgHighlights(topBarItem); + switch (menuItem) { case 0: - sub_809286C(3, 0, 0); + DrawSearchMenuItemBgHighlight(3, 0, 0); break; case 1: - sub_809286C(4, 0, 0); + DrawSearchMenuItemBgHighlight(4, 0, 0); break; case 2: - sub_809286C(10, 0, 0); - sub_809286C(5, 0, 0); + DrawSearchMenuItemBgHighlight(10, 0, 0); + DrawSearchMenuItemBgHighlight(5, 0, 0); break; case 3: - sub_809286C(10, 0, 0); - sub_809286C(6, 0, 0); + DrawSearchMenuItemBgHighlight(10, 0, 0); + DrawSearchMenuItemBgHighlight(6, 0, 0); break; case 4: - sub_809286C(7, 0, 0); + DrawSearchMenuItemBgHighlight(7, 0, 0); break; case 5: - sub_809286C(8, 0, 0); + DrawSearchMenuItemBgHighlight(8, 0, 0); break; case 6: - sub_809286C(9, 0, 0); + DrawSearchMenuItemBgHighlight(9, 0, 0); break; } - sub_8091E20(gUnknown_083B57FC[b].text); + EraseAndPrintSearchTextBox(sSearchMenuItems[menuItem].text); } -static void sub_8092B68(u8 taskId) +static void PrintSelectedSearchParameters(u8 taskId) { u16 var; var = gTasks[taskId].data[6] + gTasks[taskId].data[7]; - StringCopy(gStringVar1, gUnknown_083B5910[var].text2); + StringCopy(gStringVar1, sDexSearchNameOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 16, 1); var = gTasks[taskId].data[8] + gTasks[taskId].data[9]; - StringCopy(gStringVar1, gUnknown_083B5968[var].text2); + StringCopy(gStringVar1, sDexSearchColorOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 32, 1); var = gTasks[taskId].data[10] + gTasks[taskId].data[11]; - StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); + StringCopy(gStringVar1, sDexSearchTypeOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AAC, 45, 48, 1); var = gTasks[taskId].data[12] + gTasks[taskId].data[13]; - StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); + StringCopy(gStringVar1, sDexSearchTypeOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AAC, 93, 48, 1); var = gTasks[taskId].data[4] + gTasks[taskId].data[5]; - StringCopy(gStringVar1, gUnknown_083B58D8[var].text2); + StringCopy(gStringVar1, sDexOrderOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 64, 1); if (IsNationalPokedexEnabled()) { var = gTasks[taskId].data[2] + gTasks[taskId].data[3]; - StringCopy(gStringVar1, gUnknown_083B58C0[var].text2); + StringCopy(gStringVar1, sDexModeOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 80, 1); } } -static void sub_8092C8C(u8 a) +static void DrawOrEraseSearchParameterBox(u8 a) { u16 i; u16 j; @@ -5276,29 +5312,31 @@ static void sub_8092C8C(u8 a) } } -static void sub_8092D78(u8 taskId) +// Prints the currently viewable search parameter titles in the right-hand text box +// and the currently selected search parameter description in the bottom text box +static void PrintSearchParameterText(u8 taskId) { - const struct UnknownStruct2 *r6 = gUnknown_083B5A7C[gTasks[taskId].data[1]].unk0; - const u16 *r8 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk4]; - const u16 *r7 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk5]; + const struct SearchOptionText *r6 = sSearchOptions[gTasks[taskId].data[1]].texts; + const u16 *r8 = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].data[1]].taskDataCursorPos]; + const u16 *r7 = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].data[1]].taskDataScrollOffset]; u16 i; u16 j; Menu_EraseWindowRect(18, 1, 28, 12); - for (i = 0, j = *r7; i < 6 && r6[j].text2 != NULL; i++, j++) + for (i = 0, j = *r7; i < 6 && r6[j].title != NULL; i++, j++) { #ifndef NONMATCHING j += 0; // Useless statement needed to match #endif - Menu_PrintText(r6[j].text2, 18, i * 2 + 1); + Menu_PrintText(r6[j].title, 18, i * 2 + 1); } - sub_8091E20(r6[*r8 + *r7].text1); + EraseAndPrintSearchTextBox(r6[*r8 + *r7].description); } -static u8 sub_8092E10(u8 taskId, u8 b) +static u8 GetSearchModeSelection(u8 taskId, u8 b) { - const u16 *ptr1 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk4]; - const u16 *ptr2 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk5]; + const u16 *ptr1 = &gTasks[taskId].data[sSearchOptions[b].taskDataCursorPos]; + const u16 *ptr2 = &gTasks[taskId].data[sSearchOptions[b].taskDataScrollOffset]; u16 r2 = *ptr1 + *ptr2; switch (b) @@ -5306,9 +5344,9 @@ static u8 sub_8092E10(u8 taskId, u8 b) default: return 0; case 5: - return gUnknown_083B5A60[r2]; + return sPokedexModes[r2]; case 4: - return gUnknown_083B5A62[r2]; + return sOrderOptions[r2]; case 0: if (r2 == 0) return 0xFF; @@ -5321,15 +5359,15 @@ static u8 sub_8092E10(u8 taskId, u8 b) return r2 - 1; case 2: case 3: - return gUnknown_083B5A68[r2]; + return sDexSearchTypeIds[r2]; } } -static void sub_8092EB0(u8 taskId) +static void SetDefaultSearchModeAndOrder(u8 taskId) { u16 r3; - switch (gPokedexView->unk614) + switch (gPokedexView->dexModeBackup) { default: case 0: @@ -5341,7 +5379,7 @@ static void sub_8092EB0(u8 taskId) } gTasks[taskId].data[2] = r3; - switch (gPokedexView->unk618) + switch (gPokedexView->dexOrderBackup) { default: case 0: @@ -5366,11 +5404,11 @@ static void sub_8092EB0(u8 taskId) gTasks[taskId].data[4] = r3; } -static bool8 sub_8092F44(u8 taskId) +static bool8 SearchParamCantScrollUp(u8 taskId) { u8 val1 = gTasks[taskId].data[1]; - const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; - u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; + const u16 *ptr = (const u16 *)&gTasks[taskId].data[sSearchOptions[val1].taskDataScrollOffset]; + u16 val2 = sSearchOptions[val1].numOptions - 1; if (val2 > 5 && *ptr != 0) return FALSE; @@ -5378,11 +5416,11 @@ static bool8 sub_8092F44(u8 taskId) return TRUE; } -static bool8 sub_8092F8C(u8 taskId) +static bool8 SearchParamCantScrollDown(u8 taskId) { u8 val1 = gTasks[taskId].data[1]; - const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; - u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; + const u16 *ptr = (const u16 *)&gTasks[taskId].data[sSearchOptions[val1].taskDataScrollOffset]; + u16 val2 = sSearchOptions[val1].numOptions - 1; if (val2 > 5 && *ptr < val2 - 5) return FALSE; @@ -5390,22 +5428,22 @@ static bool8 sub_8092F8C(u8 taskId) return TRUE; } -static void sub_8092FD8(struct Sprite *sprite) +static void SpriteCB_SearchParameterScrollArrow(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].func == sub_8092644) + if (gTasks[sprite->data[0]].func == Task_HandleSearchParameterInput) { u8 val; if (sprite->data[1] != 0) { - if (sub_8092F8C(sprite->data[0])) + if (SearchParamCantScrollDown(sprite->data[0])) sprite->invisible = TRUE; else sprite->invisible = FALSE; } else { - if (sub_8092F44(sprite->data[0])) + if (SearchParamCantScrollUp(sprite->data[0])) sprite->invisible = TRUE; else sprite->invisible = FALSE; @@ -5420,18 +5458,18 @@ static void sub_8092FD8(struct Sprite *sprite) } } -static void sub_809308C(u8 taskId) +static void CreateSearchParameterScrollArrows(u8 taskId) { u8 spriteId; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 4, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 0; - gSprites[spriteId].callback = sub_8092FD8; + gSprites[spriteId].callback = SpriteCB_SearchParameterScrollArrow; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 108, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 1; gSprites[spriteId].vFlip = TRUE; - gSprites[spriteId].callback = sub_8092FD8; + gSprites[spriteId].callback = SpriteCB_SearchParameterScrollArrow; } diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 9abea27a1..914febd9c 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -11,37 +11,37 @@ extern struct SoundInfo gSoundInfo; extern struct MusicPlayerInfo gMPlayInfo_BGM; -struct Unk201C800 { - s8 unk_0; - s8 unk_1; - u8 unk_2; - u16 unk_4; +struct PokedexCryMeterNeedle { + s8 rotation; + s8 targetRotation; + u8 moveIncrement; + u16 spriteId; }; -struct PokedexCryScreen_201C000 +struct PokedexCryScreen { - u8 unk0000[0x10]; - u8 unk0010; - u8 unk0011; - u8 unk0012; - u16 unk0014; - u8 unk0016; + u8 cryWaveformBuffer[0x10]; + u8 cryState; + u8 playhead; + u8 waveformPreviousY; + u16 charBase; + u8 playStartPos; u16 species; - u8 unk001A; - u8 unk001B; + u8 cryOverrideCountdown; + u8 cryRepeatDelay; }; -void sub_811A0A0(u16 species); -void sub_811A0C0(void); -void sub_811A124(void); -void sub_811A15C(u8); -void sub_811A1C8(u8, u8); -void sub_811A324(void); -void sub_811A350(u8, u16, u8); -void sub_811A534(struct Sprite *); -void sub_811A6D8(s8); +void PlayCryScreenCry(u16 species); +void BufferCryWaveformSegment(void); +void DrawWaveformFlatline(void); +void AdvancePlayhead(u8 bgId); +void DrawWaveformSegment(u8 position, u8 amplitude); +void DrawWaveformWindow(void); +void ShiftWaveformOver(u8 bgId, s16 pos, u8 axis); +void SpriteCB_CryMeterNeedle(struct Sprite *); +void SetCryMeterNeedleTarget(s8); -u8 gUnknown_03005E98; +u8 gDexCryScreenState; // data/pokedex_cry_screen.o @@ -49,16 +49,16 @@ const u16 CryMeterNeedlePalette[] = INCBIN_U16("graphics/pokedex/cry_meter_needl const u8 CryMeterNeedleTiles[] = INCBIN_U8("graphics/pokedex/cry_meter_needle.4bpp"); #if ENGLISH -const u16 gUnknown_083FAE7C[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); -const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); -const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +const u16 sCryMeter_Tilemap[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); +const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); #else -extern const u16 gUnknown_083FAE7C[]; -extern const u16 gUnknown_083FAF1C[]; -extern const u8 gUnknown_083FAF3C[]; +extern const u16 sCryMeter_Tilemap[]; +extern const u16 sCryMeter_Pal[]; +extern const u8 sCryMeter_Gfx[]; #endif // ENGLISH -const u16 gUnknown_083FB274[][72] = { +const u16 sWaveformOffsets[][72] = { { 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C, 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C, @@ -142,13 +142,16 @@ const u16 gUnknown_083FB274[][72] = { } }; -struct PokedexCryScreen_201C000 * const gPokedexCryScreenPtr = (struct PokedexCryScreen_201C000 *)(gSharedMem + 0x1c000); +struct PokedexCryScreen * const gPokedexCryScreenPtr = &ePokedexCryScreen; -const u16 gUnknown_083FB6F8[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal"); -const u16 gUnknown_083FB718[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp"); +const u16 sCryScreenBg_Pal[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal"); +const u16 sCryScreenBg_Gfx[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp"); -const u8 gUnknown_083FB738[] = {0xF0, 0x0F}; -const u8 gUnknown_083FB73A[][16] = { +const u8 sWaveformTileDataNybbleMasks[] = {0xF0, 0x0F}; + +// Waveform is blue in the middle (8) grading to white at peaks (15) +// Split into two arrays for the two vertical slice halves +const u8 sWaveformColor[][16] = { { 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F @@ -158,32 +161,30 @@ const u8 gUnknown_083FB73A[][16] = { } }; -struct Unk201C800 * const gPokedexCryScreenPtr2 = (struct Unk201C800 *)(gSharedMem + 0x1c800); +struct PokedexCryMeterNeedle * const gPokedexCryScreenPtr2 = &ePokedexCryScreen2; -union AnimCmd gSpriteAnim_83FB760[] = { +union AnimCmd sAnim_CryMeterNeedle_0[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END }; -const union AnimCmd * gSpriteAnimTable_83FB768[] = { - gSpriteAnim_83FB760 -}; +const union AnimCmd *sAnimTable_CryMeterNeedle[] = { sAnim_CryMeterNeedle_0 }; -struct OamData gOamData_83FB76C = { +struct OamData sOamData_CryMeterNeedle = { .y = 160, .affineMode = ST_OAM_AFFINE_NORMAL, .size = 3, .priority = 1 }; -struct SpriteTemplate gSpriteTemplate_83FB774 = { +struct SpriteTemplate sSpriteTemplate_CryMeterNeedle = { 0x2000, 0x2000, - &gOamData_83FB76C, - gSpriteAnimTable_83FB768, + &sOamData_CryMeterNeedle, + sAnimTable_CryMeterNeedle, NULL, gDummySpriteAffineAnimTable, - sub_811A534 + SpriteCB_CryMeterNeedle }; struct SpriteSheet gCryMeterNeedleSpriteSheets[] = { @@ -202,640 +203,254 @@ struct SpritePalette gCryMeterNeedleSpritePalettes[] = { #define CRY_METER_MAP_WIDTH 32 #endif -#ifdef NONMATCHING -// caused by some switch branch weirdness -u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1) +bool8 LoadCryWaveformWindow(struct CryScreenWindow *cry, u8 bgId) { u8 i; u8 j; - u16 r6; - u16 r7; - u8 r9 = FALSE; - u32 offset; + u8 position; + u16 tileNum; + u16 screenBase; + bool8 finished = FALSE; - switch (gUnknown_03005E98) + switch (gDexCryScreenState) { - case 0: - gPokedexCryScreenPtr->unk0014 = cry->unk0; - gPokedexCryScreenPtr->unk0016 = cry->yPos; - gPokedexCryScreenPtr->unk001A = 0; - gPokedexCryScreenPtr->unk001B = 0; - gPokedexCryScreenPtr->unk0010 = 0; - gPokedexCryScreenPtr->unk0012 = 28; - gPokedexCryScreenPtr->unk0011 = 0; - sub_811A350(arg1, -8 * cry->xPos, 0); - for (i = 0; i < 7; i++) - { - for (j = 0; j < 32; j++) - { - DmaCopy16(3, gUnknown_083FB718, gSharedMem[32 * i + j], 32); - } - } - gUnknown_03005E98++; - break; - case 1: - r7 = cry->unk2 << 11; - r6 = (cry->paletteNo << 12) + ((unsigned)(cry->unk0 << 18) >> 23); - for (i = 0; i < 7; i++) + case 0: + gPokedexCryScreenPtr->charBase = cry->charBase; + gPokedexCryScreenPtr->playStartPos = cry->yPos; + gPokedexCryScreenPtr->cryOverrideCountdown = 0; + gPokedexCryScreenPtr->cryRepeatDelay = 0; + gPokedexCryScreenPtr->cryState = 0; + gPokedexCryScreenPtr->waveformPreviousY = 28; + gPokedexCryScreenPtr->playhead = 0; + ShiftWaveformOver(bgId, -8 * cry->xPos, 1); + for (i = 0; i < 7; i++) + { + for (j = 0; j < 32; j++) { - for (j = 0; j < 32; j++) - { - offset = j << 1; - offset += i << 6; - offset += r7; - *((u16 *)(VRAM + offset)) = r6++; - } + DmaCopy16(3, sCryScreenBg_Gfx, &sCryWaveformWindowTiledata[((32 * i) + j) * 32], 32); } - for (i = 0; i < gPokedexCryScreenPtr->unk0016 * 8; i++) + } + gDexCryScreenState++; + break; + case 1: + screenBase = cry->screenBase * 0x800; + tileNum = (cry->paletteNo << 12) + ((cry->charBase >> 5) & 0x1FF); + for (i = 0; i < 7; i++) + { + for (j = 0; j < 32; j++) { - sub_811A1C8(i, 0); + *((u16 *)(VRAM + (2 * j) + (64 * i) + screenBase)) = tileNum++; } - gUnknown_03005E98++; - break; - case 2: - sub_811A324(); - LoadPalette(gUnknown_083FB6F8, cry->paletteNo * 16, 32); - r9 = TRUE; - break; + } + for (position = 0; position < gPokedexCryScreenPtr->playStartPos * 8; position++) + { + DrawWaveformSegment(position, 0); + } + gDexCryScreenState++; + break; + case 2: + DrawWaveformWindow(); + LoadPalette(sCryScreenBg_Pal, cry->paletteNo * 16, 32); + finished = TRUE; + break; } - return r9; + return finished; } -#else -NAKED u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tadds r5, r0, 0\n" - "\tlsls r1, 24\n" - "\tlsrs r2, r1, 24\n" - "\tmovs r0, 0\n" - "\tmov r9, r0\n" - "\tldr r6, _08119E60 @ =gUnknown_03005E98\n" - "\tldrb r0, [r6]\n" - "\tcmp r0, 0x1\n" - "\tbeq _08119EE0\n" - "\tcmp r0, 0x1\n" - "\tbgt _08119E64\n" - "\tcmp r0, 0\n" - "\tbeq _08119E6A\n" - "\tb _08119F74\n" - "\t.align 2, 0\n" - "_08119E60: .4byte gUnknown_03005E98\n" - "_08119E64:\n" - "\tcmp r0, 0x2\n" - "\tbeq _08119F60\n" - "\tb _08119F74\n" - "_08119E6A:\n" - "\tldr r4, _08119ECC @ =gSharedMem + 0x1C000\n" - "\tldrh r0, [r5]\n" - "\tmovs r1, 0\n" - "\tstrh r0, [r4, 0x14]\n" - "\tldrb r0, [r5, 0x5]\n" - "\tstrb r0, [r4, 0x16]\n" - "\tstrb r1, [r4, 0x1A]\n" - "\tstrb r1, [r4, 0x1B]\n" - "\tstrb r1, [r4, 0x10]\n" - "\tmovs r0, 0x1C\n" - "\tstrb r0, [r4, 0x12]\n" - "\tstrb r1, [r4, 0x11]\n" - "\tldrb r1, [r5, 0x4]\n" - "\tlsls r1, 19\n" - "\tnegs r1, r1\n" - "\tasrs r1, 16\n" - "\tadds r0, r2, 0\n" - "\tmovs r2, 0x1\n" - "\tbl sub_811A350\n" - "\tmovs r0, 0\n" - "\tmov r12, r6\n" - "\tldr r1, _08119ED0 @ =0x040000d4\n" - "\tldr r7, _08119ED4 @ =gUnknown_083FB718\n" - "\tldr r2, _08119ED8 @ =0xfffe4000\n" - "\tadds r6, r4, r2\n" - "\tldr r5, _08119EDC @ =0x80000010\n" - "_08119EA0:\n" - "\tmovs r3, 0\n" - "\tadds r4, r0, 0x1\n" - "\tlsls r2, r0, 5\n" - "_08119EA6:\n" - "\tstr r7, [r1]\n" - "\tadds r0, r2, r3\n" - "\tlsls r0, 5\n" - "\tadds r0, r6\n" - "\tstr r0, [r1, 0x4]\n" - "\tstr r5, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x1F\n" - "\tbls _08119EA6\n" - "\tlsls r0, r4, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x6\n" - "\tbls _08119EA0\n" - "\tmov r1, r12\n" - "\tb _08119F50\n" - "\t.align 2, 0\n" - "_08119ECC: .4byte gSharedMem + 0x1C000\n" - "_08119ED0: .4byte 0x040000d4\n" - "_08119ED4: .4byte gUnknown_083FB718\n" - "_08119ED8: .4byte 0xfffe4000\n" - "_08119EDC: .4byte 0x80000010\n" - "_08119EE0:\n" - "\tldrb r0, [r5, 0x2]\n" - "\tlsls r0, 27\n" - "\tlsrs r7, r0, 16\n" - "\tldrb r1, [r5, 0x3]\n" - "\tlsls r1, 12\n" - "\tldrh r0, [r5]\n" - "\tlsls r0, 18\n" - "\tlsrs r0, 23\n" - "\tadds r1, r0\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tmovs r0, 0\n" - "\tldr r2, _08119F58 @ =gSharedMem + 0x1C000\n" - "\tmov r8, r2\n" - "\tmovs r1, 0xC0\n" - "\tlsls r1, 19\n" - "\tmov r12, r1\n" - "_08119F02:\n" - "\tmovs r3, 0\n" - "\tadds r4, r0, 0x1\n" - "\tlsls r5, r0, 6\n" - "_08119F08:\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r5\n" - "\tadds r1, r7\n" - "\tadd r1, r12\n" - "\tadds r2, r6, 0\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tstrh r2, [r1]\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x1F\n" - "\tbls _08119F08\n" - "\tlsls r0, r4, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x6\n" - "\tbls _08119F02\n" - "\tmov r2, r8\n" - "\tldrb r0, [r2, 0x16]\n" - "\tmovs r4, 0\n" - "\tcmp r0, 0\n" - "\tbeq _08119F4E\n" - "\tmov r5, r8\n" - "_08119F38:\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0\n" - "\tbl sub_811A1C8\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldrb r0, [r5, 0x16]\n" - "\tlsls r0, 3\n" - "\tcmp r4, r0\n" - "\tblt _08119F38\n" - "_08119F4E:\n" - "\tldr r1, _08119F5C @ =gUnknown_03005E98\n" - "_08119F50:\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tb _08119F74\n" - "\t.align 2, 0\n" - "_08119F58: .4byte gSharedMem + 0x1C000\n" - "_08119F5C: .4byte gUnknown_03005E98\n" - "_08119F60:\n" - "\tbl sub_811A324\n" - "\tldr r0, _08119F84 @ =gUnknown_083FB6F8\n" - "\tldrb r1, [r5, 0x3]\n" - "\tlsls r1, 4\n" - "\tmovs r2, 0x20\n" - "\tbl LoadPalette\n" - "\tmovs r0, 0x1\n" - "\tmov r9, r0\n" - "_08119F74:\n" - "\tmov r0, r9\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_08119F84: .4byte gUnknown_083FB6F8"); -} -#endif // NONMATCHING -void sub_8119F88(u8 a0) +void UpdateCryWaveformWindow(u8 bgId) { u8 r4; - sub_811A324(); - sub_811A15C(a0); - if (gPokedexCryScreenPtr->unk001B) - gPokedexCryScreenPtr->unk001B--; - if (gPokedexCryScreenPtr->unk001A && !--gPokedexCryScreenPtr->unk001A) + DrawWaveformWindow(); + AdvancePlayhead(bgId); + if (gPokedexCryScreenPtr->cryRepeatDelay) + gPokedexCryScreenPtr->cryRepeatDelay--; + if (gPokedexCryScreenPtr->cryOverrideCountdown && !--gPokedexCryScreenPtr->cryOverrideCountdown) { - sub_811A0A0(gPokedexCryScreenPtr->species); - sub_811A124(); + PlayCryScreenCry(gPokedexCryScreenPtr->species); + DrawWaveformFlatline(); return; } - if (gPokedexCryScreenPtr->unk0010 == 0) + if (gPokedexCryScreenPtr->cryState == 0) { - sub_811A124(); + DrawWaveformFlatline(); return; } - if (gPokedexCryScreenPtr->unk0010 == 1) + if (gPokedexCryScreenPtr->cryState == 1) { - sub_811A0C0(); + BufferCryWaveformSegment(); } - else if (gPokedexCryScreenPtr->unk0010 > 8) + else if (gPokedexCryScreenPtr->cryState > 8) { if (!IsCryPlaying()) { - sub_811A124(); - gPokedexCryScreenPtr->unk0010 = 0; + DrawWaveformFlatline(); + gPokedexCryScreenPtr->cryState = 0; return; } - sub_811A0C0(); - gPokedexCryScreenPtr->unk0010 = 1; + BufferCryWaveformSegment(); + gPokedexCryScreenPtr->cryState = 1; } - r4 = 2 * (gPokedexCryScreenPtr->unk0010 - 1); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, gPokedexCryScreenPtr->unk0000[r4]); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, gPokedexCryScreenPtr->unk0000[r4 + 1]); - gPokedexCryScreenPtr->unk0010++; + r4 = 2 * (gPokedexCryScreenPtr->cryState - 1); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 2, + gPokedexCryScreenPtr->cryWaveformBuffer[r4]); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 1, + gPokedexCryScreenPtr->cryWaveformBuffer[r4 + 1]); + gPokedexCryScreenPtr->cryState++; } -void sub_811A050(u16 species) +void CryScreenPlayButton(u16 species) { - if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->unk001A) + if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->cryOverrideCountdown) { - if (!gPokedexCryScreenPtr->unk001B) + if (!gPokedexCryScreenPtr->cryRepeatDelay) { - gPokedexCryScreenPtr->unk001B = 4; + gPokedexCryScreenPtr->cryRepeatDelay = 4; if (IsCryPlaying() == TRUE) { StopCry(); gPokedexCryScreenPtr->species = species; - gPokedexCryScreenPtr->unk001A = 2; + gPokedexCryScreenPtr->cryOverrideCountdown = 2; } else - sub_811A0A0(species); + PlayCryScreenCry(species); } } } -void sub_811A0A0(u16 species) +void PlayCryScreenCry(u16 species) { - PlayCry2(species, 0, 0x7d, 10); - gPokedexCryScreenPtr->unk0010 = 1; + PlayCry2(species, 0, 125, 10); + gPokedexCryScreenPtr->cryState = 1; } -// compiler refuses to put src into r0. this can't be solved with greg asm hacks -#ifdef NONMATCHING -void sub_811A0C0(void) +#define GetSrcBufferForCryWaveformSegment(counter) ({ \ + const s8 * p; \ + if ((counter) < 2) \ + p = gSoundInfo.pcmBuffer; \ + else \ + p = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank; \ + p + PCM_DMA_BUF_SIZE; \ +}) + +void BufferCryWaveformSegment(void) { const s8 * src; u8 i; - if (gPcmDmaCounter < 2) - src = gSoundInfo.pcmBuffer; - else - src = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank; - - src += PCM_DMA_BUF_SIZE; + src = GetSrcBufferForCryWaveformSegment(gPcmDmaCounter); for (i = 0; i < 16; i++) - gPokedexCryScreenPtr->unk0000[i] = src[i * 2] * 2; - -} -#else -NAKED void sub_811A0C0(void) -{ - asm_unified("\tpush {r4,lr}\n" - "\tldr r3, _0811A0D0 @ =gPcmDmaCounter\n" - "\tmovs r0, 0\n" - "\tldrsb r0, [r3, r0]\n" - "\tcmp r0, 0x1\n" - "\tbgt _0811A0D8\n" - "\tldr r0, _0811A0D4 @ =gSoundInfo + 0x350\n" - "\tb _0811A0F0\n" - "\t.align 2, 0\n" - "_0811A0D0: .4byte gPcmDmaCounter\n" - "_0811A0D4: .4byte gSoundInfo + 0x350\n" - "_0811A0D8:\n" - "\tldr r2, _0811A11C @ =gSoundInfo\n" - "\tldrb r1, [r2, 0xB]\n" - "\tmovs r0, 0\n" - "\tldrsb r0, [r3, r0]\n" - "\tsubs r0, 0x1\n" - "\tsubs r1, r0\n" - "\tldr r0, [r2, 0x10]\n" - "\tmuls r0, r1\n" - "\tmovs r1, 0xD4\n" - "\tlsls r1, 2\n" - "\tadds r2, r1\n" - "\tadds r0, r2\n" - "_0811A0F0:\n" - "\tmovs r1, 0xC6\n" - "\tlsls r1, 3\n" - "\tadds r3, r0, r1\n" - "\tmovs r2, 0\n" - "\tldr r4, _0811A120 @ =gSharedMem + 0x1C000\n" - "_0811A0FA:\n" - "\tadds r1, r2, r4\n" - "\tlsls r0, r2, 1\n" - "\tadds r0, r3\n" - "\tldrb r0, [r0]\n" - "\tlsls r0, 24\n" - "\tasrs r0, 24\n" - "\tlsls r0, 1\n" - "\tstrb r0, [r1]\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r2, r0, 24\n" - "\tcmp r2, 0xF\n" - "\tbls _0811A0FA\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0811A11C: .4byte gSoundInfo\n" - "_0811A120: .4byte gSharedMem + 0x1C000"); + gPokedexCryScreenPtr->cryWaveformBuffer[i] = src[i * 2] * 2; + } -#endif // NONMATCHING -void sub_811A124(void) +void DrawWaveformFlatline(void) { - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, 0); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, 0); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 2, 0); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 1, 0); } -void sub_811A15C(u8 a0) +void AdvancePlayhead(u8 bgId) { u8 i; - u16 r3; - sub_811A350(a0, gPokedexCryScreenPtr->unk0011, 0); - gPokedexCryScreenPtr->unk0011 += 2; - r3 = (gPokedexCryScreenPtr->unk0011 / 8 + gPokedexCryScreenPtr->unk0016 + 1) % 32; + u16 offset; + + ShiftWaveformOver(bgId, gPokedexCryScreenPtr->playhead, 0); + gPokedexCryScreenPtr->playhead += 2; + offset = (gPokedexCryScreenPtr->playhead / 8 + gPokedexCryScreenPtr->playStartPos + 1) % 32; for (i = 0; i < 7; i++) { - DmaCopy16(3, gUnknown_083FB718, &gSharedMem[32 * (32 * i + r3)], 32); + DmaCopy16(3, sCryScreenBg_Gfx, &sCryWaveformWindowTiledata[32 * (32 * i + offset)], 32); } } -#ifdef NONMATCHING -void sub_811A1C8(u8 a0, u8 a1) +void DrawWaveformSegment(u8 position, u8 amplitude) { - u8 sp0; - u8 r7; - u8 r8; - u16 r1 = (a1 + 127) << 8; - u8 i = r1 / 1152.0; - if (i > 71 - 16) - i = 71 - 16; - sp0 = i; - r7 = a0 % 2; - r8 = a0 / 8; - if (i > gPokedexCryScreenPtr->unk0012) +#define PLAY_START_POS (position >> 3) +#define PLAYHEAD_POS (position & ((1 << 3) - 1)) +#define VERT_SLICE (position & 1) + u8 currentPointY; + u8 nybble; + u16 offset; + u16 temp; + u8 y; + + temp = (amplitude + 127) * 256; + y = temp / 1152.0; + if (y > 71 - 16) + y = 71 - 16; + currentPointY = y; + nybble = VERT_SLICE; + if (y > gPokedexCryScreenPtr->waveformPreviousY) { do { - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] &= gUnknown_083FB738[r7]; - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] |= gUnknown_083FB73A[r7][((i / 3) - 1) & 0x0F]; - i--; - } while (i > gPokedexCryScreenPtr->unk0012); + offset = sWaveformOffsets[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= sWaveformTileDataNybbleMasks[nybble]; + sCryWaveformWindowTiledata[offset] |= sWaveformColor[nybble][((y / 3) - 1) & 0x0F]; + y--; + } while (y > gPokedexCryScreenPtr->waveformPreviousY); } else { do { - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] &= gUnknown_083FB738[r7]; - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] |= gUnknown_083FB73A[r7][((i / 3) - 1) & 0x0F]; - i++; - } while (i < gPokedexCryScreenPtr->unk0012); + offset = sWaveformOffsets[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= sWaveformTileDataNybbleMasks[nybble]; + sCryWaveformWindowTiledata[offset] |= sWaveformColor[nybble][((y / 3) - 1) & 0x0F]; + y++; + } while (y < gPokedexCryScreenPtr->waveformPreviousY); } - gPokedexCryScreenPtr->unk0012 = sp0; -} -#else -NAKED void sub_811A1C8(u8 a0, u8 a1) -{ - 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, 0xC\n" - "\tlsls r5, r0, 24\n" - "\tlsrs r4, r5, 24\n" - "\tlsls r1, 24\n" - "\tmovs r0, 0xFE\n" - "\tlsls r0, 23\n" - "\tadds r1, r0\n" - "\tlsrs r1, 16\n" - "\tadds r0, r1, 0\n" - "\tbl __floatsidf\n" - "\tldr r3, _0811A280 @ =0x00000000\n" - "\tldr r2, _0811A27C @ =0x40920000\n" - "\tbl __divdf3\n" - "\tbl __fixunsdfsi\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tcmp r6, 0x37\n" - "\tbls _0811A1FE\n" - "\tmovs r6, 0x37\n" - "_0811A1FE:\n" - "\tstr r6, [sp]\n" - "\tmovs r7, 0x1\n" - "\tands r7, r4\n" - "\tldr r0, _0811A284 @ =gSharedMem + 0x1C000\n" - "\tmov r10, r0\n" - "\tlsrs r5, 27\n" - "\tmov r8, r5\n" - "\tldr r0, _0811A288 @ =gUnknown_083FB738\n" - "\tmov r1, r10\n" - "\tldrb r1, [r1, 0x12]\n" - "\tcmp r6, r1\n" - "\tbls _0811A298\n" - "\tadds r0, r7, r0\n" - "\tldrb r0, [r0]\n" - "\tmov r9, r0\n" - "\tmovs r2, 0x7\n" - "\tands r2, r4\n" - "_0811A220:\n" - "\tlsls r1, r6, 1\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 4\n" - "\tadds r1, r0\n" - "\tldr r3, _0811A28C @ =gUnknown_083FB274\n" - "\tadds r1, r3\n" - "\tmov r3, r8\n" - "\tlsls r0, r3, 5\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0811A290 @ =gSharedMem\n" - "\tadds r5, r0, r1\n" - "\tldrb r4, [r5]\n" - "\tmov r3, r9\n" - "\tands r4, r3\n" - "\tstrb r4, [r5]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0x3\n" - "\tstr r2, [sp, 0x8]\n" - "\tbl __udivsi3\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tsubs r0, 0x1\n" - "\tmovs r1, 0xF\n" - "\tands r0, r1\n" - "\tlsls r1, r7, 4\n" - "\tadds r0, r1\n" - "\tldr r1, _0811A294 @ =gUnknown_083FB73A\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0]\n" - "\torrs r4, r0\n" - "\tstrb r4, [r5]\n" - "\tsubs r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, [sp, 0x8]\n" - "\tldr r3, _0811A284 @ =gSharedMem + 0x1C000\n" - "\tldrb r3, [r3, 0x12]\n" - "\tcmp r6, r3\n" - "\tbhi _0811A220\n" - "\tb _0811A2FA\n" - "\t.align 2, 0\n" - "_0811A27C: .4byte 0x40920000\n" - "_0811A280: .4byte 0x00000000\n" - "_0811A284: .4byte gSharedMem + 0x1C000\n" - "_0811A288: .4byte gUnknown_083FB738\n" - "_0811A28C: .4byte gUnknown_083FB274\n" - "_0811A290: .4byte gSharedMem\n" - "_0811A294: .4byte gUnknown_083FB73A\n" - "_0811A298:\n" - "\tlsls r1, r7, 4\n" - "\tstr r1, [sp, 0x4]\n" - "\tadds r0, r7, r0\n" - "\tldrb r0, [r0]\n" - "\tmov r9, r0\n" - "\tmovs r7, 0x7\n" - "\tands r7, r4\n" - "_0811A2A6:\n" - "\tlsls r1, r6, 1\n" - "\tlsls r0, r7, 3\n" - "\tadds r0, r7\n" - "\tlsls r0, 4\n" - "\tadds r1, r0\n" - "\tldr r2, _0811A314 @ =gUnknown_083FB274\n" - "\tadds r1, r2\n" - "\tmov r3, r8\n" - "\tlsls r0, r3, 5\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0811A318 @ =gSharedMem\n" - "\tadds r5, r0, r1\n" - "\tldrb r4, [r5]\n" - "\tmov r2, r9\n" - "\tands r4, r2\n" - "\tstrb r4, [r5]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0x3\n" - "\tbl __udivsi3\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tsubs r0, 0x1\n" - "\tmovs r1, 0xF\n" - "\tands r0, r1\n" - "\tldr r3, [sp, 0x4]\n" - "\tadds r0, r3\n" - "\tldr r1, _0811A31C @ =gUnknown_083FB73A\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0]\n" - "\torrs r4, r0\n" - "\tstrb r4, [r5]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, _0811A320 @ =gSharedMem + 0x1C000\n" - "\tldrb r2, [r2, 0x12]\n" - "\tcmp r6, r2\n" - "\tbcc _0811A2A6\n" - "_0811A2FA:\n" - "\tmov r3, sp\n" - "\tldrb r0, [r3]\n" - "\tmov r3, r10\n" - "\tstrb r0, [r3, 0x12]\n" - "\tadd sp, 0xC\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" - "_0811A314: .4byte gUnknown_083FB274\n" - "_0811A318: .4byte gSharedMem\n" - "_0811A31C: .4byte gUnknown_083FB73A\n" - "_0811A320: .4byte gSharedMem + 0x1C000"); + gPokedexCryScreenPtr->waveformPreviousY = currentPointY; + #undef PLAYHEAD_POS + #undef PLAY_START_POS + #undef VERT_SLICE } -#endif // NONMATCHING -void sub_811A324(void) +void DrawWaveformWindow(void) { - DmaCopy16(3, gSharedMem, VRAM + gPokedexCryScreenPtr->unk0014, 0x1c00); + DmaCopy16(3, sCryWaveformWindowTiledata, VRAM + gPokedexCryScreenPtr->charBase, 0x1c00); } -void sub_811A350(u8 a0, u16 a1, u8 a2) +void ShiftWaveformOver(u8 bgId, s16 pos, u8 axis) { - switch (a0) + switch (bgId) { case 0: - if (a2) - REG_BG0VOFS = a1; + if (axis) + REG_BG0VOFS = pos; else - REG_BG0HOFS = a1; + REG_BG0HOFS = pos; break; case 1: - if (a2) - REG_BG1VOFS = a1; + if (axis) + REG_BG1VOFS = pos; else - REG_BG1HOFS = a1; + REG_BG1HOFS = pos; break; case 2: - if (a2) - REG_BG2VOFS = a1; + if (axis) + REG_BG2VOFS = pos; else - REG_BG2HOFS = a1; + REG_BG2HOFS = pos; break; case 3: - if (a2) - REG_BG3VOFS = a1; + if (axis) + REG_BG3VOFS = pos; else - REG_BG3HOFS = a1; + REG_BG3HOFS = pos; break; } } -u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { +bool8 ShowPokedexCryScreen(struct CryScreenWindow *cry, UNUSED u8 arg1) { int returnVal = FALSE; - switch (gUnknown_03005E98) + switch (gDexCryScreenState) { case 0: - LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0)); - LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20); - gUnknown_03005E98 += 1; + LZ77UnCompVram(sCryMeter_Gfx, (void *) (VRAM + cry->charBase)); + LoadPalette(sCryMeter_Pal, cry->paletteNo * 16, 0x20); + gDexCryScreenState++; break; case 1: @@ -845,9 +460,9 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { u32 r12; int x, y; - vram = BG_SCREEN_ADDR(cry->unk2); + vram = BG_SCREEN_ADDR(cry->screenBase); - r12 = (u32) (cry->unk0 << 18) >> 23; + r12 = (cry->charBase >> 5) & 0x1FF; for (row = 0; row < 8; row++) { @@ -855,11 +470,11 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { { y = row + cry->yPos; x = col + cry->xPos; - *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; + *(u16 *) (vram + (y * 64 + x * 2)) = (sCryMeter_Tilemap[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; } } - gUnknown_03005E98 += 1; + gDexCryScreenState += 1; break; } @@ -867,10 +482,10 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { { LoadSpriteSheets(gCryMeterNeedleSpriteSheets); LoadSpritePalettes(gCryMeterNeedleSpritePalettes); - gPokedexCryScreenPtr2->unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); - gPokedexCryScreenPtr2->unk_0 = 0x20; - gPokedexCryScreenPtr2->unk_1 = 0x20; - gPokedexCryScreenPtr2->unk_2 = 0; + gPokedexCryScreenPtr2->spriteId = CreateSprite(&sSpriteTemplate_CryMeterNeedle, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); + gPokedexCryScreenPtr2->rotation = 0x20; + gPokedexCryScreenPtr2->targetRotation = 0x20; + gPokedexCryScreenPtr2->moveIncrement = 0; returnVal = TRUE; break; @@ -882,82 +497,84 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { void DestroyCryMeterNeedleSprite(void) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->unk_4].oam.paletteNum)); - DestroySprite(gSprites + gPokedexCryScreenPtr2->unk_4); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->spriteId].oam.paletteNum)); + DestroySprite(gSprites + gPokedexCryScreenPtr2->spriteId); } -void sub_811A534(struct Sprite * sprite) +void SpriteCB_CryMeterNeedle(struct Sprite * sprite) { u16 i; - s8 r3; + s8 peakAmplitude; s16 x; s16 y; - struct ObjAffineSrcData sp04; - struct OamMatrix sp0c; + struct ObjAffineSrcData affine; + struct OamMatrix matrix; u8 * r0; - gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineParam = 0; - switch (gPokedexCryScreenPtr->unk0010) + gSprites[gPokedexCryScreenPtr2->spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[gPokedexCryScreenPtr2->spriteId].oam.affineParam = 0; + switch (gPokedexCryScreenPtr->cryState) { case 0: - gPokedexCryScreenPtr2->unk_1 = 0x20; - if (gPokedexCryScreenPtr2->unk_0 > 0) + gPokedexCryScreenPtr2->targetRotation = 0x20; + if (gPokedexCryScreenPtr2->rotation > 0) { - if (gPokedexCryScreenPtr2->unk_2 != 1) - gPokedexCryScreenPtr2->unk_2--; + if (gPokedexCryScreenPtr2->moveIncrement != 1) + gPokedexCryScreenPtr2->moveIncrement--; } else - gPokedexCryScreenPtr2->unk_2 = 5; + gPokedexCryScreenPtr2->moveIncrement = 5; break; case 2: - r3 = 0; + peakAmplitude = 0; for (i = 0; i < 16; i++) { - if (r3 < gPokedexCryScreenPtr->unk0000[i]) - r3 = gPokedexCryScreenPtr->unk0000[i]; + if (peakAmplitude < gPokedexCryScreenPtr->cryWaveformBuffer[i]) + peakAmplitude = gPokedexCryScreenPtr->cryWaveformBuffer[i]; } - sub_811A6D8(r3 * 0xd0 / 0x100); + SetCryMeterNeedleTarget(peakAmplitude * 0xd0 / 0x100); break; case 6: - r0 = &gPokedexCryScreenPtr->unk0000[10]; - sub_811A6D8(*r0 * 0xd0 / 0x100); + r0 = &gPokedexCryScreenPtr->cryWaveformBuffer[10]; + SetCryMeterNeedleTarget(*r0 * 0xd0 / 0x100); break; } - if (gPokedexCryScreenPtr2->unk_0 == gPokedexCryScreenPtr2->unk_1) - ; - else if (gPokedexCryScreenPtr2->unk_0 < gPokedexCryScreenPtr2->unk_1) + if (gPokedexCryScreenPtr2->rotation == gPokedexCryScreenPtr2->targetRotation) + ; // Empty, needle has reached target + else if (gPokedexCryScreenPtr2->rotation < gPokedexCryScreenPtr2->targetRotation) { - if ((gPokedexCryScreenPtr2->unk_0 += gPokedexCryScreenPtr2->unk_2) > gPokedexCryScreenPtr2->unk_1) + // Rotate needle left + if ((gPokedexCryScreenPtr2->rotation += gPokedexCryScreenPtr2->moveIncrement) > gPokedexCryScreenPtr2->targetRotation) { - gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1; - gPokedexCryScreenPtr2->unk_1 = 0; + gPokedexCryScreenPtr2->rotation = gPokedexCryScreenPtr2->targetRotation; + gPokedexCryScreenPtr2->targetRotation = 0; } } else { - if ((gPokedexCryScreenPtr2->unk_0 -= gPokedexCryScreenPtr2->unk_2) < gPokedexCryScreenPtr2->unk_1) + // Rotate needle right + if ((gPokedexCryScreenPtr2->rotation -= gPokedexCryScreenPtr2->moveIncrement) < gPokedexCryScreenPtr2->targetRotation) { - gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1; - gPokedexCryScreenPtr2->unk_1 = 0; + gPokedexCryScreenPtr2->rotation = gPokedexCryScreenPtr2->targetRotation; + gPokedexCryScreenPtr2->targetRotation = 0; } } - sp04.xScale = 0x100; - sp04.yScale = 0x100; - sp04.rotation = gPokedexCryScreenPtr2->unk_0 * 256; - ObjAffineSet(&sp04, &sp0c, 1, 2); - SetOamMatrix(0, sp0c.a, sp0c.b, sp0c.c, sp0c.d); - x = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF)]; - y = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF) + 0x40]; + affine.xScale = 0x100; + affine.yScale = 0x100; + affine.rotation = gPokedexCryScreenPtr2->rotation * 256; + ObjAffineSet(&affine, &matrix, 1, 2); + SetOamMatrix(0, matrix.a, matrix.b, matrix.c, matrix.d); + x = gSineTable[((gPokedexCryScreenPtr2->rotation + 0x7F) & 0xFF)]; + y = gSineTable[((gPokedexCryScreenPtr2->rotation + 0x7F) & 0xFF) + 0x40]; sprite->pos2.x = x * 24 / 256; sprite->pos2.y = y * 24 / 256; } -void sub_811A6D8(s8 a0) +void SetCryMeterNeedleTarget(s8 offset) { - u16 r2 = (0x20 - a0) & 0xff; - if (r2 > 0x20 && r2 < 0xe0) - r2 = 0xe0; - gPokedexCryScreenPtr2->unk_1 = r2; - gPokedexCryScreenPtr2->unk_2 = 5; + u16 rotation = (0x20 - offset) & 0xff; + if (rotation > 0x20 && rotation < 0xe0) + rotation = 0xe0; + gPokedexCryScreenPtr2->targetRotation = rotation; + gPokedexCryScreenPtr2->moveIncrement = 5; } diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 17f0aa768..db31ec47a 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -36,7 +36,7 @@ extern u16 gBattleMovePower; extern u16 gTrainerBattleOpponent; extern struct PokemonStorage gPokemonStorage; -EWRAM_DATA struct SpriteTemplate gUnknown_02024E8C = {0}; +EWRAM_DATA struct SpriteTemplate gCreatingSpriteTemplate = {0}; extern u8 gBadEggNickname[]; extern const struct SpriteTemplate gSpriteTemplate_8208288[]; @@ -152,26 +152,28 @@ 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) { - gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; - gUnknown_02024E8C.paletteTag = species; - gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? + gCreatingSpriteTemplate = gSpriteTemplate_8208288[a2]; + gCreatingSpriteTemplate.paletteTag = species; + gCreatingSpriteTemplate.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? } void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) { - gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; - gUnknown_02024E8C.paletteTag = species; + gCreatingSpriteTemplate = gSpriteTemplate_8208288[a2]; + gCreatingSpriteTemplate.paletteTag = species; if (a2 == 0 || a2 == 2) - gUnknown_02024E8C.anims = gUnknown_081ECACC[species]; + gCreatingSpriteTemplate.anims = gUnknown_081ECACC[species]; else - gUnknown_02024E8C.anims = gUnknown_081EC2A4[species]; + gCreatingSpriteTemplate.anims = gUnknown_081EC2A4[species]; } void EncryptBoxMon(struct BoxPokemon *boxMon) @@ -1077,27 +1079,27 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) for (i = 0; i < 6; i++) { - if (eSecretBaseRecord->partySpecies[i]) + if (eSecretBaseRecord->party.species[i]) { CreateMon(&gEnemyParty[i], - eSecretBaseRecord->partySpecies[i], - eSecretBaseRecord->partyLevels[i], + eSecretBaseRecord->party.species[i], + eSecretBaseRecord->party.levels[i], 15, 1, - eSecretBaseRecord->partyPersonality[i], + eSecretBaseRecord->party.personality[i], 2, 0); // these two SetMonData calls require the (u8 *) cast since SetMonData is declared in this function. - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&eSecretBaseRecord->partyHeldItems[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&eSecretBaseRecord->party.heldItems[i]); for (j = 0; j < 6; j++) - SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &eSecretBaseRecord->partyEVs[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &eSecretBaseRecord->party.EVs[i]); for (j = 0; j < 4; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&eSecretBaseRecord->partyMoves[i * 4 + j]); - SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[eSecretBaseRecord->partyMoves[i * 4 + j]].pp); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&eSecretBaseRecord->party.moves[i * 4 + j]); + SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[eSecretBaseRecord->party.moves[i * 4 + j]].pp); } } } @@ -1188,6 +1190,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) { s32 i; s8 nickname[POKEMON_NAME_LENGTH * 2]; + u16 * hpSwitchout; gBattleMons[battleIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); gBattleMons[battleIndex].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); @@ -1226,7 +1229,9 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); StringCopy10(gBattleMons[battleIndex].nickname, nickname); GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName); - ewram160BC[GetBattlerSide(battleIndex)] = gBattleMons[battleIndex].hp; + + hpSwitchout = &gBattleStruct->HP_OnSwitchout[GetBattlerSide(battleIndex)]; + *hpSwitchout = gBattleMons[battleIndex].hp; for (i = 0; i < 8; i++) gBattleMons[battleIndex].statStages[i] = 6; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 16c2f3738..2e71154b9 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -473,7 +473,7 @@ u16 SpeciesToCryId(u16 species) void unref_sub_803F938(u16 species, u32 personality, u8 *dest) { - if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2]) + if (species == SPECIES_SPINDA && dest != gMonSpriteGfx_Sprite_ptr[0] && dest != gMonSpriteGfx_Sprite_ptr[2]) { int i; for (i = 0; i < 4; i++) diff --git a/src/pokemon_storage_system_2.c b/src/pokemon_storage_system_2.c index 79ebc93ee..e3f007bb3 100644 --- a/src/pokemon_storage_system_2.c +++ b/src/pokemon_storage_system_2.c @@ -1706,7 +1706,7 @@ void sub_80981F0(u16 species, u32 pid) { if (species != SPECIES_NONE) { - HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, 1, (intptr_t)gPokemonStorageSystemPtr->unk_4784, gPokemonStorageSystemPtr->unk_2784, species, pid); + HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, 1, gPokemonStorageSystemPtr->unk_4784, gPokemonStorageSystemPtr->unk_2784, species, pid); LZ77UnCompWram(gPokemonStorageSystemPtr->unk_11e8, gPokemonStorageSystemPtr->unk_2704); CpuCopy32(gPokemonStorageSystemPtr->unk_2784, gPokemonStorageSystemPtr->unk_26fc, 0x800); LoadPalette(gPokemonStorageSystemPtr->unk_2704, gPokemonStorageSystemPtr->unk_26fa, 0x20); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 9d1aa99db..32b40566c 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -126,7 +126,7 @@ extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlayInfo_BGM; extern u8 gPPUpReadMasks[]; TaskFunc gUnknown_03005CF0; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern const u8 gStatusPal_Icons[]; extern const u8 gStatusGfx_Icons[]; @@ -1838,8 +1838,8 @@ static u8 SummaryScreen_LoadPokemonSprite(struct Pokemon *mon, u8 *state) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - ewram_addr, - gUnknown_081FAF4C[1], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[1], species, personality); *state += 1; @@ -3988,7 +3988,7 @@ u8 SummaryScreen_CreatePokemonSprite(struct Pokemon *mon) u8 spriteId; species = GetMonData(mon, MON_DATA_SPECIES2); - spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5); + spriteId = CreateSprite(&gCreatingSpriteTemplate, 40, 64, 5); FreeSpriteOamMatrix(&gSprites[spriteId]); diff --git a/src/pokenav.c b/src/pokenav.c index ee2a4e676..8b9040e12 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -4626,7 +4626,7 @@ void sub_80F4824(s16 arg0, u8 arg1) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, 1, - (intptr_t)gPokenavStructPtr->unk131E4, + gPokenavStructPtr->unk131E4, gPokenavStructPtr->unkD1E4[arg1], species, personality); diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index d0fbbec85..7c8c37c9e 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -1,14 +1,14 @@ #include "global.h" +#include "constants/heal_locations.h" +#include "contest_util.h" #include "event_data.h" #include "hall_of_fame.h" #include "load_save.h" #include "main.h" -#include "pokemon.h" #include "overworld.h" -#include "script_pokemon_80C4.h" -#include "constants/heal_locations.h" +#include "pokemon.h" -extern u8 gUnknown_02039324; +extern u8 gHasHallOfFameRecords; int GameClear(void) { @@ -19,11 +19,11 @@ int GameClear(void) if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) { - gUnknown_02039324 = 1; + gHasHallOfFameRecords = 1; } else { - gUnknown_02039324 = 0; + gHasHallOfFameRecords = 0; FlagSet(FLAG_SYS_GAME_CLEAR); } diff --git a/src/record_mixing.c b/src/record_mixing.c index 1bf92bb41..f04c2ecb0 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -677,7 +677,7 @@ void sub_80BA00C(u8 taskId) task->data[1]++; if (task->data[1] > 10) { - sub_800832C(); + SetCloseLinkCallback(); task->data[0]++; } break; diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index ad18b3594..8254921a4 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -9,8 +9,8 @@ #include "data2.h" #include "ewram.h" -extern struct SpriteTemplate gUnknown_02024E8C; -extern struct Window gUnknown_03004210; +extern struct SpriteTemplate gCreatingSpriteTemplate; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; extern u8 gBankInMenu; @@ -72,7 +72,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) ScanlineEffect_Clear(); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; gBattle_BG1_X = 0; @@ -201,7 +201,7 @@ static bool8 LoadAppropiateBankSprite(u8 bank) { if (GetBattlerSide(bank)) { - if (!ewram17800[bank].substituteSprite) + if (!gBattleSpriteInfo[bank].substituteSprite) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[bank]], bank); else BattleLoadSubstituteSprite(bank, 0); @@ -210,7 +210,7 @@ static bool8 LoadAppropiateBankSprite(u8 bank) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, 0); else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) LoadPlayerTrainerBankSprite(2, 0); - else if (!ewram17800[bank].substituteSprite) + else if (!gBattleSpriteInfo[bank].substituteSprite) BattleLoadPlayerMonSprite(&gPlayerParty[gBattlerPartyIndexes[bank]], bank); else BattleLoadSubstituteSprite(bank, 0); @@ -226,7 +226,7 @@ static void sub_807B184(u8 bank) { u8 posY; - if (ewram17800[bank].substituteSprite) + if (gBattleSpriteInfo[bank].substituteSprite) posY = sub_8077F7C(bank); else posY = sub_8077F68(bank); @@ -235,7 +235,7 @@ static void sub_807B184(u8 bank) if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0) return; GetMonSpriteTemplate_803C56C(GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES), GetBattlerPosition(bank)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[bank]].data[0] = bank; @@ -245,7 +245,7 @@ static void sub_807B184(u8 bank) else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0) { GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(0)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50, + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, 0x50, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, GetBattlerSubpriority(0)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; @@ -255,7 +255,7 @@ static void sub_807B184(u8 bank) else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) { GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(0)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50, + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, 0x50, (8 - gTrainerBackPicCoords[2].coords) * 4 + 80, GetBattlerSubpriority(0)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; @@ -267,14 +267,14 @@ static void sub_807B184(u8 bank) if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0) return; GetMonSpriteTemplate_803C56C(GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES), GetBattlerPosition(bank)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[bank]].data[0] = bank; gSprites[gBattlerSpriteIds[bank]].data[2] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); } - gSprites[gBattlerSpriteIds[bank]].invisible = ewram17800[bank].invisible; + gSprites[gBattlerSpriteIds[bank]].invisible = gBattleSpriteInfo[bank].invisible; } } diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 036209fbf..89ef50037 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.hasTargetAnim) + species = gContestResources__moveAnim.targetSpecies; 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.hasTargetAnim) + 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.hasTargetAnim) + species = gContestResources__moveAnim.targetSpecies; 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 @@ -1943,7 +1943,7 @@ u8 sub_8079F44(u16 species, bool8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - EWRAM, + (void *)EWRAM, (void *)EWRAM, species, a7, @@ -1957,7 +1957,7 @@ u8 sub_8079F44(u16 species, bool8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - EWRAM, + (void *)EWRAM, (void *)EWRAM, species, a7, @@ -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.hasTargetAnim) { - species = shared19348.unk2; - personality = shared19348.unk10; + species = gContestResources__moveAnim.targetSpecies; + personality = gContestResources__moveAnim.unk10; } else { - species = shared19348.unk0; - personality = shared19348.unk8; + species = gContestResources__moveAnim.species; + personality = gContestResources__moveAnim.personality; } if (species == SPECIES_UNOWN) { diff --git a/src/scrcmd.c b/src/scrcmd.c index 1a2d55f2e..c51bd2b10 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -3,16 +3,19 @@ #include "berry.h" #include "clock.h" #include "coins.h" -#include "contest_link_80C2020.h" +#include "constants/maps.h" +#include "contest_link_util.h" #include "contest_painting.h" +#include "contest_util.h" #include "data2.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" +#include "event_object_lock.h" +#include "event_object_movement.h" #include "field_door.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "event_object_movement.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -22,27 +25,24 @@ #include "fieldmap.h" #include "item.h" #include "main.h" -#include "event_object_lock.h" #include "menu.h" #include "money.h" #include "mystery_event_script.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" #include "pokemon.h" #include "random.h" -#include "overworld.h" #include "rtc.h" #include "script.h" #include "script_menu.h" #include "script_movement.h" -#include "script_pokemon_80C4.h" #include "script_pokemon_80F9.h" #include "shop.h" #include "slot_machine.h" #include "sound.h" #include "string_util.h" #include "tv.h" -#include "constants/maps.h" typedef u16 (*SpecialFunc)(void); typedef void (*NativeFunc)(void); @@ -1411,7 +1411,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) u8 v1 = ScriptReadByte(ctx); if (v1) - sub_8106630(v1); + SetContestWinnerForPainting(v1); ShowContestWinner(); ScriptContext1_Stop(); return TRUE; @@ -1831,7 +1831,7 @@ bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx) bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) { - sub_80C4980(gSpecialVar_ContestCategory); + ContestLinkTransfer(gSpecialVar_ContestCategory); ScriptContext1_Stop(); return TRUE; } diff --git a/src/secret_base.c b/src/secret_base.c index b37da51d1..cf09a7544 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -147,13 +147,13 @@ void ClearSecretBase(struct SecretBaseRecord *record) record->playerName[i] = 0xff; for (i = 0; i < 4; i++) record->trainerId[i] = 0x00; - record->sbr_field_e = 0; - record->sbr_field_10 = 0; - record->sbr_field_11 = 0; - record->sbr_field_1_0 = 0; + record->numSecretBasesReceived = 0; + record->numTimesEntered = 0; + record->unused = 0; + record->toRegister = 0; record->gender = 0; - record->sbr_field_1_5 = 0; - record->sbr_field_1_6 = 0; + record->battledOwnerToday = 0; + record->registryStatus = 0; for (i = 0; i < 16; i++) { record->decorations[i] = 0; @@ -162,12 +162,12 @@ void ClearSecretBase(struct SecretBaseRecord *record) for (i = 0; i < 6; i++) { for (j = 0; j < 4; j++) - record->partyMoves[i * 4 + j] = 0; - record->partyPersonality[i] = 0; - record->partyEVs[i] = 0; - record->partySpecies[i] = 0; - record->partyHeldItems[i] = 0; - record->partyLevels[i] = 0; + record->party.moves[i * 4 + j] = 0; + record->party.personality[i] = 0; + record->party.EVs[i] = 0; + record->party.species[i] = 0; + record->party.heldItems[i] = 0; + record->party.levels[i] = 0; } } @@ -373,8 +373,8 @@ void sub_80BBA48(u8 taskid) break; case 2: curbaseid = VarGet(VAR_CURRENT_SECRET_BASE); - if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) - gSaveBlock1.secretBases[curbaseid].sbr_field_10++; + if (gSaveBlock1.secretBases[curbaseid].numTimesEntered < 0xff) + gSaveBlock1.secretBases[curbaseid].numTimesEntered++; sub_80BBA14(); WarpIntoMap(); gFieldCallback = sub_8080990; @@ -660,7 +660,7 @@ void BufferSecretBaseOwnerName(void) bool8 sub_80BC268(u8 i) { - if (gSaveBlock1.secretBases[i].sbr_field_1_6) + if (gSaveBlock1.secretBases[i].registryStatus) return TRUE; else return FALSE; @@ -686,24 +686,24 @@ void SetPlayerSecretBaseRecordMixingParty(void) { u16 j; for (j = 0; j < 4; j++) - record->partyMoves[i * 4 + j] = MOVE_NONE; + record->party.moves[i * 4 + j] = MOVE_NONE; - record->partySpecies[i] = SPECIES_NONE; - record->partyHeldItems[i] = ITEM_NONE; - record->partyLevels[i] = 0; - record->partyPersonality[i] = 0; - record->partyEVs[i] = 0; + record->party.species[i] = SPECIES_NONE; + record->party.heldItems[i] = ITEM_NONE; + record->party.levels[i] = 0; + record->party.personality[i] = 0; + record->party.EVs[i] = 0; if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { for (j = 0; j < 4; j++) - record->partyMoves[secretBasePartyIndex * 4 + j] = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j); + record->party.moves[secretBasePartyIndex * 4 + j] = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j); - record->partySpecies[secretBasePartyIndex] = GetMonData(&(gPlayerParty[i]), MON_DATA_SPECIES); - record->partyHeldItems[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - record->partyLevels[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - record->partyPersonality[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); - record->partyEVs[secretBasePartyIndex] = CalculateMonAverageEVs(&gPlayerParty[i]); + record->party.species[secretBasePartyIndex] = GetMonData(&(gPlayerParty[i]), MON_DATA_SPECIES); + record->party.heldItems[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + record->party.levels[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + record->party.personality[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + record->party.EVs[secretBasePartyIndex] = CalculateMonAverageEVs(&gPlayerParty[i]); secretBasePartyIndex++; } } @@ -711,9 +711,9 @@ void SetPlayerSecretBaseRecordMixingParty(void) void sub_80BC440(void) { - u16 backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + u16 backupValue = gSaveBlock1.secretBases[0].numSecretBasesReceived; ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; + gSaveBlock1.secretBases[0].numSecretBasesReceived = backupValue; sub_80BC0F8(); } @@ -760,9 +760,9 @@ void MoveSecretBase(void) sub_80BC474(); IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); - backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + backupValue = gSaveBlock1.secretBases[0].numSecretBasesReceived; ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; + gSaveBlock1.secretBases[0].numSecretBasesReceived = backupValue; } u8 sub_80BC538(void) @@ -790,7 +790,7 @@ void GetCurSecretBaseRegistrationValidity(void) void ToggleCurSecretBaseRegistry(void) { - gSaveBlock1.secretBases[sub_80BC14C(gCurrentSecretBaseId)].sbr_field_1_6 ^= 1; + gSaveBlock1.secretBases[sub_80BC14C(gCurrentSecretBaseId)].registryStatus ^= 1; FlagSet(FLAG_SECRET_BASE_REGISTRY_ENABLED); } @@ -1045,7 +1045,7 @@ void sub_80BCB10(u8 taskId) Menu_EraseWindowRect(0, 0, 29, 19); - gSaveBlock1.secretBases[taskData[4]].sbr_field_1_6 = 0; + gSaveBlock1.secretBases[taskData[4]].registryStatus = 0; taskData[0]--; if (taskData[2] > 0) @@ -1128,12 +1128,12 @@ void unref_sub_80BCD7C(u8 secretBaseIndex) for (i = 0; i < 1; i++) { - gSaveBlock1.secretBases[secretBaseIndex].partyPersonality[i] = i + 1; - gSaveBlock1.secretBases[secretBaseIndex].partyMoves[i * 4] = i + 1; - gSaveBlock1.secretBases[secretBaseIndex].partySpecies[i] = SPECIES_TREECKO; - gSaveBlock1.secretBases[secretBaseIndex].partyHeldItems[i] = i + 1; - gSaveBlock1.secretBases[secretBaseIndex].partyLevels[i] = i + 5; - gSaveBlock1.secretBases[secretBaseIndex].partyEVs[i] = i * 5; + gSaveBlock1.secretBases[secretBaseIndex].party.personality[i] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].party.moves[i * 4] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].party.species[i] = SPECIES_TREECKO; + gSaveBlock1.secretBases[secretBaseIndex].party.heldItems[i] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].party.levels[i] = i + 5; + gSaveBlock1.secretBases[secretBaseIndex].party.EVs[i] = i * 5; } } @@ -1147,7 +1147,7 @@ void sub_80BCE1C(void) void sub_80BCE4C() { - gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_5 = gSpecialVar_Result; + gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].battledOwnerToday = gSpecialVar_Result; } void sub_80BCE90() @@ -1159,13 +1159,13 @@ void sub_80BCE90() u8 i; for (i = 0; i < MAX_SECRET_BASES; i++) - gSaveBlock1.secretBases[i].sbr_field_1_5 = 0; + gSaveBlock1.secretBases[i].battledOwnerToday = 0; FlagSet(FLAG_DAILY_UNKNOWN_8C2); } gSpecialVar_0x8004 = GetSecretBaseOwnerType(curBaseIndex); - gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5; + gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].battledOwnerToday; } void sub_80BCF1C(u8 taskId) @@ -1208,7 +1208,7 @@ void sub_80BCF1C(u8 taskId) void sub_80BD034(u8 i, struct SecretBaseRecord *secretBase) { gSaveBlock1.secretBases[i] = *secretBase; - gSaveBlock1.secretBases[i].sbr_field_1_6 = 2; + gSaveBlock1.secretBases[i].registryStatus = 2; } bool8 sub_80BD070(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB) @@ -1277,7 +1277,7 @@ u8 sub_80BD1B0(void) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0) + if (gSaveBlock1.secretBases[i].registryStatus == 0 && gSaveBlock1.secretBases[i].toRegister == 0) return i; } @@ -1296,10 +1296,10 @@ u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) { if (secretBaseIndex != -1) { - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 == 1) + if (gSaveBlock1.secretBases[secretBaseIndex].toRegister == 1) return 0; - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 - || secretBase->sbr_field_1_0 == 1) + if (gSaveBlock1.secretBases[secretBaseIndex].registryStatus != 2 + || secretBase->toRegister == 1) { sub_80BD034(secretBaseIndex, secretBase); return secretBaseIndex; @@ -1336,8 +1336,8 @@ void sub_80BD280(void) { for (j = i + 1; j < MAX_SECRET_BASES; j++) { - if ((!secretBases[i].sbr_field_1_6 && secretBases[j].sbr_field_1_6 == 1) - || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2)) + if ((!secretBases[i].registryStatus && secretBases[j].registryStatus == 1) + || (secretBases[i].registryStatus == 2 && secretBases[j].registryStatus != 2)) { temp = secretBases[i]; secretBases[i] = secretBases[j]; @@ -1353,7 +1353,7 @@ void sub_80BD328(struct SecretBaseRecord *secretBases, u8 b) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (secretBases[i].sbr_field_1_6 == b) + if (secretBases[i].registryStatus == b) sub_80BD1FC(&secretBases[i]); } } @@ -1439,13 +1439,13 @@ bool8 sub_80BD494(struct SecretBaseRecord *base, struct SecretBaseRecord *secret return FALSE; } - if (base->sbr_field_e > secretBases[i].sbr_field_e) + if (base->numSecretBasesReceived > secretBases[i].numSecretBasesReceived) { ClearSecretBase(&secretBases[i]); return FALSE; } - secretBases[i].sbr_field_1_0 = base->sbr_field_1_0; + secretBases[i].toRegister = base->toRegister; ClearSecretBase(base); return TRUE; @@ -1464,8 +1464,8 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases { if (basesA[i].secretBaseId) { - if (basesA[i].sbr_field_1_6 == 1) - basesA[i].sbr_field_1_0 = 1; + if (basesA[i].registryStatus == 1) + basesA[i].toRegister = 1; if (!sub_80BD494(&basesA[i], basesB, i)) { @@ -1479,7 +1479,7 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases { if (basesB[i].secretBaseId) { - basesB[i].sbr_field_1_5 = 0; + basesB[i].battledOwnerToday = 0; if (!sub_80BD494(&basesB[i], basesC, i)) sub_80BD494(&basesB[i], basesD, i); @@ -1490,12 +1490,12 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases { if (basesC[i].secretBaseId) { - basesC[i].sbr_field_1_5 = 0; + basesC[i].battledOwnerToday = 0; sub_80BD494(&basesC[i], basesD, i); } if (basesD[i].secretBaseId) - basesD[i].sbr_field_1_5 = 0; + basesD[i].battledOwnerToday = 0; } } @@ -1557,10 +1557,10 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (gSaveBlock1.secretBases[i].sbr_field_1_0 == 1) + if (gSaveBlock1.secretBases[i].toRegister == 1) { - gSaveBlock1.secretBases[i].sbr_field_1_6 = 1; - gSaveBlock1.secretBases[i].sbr_field_1_0 = 0; + gSaveBlock1.secretBases[i].registryStatus = 1; + gSaveBlock1.secretBases[i].toRegister = 0; } } @@ -1568,11 +1568,11 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 2) - gSaveBlock1.secretBases[i].sbr_field_1_6 = 0; + if (gSaveBlock1.secretBases[i].registryStatus == 2) + gSaveBlock1.secretBases[i].registryStatus = 0; } - if (gSaveBlock1.secretBases[0].sbr_field_e != 0xFFFF) - gSaveBlock1.secretBases[0].sbr_field_e++; + if (gSaveBlock1.secretBases[0].numSecretBasesReceived != 0xFFFF) + gSaveBlock1.secretBases[0].numSecretBasesReceived++; } } diff --git a/src/slot_machine.c b/src/slot_machine.c index fd3e2580d..a1245cfb0 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -822,7 +822,7 @@ static bool8 sub_8102058(struct Task *task) unk_debug_bss_1_8--; if (unk_debug_bss_1_8 == 0) { - PlaySE(0x18); + PlaySE(SE_CONTEST_PLACE); sub_8102E1C(eSlotMachine->unk18); sub_8103C14(eSlotMachine->unk18); unk_debug_bss_1_8 = (Random() & 0x1F) + 1; diff --git a/src/starter_choose.c b/src/starter_choose.c index 4e430015e..99d38bbe4 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -17,7 +17,7 @@ #include "scanline_effect.h" extern u16 gSpecialVar_Result; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; //-------------------------------------------------- // Graphics Data @@ -714,11 +714,11 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) DecompressPicFromTable_2( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], species); LoadCompressedObjectPalette(&gMonPaletteTable[species]); GetMonSpriteTemplate_803C56C(species, 1); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].callback = nullsub_72; gSprites[spriteId].oam.priority = 0; return spriteId; diff --git a/src/text.c b/src/text.c index d963045df..a5a78b430 100644 --- a/src/text.c +++ b/src/text.c @@ -1480,7 +1480,7 @@ const struct WindowTemplate gWindowTemplate_81E7144 = BG_SCREEN_ADDR(31), // tilemap }; -const struct WindowTemplate gWindowTemplate_81E7160 = +const struct WindowTemplate gWindowTemplate_ContestPainting = { 1, // BG number 1, // BG character base block @@ -2019,7 +2019,7 @@ void Text_SetWindowText(struct Window *win, const u8 *text) win->delayCounter = 0; } -void Text_InitWindow8002EB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) +void Contest_StartTextPrinter(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) { gMain.watchedKeysMask = A_BUTTON | B_BUTTON; gMain.watchedKeysPressed = 0; @@ -2546,7 +2546,7 @@ u8 Text_UpdateWindowAutoscroll(struct Window *win) return retVal; } -u8 Text_UpdateWindowInContest(struct Window *win) +u8 Contest_RunTextPrinter(struct Window *win) { u8 retVal; diff --git a/src/text_window.c b/src/text_window.c index ade349f4e..6d2900845 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -205,7 +205,7 @@ u16 TextWindow_SetDlgFrameBaseTileNum(u16 baseTileNum) void unref_sub_80651DC(struct Window *win, u8 *text) { - Text_InitWindow8002EB0(win, text, sDialogueFrameBaseTileNum + 14, 2, 15); + Contest_StartTextPrinter(win, text, sDialogueFrameBaseTileNum + 14, 2, 15); } // Loads and draws a dialogue window frame diff --git a/src/trade.c b/src/trade.c index aeb77dd58..218471fe6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1406,7 +1406,7 @@ static void sub_80489F4(void) { gUnknown_020297D8[0] = gUnknown_03004824->tradeMenuCursorPosition; gUnknown_020297D8[1] = gUnknown_03004824->unk_008a; - sub_800832C(); + SetCloseLinkCallback(); gUnknown_03004824->unk_007b = 13; } } @@ -2158,7 +2158,7 @@ static void sub_8049D9C(void) { if (!gPaletteFade.active) { - sub_800832C(); + SetCloseLinkCallback(); gUnknown_03004824->unk_007b = 12; } } @@ -3522,13 +3522,13 @@ static void sub_804B2D0(u8 whichParty, u8 a1) case 0: species = GetMonData(pokemon, MON_DATA_SPECIES2); personality = GetMonData(pokemon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gSharedMem, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gSharedMem, gMonSpriteGfx_Sprite_ptr[whichParty * 2 + 1], species, personality); LoadCompressedObjectPalette(GetMonSpritePalStruct(pokemon)); gUnknown_03004828->tradeSpecies[whichParty] = species; break; case 1: GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(pokemon)->tag, v0); - gUnknown_03004828->pokePicSpriteIdxs[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6); + gUnknown_03004828->pokePicSpriteIdxs[whichParty] = CreateSprite(&gCreatingSpriteTemplate, 0x78, 0x3c, 0x6); gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].invisible = TRUE; gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; break; @@ -5168,7 +5168,7 @@ static void sub_804DC88(void) case 8: if (IsBGMStopped() == TRUE) { - sub_800832C(); + SetCloseLinkCallback(); gMain.state ++; } break; diff --git a/src/trainer_card.c b/src/trainer_card.c index 0e44c7cfc..fcae77e85 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1,7 +1,10 @@ #include "global.h" #include "trainer_card.h" +#include "constants/songs.h" +#include "contest_util.h" #include "easy_chat.h" #include "event_data.h" +#include "ewram.h" #include "field_effect.h" #include "graphics.h" #include "link.h" @@ -9,19 +12,16 @@ #include "main.h" #include "menu.h" #include "money.h" +#include "overworld.h" #include "palette.h" #include "pokedex.h" -#include "overworld.h" -#include "script_pokemon_80C4.h" -#include "constants/songs.h" +#include "scanline_effect.h" #include "sound.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" #include "task.h" -#include "scanline_effect.h" #include "util.h" -#include "ewram.h" typedef void (*Callback)(void); @@ -417,7 +417,7 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) } r4 = FALSE; - if (sub_80C4D50() > 4) + if (CountPlayerMuseumPaintings() > 4) { r4 = TRUE; } diff --git a/src/trig.c b/src/trig.c index e16a69e63..c2bca3059 100644 --- a/src/trig.c +++ b/src/trig.c @@ -1,12 +1,6 @@ #include "global.h" #include "trig.h" -// Converts a number to Q8.8 fixed-point format -#define Q_8_8(n) ((s16)((n) * 256)) - -// Converts a number to Q4.12 fixed-point format -#define Q_4_12(n) ((s16)((n) * 4096)) - // Values of sin(x*(π/128)) as Q8.8 fixed-point numbers from x = 0 to x = 319 const s16 gSineTable[] = { |