Merge pull request #522 from DizzyEggg/trainer_card

Trainer card
This commit is contained in:
Diegoisawesome 2019-01-23 14:43:37 -06:00 committed by GitHub
commit 4cd4cbe133
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 5575 additions and 8737 deletions

3520
asm/frontier_pass.s Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1262,7 +1262,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_27191E:: @ 827191E
lock
faceplayer
setvar VAR_0x8004, 0
specialvar VAR_RESULT, sub_80C2E40
specialvar VAR_RESULT, CountPlayerTrainerStars
compare VAR_RESULT, 4
goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_271A68
msgbox gUnknown_082726EB, MSGBOX_YESNO

View File

@ -12,179 +12,6 @@
.2byte \short4
.endm
.align 2
gUnknown_0856F018:: @ 856F018
.incbin "graphics/trainer_card/stickers_fr.4bpp.lz"
.align 2
gUnknown_0856F18C:: @ 856F18C
.incbin "graphics/trainer_card/unknown_56F18C.gbapal"
.align 2
gEmeraldTrainerCard1Star_Pal:: @ 856F1AC
.incbin "graphics/trainer_card/one_star.gbapal"
.align 2
gFireRedTrainerCard1Star_Pal:: @ 856F20C
.incbin "graphics/trainer_card/one_star_fr.gbapal"
.align 2
gEmeraldTrainerCard2Star_Pal:: @ 856F26C
.incbin "graphics/trainer_card/two_stars.gbapal"
.align 2
gFireRedTrainerCard2Star_Pal:: @ 856F2CC
.incbin "graphics/trainer_card/two_stars_fr.gbapal"
.align 2
gEmeraldTrainerCard3Star_Pal:: @ 856F32C
.incbin "graphics/trainer_card/three_stars.gbapal"
.align 2
gFireRedTrainerCard3Star_Pal:: @ 856F38C
.incbin "graphics/trainer_card/three_stars_fr.gbapal"
.align 2
gEmeraldTrainerCard4Star_Pal:: @ 856F3EC
.incbin "graphics/trainer_card/four_stars.gbapal"
.align 2
gFireRedTrainerCard4Star_Pal:: @ 856F44C
.incbin "graphics/trainer_card/four_stars_fr.gbapal"
.align 2
gUnknown_0856F4AC:: @ 856F4AC
.incbin "graphics/trainer_card/female_bg.gbapal"
.align 2
gUnknown_0856F4CC:: @ 856F4CC
.incbin "graphics/trainer_card/female_bg_fr.gbapal"
.align 2
gUnknown_0856F4EC:: @ 856F4EC
.incbin "graphics/trainer_card/badges.gbapal"
.align 2
gUnknown_0856F50C:: @ 856F50C
.incbin "graphics/trainer_card/badges_fr.gbapal"
.align 2
gUnknown_0856F52C:: @ 856F52C
.incbin "graphics/trainer_card/gold.gbapal"
.align 2
gUnknown_0856F54C:: @ 856F54C
.incbin "graphics/trainer_card/stickers_fr1.gbapal"
.align 2
gUnknown_0856F56C:: @ 856F56C
.incbin "graphics/trainer_card/stickers_fr2.gbapal"
.align 2
gUnknown_0856F58C:: @ 856F58C
.incbin "graphics/trainer_card/stickers_fr3.gbapal"
.align 2
gUnknown_0856F5AC:: @ 856F5AC
.incbin "graphics/trainer_card/stickers_fr4.gbapal"
.align 2
gUnknown_0856F5CC:: @ 856F5CC
.incbin "graphics/trainer_card/badges.4bpp.lz"
.align 2
gUnknown_0856F814:: @ 856F814
.incbin "graphics/trainer_card/badges_fr.4bpp.lz"
.align 2
gUnknown_0856FAB4:: @ 856FAB4
.4byte 0x000025b0, 0x000001d9, 0x000031e2, 0x003011f3
.align 2
gUnknown_0856FAC4:: @ 856FAC4
window_template 0x01, 0x02, 0x0f, 0x1b, 0x04, 0x0f, 0x0253
window_template 0x01, 0x01, 0x01, 0x1c, 0x12, 0x0f, 0x0001
window_template 0x03, 0x13, 0x05, 0x09, 0x0a, 0x08, 0x0150
null_window_template
.align 2
gEmeraldTrainerCardStarPals:: @ 856FAE4
.4byte gEmeraldTrainerCard0Star_Pal
.4byte gEmeraldTrainerCard1Star_Pal
.4byte gEmeraldTrainerCard2Star_Pal
.4byte gEmeraldTrainerCard3Star_Pal
.4byte gEmeraldTrainerCard4Star_Pal
.align 2
gFireRedTrainerCardStarPals:: @ 856FAF8
.4byte gFireRedTrainerCard0Star_Pal
.4byte gFireRedTrainerCard1Star_Pal
.4byte gFireRedTrainerCard2Star_Pal
.4byte gFireRedTrainerCard3Star_Pal
.4byte gFireRedTrainerCard4Star_Pal
gUnknown_0856FB0C:: @ 856FB0C
.byte 0x00, 0x02, 0x03
gUnknown_0856FB0F:: @ 856FB0F
.byte 0x00, 0x04, 0x05
gUnknown_0856FB12:: @ 856FB12
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
gUnknown_0856FB18:: @ 856FB18
.byte 0x0d, 0x04, 0x0d, 0x04, 0x01, 0x00, 0x01, 0x00
gUnknown_0856FB20:: @ 856FB20
.byte 0x4e, 0x4f, 0x50, 0x51, 0x3c, 0x3f
.align 2
gUnknown_0856FB28:: @ 856FB28
.4byte sub_80C4998
.4byte sub_80C49D8
.4byte sub_80C4B08
.4byte sub_80C4C1C
.4byte sub_80C4C84
.4byte sub_80C4DB0
.align 2
gUnknown_0856FB40:: @ 856FB40
.4byte gUnknown_0856FB0C
.4byte gUnknown_0856FB12
gUnknown_0856FB48:: @ 856FB48
.byte 0x71, 0x68
gUnknown_0856FB4A:: @ 856FB4A
.byte 0x81, 0x78
gUnknown_0856FB4C:: @ 856FB4C
.byte 0xfd, 0x02, 0xf0, 0xfd, 0x03, 0xf0, 0xfd, 0x04, 0xff
gUnknown_0856FB55:: @ 856FB55
.byte 0x08, 0x10
gUnknown_0856FB57:: @ 856FB57
.byte 0xd8, 0xd8
.align 2
gUnknown_0856FB5C:: @ 856FB5C
.4byte gText_LinkBattles
.4byte gText_LinkCableBattles
.4byte gText_LinkBattles
gUnknown_0856FB68:: @ 856FB68
.byte 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a
gUnknown_0856FB6E:: @ 856FB6E
.byte 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14
gUnknown_0856FB74:: @ 856FB74
.byte 0x0b, 0x0c, 0x0d, 0x0e
gUnknown_0856FB78:: @ 856FB78
.byte 0x07, 0x07
.align 2
gUnknown_0856FB7C:: @ 856FB7C
.incbin "graphics/frontier_pass/map_heads.gbapal"

