diff options
-rw-r--r-- | asm/contest_link_80C2020.s | 250 | ||||
-rw-r--r-- | include/contest.h | 1 | ||||
-rw-r--r-- | include/tv.h | 1 | ||||
-rw-r--r-- | src/battle/contest_link_80C2020.c | 88 | ||||
-rw-r--r-- | src/field/tv.c | 26 |
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); } |