diff options
-rw-r--r-- | asm/tv.s | 257 | ||||
-rw-r--r-- | include/global.h | 37 | ||||
-rw-r--r-- | include/pokedex.h | 2 | ||||
-rw-r--r-- | src/tv.c | 276 |
4 files changed, 300 insertions, 272 deletions
@@ -1612,263 +1612,6 @@ _080BE474: .4byte gSaveBlock2 .section .text_80BE8EC - - thumb_func_start sub_80C01D4 -sub_80C01D4: @ 80C01D4 - push {r4-r6,lr} - movs r6, 0 -_080C01D8: - ldr r0, _080C01F8 @ =gSaveBlock1 - lsls r2, r6, 3 - adds r1, r2, r6 - lsls r1, 2 - adds r1, r0 - ldr r0, _080C01FC @ =0x00002738 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x29 - bls _080C01EE - b _080C038C -_080C01EE: - lsls r0, 2 - ldr r1, _080C0200 @ =_080C0204 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C01F8: .4byte gSaveBlock1 -_080C01FC: .4byte 0x00002738 -_080C0200: .4byte _080C0204 - .align 2, 0 -_080C0204: - .4byte _080C0394 - .4byte _080C02AC - .4byte _080C0394 - .4byte _080C02BC - .4byte _080C02CC - .4byte _080C02DC - .4byte _080C02F8 - .4byte _080C0308 - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C0324 - .4byte _080C0394 - .4byte _080C0334 - .4byte _080C0350 - .4byte _080C0368 - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C038C - .4byte _080C0394 -_080C02AC: - adds r0, r2, r6 - lsls r0, 2 - ldr r1, _080C02B8 @ =gSaveBlock1 + 0x2738 - adds r0, r1 - ldrh r0, [r0, 0x2] - b _080C035A - .align 2, 0 -_080C02B8: .4byte gSaveBlock1 + 0x2738 -_080C02BC: - adds r0, r2, r6 - lsls r0, 2 - ldr r1, _080C02C8 @ =gSaveBlock1 + 0x2738 - adds r0, r1 - ldrh r0, [r0, 0x2] - b _080C035A - .align 2, 0 -_080C02C8: .4byte gSaveBlock1 + 0x2738 -_080C02CC: - adds r0, r2, r6 - lsls r0, 2 - ldr r1, _080C02D8 @ =gSaveBlock1 + 0x2738 - adds r0, r1 - ldrh r0, [r0, 0x6] - b _080C035A - .align 2, 0 -_080C02D8: .4byte gSaveBlock1 + 0x2738 -_080C02DC: - adds r4, r2, r6 - lsls r4, 2 - ldr r0, _080C02F4 @ =gSaveBlock1 + 0x2738 - adds r4, r0 - ldrh r0, [r4, 0x2] - lsls r5, r6, 24 - lsrs r5, 24 - adds r1, r5, 0 - bl sub_80C03C8 - ldrh r0, [r4, 0x1C] - b _080C037E - .align 2, 0 -_080C02F4: .4byte gSaveBlock1 + 0x2738 -_080C02F8: - adds r0, r2, r6 - lsls r0, 2 - ldr r1, _080C0304 @ =gSaveBlock1 + 0x2738 - adds r0, r1 - ldrh r0, [r0, 0x2] - b _080C035A - .align 2, 0 -_080C0304: .4byte gSaveBlock1 + 0x2738 -_080C0308: - adds r4, r2, r6 - lsls r4, 2 - ldr r0, _080C0320 @ =gSaveBlock1 + 0x2738 - adds r4, r0 - ldrh r0, [r4, 0xA] - lsls r5, r6, 24 - lsrs r5, 24 - adds r1, r5, 0 - bl sub_80C03C8 - ldrh r0, [r4, 0x14] - b _080C037E - .align 2, 0 -_080C0320: .4byte gSaveBlock1 + 0x2738 -_080C0324: - adds r0, r2, r6 - lsls r0, 2 - ldr r1, _080C0330 @ =gSaveBlock1 + 0x2738 - adds r0, r1 - ldrh r0, [r0, 0x10] - b _080C035A - .align 2, 0 -_080C0330: .4byte gSaveBlock1 + 0x2738 -_080C0334: - adds r4, r2, r6 - lsls r4, 2 - ldr r0, _080C034C @ =gSaveBlock1 + 0x2738 - adds r4, r0 - ldrh r0, [r4, 0xC] - lsls r5, r6, 24 - lsrs r5, 24 - adds r1, r5, 0 - bl sub_80C03C8 - ldrh r0, [r4, 0xE] - b _080C037E - .align 2, 0 -_080C034C: .4byte gSaveBlock1 + 0x2738 -_080C0350: - adds r0, r2, r6 - lsls r0, 2 - ldr r1, _080C0364 @ =gSaveBlock1 + 0x2738 - adds r0, r1 - ldrh r0, [r0, 0x4] -_080C035A: - lsls r1, r6, 24 - lsrs r1, 24 - bl sub_80C03C8 - b _080C0394 - .align 2, 0 -_080C0364: .4byte gSaveBlock1 + 0x2738 -_080C0368: - adds r4, r2, r6 - lsls r4, 2 - ldr r0, _080C0388 @ =gSaveBlock1 + 0x2738 - adds r4, r0 - ldrh r0, [r4, 0x8] - lsls r5, r6, 24 - lsrs r5, 24 - adds r1, r5, 0 - bl sub_80C03C8 - ldrh r0, [r4, 0x4] -_080C037E: - adds r1, r5, 0 - bl sub_80C03C8 - b _080C0394 - .align 2, 0 -_080C0388: .4byte gSaveBlock1 + 0x2738 -_080C038C: - lsls r0, r6, 24 - lsrs r0, 24 - bl sub_80C03A8 -_080C0394: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x17 - bhi _080C03A0 - b _080C01D8 -_080C03A0: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80C01D4 - - thumb_func_start sub_80C03A8 -sub_80C03A8: @ 80C03A8 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C03C0 @ =gSaveBlock1 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldr r0, _080C03C4 @ =0x00002739 - adds r1, r0 - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_080C03C0: .4byte gSaveBlock1 -_080C03C4: .4byte 0x00002739 - thumb_func_end sub_80C03A8 - - thumb_func_start sub_80C03C8 -sub_80C03C8: @ 80C03C8 - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - bl sub_8090D90 - lsls r0, 24 - asrs r2, r0, 24 - cmp r2, 0 - bne _080C03F8 - ldr r1, _080C0400 @ =gSaveBlock1 - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldr r1, _080C0404 @ =0x00002739 - adds r0, r1 - strb r2, [r0] -_080C03F8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C0400: .4byte gSaveBlock1 -_080C0404: .4byte 0x00002739 - thumb_func_end sub_80C03C8 - thumb_func_start sub_80C0408 sub_80C0408: @ 80C0408 push {r4-r6,lr} diff --git a/include/global.h b/include/global.h index 2340e3b84..3dcab7c95 100644 --- a/include/global.h +++ b/include/global.h @@ -323,20 +323,30 @@ struct TVShowWorldOfMasters { }; struct TVShowSmartShopper { - u8 var00; - u8 var01; - u8 boughtOrSoldFlag; - u8 pad03[3]; - u16 itemIds[3]; - u16 itemAmounts[3]; + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u8 boughtOrSoldFlag; + /*0x03*/ u8 pad03[3]; + /*0x06*/ u16 itemIds[3]; + /*0x0C*/ u16 itemAmounts[3]; +}; + +struct TVShowBravoTrainerPokemonProfiles { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u16 species; + /*0x04*/ u8 pad04[15]; + /*0x13*/ u8 contestCategory:3; + /*0x13*/ u8 var13_3:5; }; -struct TVShowContestWinner { - u8 var00; - u8 var01; - u8 pad02[17]; - u8 contestCategory:3; - u8 var13_3:5; +struct TVShowBravoTrainerBattleTowerSpotlight { + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u8 pad02[8]; + /*0x0A*/ u16 var0a; + /*0x0C*/ u8 pad0c[8]; + /*0x14*/ u16 var14; }; typedef union TVShow { @@ -349,7 +359,8 @@ typedef union TVShow { struct TVShowPokemonAngler pokemonAngler; struct TVShowWorldOfMasters worldOfMasters; struct TVShowSmartShopper smartshopperShow; - struct TVShowContestWinner contestShow; + struct TVShowBravoTrainerPokemonProfiles bravoTrainer; + struct TVShowBravoTrainerBattleTowerSpotlight bravoTrainerTower; struct TVShowPokemonToday pokemonToday; struct TVShowPokemonTodayFailed pokemonTodayFailed; } TVShow; diff --git a/include/pokedex.h b/include/pokedex.h index 5dd44cd2f..61597981b 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -135,7 +135,7 @@ void sub_8090A3C(u8); void sub_8090C68(void); u8 *GetPokemonCategory(u16); -bool8 sub_8090D90(u16, u8); +s8 sub_8090D90(u16, u8); u16 GetNationalPokedexCount(u8); u16 GetHoennPokedexCount(u8); bool8 sub_8090FC0(void); @@ -706,7 +706,7 @@ void SetContestCategoryStringVarForInterview(void) { TVShow *tvShow; tvShow = &gSaveBlock1.tvShows.shows[gSpecialVar_0x8004]; - CopyContestCategoryToStringVar(1, tvShow->contestShow.contestCategory); + CopyContestCategoryToStringVar(1, tvShow->bravoTrainer.contestCategory); } void sub_80BF088(u8 arg0, s32 price) @@ -1669,6 +1669,280 @@ s8 sub_80C019C(TVShow tvShows[]) { return -1; } +void sub_80C03A8(u8 showidx); +void sub_80C03C8(u16 species, u8 showidx); + +#ifdef NONMATCHING +void sub_80C01D4(void) { + u8 i; + for (i=0; i<24; i++) { + switch (gSaveBlock1.tvShows.shows[i].common.var00) { + case 0: + break; + case TVSHOW_FAN_CLUB_LETTER: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].fanclubLetter.species, i); + break; + case TVSHOW_RECENT_HAPPENINGS: + break; + case TVSHOW_PKMN_FAN_CLUB_OPINIONS: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].fanclubOpinions.var02, i); + break; + case TVSHOW_UNKN_SHOWTYPE_04: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].worldOfMasters.var06, i); + break; + case TVSHOW_NAME_RATER_SHOW: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].nameRaterShow.species, i); + sub_80C03C8(gSaveBlock1.tvShows.shows[i].nameRaterShow.var1C, i); + break; + case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].bravoTrainer.species, i); + break; + case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].bravoTrainerTower.var0a, i); + sub_80C03C8(gSaveBlock1.tvShows.shows[i].bravoTrainerTower.var14, i); + break; + case TVSHOW_POKEMON_TODAY_CAUGHT: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].pokemonToday.species, i); + break; + case TVSHOW_SMART_SHOPPER: + break; + case TVSHOW_POKEMON_TODAY_FAILED: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].pokemonTodayFailed.species, i); + sub_80C03C8(gSaveBlock1.tvShows.shows[i].pokemonTodayFailed.species2, i); + break; + case TVSHOW_FISHING_ADVICE: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].pokemonAngler.var04, i); + break; + case TVSHOW_WORLD_OF_MASTERS: + sub_80C03C8(gSaveBlock1.tvShows.shows[i].worldOfMasters.var08, i); + sub_80C03C8(gSaveBlock1.tvShows.shows[i].worldOfMasters.var04, i); + break; + case TVSHOW_MASS_OUTBREAK: + break; + default: + sub_80C03A8(i); + } + } +} +#else +__attribute__((naked)) +void sub_80C01D4(void) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + movs r6, 0\n\ +_080C01D8:\n\ + ldr r0, _080C01F8 @ =gSaveBlock1\n\ + lsls r2, r6, 3\n\ + adds r1, r2, r6\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldr r0, _080C01FC @ =0x00002738\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x29\n\ + bls _080C01EE\n\ + b _default\n\ +_080C01EE:\n\ + lsls r0, 2\n\ + ldr r1, _080C0200 @ =_080C0204\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080C01F8: .4byte gSaveBlock1\n\ +_080C01FC: .4byte 0x00002738\n\ +_080C0200: .4byte _080C0204\n\ + .align 2, 0\n\ +_080C0204:\n\ + .4byte _break\n\ + .4byte _fanclubLetter @ TVSHOW_FAN_CLUB_LETTER\n\ + .4byte _break @ TVSHOW_RECENT_HAPPENINGS\n\ + .4byte _fanclubOpinions @ TVSHOW_PKMN_FAN_CLUB_OPINIONS\n\ + .4byte _showtype4 @ TVSHOW_UNKN_SHOWTYPE_04\n\ + .4byte _nameRater @ TVSHOW_NAME_RATER_SHOW\n\ + .4byte _bravoTrainerContest @ TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE\n\ + .4byte _bravoTrainerTower @ TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _pokemonTodayS @ TVSHOW_POKEMON_TODAY_CAUGHT\n\ + .4byte _break @ TVSHOW_SMART_SHOPPER\n\ + .4byte _pokemonTodayF @ TVSHOW_POKEMON_TODAY_FAILED\n\ + .4byte _fishing @ TVSHOW_FISHING_ADVICE\n\ + .4byte _worldOfMasters @ TVSHOW_WORLD_OF_MASTERS\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _break @ TVSHOW_MASS_OUTBREAK\n\ +_fanclubLetter:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C02B8 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x2]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02B8: .4byte gSaveBlock1 + 0x2738\n\ +_fanclubOpinions:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C02C8 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x2]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02C8: .4byte gSaveBlock1 + 0x2738\n\ +_showtype4:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C02D8 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x6]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02D8: .4byte gSaveBlock1 + 0x2738\n\ +_nameRater:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C02F4 @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0x2]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0x1C]\n\ + b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02F4: .4byte gSaveBlock1 + 0x2738\n\ +_bravoTrainerContest:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C0304 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x2]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C0304: .4byte gSaveBlock1 + 0x2738\n\ +_bravoTrainerTower:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C0320 @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0xA]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0x14]\n\ + b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C0320: .4byte gSaveBlock1 + 0x2738\n\ +_pokemonTodayS:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C0330 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x10]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C0330: .4byte gSaveBlock1 + 0x2738\n\ +_pokemonTodayF:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C034C @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0xC]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0xE]\n\ + b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C034C: .4byte gSaveBlock1 + 0x2738\n\ +_fishing:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C0364 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x4]\n\ +_checkSpecies1:\n\ + lsls r1, r6, 24\n\ + lsrs r1, 24\n\ + bl sub_80C03C8\n\ + b _break\n\ + .align 2, 0\n\ +_080C0364: .4byte gSaveBlock1 + 0x2738\n\ +_worldOfMasters:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C0388 @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0x8]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0x4]\n\ +_checkSpecies2:\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + b _break\n\ + .align 2, 0\n\ +_080C0388: .4byte gSaveBlock1 + 0x2738\n\ +_default:\n\ + lsls r0, r6, 24\n\ + lsrs r0, 24\n\ + bl sub_80C03A8\n\ +_break:\n\ + adds r0, r6, 0x1\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + cmp r6, 0x17\n\ + bhi _080C03A0\n\ + b _080C01D8\n\ +_080C03A0:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ +.syntax divided\n"); +} +#endif + +void sub_80C03A8(u8 showidx) { + gSaveBlock1.tvShows.shows[showidx].common.var01 = 0; +} + +void sub_80C03C8(u16 species, u8 showidx) { + if (sub_8090D90(SpeciesToNationalPokedexNum(species), 0) == 0) { + gSaveBlock1.tvShows.shows[showidx].common.var01 = 0; + } +} + + asm(".section .dotvshow\n"); void DoTVShowPokemonFanClubLetter(void); |