View File

@ -157,7 +157,7 @@ LilycoveCity_EventScript_1E2D11:: @ 81E2D11
LilycoveCity_EventScript_1E2D1A:: @ 81E2D1A
lockall
specialvar VAR_0x8004, sub_80F8940
specialvar VAR_0x8004, CountPlayerContestPaintings
switch VAR_0x8004
case 0, LilycoveCity_EventScript_1E2D3A
msgbox LilycoveCity_Text_1E4571, MSGBOX_DEFAULT

View File

@ -100,7 +100,7 @@ LilycoveCity_ContestLobby_EventScript_21A314:: @ 821A314
return
LilycoveCity_ContestLobby_EventScript_21A360:: @ 821A360
specialvar VAR_0x8004, sub_80F8940
specialvar VAR_0x8004, CountPlayerContestPaintings
switch VAR_0x8004
case 1, LilycoveCity_ContestLobby_EventScript_21A3A2
case 2, LilycoveCity_ContestLobby_EventScript_21A3A6

View File

@ -6,7 +6,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_2186D3:: @ 82186D3
faceplayer
call_if_unset FLAG_TEMP_2, LilycoveCity_CoveLilyMotel_2F_EventScript_2186F9
call_if_set FLAG_TEMP_2, LilycoveCity_CoveLilyMotel_2F_EventScript_21870F
specialvar VAR_RESULT, sub_80C08E4
specialvar VAR_RESULT, HasAllHoennMons
compare VAR_RESULT, 1
goto_if_eq LilycoveCity_CoveLilyMotel_2F_EventScript_218702
release

