diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/contest_link_80C2020.c | 275 | ||||
-rw-r--r-- | src/battle/contest_link_80C857C.c | 10 | ||||
-rw-r--r-- | src/contest.c | 16 | ||||
-rw-r--r-- | src/contest_ai.c | 4 | ||||
-rw-r--r-- | src/debug/matsuda_debug_menu.c | 14 | ||||
-rw-r--r-- | src/script_pokemon_util_80C4BF0.c | 10 | ||||
-rw-r--r-- | src/script_pokemon_util_80F99CC.c | 8 | ||||
-rw-r--r-- | src/tv.c | 6 |
8 files changed, 307 insertions, 36 deletions
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 72f78ead5..14424a4bf 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -27,6 +27,8 @@ #include "contest_link_80C857C.h" #include "contest_link_80C2020.h" #include "pokemon_storage_system.h" +#include "event_data.h" +#include "script.h" #include "trig.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) @@ -115,6 +117,11 @@ 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); const u16 gUnknown_083D1624[] = INCBIN_U16("graphics/unknown/unknown_3D1624/0.4bpp"); const u16 gUnknown_083D1644[] = INCBIN_U16("graphics/unknown/unknown_3D1624/1.4bpp"); @@ -1777,7 +1784,7 @@ u8 sub_80C3990(u8 monIndex, u8 arg1) u32 var0; u32 var1; - var0 = gUnknown_02038670[monIndex] << 16; + var0 = gContestMonConditions[monIndex] << 16; var1 = var0 / 0x3F; if (var1 & 0xFFFF) var1 += 0x10000; @@ -2106,7 +2113,7 @@ void sub_80C3F00(void) for (i = 0; i < 4; i++) { - r4 = 1000 * gUnknown_02038670[i] / ABS(r2); + r4 = 1000 * gContestMonConditions[i] / ABS(r2); if ((r4 % 10) >= 5) r4 += 10; eContestLink80C2020Struct2018018[i].unk_00 = r4 / 10; @@ -2550,3 +2557,267 @@ void sub_80C42C0(u8 taskId /*r12*/) DestroyTask(taskId); } } + +void sub_80C43F4(void) +{ + u8 result = sub_80AE47C(&gPlayerParty[gContestMonPartyIndex]); + if (result != 0) + { + Contest_InitAllPokemon(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); + sub_80AE82C(gSpecialVar_ContestCategory); + } + gSpecialVar_Result = result; +} + +u16 sub_80C4440(void) +{ + u16 result = 0; + struct Pokemon *mon = &gPlayerParty[gContestMonPartyIndex]; + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + if (GetMonData(mon, MON_DATA_COOL_RIBBON) > gSpecialVar_ContestRank) + result = 1; + break; + case CONTEST_CATEGORY_BEAUTY: + if (GetMonData(mon, MON_DATA_BEAUTY_RIBBON) > gSpecialVar_ContestRank) + result = 1; + break; + case CONTEST_CATEGORY_CUTE: + if (GetMonData(mon, MON_DATA_CUTE_RIBBON) > gSpecialVar_ContestRank) + result = 1; + break; + case CONTEST_CATEGORY_SMART: + if (GetMonData(mon, MON_DATA_SMART_RIBBON) > gSpecialVar_ContestRank) + result = 1; + break; + case CONTEST_CATEGORY_TOUGH: + if (GetMonData(mon, MON_DATA_TOUGH_RIBBON) > gSpecialVar_ContestRank) + result = 1; + break; + } + + return result; +} + + +void sub_80C44C0(void) +{ + u8 ribbonData; + + if (gContestFinalStandings[gContestPlayerMonIndex] != 0) + return; + + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON); + if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + { + ribbonData++; + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData); + } + break; + case CONTEST_CATEGORY_BEAUTY: + ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON); + if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + { + ribbonData++; + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData); + } + break; + case CONTEST_CATEGORY_CUTE: + ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON); + if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + { + ribbonData++; + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData); + } + break; + case CONTEST_CATEGORY_SMART: + ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON); + if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + { + ribbonData++; + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData); + } + break; + case CONTEST_CATEGORY_TOUGH: + ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON); + if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + { + ribbonData++; + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData); + } + break; + } +} + +void sub_80C4674(u8 * dest, const u8 * src) +{ + StringCopy(dest, src); + if (dest[0] == EXT_CTRL_CODE_BEGIN && dest[1] == 0x15) + ConvertInternationalString(dest, LANGUAGE_JAPANESE); +} + +void sub_80C4698(u8 * dest, u8 idx) +{ + StringCopy(dest, gContestMons[idx].nickname); + if (gIsLinkContest & 1) + { + if (gLinkPlayers[idx].language == LANGUAGE_JAPANESE) + { + ConvertInternationalString(dest, GetStringLanguage(dest)); + } + } +} + +void sub_80C46EC(void) +{ + if (gIsLinkContest & 1) + { + sub_80C4674(gStringVar1, gLinkPlayers[gSpecialVar_0x8006].name); + } + else + { + sub_80C4674(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName); + } +} + +void sub_80C4740(void) +{ + sub_80C4698(gStringVar3, gSpecialVar_0x8006); +} + +void sub_80C4758(void) +{ + u8 i; + u8 count; + + for (i = 0, count = 0; i < 4; i++) + { + if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i]) + count++; + } + + gSpecialVar_0x8004 = count; +} + +void sub_80C47A0(void) +{ + gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006]; +} + +void sub_80C47C0(void) +{ + u8 i; + + for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++) + ; + + gSpecialVar_0x8005 = i; +} + +void sub_80C47F0(void) +{ + u8 i; + + for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++) + ; + + if (gIsLinkContest & 1) + { + sub_80C4674(gStringVar3, gLinkPlayers[i].name); + } + else + { + sub_80C4674(gStringVar3, gContestMons[i].trainerName); + } +} + +void sub_80C4858(void) +{ + u8 i; + + for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++) + ; + + sub_80C4698(gStringVar1, i); +} + +void sub_80C488C(void) +{ + SetMainCallback2(CB2_StartContest); +} + +void sub_80C489C(u8 taskId) +{ + if (!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(sub_80C488C); + } +} + +void sub_80C48C8(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_80C489C, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); +} + +void sub_80C48F4(void) +{ + gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species; +} + +void sub_80C4914(u8 taskId) +{ + if (!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(sub_80C2358); + } +} + +void sub_80C4940(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_80C4914, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); +} + +void sub_80C496C(void) +{ + gSpecialVar_0x8004 = gContestPlayerMonIndex; +} + +void sub_80C4980(u8 taskId) +{ + u8 taskId2; + ScriptContext2_Enable(); + taskId2 = CreateTask(sub_80C8604, 0); + SetTaskFuncWithFollowupFunc(taskId2, sub_80C8604, sub_80C49C4); + gTasks[taskId2].data[9] = taskId; +} + +void sub_80C49C4(u8 taskId) +{ + Contest_CreatePlayerMon(gContestMonPartyIndex); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80C49F0); +} + +void sub_80C49F0(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80C4A0C); +} + +void sub_80C4A0C(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80C4A28); +} + +void sub_80C4A28(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C8938, sub_80C4A44); +} diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 94454e45c..a694380df 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -73,7 +73,7 @@ static void sub_80C8660(u8 taskId) } #ifdef NONMATCHING -u8 sub_80C86A0(const u8 *string) +u8 GetStringLanguage(const u8 *string) { u8 language = GAME_LANGUAGE; if (string[0] == EXT_CTRL_CODE_BEGIN && string[1] == 0x15) @@ -107,7 +107,7 @@ u8 sub_80C86A0(const u8 *string) return language; } #else -NAKED u8 sub_80C86A0(const u8 *string) +NAKED u8 GetStringLanguage(const u8 *string) { asm_unified("\tpush {r4,r5,lr}\n" "\tadds r4, r0, 0\n" @@ -252,7 +252,7 @@ void sub_80C8734(u8 taskId) name = gContestMons[i].nickname; if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) { - ConvertInternationalString(name, sub_80C86A0(name)); + ConvertInternationalString(name, GetStringLanguage(name)); } else if (name[10] == EXT_CTRL_CODE_BEGIN) { @@ -681,14 +681,14 @@ void sub_80C8EBC(u8 taskId) case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038670, sizeof gUnknown_02038670); + SendBlockToAllOpponents(gContestMonConditions, sizeof gContestMonConditions); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038670, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038670); + memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestMonConditions); gTasks[taskId].data[0]++; } break; diff --git a/src/contest.c b/src/contest.c index 2b169196a..4efe18cce 100644 --- a/src/contest.c +++ b/src/contest.c @@ -267,12 +267,12 @@ void SelectContestMoveBankTarget(u16); EWRAM_DATA u8 gUnknown_0203856C = 0; EWRAM_DATA struct ContestPokemon gContestMons[4] = {0}; -EWRAM_DATA s16 gUnknown_02038670[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 u8 gContestFinalStandings[4] = {0}; // What "place" each participant came in. -EWRAM_DATA u8 gUnknown_02038694 = 0; +EWRAM_DATA u8 gContestMonPartyIndex = 0; EWRAM_DATA u8 gContestPlayerMonIndex = 0; EWRAM_DATA u8 gUnknown_02038696[4] = {0}; EWRAM_DATA u8 gIsLinkContest = 0; @@ -2242,7 +2242,7 @@ void Contest_InitAllPokemon(u8 contestType, u8 rank) asm(""::"r"(i)); #endif - Contest_CreatePlayerMon(gUnknown_02038694); + Contest_CreatePlayerMon(gContestMonPartyIndex); } // GetContestAvailability? @@ -2423,7 +2423,7 @@ void sub_80AE82C(u8 a) u8 i; for (i = 0; i < 4; i++) - gUnknown_02038670[i] = sub_80AE770(i, a); + gContestMonConditions[i] = sub_80AE770(i, a); } u8 CreateJudgeSprite(void) @@ -3024,7 +3024,7 @@ bool8 unref_sub_80AF5D0(u8 a, u8 b) void sub_80AF630(u8 a) { gUnknown_02038688[a] = sub_80AF688(a); - gUnknown_02038678[a] = gUnknown_02038670[a] + gUnknown_02038688[a]; + gUnknown_02038678[a] = gContestMonConditions[a] + gUnknown_02038688[a]; } void sub_80AF668(void) @@ -3067,7 +3067,7 @@ void DetermineFinalStandings(void) for (i = 0; i < 4; i++) { sp8[i].unk0 = gUnknown_02038678[i]; - sp8[i].unk4 = gUnknown_02038670[i]; + sp8[i].unk4 = gContestMonConditions[i]; sp8[i].unk8 = sp0[i]; sp8[i].unkC = i; } @@ -4433,8 +4433,8 @@ void sub_80B0F28(u8 a) gUnknown_02038696[i] = i; for (r4 = 0; r4 < i; r4++) { - if (gUnknown_02038670[gUnknown_02038696[r4]] < gUnknown_02038670[i] - || (gUnknown_02038670[gUnknown_02038696[r4]] == gUnknown_02038670[i] && sp4[gUnknown_02038696[r4]] < sp4[i])) + 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]; diff --git a/src/contest_ai.c b/src/contest_ai.c index a6dde8afe..06d4c11ca 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -632,7 +632,7 @@ static void ContestAICmd_unk_19(void) static void ContestAICmd_unk_1A(void) { - eContestAI->scriptResult = gUnknown_02038670[eContestAI->unk41]; + eContestAI->scriptResult = gContestMonConditions[eContestAI->unk41]; gAIScriptPtr += 1; } @@ -1353,7 +1353,7 @@ static void ContestAICmd_unk_5E(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = gUnknown_02038670[var] - gUnknown_02038670[eContestAI->unk41]; + eContestAI->scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI->unk41]; gAIScriptPtr += 2; } diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index e24868787..b0fc9b45d 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -19,7 +19,7 @@ #include "ewram.h" extern u8 gUnknown_0203856C; -extern u8 gUnknown_02038694; +extern u8 gContestMonPartyIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; @@ -502,12 +502,12 @@ static void sub_80AA10C(void) SetVBlankCallback(sub_80AA090); SetMainCallback2(sub_80AA064); gPaletteFade.bufferTransferDisabled = 0; - gUnknown_02038694 = 0; + gContestMonPartyIndex = 0; if (!(gContestMons[0].nickname[0])) Contest_InitAllPokemon(0, 0); - Contest_CreatePlayerMon(gUnknown_02038694); + Contest_CreatePlayerMon(gContestMonPartyIndex); for (i = 0; i < 6; i++) { @@ -882,7 +882,7 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2) SetDebugMonForContest(); for (i = 0; i < 4; i++) - gUnknown_02038670[i] = sub_80AE770(i, gSpecialVar_ContestCategory); + gContestMonConditions[i] = sub_80AE770(i, gSpecialVar_ContestCategory); SetMainCallback2(c2_exit_to_overworld_1_sub_8080DEC); } } @@ -950,13 +950,13 @@ void sub_80AAF30(void) for (i = 0; i < 3; i++) { - gUnknown_02038670[i] = 0; + gContestMonConditions[i] = 0; gUnknown_02038680[i] = 0; gUnknown_02038678[i] = 0; gContestMons[i] = gContestMons[3]; } - gUnknown_02038670[3] = 0x12C; + gContestMonConditions[3] = 0x12C; gUnknown_02038680[3] = 0x190; gUnknown_02038678[3] = 0x190; Contest_SaveWinner(0xFE); @@ -976,7 +976,7 @@ u8 MatsudaDebugMenu_ResetHighScore(void) gUnknown_0203856C = 0; for (i = 0; i < 4; i++) { - gUnknown_02038670[i] = 0; + gContestMonConditions[i] = 0; gUnknown_02038680[i] = 0; gUnknown_02038678[i] = 0; } diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 02e66d313..cf6da2cda 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -37,7 +37,7 @@ extern u8 gSelectedOrderFromParty[]; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; -extern u8 gUnknown_02038694; +extern u8 gContestMonPartyIndex; extern u8 gUnknown_0203856C; void SetContestTrainerGfxIds(void) @@ -153,7 +153,7 @@ void sub_80C4D80(void) u8 r4_; for (i = 0; i < 4; i++) - sp0[i] = gUnknown_02038670[i]; + sp0[i] = gContestMonConditions[i]; for (i = 0; i < 3; i++) { @@ -194,7 +194,7 @@ void sub_80C4D80(void) for (i = 0; i < 4; i++) { - if (r4 == gUnknown_02038670[i]) + if (r4 == gContestMonConditions[i]) { if (r2 == 1) break; @@ -244,7 +244,7 @@ void sub_80C4F70(void) bool8 GiveMonArtistRibbon(void) { - u8 ribbon = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON); + u8 ribbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); if(ribbon == FALSE && gContestFinalStandings[gContestPlayerMonIndex] == 0 @@ -252,7 +252,7 @@ bool8 GiveMonArtistRibbon(void) && gUnknown_02038678[gContestPlayerMonIndex] >= 800) { ribbon = TRUE; - SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &ribbon); return TRUE; } else diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index e7bf74a7f..ebdcbf5fd 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -24,7 +24,7 @@ extern const u8 gPPUpReadMasks[]; extern u8 gPlayerPartyCount; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; -extern u8 gUnknown_02038694; +extern u8 gContestMonPartyIndex; extern u16 gSpecialVar_Result; extern void (*gFieldCallback)(void); @@ -162,13 +162,13 @@ void HandleSelectPartyMenu(u8 var) { case A_BUTTON: PlaySE(SE_SELECT); - gUnknown_02038694 = sub_806CA38(var); - gSpecialVar_0x8004 = gUnknown_02038694; + gContestMonPartyIndex = sub_806CA38(var); + gSpecialVar_0x8004 = gContestMonPartyIndex; sub_8123138(var); break; case B_BUTTON: PlaySE(SE_SELECT); - gUnknown_02038694 = 0xFF; + gContestMonPartyIndex = 0xFF; gSpecialVar_0x8004 = 0xFF; sub_8123138(var); break; @@ -61,7 +61,7 @@ struct TVSaleItem { u16 item_amount; }; -extern u8 gUnknown_02038694; +extern u8 gContestMonPartyIndex; extern struct TVSaleItem gMartPurchaseHistory[3]; @@ -975,8 +975,8 @@ void sub_80BE284(u8 contestResult) bravoTrainer->contestResult = contestResult; bravoTrainer->contestCategory = gSpecialVar_ContestCategory; bravoTrainer->contestRank = (u8)gSpecialVar_ContestRank; - bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL); - GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname); + bravoTrainer->species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL); + GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname); } } |