summaryrefslogtreecommitdiff
path: root/src/battle/contest_link_80C2020.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/contest_link_80C2020.c')
-rw-r--r--src/battle/contest_link_80C2020.c275
1 files changed, 273 insertions, 2 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);
+}