View File

@ -92,7 +92,7 @@ LilycoveCity_LilycoveMuseum_2F_Movement_219863: @ 8219863
LilycoveCity_LilycoveMuseum_2F_EventScript_219866:: @ 8219866
lockall
goto_if_set FLAG_RECEIVED_GLASS_ORNAMENT, LilycoveCity_LilycoveMuseum_2F_EventScript_219921
specialvar VAR_0x8004, sub_80F8940
specialvar VAR_0x8004, CountPlayerContestPaintings
switch VAR_0x8004
case 1, LilycoveCity_LilycoveMuseum_2F_EventScript_2198BA
case 2, LilycoveCity_LilycoveMuseum_2F_EventScript_2198BA

View File

@ -16,7 +16,7 @@ LittlerootTown_ProfessorBirchsLab_MapScript1_1F9CA1: @ 81F9CA1
end
LittlerootTown_ProfessorBirchsLab_EventScript_1F9CCD:: @ 81F9CCD
specialvar VAR_RESULT, sub_80C08E4
specialvar VAR_RESULT, HasAllHoennMons
compare VAR_RESULT, 1
goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1F9CE9
setobjectmovementtype 3, 3

View File

@ -148,7 +148,7 @@ gSpecials:: @ 81DBA64
def_special sub_80F88E8
def_special sub_80F88DC
def_special sub_80F8864
def_special sub_80F8940
def_special CountPlayerContestPaintings
def_special ShowContestWinner
def_special MauvilleGymSpecial2
def_special MauvilleGymSpecial1
@ -345,7 +345,7 @@ gSpecials:: @ 81DBA64
def_special sub_80B05B4
def_special SetPacifidlogTMReceivedDay
def_special GetDaysUntilPacifidlogTMAvailable
def_special sub_80C08E4
def_special HasAllHoennMons
def_special MonOTNameMatchesPlayer
def_special BufferLottoTicketNumber
def_special sub_81653CC
@ -481,7 +481,7 @@ gSpecials:: @ 81DBA64
def_special sub_813B7D8
def_special sub_81C72A4
def_special sp106_CreateStartMenu
def_special sub_80C2E40
def_special CountPlayerTrainerStars
def_special sub_813AC7C
def_special sub_813ADB8
def_special sub_813ADD4

View File

@ -4846,4 +4846,18 @@ extern const u16 gUnknown_08DC64E8[];
extern const u16 gUnknown_08DC64FC[];
extern const u16 gUnknown_08DC6510[];
// Trainer Card.
extern const u16 gEmeraldTrainerCard0Star_Pal[];
extern const u32 gEmeraldTrainerCard_Gfx[];
extern const u16 gFireRedTrainerCard0Star_Pal[];
extern const u32 gFireRedTrainerCard_Gfx[];
extern const u32 gUnknown_08DD2AE0[];
extern const u32 gUnknown_08DD21B0[];
extern const u32 gUnknown_08DD2D30[];
extern const u32 gUnknown_08DD2010[];
extern const u32 gUnknown_08DD2B78[];
extern const u32 gUnknown_08DD228C[];
extern const u32 gUnknown_08DD2E5C[];
extern const u32 gUnknown_08DD1F78[];
#endif //GUARD_GRAPHICS_H

View File

@ -66,5 +66,9 @@ void BeginHardwarePaletteFade(u8, u8, u8, u8, u8);
void BlendPalettes(u32, u8, u16);
void BlendPalettesUnfaded(u32, u8, u16);
void sub_80A2C44(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7);
void TintPalette_GrayScale(u16 *palette, u16 count);
void TintPalette_GrayScale2(u16 *palette, u16 count);
void TintPalette_SepiaTone(u16 *palette, u16 count);
void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone);
#endif // GUARD_PALETTE_H

View File

@ -41,5 +41,6 @@ u16 GetHoennPokedexCount(u8);
u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality);
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16);
bool16 HasAllHoennMons(void);
#endif // GUARD_POKEDEX_H

View File

@ -4,5 +4,6 @@
u16 sub_80F903C(void);
void ReducePlayerPartyToSelectedMons(void);
void HealPlayerParty(void);
u8 CountPlayerContestPaintings(void);
#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H

