summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_link_80C2020.s250
-rw-r--r--include/contest.h1
-rw-r--r--include/tv.h1
-rw-r--r--src/battle/contest_link_80C2020.c88
-rw-r--r--src/field/tv.c26
5 files changed, 93 insertions, 273 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s
index 0e05c0ea1..32a57289c 100644
--- a/asm/contest_link_80C2020.s
+++ b/asm/contest_link_80C2020.s
@@ -5,256 +5,6 @@
.text
- thumb_func_start sub_80C2D1C
-sub_80C2D1C: @ 80C2D1C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _080C2D6C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080C2D66
- ldr r0, _080C2D70 @ =gIsLinkContest
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- lsls r6, r7, 2
- cmp r0, 0
- bne _080C2D5A
- ldr r5, _080C2D74 @ =gContestMons
- movs r4, 0x3
-_080C2D42:
- ldrh r0, [r5]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bge _080C2D42
-_080C2D5A:
- ldr r0, _080C2D78 @ =gTasks
- adds r1, r6, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C2D7C @ =sub_80C2D80
- str r0, [r1]
-_080C2D66:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2D6C: .4byte gMain
-_080C2D70: .4byte gIsLinkContest
-_080C2D74: .4byte gContestMons
-_080C2D78: .4byte gTasks
-_080C2D7C: .4byte sub_80C2D80
- thumb_func_end sub_80C2D1C
-
- thumb_func_start sub_80C2D80
-sub_80C2D80: @ 80C2D80
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C2DAC @ =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C2DBC
- ldr r0, _080C2DB0 @ =gOtherText_LinkStandby
- bl sub_80C3698
- bl sub_800832C
- ldr r1, _080C2DB4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C2DB8 @ =sub_80C2DD8
- str r1, [r0]
- b _080C2DCA
- .align 2, 0
-_080C2DAC: .4byte gIsLinkContest
-_080C2DB0: .4byte gOtherText_LinkStandby
-_080C2DB4: .4byte gTasks
-_080C2DB8: .4byte sub_80C2DD8
-_080C2DBC:
- ldr r0, _080C2DD0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C2DD4 @ =sub_80C2E14
- str r0, [r1]
-_080C2DCA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2DD0: .4byte gTasks
-_080C2DD4: .4byte sub_80C2E14
- thumb_func_end sub_80C2D80
-
- thumb_func_start sub_80C2DD8
-sub_80C2DD8: @ 80C2DD8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C2E04 @ =gReceivedRemoteLinkPlayers
- ldrb r1, [r0]
- cmp r1, 0
- bne _080C2DFC
- ldr r0, _080C2E08 @ =gIsLinkContest
- strb r1, [r0]
- bl sub_80C3764
- ldr r1, _080C2E0C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C2E10 @ =sub_80C2E14
- str r1, [r0]
-_080C2DFC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2E04: .4byte gReceivedRemoteLinkPlayers
-_080C2E08: .4byte gIsLinkContest
-_080C2E0C: .4byte gTasks
-_080C2E10: .4byte sub_80C2E14
- thumb_func_end sub_80C2DD8
-
- thumb_func_start sub_80C2E14
-sub_80C2E14: @ 80C2E14
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r1, _080C2E80 @ =gContestFinalStandings
- ldr r0, _080C2E84 @ =gContestPlayerMonIndex
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BE284
- movs r0, 0x2
- bl sub_810FB10
- ldr r0, _080C2E88 @ =gSpecialVar_ContestRank
- ldrb r0, [r0]
- bl Contest_SaveWinner
- movs r0, 0xFE
- bl Contest_SaveWinner
- ldr r4, _080C2E8C @ =gSharedMem
- ldr r0, _080C2E90 @ =0x00015ddf
- adds r1, r4, r0
- movs r6, 0
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0xFE
- movs r1, 0
- bl sub_80B2C4C
- ldr r1, _080C2E94 @ =0x00015dde
- adds r4, r1
- strb r0, [r4]
- str r6, [sp]
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginHardwarePaletteFade
- ldr r1, _080C2E98 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C2E9C @ =sub_80C2EA0
- str r1, [r0]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2E80: .4byte gContestFinalStandings
-_080C2E84: .4byte gContestPlayerMonIndex
-_080C2E88: .4byte gSpecialVar_ContestRank
-_080C2E8C: .4byte gSharedMem
-_080C2E90: .4byte 0x00015ddf
-_080C2E94: .4byte 0x00015dde
-_080C2E98: .4byte gTasks
-_080C2E9C: .4byte sub_80C2EA0
- thumb_func_end sub_80C2E14
-
- thumb_func_start sub_80C2EA0
-sub_80C2EA0: @ 80C2EA0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- ldr r0, _080C2ED8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- bne _080C2F18
- ldr r1, _080C2EDC @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080C2EE8
- ldr r0, _080C2EE0 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x3]
- bl DestroyTask
- ldr r0, _080C2EE4 @ =0x0000ffff
- b _080C2EEE
- .align 2, 0
-_080C2ED8: .4byte gPaletteFade
-_080C2EDC: .4byte gTasks
-_080C2EE0: .4byte gSharedMem + 0x18000
-_080C2EE4: .4byte 0x0000ffff
-_080C2EE8:
- cmp r0, 0x1
- bne _080C2F04
- ldr r0, _080C2F00 @ =0xffff0000
-_080C2EEE:
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- b _080C2F18
- .align 2, 0
-_080C2F00: .4byte 0xffff0000
-_080C2F04:
- ldr r0, _080C2F20 @ =REG_BLDCNT
- strh r3, [r0]
- adds r0, 0x4
- strh r3, [r0]
- adds r0, r5, 0
- bl DestroyTask
- ldr r0, _080C2F24 @ =c2_exit_to_overworld_1_continue_scripts_restart_music
- bl SetMainCallback2
-_080C2F18:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2F20: .4byte REG_BLDCNT
-_080C2F24: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music
- thumb_func_end sub_80C2EA0
-
thumb_func_start sub_80C2F28
sub_80C2F28: @ 80C2F28
push {r4,r5,lr}
diff --git a/include/contest.h b/include/contest.h
index b0bdd7f61..f0e4c0b0d 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -282,5 +282,6 @@ extern u16 gUnknown_02038688[4];
extern u8 gContestFinalStandings[4];
extern u8 gUnknown_02038696[4];
extern u8 gUnknown_0203869B;
+extern u16 gSpecialVar_ContestRank;
#endif // GUARD_CONTEST_H
diff --git a/include/tv.h b/include/tv.h
index 2edccb365..3b4dda745 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -27,6 +27,7 @@ void sub_80BE160(TVShow *show);
void sub_80BE160(TVShow *);
void sub_80BE188(void);
void sub_80BE23C(u16);
+void sub_80BE284(u8 contestResult);
void sub_80BE320(void);
void StartMassOutbreak(void);
void sub_80BE5FC(void);
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c
index 4e9209554..376ad1720 100644
--- a/src/battle/contest_link_80C2020.c
+++ b/src/battle/contest_link_80C2020.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "data2.h"
#include "util.h"
+#include "overworld.h"
#include "constants/songs.h"
#include "ewram.h"
#include "main.h"
@@ -13,10 +14,13 @@
#include "string_util.h"
#include "menu.h"
#include "sound.h"
+#include "pokedex.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"
@@ -34,7 +38,7 @@ struct UnkEwramStruct18000 {
u8 unk_00;
u8 filler_01[1];
u8 unk_02;
- u8 filler_03[1];
+ u8 unk_03;
u8 unk_04;
u8 unk_05;
u8 unk_06;
@@ -66,6 +70,10 @@ void sub_80C27EC(u8 taskId);
void sub_80C2878(u8 taskId);
void sub_80C2A8C(u8 taskId);
void sub_80C2D1C(u8 taskId);
+void sub_80C2D80(u8 taskId);
+void sub_80C2DD8(u8 taskId);
+void sub_80C2E14(u8 taskId);
+void sub_80C2EA0(u8 taskId);
void sub_80C2F28(u8 taskId);
void sub_80C2F64(u8 taskId);
void sub_80C30D4(u8 a0, u8 a1);
@@ -642,3 +650,81 @@ void sub_80C2A8C(u8 taskId)
break;
}
}
+
+void sub_80C2D1C(u8 taskId)
+{
+ int i;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (!(gIsLinkContest & 1))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gContestMons[i].species), FLAG_SET_SEEN);
+ }
+ }
+ gTasks[taskId].func = sub_80C2D80;
+ }
+}
+
+void sub_80C2D80(u8 taskId)
+{
+ if (gIsLinkContest & 1)
+ {
+ sub_80C3698(gOtherText_LinkStandby);
+ sub_800832C();
+ gTasks[taskId].func = sub_80C2DD8;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80C2E14;
+ }
+}
+
+void sub_80C2DD8(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gIsLinkContest = 0;
+ sub_80C3764();
+ gTasks[taskId].func = sub_80C2E14;
+ }
+}
+
+void sub_80C2E14(u8 taskId)
+{
+ sub_80BE284(gContestFinalStandings[gContestPlayerMonIndex]);
+ sub_810FB10(2);
+ Contest_SaveWinner(gSpecialVar_ContestRank);
+ Contest_SaveWinner(0xFE);
+ ewram15DDF = 1;
+ ewram15DDE = sub_80B2C4C(0xfe, 0);
+ BeginHardwarePaletteFade(0xff, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80C2EA0;
+}
+
+void sub_80C2EA0(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskId].data[1] == 0)
+ {
+ DestroyTask(eContestLink80C2020Struct2018000.unk_03);
+ BlendPalettes(0x0000ffff, 16, 0);
+ gTasks[taskId].data[1]++;
+ }
+ else if (gTasks[taskId].data[1] == 1)
+ {
+ BlendPalettes(0xffff0000, 16, 0);
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ REG_BLDCNT = 0;
+ REG_BLDY = 0;
+ DestroyTask(taskId);
+ SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ }
+ }
+}
diff --git a/src/field/tv.c b/src/field/tv.c
index 8bd36bb9c..36a6331b0 100644
--- a/src/field/tv.c
+++ b/src/field/tv.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "tv.h"
#include "battle_tower.h"
+#include "contest.h"
#include "contest_painting.h"
#include "data2.h"
#include "easy_chat.h"
@@ -69,7 +70,6 @@ struct UnkTvStruct gUnknown_03005D38;
extern u16 gSpecialVar_LastTalked;
extern u8 gSpecialVar_ContestCategory;
-extern u8 gSpecialVar_ContestRank;
extern u8 gUnknown_03004316[11];
extern u8 gBattleOutcome;
@@ -443,12 +443,6 @@ void ClearTVShowData(void)
sub_80BEBF4();
}
-bool8 sub_80BF1B4(u8);
-void sub_80BF20C(void);
-extern u8 gSpecialVar_ContestCategory;
-extern u8 gSpecialVar_ContestRank;
-extern u8 gUnknown_03004316[11];
-extern u8 gBattleOutcome;
void InterviewBefore_FanClubLetter(void);
void InterviewBefore_RecentHappenings(void);
@@ -458,21 +452,9 @@ void InterviewBefore_NameRater(void);
void InterviewBefore_BravoTrainerPkmnProfile(void);
void InterviewBefore_BravoTrainerBTProfile(void);
-void sub_80BE028(void);
-void sub_80BE074(void);
-void sub_80BE778(void);
-void sub_80BEB20(void);
u8 GetTVChannelByShowType(u8);
-s8 sub_80BF74C(TVShow tvShow[]);
-
-void sub_80BF55C(TVShow tvShow[], u8 showidx);
-void sub_80BEA88(void);
-
-void sub_80BE138(TVShow *show);
-void sub_80BE160(TVShow *show);
-extern u16 gLastUsedItem;
void InterviewAfter_FanClubLetter(void);
void InterviewAfter_RecentHappenings(void);
@@ -982,16 +964,16 @@ void sub_80BE23C(u16 a0)
}
}
-void sub_80BE284(u8 a0)
+void sub_80BE284(u8 contestResult)
{
struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer;
gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows);
if (gUnknown_03005D38.var0 != -1)
{
- bravoTrainer->contestResult = a0;
+ bravoTrainer->contestResult = contestResult;
bravoTrainer->contestCategory = gSpecialVar_ContestCategory;
- bravoTrainer->contestRank = gSpecialVar_ContestRank;
+ bravoTrainer->contestRank = (u8)gSpecialVar_ContestRank;
bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL);
GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname);
}