View File

@ -2222,4 +2222,30 @@ extern const u8 gText_PreliminaryResults[];
extern const u8 gText_Round2Results[];
extern const u8 gText_Var1sVar2Won[];
// Trainer Card
extern const u8 gText_LinkCableBattles[];
extern const u8 gText_LinkBattles[];
extern const u8 gText_WaitingTrainerFinishReading[];
extern const u8 gText_TrainerCardName[];
extern const u8 gText_TrainerCardIDNo[];
extern const u8 gText_TrainerCardMoney[];
extern const u8 gText_PokedollarVar1[];
extern const u8 gText_EmptyString6[];
extern const u8 gText_TrainerCardPokedex[];
extern const u8 gText_TrainerCardTime[];
extern const u8 gText_Colon2[];
extern const u8 gText_Var1sTrainerCard[];
extern const u8 gText_HallOfFameDebut[];
extern const u8 gText_WinsLosses[];
extern const u8 gText_PokemonTrades[];
extern const u8 gText_BerryCrush[];
extern const u8 gText_UnionTradesAndBattles[];
extern const u8 gText_Var1DarkGreyShadowLightGrey[];
extern const u8 gText_PokeblocksWithFriends[];
extern const u8 gText_WonContestsWFriends[];
extern const u8 gText_WSlashStraightSlash[];
extern const u8 gText_Var1DarkLightGreyBP[];
extern const u8 gText_BattleTower[];
extern const u8 gText_BattlePtsWon[];
#endif //GUARD_STRINGS_H

View File

@ -6,38 +6,47 @@ struct TrainerCard
/*0x00*/ u8 gender;
/*0x01*/ u8 stars;
/*0x02*/ bool8 hasPokedex;
/*0x03*/ bool8 var_3;
/*0x04*/ bool8 var_4;
/*0x05*/ u8 var_5;
/*0x06*/ u16 firstHallOfFameA;
/*0x08*/ u16 firstHallOfFameB;
/*0x0A*/ u16 firstHallOfFameC;
/*0x0C*/ u16 pokedexSeen;
/*0x03*/ bool8 caughtAllHoenn;
/*0x04*/ bool8 hasAllPaintings;
/*0x06*/ u16 hofDebutHours;
/*0x08*/ u16 hofDebutMinutes;
/*0x0A*/ u16 hofDebutSeconds;
/*0x0C*/ u16 caughtMonsCount;
/*0x0E*/ u16 trainerId;
/*0x10*/ u16 playTimeHours;
/*0x12*/ u16 playTimeMinutes;
/*0x14*/ u16 linkBattleWins;
/*0x16*/ u16 linkBattleLosses;
/*0x18*/ u16 battleTowerWins;
/*0x1A*/ u16 battleTowerLosses;
/*0x1A*/ u16 battleTowerStraightWins;
/*0x1C*/ u16 contestsWithFriends;
/*0x1E*/ u16 pokeblocksWithFriends;
/*0x20*/ u16 pokemonTrades;
/*0x22*/ u16 var_22;
/*0x24*/ u32 money;
/*0x28*/ u16 var_28[4];
/*0x30*/ u8 playerName[8];
/*0x38*/ u8 emeraldAddedUnknownFields[0x54-0x38];
/*0x54*/ u16 monSpecies[2];
/*0x58*/ u8 emeraldAddedUnknownFields2[0x64-0x58];
/*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x38*/ u8 version;
/*0x3A*/ u16 var_3A;
/*0x3C*/ u32 berryCrushPoints;
/*0x40*/ u32 unionRoomNum;
/*0x44*/ u8 filler44[0x8];
/*0x4C*/ u8 var_4C;
/*0x4D*/ u8 var_4D;
/*0x4E*/ u8 var_4E;
/*0x4F*/ u8 var_4F;
/*0x50*/ u8 var_50[0x4];
/*0x54*/ u16 monSpecies[PARTY_SIZE];
/*0x60*/ bool16 hasAllSymbols;
/*0x62*/ u16 frontierBP;
};
extern struct TrainerCard gTrainerCards[4];
void sub_80C3120(struct TrainerCard *arg0, u16 *arg1, u8 gameVersion);
void TrainerCard_ShowLinkCard(u8 arg0, void (*callback)(void));
u32 CountPlayerTrainerStars(void);
u8 sub_80C4904(u8 cardId);
void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion);
void ShowPlayerTrainerCard(void (*callback)(void));
void ShowTrainerCardInLink(u8 arg0, void (*callback)(void));
void TrainerCard_GenerateCardForPlayer(struct TrainerCard *);
u8 sub_80C4904(u8);
void sub_80C6D80(const u8 *, u8 *, u8, u8, u8);
#endif // GUARD_TRAINER_CARD_H

View File

@ -124,7 +124,9 @@ SECTIONS {
src/scanline_effect.o(.text);
src/option_menu.o(.text);
src/pokedex.o(.text);
asm/trainer_card.o(.text);
src/trainer_card.o(.text);
src/frontier_pass.o(.text);
asm/frontier_pass.o(.text);
src/pokemon_storage_system.o(.text);
src/pokemon_icon.o(.text);
src/script_movement.o(.text);
@ -457,7 +459,8 @@ SECTIONS {
src/field_effect.o(.rodata);
src/option_menu.o(.rodata);
src/pokedex.o(.rodata);
data/trainer_card.o(.rodata);
src/trainer_card.o(.rodata);
data/frontier_pass.o(.rodata);
src/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata);
src/fldeff_cut.o(.rodata);

View File

@ -498,7 +498,7 @@ static void sub_80B2C30(u8 taskId)
for (index = 0; index < GetLinkPlayerCount(); index++)
{
sub_80C3120(&gTrainerCards[index], gBlockRecvBuffer[index], gLinkPlayers[index].version);
CopyTrainerCardData(&gTrainerCards[index], gBlockRecvBuffer[index], gLinkPlayers[index].version);
}
SetSuppressLinkErrorMessage(FALSE);
@ -1176,7 +1176,7 @@ static void sub_80B39A4(void)
void sp02A_crash_sound(void)
{
TrainerCard_ShowLinkCard(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic);
ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
bool32 sub_80B39D4(u8 linkPlayerIndex)

31
src/frontier_pass.c Normal file
View File

@ -0,0 +1,31 @@
#include "global.h"
#include "gpu_regs.h"
#include "bg.h"
void sub_80C50D0(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
SetGpuReg(REG_OFFSET_BG3CNT, 0);
SetGpuReg(REG_OFFSET_BG2CNT, 0);
SetGpuReg(REG_OFFSET_BG1CNT, 0);
SetGpuReg(REG_OFFSET_BG0CNT, 0);
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WIN1H, 0);
SetGpuReg(REG_OFFSET_WIN1V, 0);
SetGpuReg(REG_OFFSET_WININ, 0);
SetGpuReg(REG_OFFSET_WINOUT, 0);
CpuFill16(0, (void *)VRAM, VRAM_SIZE);
CpuFill32(0, (void *)OAM, OAM_SIZE);
}

View File

@ -4271,46 +4271,46 @@ s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID)
retVal = 0;
switch (caseID)
{
case FLAG_GET_SEEN:
if (gSaveBlock2Ptr->pokedex.seen[index] & mask)
case FLAG_GET_SEEN:
if (gSaveBlock2Ptr->pokedex.seen[index] & mask)
{
if ((gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask)
&& (gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask))
retVal = 1;
else
{
if ((gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask)
&& (gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask))
retVal = 1;
else
{
gSaveBlock2Ptr->pokedex.seen[index] &= ~mask;
gSaveBlock1Ptr->seen1[index] &= ~mask;
gSaveBlock1Ptr->seen2[index] &= ~mask;
retVal = 0;
}
gSaveBlock2Ptr->pokedex.seen[index] &= ~mask;
gSaveBlock1Ptr->seen1[index] &= ~mask;
gSaveBlock1Ptr->seen2[index] &= ~mask;
retVal = 0;
}
break;
case FLAG_GET_CAUGHT:
if (gSaveBlock2Ptr->pokedex.owned[index] & mask)
}
break;
case FLAG_GET_CAUGHT:
if (gSaveBlock2Ptr->pokedex.owned[index] & mask)
{
if ((gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock2Ptr->pokedex.seen[index] & mask)
&& (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask)
&& (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask))
retVal = 1;
else
{
if ((gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock2Ptr->pokedex.seen[index] & mask)
&& (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask)
&& (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask))
retVal = 1;
else
{
gSaveBlock2Ptr->pokedex.owned[index] &= ~mask;
gSaveBlock2Ptr->pokedex.seen[index] &= ~mask;
gSaveBlock1Ptr->seen1[index] &= ~mask;
gSaveBlock1Ptr->seen2[index] &= ~mask;
retVal = 0;
}
gSaveBlock2Ptr->pokedex.owned[index] &= ~mask;
gSaveBlock2Ptr->pokedex.seen[index] &= ~mask;
gSaveBlock1Ptr->seen1[index] &= ~mask;
gSaveBlock1Ptr->seen2[index] &= ~mask;
retVal = 0;
}
break;
case FLAG_SET_SEEN:
gSaveBlock2Ptr->pokedex.seen[index] |= mask;
gSaveBlock1Ptr->seen1[index] |= mask;
gSaveBlock1Ptr->seen2[index] |= mask;
break;
case FLAG_SET_CAUGHT:
gSaveBlock2Ptr->pokedex.owned[index] |= mask;
break;
}
break;
case FLAG_SET_SEEN:
gSaveBlock2Ptr->pokedex.seen[index] |= mask;
gSaveBlock1Ptr->seen1[index] |= mask;
gSaveBlock1Ptr->seen2[index] |= mask;
break;
case FLAG_SET_CAUGHT:
gSaveBlock2Ptr->pokedex.owned[index] |= mask;
break;
}
return retVal;
}
@ -4324,14 +4324,14 @@ u16 GetNationalPokedexCount(u8 caseID)
{
switch (caseID)
{
case FLAG_GET_SEEN:
if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN))
count++;
break;
case FLAG_GET_CAUGHT:
if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
count++;
break;
case FLAG_GET_SEEN:
if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN))
count++;
break;
case FLAG_GET_CAUGHT:
if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
count++;
break;
}
}
return count;
@ -4346,14 +4346,14 @@ u16 GetHoennPokedexCount(u8 caseID)
{
switch (caseID)
{
case FLAG_GET_SEEN:
if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN))
count++;
break;
case FLAG_GET_CAUGHT:
if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
count++;
break;
case FLAG_GET_SEEN:
if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN))
count++;
break;
case FLAG_GET_CAUGHT:
if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
count++;
break;
}
}
return count;
@ -4381,7 +4381,7 @@ u16 sub_80C089C(u8 caseID)
return count;
}
bool8 sub_80C08E4(void)
bool16 HasAllHoennMons(void)
{
u16 i;

View File

@ -1577,7 +1577,7 @@ void sub_80140E0(u8 taskId)
for (i = 0; i < GetLinkPlayerCount(); i++)
{
recvBuff = gBlockRecvBuffer[i];
sub_80C3120(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version);
CopyTrainerCardData(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version);
}
if (GetLinkPlayerCount() == 2)
@ -1607,7 +1607,7 @@ void sub_80141A4(void)
break;
case 1:
if (!FuncIsActiveTask(sub_80140E0))
TrainerCard_ShowLinkCard(GetMultiplayerId() ^ 1, CB2_ReturnToField);
ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField);
break;
}

View File

@ -128,18 +128,18 @@ void sub_80F88E8(void)
}
}
u8 sub_80F8940(void)
u8 CountPlayerContestPaintings(void)
{
int i;
u8 var0 = 0;
u8 count = 0;
for (i = 0; i < 5; i++)
{
if (gSaveBlock1Ptr->contestWinners[8 + i].species)
var0++;
count++;
}
return var0;
return count;
}
void sub_80F8970(void)

View File

@ -9,6 +9,7 @@
#include "strings.h"
#include "bg.h"
#include "field_effect.h"
#include "party_menu.h"
#include "task.h"
#include "overworld.h"
#include "link.h"
@ -30,6 +31,7 @@
#include "scanline_effect.h"
#include "text_window.h"
#include "load_save.h"
#include "trainer_card.h"
#include "international_string_util.h"
#include "constants/songs.h"
#include "field_player_avatar.h"
@ -89,11 +91,9 @@ extern void var_800D_set_xB(void);
extern void sub_808B864(void);
extern void CB2_Pokedex(void);
extern void PlayRainSoundEffect(void);
extern void CB2_PartyMenuFromStartMenu(void);
extern void CB2_PokeNav(void);
extern void sub_80C4DDC(void (*)(void));
extern void ShowPlayerTrainerCard(void (*)(void));
extern void sub_80C51C4(void (*)(void));
extern void TrainerCard_ShowLinkCard(u8, void (*)(void));
extern void ScriptUnfreezeEventObjects(void);
extern void sub_81A9EC8(void);
extern void save_serialize_map(void);
@ -422,16 +422,19 @@ static bool32 PrintStartMenuActions(s8 *pIndex, u32 count)
do
{
if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback) {
if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback)
{
PrintPlayerNameOnWindow(GetStartMenuWindowId(), sStartMenuItems[sCurrentStartMenuActions[index]].text, 8, (index << 4) + 9);
}
else {
else
{
StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text);
AddTextPrinterParameterized(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL);
}
index++;
if (index >= sNumStartMenuActions) {
if (index >= sNumStartMenuActions)
{
*pIndex = index;
return TRUE;
}
@ -465,21 +468,14 @@ static bool32 InitStartMenuStep(void)
break;
case 3:
if (GetSafariZoneFlag())
{
ShowSafariBallsWindow();
}
if (InBattlePyramid())
{
ShowPyramidFloorWindow();
}
sUnknown_02037619[0]++;
break;
case 4:
if (!PrintStartMenuActions(&sUnknown_02037619[1], 2))
{
break;
}
sUnknown_02037619[0]++;
if (PrintStartMenuActions(&sUnknown_02037619[1], 2))
sUnknown_02037619[0]++;
break;
case 5:
sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos);
@ -494,15 +490,14 @@ static void InitStartMenu(void)
{
sUnknown_02037619[0] = 0;
sUnknown_02037619[1] = 0;
while (!InitStartMenuStep());
while (!InitStartMenuStep())
;
}
static void StartMenuTask(u8 taskId)
{
if (InitStartMenuStep() == TRUE)
{
SwitchTaskToFollowupFunc(taskId);
}
}
static void CreateStartMenuTask(TaskFunc followupFunc)
@ -541,18 +536,14 @@ void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
{
case 0:
if (InUnionRoom() == TRUE)
{
var_800D_set_xB();
}
gMenuCallback = HandleStartMenuInput;
task->data[0]++;
break;
case 1:
if (gMenuCallback() == TRUE)
{
DestroyTask(taskId);
}
break;
}
}
@ -588,9 +579,8 @@ static bool8 HandleStartMenuInput(void)
PlaySE(SE_SELECT);
if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback)
{
if (GetNationalPokedexCount(0) == 0) {
if (GetNationalPokedexCount(0) == 0)
return FALSE;
}
}
gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void;
@ -686,17 +676,11 @@ static bool8 StartMenuPlayerNameCallback(void)
CleanupOverworldWindowsAndTilemaps();
if (is_c1_link_related_active() || InUnionRoom())
{
sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
}
ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
else if (FlagGet(FLAG_SYS_FRONTIER_PASS))
{
sub_80C51C4(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass
}
else
{
sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
}
ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
return TRUE;
}
@ -707,9 +691,7 @@ static bool8 StartMenuPlayerNameCallback(void)
static bool8 StartMenuSaveCallback(void)
{
if (InBattlePyramid())
{
RemoveExtraStartMenuWindows();
}
gMenuCallback = SaveStartCallback; // Display save menu
@ -755,7 +737,7 @@ static bool8 StartMenuLinkModePlayerNameCallback(void)
{
PlayRainSoundEffect();
CleanupOverworldWindowsAndTilemaps();
TrainerCard_ShowLinkCard(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu);
ShowTrainerCardInLink(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu);
return TRUE;
}

View File

@ -49,6 +49,8 @@
#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
extern void sub_80C6D80(const u8 *, u8 *, u8, u8, u8);
struct InGameTrade {
/*0x00*/ u8 name[11];
/*0x0C*/ u16 species;

1857
src/trainer_card.c Executable file

File diff suppressed because it is too large Load Diff

View File

@ -153,8 +153,7 @@ gUnknown_02039B6E: @ 2039B6E
gUnknown_02039B88: @ 2039B88
.space 0x160
gUnknown_02039CE8: @ 2039CE8
.space 0x4
.include "src/trainer_card.o"
gUnknown_02039CEC: @ 2039CEC
.space 0x4