Merge pull request #1415 from GriffinRichards/doc-contestutil

Some Contest clean up
This commit is contained in:
GriffinR authored and GitHub committed 2021-04-27 02:29:41 -04:00
commit 18f85b5cf0
52 files changed
+439 -378

No files matched your search

+3 -3
View File
@@ -918,10 +918,10 @@
.byte 0x76 .byte 0x76
.endm .endm
@ Draws an image of the winner of the contest. In FireRed, this command is a nop. (The argument is discarded.) @ Draws an image of the winner of the contest. winnerId is any CONTEST_WINNER_* constant.
.macro showcontestwinner a:req .macro showcontestpainting winnerId:req
.byte 0x77 .byte 0x77
.byte \a .byte \winnerId
.endm .endm
@ Displays the string at pointer as braille text in a standard message box. The string must be formatted to use braille @ Displays the string at pointer as braille text in a standard message box. The string must be formatted to use braille
+1 -1
View File
@@ -160,7 +160,7 @@ LilycoveCity_EventScript_MotelSign:: @ 81E2D11
LilycoveCity_EventScript_MuseumSign:: @ 81E2D1A LilycoveCity_EventScript_MuseumSign:: @ 81E2D1A
lockall lockall
specialvar VAR_0x8004, CountPlayerContestPaintings specialvar VAR_0x8004, CountPlayerMuseumPaintings
switch VAR_0x8004 switch VAR_0x8004
case 0, LilycoveCity_EventScript_MuseumSignNoPaintings case 0, LilycoveCity_EventScript_MuseumSignNoPaintings
msgbox LilycoveCity_Text_MuseumSignPlayersExhibit, MSGBOX_DEFAULT msgbox LilycoveCity_Text_MuseumSignPlayersExhibit, MSGBOX_DEFAULT
@@ -49,7 +49,7 @@ LilycoveCity_ContestLobby_EventScript_ContestArtist:: @ 821A264
msgbox LilycoveCity_ContestLobby_Text_YourPokemonSpurredMeToPaint, MSGBOX_DEFAULT msgbox LilycoveCity_ContestLobby_Text_YourPokemonSpurredMeToPaint, MSGBOX_DEFAULT
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_ARTIST showcontestpainting CONTEST_WINNER_ARTIST
lockall lockall
msgbox LilycoveCity_ContestLobby_Text_ShouldITakePaintingToMuseum, MSGBOX_YESNO msgbox LilycoveCity_ContestLobby_Text_ShouldITakePaintingToMuseum, MSGBOX_YESNO
compare VAR_RESULT, YES compare VAR_RESULT, YES
@@ -108,7 +108,7 @@ LilycoveCity_ContestLobby_EventScript_ReceivedArtistRibbon:: @ 821A314
return return
LilycoveCity_ContestLobby_EventScript_UpdateMuseumPatrons:: @ 821A360 LilycoveCity_ContestLobby_EventScript_UpdateMuseumPatrons:: @ 821A360
specialvar VAR_0x8004, CountPlayerContestPaintings specialvar VAR_0x8004, CountPlayerMuseumPaintings
switch VAR_0x8004 switch VAR_0x8004
case 1, LilycoveCity_ContestLobby_EventScript_ShowPatron1 case 1, LilycoveCity_ContestLobby_EventScript_ShowPatron1
case 2, LilycoveCity_ContestLobby_EventScript_ShowPatron2 case 2, LilycoveCity_ContestLobby_EventScript_ShowPatron2
@@ -223,7 +223,7 @@ LilycoveCity_ContestLobby_EventScript_LinkContestArtist:: @ 821A436
msgbox LilycoveCity_ContestLobby_Text_YourPokemonSpurredMeToPaint, MSGBOX_DEFAULT msgbox LilycoveCity_ContestLobby_Text_YourPokemonSpurredMeToPaint, MSGBOX_DEFAULT
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_ARTIST showcontestpainting CONTEST_WINNER_ARTIST
msgbox LilycoveCity_ContestLobby_Text_ShouldITakePaintingToMuseum, MSGBOX_YESNO msgbox LilycoveCity_ContestLobby_Text_ShouldITakePaintingToMuseum, MSGBOX_YESNO
compare VAR_RESULT, YES compare VAR_RESULT, YES
goto_if_eq LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink goto_if_eq LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink
@@ -511,42 +511,42 @@ LilycoveCity_ContestLobby_EventScript_NinjaBoy:: @ 821A735
LilycoveCity_ContestLobby_EventScript_ContestWinner1:: @ 821A73E LilycoveCity_ContestLobby_EventScript_ContestWinner1:: @ 821A73E
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_HALL_1 showcontestpainting CONTEST_WINNER_HALL_1
releaseall releaseall
end end
LilycoveCity_ContestLobby_EventScript_ContestWinner2:: @ 821A745 LilycoveCity_ContestLobby_EventScript_ContestWinner2:: @ 821A745
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_HALL_2 showcontestpainting CONTEST_WINNER_HALL_2
releaseall releaseall
end end
LilycoveCity_ContestLobby_EventScript_ContestWinner3:: @ 821A74C LilycoveCity_ContestLobby_EventScript_ContestWinner3:: @ 821A74C
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_HALL_3 showcontestpainting CONTEST_WINNER_HALL_3
releaseall releaseall
end end
LilycoveCity_ContestLobby_EventScript_ContestWinner4:: @ 821A753 LilycoveCity_ContestLobby_EventScript_ContestWinner4:: @ 821A753
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_HALL_4 showcontestpainting CONTEST_WINNER_HALL_4
releaseall releaseall
end end
LilycoveCity_ContestLobby_EventScript_ContestWinner5:: @ 821A75A LilycoveCity_ContestLobby_EventScript_ContestWinner5:: @ 821A75A
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_HALL_5 showcontestpainting CONTEST_WINNER_HALL_5
releaseall releaseall
end end
LilycoveCity_ContestLobby_EventScript_ContestWinner6:: @ 821A761 LilycoveCity_ContestLobby_EventScript_ContestWinner6:: @ 821A761
lockall lockall
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_HALL_6 showcontestpainting CONTEST_WINNER_HALL_6
releaseall releaseall
end end
@@ -94,7 +94,7 @@ LilycoveCity_LilycoveMuseum_2F_Movement_FaceExhibitHall: @ 8219863
LilycoveCity_LilycoveMuseum_2F_EventScript_Curator:: @ 8219866 LilycoveCity_LilycoveMuseum_2F_EventScript_Curator:: @ 8219866
lockall lockall
goto_if_set FLAG_RECEIVED_GLASS_ORNAMENT, LilycoveCity_LilycoveMuseum_2F_EventScript_ReceivedGlassOrnament goto_if_set FLAG_RECEIVED_GLASS_ORNAMENT, LilycoveCity_LilycoveMuseum_2F_EventScript_ReceivedGlassOrnament
specialvar VAR_0x8004, CountPlayerContestPaintings specialvar VAR_0x8004, CountPlayerMuseumPaintings
switch VAR_0x8004 switch VAR_0x8004
case 1, LilycoveCity_LilycoveMuseum_2F_EventScript_AddedPainting case 1, LilycoveCity_LilycoveMuseum_2F_EventScript_AddedPainting
case 2, LilycoveCity_LilycoveMuseum_2F_EventScript_AddedPainting case 2, LilycoveCity_LilycoveMuseum_2F_EventScript_AddedPainting
@@ -185,35 +185,35 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_RichBoy:: @ 821999C
LilycoveCity_LilycoveMuseum_2F_EventScript_ShowCoolPainting:: @ 82199A5 LilycoveCity_LilycoveMuseum_2F_EventScript_ShowCoolPainting:: @ 82199A5
msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_MUSEUM_COOL showcontestpainting CONTEST_WINNER_MUSEUM_COOL
releaseall releaseall
end end
LilycoveCity_LilycoveMuseum_2F_EventScript_ShowBeautyPainting:: @ 82199B3 LilycoveCity_LilycoveMuseum_2F_EventScript_ShowBeautyPainting:: @ 82199B3
msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_MUSEUM_BEAUTY showcontestpainting CONTEST_WINNER_MUSEUM_BEAUTY
releaseall releaseall
end end
LilycoveCity_LilycoveMuseum_2F_EventScript_ShowCutePainting:: @ 82199C1 LilycoveCity_LilycoveMuseum_2F_EventScript_ShowCutePainting:: @ 82199C1
msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_MUSEUM_CUTE showcontestpainting CONTEST_WINNER_MUSEUM_CUTE
releaseall releaseall
end end
LilycoveCity_LilycoveMuseum_2F_EventScript_ShowSmartPainting:: @ 82199CF LilycoveCity_LilycoveMuseum_2F_EventScript_ShowSmartPainting:: @ 82199CF
msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_MUSEUM_SMART showcontestpainting CONTEST_WINNER_MUSEUM_SMART
releaseall releaseall
end end
LilycoveCity_LilycoveMuseum_2F_EventScript_ShowToughPainting:: @ 82199DD LilycoveCity_LilycoveMuseum_2F_EventScript_ShowToughPainting:: @ 82199DD
msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN msgbox LilycoveCity_LilycoveMuseum_2F_Text_ItsPaintingOfPokemon, MSGBOX_SIGN
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
showcontestwinner CONTEST_WINNER_MUSEUM_TOUGH showcontestpainting CONTEST_WINNER_MUSEUM_TOUGH
releaseall releaseall
end end
+1 -1
View File
@@ -119,7 +119,7 @@ gScriptCmdTable:: @ 81DB67C
.4byte ScrCmd_drawboxtext @ 0x74 .4byte ScrCmd_drawboxtext @ 0x74
.4byte ScrCmd_showmonpic @ 0x75 .4byte ScrCmd_showmonpic @ 0x75
.4byte ScrCmd_hidemonpic @ 0x76 .4byte ScrCmd_hidemonpic @ 0x76
.4byte ScrCmd_showcontestwinner @ 0x77 .4byte ScrCmd_showcontestpainting @ 0x77
.4byte ScrCmd_braillemessage @ 0x78 .4byte ScrCmd_braillemessage @ 0x78
.4byte ScrCmd_givemon @ 0x79 .4byte ScrCmd_givemon @ 0x79
.4byte ScrCmd_giveegg @ 0x7a .4byte ScrCmd_giveegg @ 0x7a
+5 -5
View File
@@ -89,14 +89,14 @@ gSpecials:: @ 81DBA64
def_special ResetTVShowState def_special ResetTVShowState
def_special GetContestWinnerId def_special GetContestWinnerId
def_special GetContestPlayerId def_special GetContestPlayerId
def_special sub_80F8814 def_special GetNpcContestantLocalId
def_special BufferContestWinnerTrainerName def_special BufferContestWinnerTrainerName
def_special BufferContestWinnerMonName def_special BufferContestWinnerMonName
def_special BufferContestTrainerAndMonNames def_special BufferContestTrainerAndMonNames
def_special GetContestMonConditionRanking def_special GetContestMonConditionRanking
def_special SetContestTrainerGfxIds def_special SetContestTrainerGfxIds
def_special TryEnterContestMon def_special TryEnterContestMon
def_special sub_80F8970 def_special GetContestantNamesAtRank
def_special SetLinkContestPlayerGfx def_special SetLinkContestPlayerGfx
def_special GetContestMonCondition def_special GetContestMonCondition
def_special HasMonWonThisContestBefore def_special HasMonWonThisContestBefore
@@ -147,9 +147,9 @@ gSpecials:: @ 81DBA64
def_special CountPartyAliveNonEggMons_IgnoreVar0x8004Slot def_special CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
def_special ShouldReadyContestArtist def_special ShouldReadyContestArtist
def_special SaveMuseumContestPainting def_special SaveMuseumContestPainting
def_special DoesContestCategoryHaveWinner def_special DoesContestCategoryHaveMuseumPainting
def_special CountPlayerContestPaintings def_special CountPlayerMuseumPaintings
def_special ShowContestWinnerPainting def_special ShowContestPainting @ Unused, redundant with showcontestpainting command
def_special MauvilleGymSetDefaultBarriers def_special MauvilleGymSetDefaultBarriers
def_special MauvilleGymPressSwitch def_special MauvilleGymPressSwitch
def_special ShowFieldMessageStringVar4 def_special ShowFieldMessageStringVar4
+1 -1
View File
@@ -1,4 +1,4 @@
gContestPaintingCaption:: @ 827EA0C gContestHallPaintingCaption:: @ 827EA0C
.string "{STR_VAR_1}\n" .string "{STR_VAR_1}\n"
.string "{STR_VAR_2}'s {STR_VAR_3}$" .string "{STR_VAR_2}'s {STR_VAR_3}$"
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+1 -1
View File
@@ -476,7 +476,7 @@ $(RAYQUAZAGFXDIR)/scene_4/streaks.4bpp: %.4bpp: %.png
$(RAYQUAZAGFXDIR)/scene_4/rayquaza.4bpp: %.4bpp: %.png $(RAYQUAZAGFXDIR)/scene_4/rayquaza.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 155 $(GFX) $< $@ -num_tiles 155
graphics/picture_frame/frame5.4bpp: %.4bpp: %.png graphics/picture_frame/lobby.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 86 $(GFX) $< $@ -num_tiles 86
$(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \ $(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \
+13 -3
View File
@@ -22,7 +22,9 @@
#define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1) #define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1)
#define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1) #define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1)
#define CONTEST_WINNER_ARTIST 0 // Winner shown by the artist, painting not necessarily saved // IDs below - 1 are indexes into gSaveBlock1Ptr->contestWinners[]
// CONTEST_WINNER_ARTIST is for the winner of the most recent contest, and is not saved.
#define CONTEST_WINNER_ARTIST 0
#define CONTEST_WINNER_HALL_1 1 #define CONTEST_WINNER_HALL_1 1
#define CONTEST_WINNER_HALL_2 2 #define CONTEST_WINNER_HALL_2 2
#define CONTEST_WINNER_HALL_3 3 #define CONTEST_WINNER_HALL_3 3
@@ -30,8 +32,8 @@
#define CONTEST_WINNER_HALL_5 5 #define CONTEST_WINNER_HALL_5 5
#define CONTEST_WINNER_HALL_6 6 #define CONTEST_WINNER_HALL_6 6
#define NUM_CONTEST_HALL_WINNERS 6 #define NUM_CONTEST_HALL_WINNERS 6
#define CONTEST_WINNER_7 7 #define CONTEST_WINNER_HALL_UNUSED_1 7 // These two have data for gDefaultContestWinners
#define CONTEST_WINNER_8 8 #define CONTEST_WINNER_HALL_UNUSED_2 8 // but there are only 6 paintings in the Contest Hall
#define CONTEST_WINNER_MUSEUM_COOL 9 #define CONTEST_WINNER_MUSEUM_COOL 9
#define CONTEST_WINNER_MUSEUM_BEAUTY 10 #define CONTEST_WINNER_MUSEUM_BEAUTY 10
#define CONTEST_WINNER_MUSEUM_CUTE 11 #define CONTEST_WINNER_MUSEUM_CUTE 11
@@ -39,6 +41,14 @@
#define CONTEST_WINNER_MUSEUM_TOUGH 13 #define CONTEST_WINNER_MUSEUM_TOUGH 13
// NUM_CONTEST_WINNERS in constants/global.h // NUM_CONTEST_WINNERS in constants/global.h
#define MUSEUM_CONTEST_WINNERS_START (CONTEST_WINNER_MUSEUM_COOL - 1)
#define CONTEST_SAVE_FOR_MUSEUM ((u8)-1)
#define CONTEST_SAVE_FOR_ARTIST ((u8)-2)
// The number of possible captions for a Contest painting, per category
#define NUM_PAINTING_CAPTIONS 3
#define CANT_ENTER_CONTEST 0 #define CANT_ENTER_CONTEST 0
#define CAN_ENTER_CONTEST_EQUAL_RANK 1 #define CAN_ENTER_CONTEST_EQUAL_RANK 1
#define CAN_ENTER_CONTEST_HIGH_RANK 2 #define CAN_ENTER_CONTEST_HIGH_RANK 2
+8 -8
View File
@@ -111,11 +111,11 @@ struct ContestPokemon
u32 otId; u32 otId;
}; };
struct Shared1A004 struct ContestTempSave
{ {
u16 cachedWindowPalettes[16][16]; // Saved palette data before a move happens? u16 cachedWindowPalettes[16][16]; // Saved palette data before a move happens?
u16 unk18204[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferUnfaded u16 cachedPlttBufferUnfaded[PLTT_BUFFER_SIZE];
u16 unk18604[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferFaded u16 cachedPlttBufferFaded[PLTT_BUFFER_SIZE];
u8 savedJunk[0x800]; u8 savedJunk[0x800];
}; };
@@ -306,7 +306,7 @@ struct ContestResources
#define eUnzippedContestAudience_Gfx (gHeap + 0x18000) #define eUnzippedContestAudience_Gfx (gHeap + 0x18000)
#define eContestAudienceFrame2_Gfx (gHeap + 0x19000) #define eContestAudienceFrame2_Gfx (gHeap + 0x19000)
#define eContestDebugMode (gHeap[0x1a000]) #define eContestDebugMode (gHeap[0x1a000])
#define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004)) #define eContestTempSave (*(struct ContestTempSave *)(gHeap + 0x1a004))
extern struct ContestPokemon gContestMons[CONTESTANT_COUNT]; extern struct ContestPokemon gContestMons[CONTESTANT_COUNT];
extern s16 gContestMonRound1Points[CONTESTANT_COUNT]; extern s16 gContestMonRound1Points[CONTESTANT_COUNT];
@@ -326,8 +326,8 @@ extern u8 gHighestRibbonRank;
extern struct ContestResources *gContestResources; extern struct ContestResources *gContestResources;
extern u8 sContestBgCopyFlags; extern u8 sContestBgCopyFlags;
extern struct ContestWinner gCurContestWinner; extern struct ContestWinner gCurContestWinner;
extern u8 gUnknown_02039F5C; extern u8 gCurContestWinnerIsForArtist;
extern u8 gUnknown_02039F5D; extern u8 gCurContestWinnerSaveIdx;
extern u32 gContestRngValue; extern u32 gContestRngValue;
// contest.c // contest.c
@@ -351,8 +351,8 @@ s8 Contest_GetMoveExcitement(u16 move);
bool8 IsContestantAllowedToCombo(u8 contestant); bool8 IsContestantAllowedToCombo(u8 contestant);
void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId); void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId);
void ResetContestLinkResults(void); void ResetContestLinkResults(void);
bool8 sub_80DEDA8(u8 a); bool8 SaveContestWinner(u8 rank);
u8 sub_80DEFA8(u8 a, u8 b); u8 GetContestWinnerSaveIdx(u8 rank, bool8 shift);
void ClearContestWinnerPicsInContestHall(void); void ClearContestWinnerPicsInContestHall(void);
void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language); void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language);
+2 -2
View File
@@ -7,8 +7,8 @@ void StartContest(void);
void BufferContestantMonSpecies(void); void BufferContestantMonSpecies(void);
void ShowContestResults(void); void ShowContestResults(void);
void ContestLinkTransfer(u8); void ContestLinkTransfer(u8);
void ShowContestWinnerPainting(void); void ShowContestPainting(void);
u16 GetContestRand(void); u16 GetContestRand(void);
u8 CountPlayerContestPaintings(void); u8 CountPlayerMuseumPaintings(void);
#endif // GUARD_CONTEST_UTIL_H #endif // GUARD_CONTEST_UTIL_H
+14 -14
View File
@@ -4924,21 +4924,21 @@ extern const u32 gRouletteMultiplier_Gfx[];
// Contest util // Contest util
extern const u32 gContestResults_Gfx[]; extern const u32 gContestResults_Gfx[];
extern const u32 gUnknown_08C19EEC[]; extern const u32 gContestResults_WinnerBanner_Tilemap[];
extern const u32 gUnknown_08C1A000[]; extern const u32 gContestResults_Interface_Tilemap[];
extern const u32 gUnknown_08C1A12C[]; extern const u32 gContestResults_Bg_Tilemap[];
extern const u32 gContestResults_Pal[]; extern const u32 gContestResults_Pal[];
extern const u16 gLinkContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Link_Tilemap[];
extern const u16 gNormalContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Normal_Tilemap[];
extern const u16 gSuperContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Super_Tilemap[];
extern const u16 gHyperContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Hyper_Tilemap[];
extern const u16 gMasterContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Master_Tilemap[];
extern const u16 gCoolContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Cool_Tilemap[];
extern const u16 gBeautyContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Beauty_Tilemap[];
extern const u16 gCuteContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Cute_Tilemap[];
extern const u16 gSmartContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Smart_Tilemap[];
extern const u16 gToughContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Tough_Tilemap[];
extern const u16 gContestResults_Tilemap[]; extern const u16 gContestResultsTitle_Tilemap[];
// Trainer Card. // Trainer Card.
extern const u16 gHoennTrainerCard0Star_Pal[]; extern const u16 gHoennTrainerCard0Star_Pal[];
+1 -1
View File
@@ -17,7 +17,7 @@ void CopyMonCategoryText(int dexNum, u8 *dest);
u8 *sub_81DB494(u8 *str, int fontId, const u8 *str2, int totalStringWidth); u8 *sub_81DB494(u8 *str, int fontId, const u8 *str2, int totalStringWidth);
void PadNameString(u8 *dest, u8 padChar); void PadNameString(u8 *dest, u8 padChar);
void ConvertInternationalPlayerNameStripChar(u8 *, u8); void ConvertInternationalPlayerNameStripChar(u8 *, u8);
void sub_81DB5AC(u8 *); void ConvertInternationalContestantName(u8 *);
int sub_81DB604(u8 *); int sub_81DB604(u8 *);
void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows); void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows);
+44 -31
View File
@@ -350,8 +350,8 @@ EWRAM_DATA u8 gHighestRibbonRank = 0;
EWRAM_DATA struct ContestResources *gContestResources = NULL; EWRAM_DATA struct ContestResources *gContestResources = NULL;
EWRAM_DATA u8 sContestBgCopyFlags = 0; EWRAM_DATA u8 sContestBgCopyFlags = 0;
EWRAM_DATA struct ContestWinner gCurContestWinner = {0}; EWRAM_DATA struct ContestWinner gCurContestWinner = {0};
EWRAM_DATA bool8 gUnknown_02039F5C = 0; EWRAM_DATA bool8 gCurContestWinnerIsForArtist = 0;
EWRAM_DATA u8 gUnknown_02039F5D = 0; EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0;
// IWRAM common vars. // IWRAM common vars.
u32 gContestRngValue; u32 gContestRngValue;
@@ -1034,7 +1034,7 @@ void LoadContestBgAfterMoveAnim(void)
{ {
u32 contestantWindowId = 5 + i; u32 contestantWindowId = 5 + i;
LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId]))); LoadPalette(eContestTempSave.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eContestTempSave.cachedWindowPalettes[contestantWindowId])));
} }
} }
@@ -1320,7 +1320,7 @@ static bool8 SetupContestGraphics(u8 *stateVar)
CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0); CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0);
CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(2);
// This is a bug, and copies random junk. savedJunk is never read. // This is a bug, and copies random junk. savedJunk is never read.
DmaCopy32Defvars(3, gContestResources->contestBgTilemaps[2], eUnknownHeap1A004.savedJunk, sizeof(eUnknownHeap1A004.savedJunk)); DmaCopy32Defvars(3, gContestResources->contestBgTilemaps[2], eContestTempSave.savedJunk, sizeof(eContestTempSave.savedJunk));
break; break;
case 5: case 5:
LoadCompressedPalette(gOldContestPalette, 0, 0x200); LoadCompressedPalette(gOldContestPalette, 0, 0x200);
@@ -1328,7 +1328,7 @@ static bool8 SetupContestGraphics(u8 *stateVar)
CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16)); CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16));
CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.cachedWindowPalettes, sizeof(eUnknownHeap1A004.cachedWindowPalettes)); DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, sizeof(eContestTempSave.cachedWindowPalettes));
LoadContestPalettes(); LoadContestPalettes();
break; break;
case 6: case 6:
@@ -1468,7 +1468,7 @@ static void Task_DisplayAppealNumberText(u8 taskId)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0; gBattle_BG2_Y = 0;
ContestDebugDoPrint(); ContestDebugDoPrint();
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2); DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
@@ -1667,8 +1667,8 @@ static void Task_HideMoveSelectScreen(u8 taskId)
} }
Contest_SetBgCopyFlags(0); Contest_SetBgCopyFlags(0);
// This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE. // This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE.
DmaCopy32Defvars(3, gPlttBufferFaded, eUnknownHeap1A004.unk18604, PLTT_BUFFER_SIZE * 2); DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_BUFFER_SIZE * 2);
LoadPalette(eUnknownHeap1A004.unk18204, 0, PLTT_BUFFER_SIZE * 2); LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0; gTasks[taskId].data[1] = 0;
gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; gTasks[taskId].func = Task_HideApplauseMeterForAppealStart;
@@ -2554,7 +2554,7 @@ static void Task_WaitForHeartSliders(u8 taskId)
static void sub_80DA348(u8 taskId) static void sub_80DA348(u8 taskId)
{ {
DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 2; gTasks[taskId].data[1] = 2;
gTasks[taskId].func = Task_WaitPrintRoundResult; gTasks[taskId].func = Task_WaitPrintRoundResult;
@@ -4412,7 +4412,7 @@ static void DrawContestantWindows(void)
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
s32 windowId = i + 5; s32 windowId = i + 5;
LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0])); LoadPalette(eContestTempSave.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eContestTempSave.cachedWindowPalettes[0]));
} }
DrawContestantWindowText(); DrawContestantWindowText();
} }
@@ -5516,40 +5516,46 @@ void ResetContestLinkResults(void)
gSaveBlock2Ptr->contestLinkResults[i][j] = 0; gSaveBlock2Ptr->contestLinkResults[i][j] = 0;
} }
bool8 sub_80DEDA8(u8 rank) bool8 SaveContestWinner(u8 rank)
{ {
s32 i; s32 i;
u8 r7 = Random() % 3; u8 captionId = Random() % NUM_PAINTING_CAPTIONS;
// Get the index of the winner among the contestants
for (i = 0; i < CONTESTANT_COUNT - 1; i++) for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
if (gContestFinalStandings[i] == 0) if (gContestFinalStandings[i] == 0)
break; break;
}
if (rank == 0xFF && i != gContestPlayerMonIndex) // Exit if attempting to save a Pokémon other than the player's to the museum
if (rank == CONTEST_SAVE_FOR_MUSEUM && i != gContestPlayerMonIndex)
return FALSE; return FALSE;
// Adjust the random painting caption depending on the category
switch (gSpecialVar_ContestCategory) switch (gSpecialVar_ContestCategory)
{ {
case CONTEST_CATEGORY_COOL: case CONTEST_CATEGORY_COOL:
r7 += 0; captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL;
break; break;
case CONTEST_CATEGORY_BEAUTY: case CONTEST_CATEGORY_BEAUTY:
r7 += 3; captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY;
break; break;
case CONTEST_CATEGORY_CUTE: case CONTEST_CATEGORY_CUTE:
r7 += 6; captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE;
break; break;
case CONTEST_CATEGORY_SMART: case CONTEST_CATEGORY_SMART:
r7 += 9; captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART;
break; break;
case CONTEST_CATEGORY_TOUGH: case CONTEST_CATEGORY_TOUGH:
r7 += 12; captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH;
break; break;
} }
if (rank != 0xFE)
{
u8 id = sub_80DEFA8(rank, 1);
if (rank != CONTEST_SAVE_FOR_ARTIST)
{
// Save winner in the saveblock
// Used to save any winner for the Contest Hall or the Museum
// but excludes the temporary save used by the artist
u8 id = GetContestWinnerSaveIdx(rank, TRUE);
gSaveBlock1Ptr->contestWinners[id].personality = gContestMons[i].personality; gSaveBlock1Ptr->contestWinners[id].personality = gContestMons[i].personality;
gSaveBlock1Ptr->contestWinners[id].species = gContestMons[i].species; gSaveBlock1Ptr->contestWinners[id].species = gContestMons[i].species;
gSaveBlock1Ptr->contestWinners[id].trainerId = gContestMons[i].otId; gSaveBlock1Ptr->contestWinners[id].trainerId = gContestMons[i].otId;
@@ -5560,24 +5566,29 @@ bool8 sub_80DEDA8(u8 rank)
else else
gSaveBlock1Ptr->contestWinners[id].contestRank = gSpecialVar_ContestRank; gSaveBlock1Ptr->contestWinners[id].contestRank = gSpecialVar_ContestRank;
if (rank != 0xFF) if (rank != CONTEST_SAVE_FOR_MUSEUM)
gSaveBlock1Ptr->contestWinners[id].contestCategory = gSpecialVar_ContestCategory; gSaveBlock1Ptr->contestWinners[id].contestCategory = gSpecialVar_ContestCategory;
else else
gSaveBlock1Ptr->contestWinners[id].contestCategory = r7; gSaveBlock1Ptr->contestWinners[id].contestCategory = captionId;
} }
else else
{ {
// Set the most recent winner so the artist can show the player their painting
gCurContestWinner.personality = gContestMons[i].personality; gCurContestWinner.personality = gContestMons[i].personality;
gCurContestWinner.trainerId = gContestMons[i].otId; gCurContestWinner.trainerId = gContestMons[i].otId;
gCurContestWinner.species = gContestMons[i].species; gCurContestWinner.species = gContestMons[i].species;
StringCopy(gCurContestWinner.monName, gContestMons[i].nickname); StringCopy(gCurContestWinner.monName, gContestMons[i].nickname);
StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName); StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName);
gCurContestWinner.contestCategory = r7; gCurContestWinner.contestCategory = captionId;
} }
return TRUE; return TRUE;
} }
u8 sub_80DEFA8(u8 rank, u8 b) // Rank is either a regular contest rank (for saving winners to show in the Contest Hall)
// Or one of two special IDs listed below (for saving winners to show in Museum, or from the artist)
// If just retrieving the index where the winner *would* go, shift is FALSE
// If actually preparing to insert the winner into the saveblock, shift is TRUE
u8 GetContestWinnerSaveIdx(u8 rank, bool8 shift)
{ {
s32 i; s32 i;
@@ -5587,13 +5598,15 @@ u8 sub_80DEFA8(u8 rank, u8 b)
case CONTEST_RANK_SUPER: case CONTEST_RANK_SUPER:
case CONTEST_RANK_HYPER: case CONTEST_RANK_HYPER:
case CONTEST_RANK_MASTER: case CONTEST_RANK_MASTER:
if (b != 0) if (shift)
{ {
for (i = NUM_CONTEST_HALL_WINNERS - 1; i >= 1; i--) for (i = NUM_CONTEST_HALL_WINNERS - 1; i > 0; i--)
memcpy(&gSaveBlock1Ptr->contestWinners[i], &gSaveBlock1Ptr->contestWinners[i - 1], sizeof(struct ContestWinner)); memcpy(&gSaveBlock1Ptr->contestWinners[i], &gSaveBlock1Ptr->contestWinners[i - 1], sizeof(struct ContestWinner));
} }
return 0; return CONTEST_WINNER_HALL_1 - 1;
default: default:
// case CONTEST_SAVE_FOR_MUSEUM:
// case CONTEST_SAVE_FOR_ARTIST:
switch (gSpecialVar_ContestCategory) switch (gSpecialVar_ContestCategory)
{ {
case CONTEST_CATEGORY_COOL: case CONTEST_CATEGORY_COOL:
@@ -5615,7 +5628,7 @@ void ClearContestWinnerPicsInContestHall(void)
{ {
s32 i; s32 i;
for (i = 0; i < 8; i++) for (i = 0; i < MUSEUM_CONTEST_WINNERS_START; i++)
gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i]; gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i];
} }
+130 -125
View File
@@ -21,18 +21,16 @@
#include "window.h" #include "window.h"
#include "constants/rgb.h" #include "constants/rgb.h"
// IWRAM common
u16 (*gContestMonPixels)[][32]; u16 (*gContestMonPixels)[][32];
struct ImageProcessingContext gImageProcessingContext; struct ImageProcessingContext gImageProcessingContext;
struct ContestWinner *gContestPaintingWinner; struct ContestWinner *gContestPaintingWinner;
u16 *gContestPaintingMonPalette; u16 *gContestPaintingMonPalette;
// IWRAM bss static u8 sHoldState;
static u8 gContestPaintingState; static u16 sMosaicVal;
static u16 gContestPaintingMosaicVal; static u16 sFadeCounter;
static u16 gContestPaintingFadeCounter; static bool8 sVarsInitialized;
static bool8 gUnknown_030011F6; static u8 sWindowId;
static u8 gContestPaintingWindowId;
static void ShowContestPainting(void); static void ShowContestPainting(void);
static void HoldContestPainting(void); static void HoldContestPainting(void);
@@ -44,7 +42,7 @@ static void PrintContestPaintingCaption(u8, u8);
static void VBlankCB_ContestPainting(void); static void VBlankCB_ContestPainting(void);
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]); static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]);
extern const u8 gContestPaintingCaption[]; extern const u8 gContestHallPaintingCaption[];
extern const u8 gContestCoolness[]; extern const u8 gContestCoolness[];
extern const u8 gContestBeauty[]; extern const u8 gContestBeauty[];
extern const u8 gContestCuteness[]; extern const u8 gContestCuteness[];
@@ -71,39 +69,39 @@ extern const u8 gContestPaintingTough1[];
extern const u8 gContestPaintingTough2[]; extern const u8 gContestPaintingTough2[];
extern const u8 gContestPaintingTough3[]; extern const u8 gContestPaintingTough3[];
const u16 gPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal"); static const u16 sPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal");
const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl"); static const u8 sPictureFrameTiles_Cool[] = INCBIN_U8("graphics/picture_frame/cool.4bpp.rl");
const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl"); static const u8 sPictureFrameTiles_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty.4bpp.rl");
const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl"); static const u8 sPictureFrameTiles_Cute[] = INCBIN_U8("graphics/picture_frame/cute.4bpp.rl");
const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl"); static const u8 sPictureFrameTiles_Smart[] = INCBIN_U8("graphics/picture_frame/smart.4bpp.rl");
const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl"); static const u8 sPictureFrameTiles_Tough[] = INCBIN_U8("graphics/picture_frame/tough.4bpp.rl");
const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl"); static const u8 sPictureFrameTiles_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby.4bpp.rl");
const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl"); static const u8 sPictureFrameTilemap_Cool[] = INCBIN_U8("graphics/picture_frame/cool_map.bin.rl");
const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl"); static const u8 sPictureFrameTilemap_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty_map.bin.rl");
const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl"); static const u8 sPictureFrameTilemap_Cute[] = INCBIN_U8("graphics/picture_frame/cute_map.bin.rl");
const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl"); static const u8 sPictureFrameTilemap_Smart[] = INCBIN_U8("graphics/picture_frame/smart_map.bin.rl");
const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl"); static const u8 sPictureFrameTilemap_Tough[] = INCBIN_U8("graphics/picture_frame/tough_map.bin.rl");
const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl"); static const u8 sPictureFrameTilemap_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby_map.bin.rl");
static const u8 *const sContestCategoryNames_Unused[] = static const u8 *const sContestCategoryNames_Unused[] =
{ {
gContestCoolness, [CONTEST_CATEGORY_COOL] = gContestCoolness,
gContestBeauty, [CONTEST_CATEGORY_BEAUTY] = gContestBeauty,
gContestCuteness, [CONTEST_CATEGORY_CUTE] = gContestCuteness,
gContestSmartness, [CONTEST_CATEGORY_SMART] = gContestSmartness,
gContestToughness, [CONTEST_CATEGORY_TOUGH] = gContestToughness,
}; };
static const u8 *const sContestRankNames[] = static const u8 *const sContestRankNames[] =
{ {
gContestRankNormal, [CONTEST_RANK_NORMAL] = gContestRankNormal,
gContestRankSuper, [CONTEST_RANK_SUPER] = gContestRankSuper,
gContestRankHyper, [CONTEST_RANK_HYPER] = gContestRankHyper,
gContestRankMaster, [CONTEST_RANK_MASTER] = gContestRankMaster,
gContestLink, [CONTEST_RANK_LINK] = gContestLink,
}; };
static const struct BgTemplate sContestPaintingBgTemplates[] = static const struct BgTemplate sBgTemplates[] =
{ {
{ {
.bg = 1, .bg = 1,
@@ -116,7 +114,7 @@ static const struct BgTemplate sContestPaintingBgTemplates[] =
}, },
}; };
static const struct WindowTemplate sContestPaintingWindowTemplate = static const struct WindowTemplate sWindowTemplate =
{ {
.bg = 1, .bg = 1,
.tilemapLeft = 2, .tilemapLeft = 2,
@@ -127,23 +125,23 @@ static const struct WindowTemplate sContestPaintingWindowTemplate =
.baseBlock = 1, .baseBlock = 1,
}; };
static const u8 *const sContestPaintingDescriptionPointers[] = static const u8 *const sMuseumCaptions[NUM_PAINTING_CAPTIONS * CONTEST_CATEGORIES_COUNT] =
{ {
gContestPaintingCool1, [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool1,
gContestPaintingCool2, [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool2,
gContestPaintingCool3, [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool3,
gContestPaintingBeauty1, [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty1,
gContestPaintingBeauty2, [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty2,
gContestPaintingBeauty3, [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty3,
gContestPaintingCute1, [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute1,
gContestPaintingCute2, [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute2,
gContestPaintingCute3, [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute3,
gContestPaintingSmart1, [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart1,
gContestPaintingSmart2, [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart2,
gContestPaintingSmart3, [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart3,
gContestPaintingTough1, [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough1,
gContestPaintingTough2, [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough2,
gContestPaintingTough3, [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough3,
}; };
static const struct OamData sContestPaintingMonOamData = static const struct OamData sContestPaintingMonOamData =
@@ -161,15 +159,15 @@ static const struct OamData sContestPaintingMonOamData =
.paletteNum = 0, .paletteNum = 0,
}; };
const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)}; static const u16 sBgPalette[] = {RGB_BLACK, RGB_BLACK};
void SetContestWinnerForPainting(int contestWinnerId) void SetContestWinnerForPainting(int contestWinnerId)
{ {
u8 *ptr1 = &gUnknown_02039F5D; u8 *saveIdx = &gCurContestWinnerSaveIdx;
u8 *ptr2 = &gUnknown_02039F5C; u8 *isForArtist = &gCurContestWinnerIsForArtist;
gCurContestWinner = gSaveBlock1Ptr->contestWinners[contestWinnerId - 1]; gCurContestWinner = gSaveBlock1Ptr->contestWinners[contestWinnerId - 1];
*ptr1 = contestWinnerId - 1; *saveIdx = contestWinnerId - 1;
*ptr2 = FALSE; *isForArtist = FALSE;
} }
void CB2_ContestPainting(void) void CB2_ContestPainting(void)
@@ -189,7 +187,7 @@ static void CB2_QuitContestPainting(void)
SetMainCallback2(gMain.savedCallback); SetMainCallback2(gMain.savedCallback);
FREE_AND_SET_NULL(gContestPaintingMonPalette); FREE_AND_SET_NULL(gContestPaintingMonPalette);
FREE_AND_SET_NULL(gContestMonPixels); FREE_AND_SET_NULL(gContestMonPixels);
RemoveWindow(gContestPaintingWindowId); RemoveWindow(sWindowId);
Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(1));
FreeMonSpritesGfx(); FreeMonSpritesGfx();
} }
@@ -203,13 +201,13 @@ static void ShowContestPainting(void)
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
AllocateMonSpritesGfx(); AllocateMonSpritesGfx();
gContestPaintingWinner = &gCurContestWinner; gContestPaintingWinner = &gCurContestWinner;
InitContestPaintingVars(1); InitContestPaintingVars(TRUE);
InitContestPaintingBg(); InitContestPaintingBg();
gMain.state++; gMain.state++;
break; break;
case 1: case 1:
ResetPaletteFade(); ResetPaletteFade();
DmaFillLarge32(3, 0, (void *)BG_VRAM, 0x18000, 0x1000); DmaFillLarge32(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
ResetSpriteData(); ResetSpriteData();
gMain.state++; gMain.state++;
break; break;
@@ -220,16 +218,16 @@ static void ShowContestPainting(void)
gMain.state++; gMain.state++;
break; break;
case 3: case 3:
CreateContestPaintingPicture(gUnknown_02039F5D, gUnknown_02039F5C); CreateContestPaintingPicture(gCurContestWinnerSaveIdx, gCurContestWinnerIsForArtist);
gMain.state++; gMain.state++;
break; break;
case 4: case 4:
PrintContestPaintingCaption(gUnknown_02039F5D, gUnknown_02039F5C); PrintContestPaintingCaption(gCurContestWinnerSaveIdx, gCurContestWinnerIsForArtist);
LoadPalette(gUnknown_085B0838, 0, 1 * 2); LoadPalette(sBgPalette, 0, 1 * 2);
DmaClear32(3, PLTT, PLTT_SIZE); DmaClear32(3, PLTT, PLTT_SIZE);
BeginFastPaletteFade(2); BeginFastPaletteFade(2);
SetVBlankCallback(VBlankCB_ContestPainting); SetVBlankCallback(VBlankCB_ContestPainting);
gContestPaintingState = 0; sHoldState = 0;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
SetMainCallback2(CB2_HoldContestPainting); SetMainCallback2(CB2_HoldContestPainting);
break; break;
@@ -238,29 +236,29 @@ static void ShowContestPainting(void)
static void HoldContestPainting(void) static void HoldContestPainting(void)
{ {
switch (gContestPaintingState) switch (sHoldState)
{ {
case 0: case 0:
if (!gPaletteFade.active) if (!gPaletteFade.active)
gContestPaintingState = 1; sHoldState = 1;
if (gUnknown_030011F6 && gContestPaintingFadeCounter) if (sVarsInitialized && sFadeCounter)
gContestPaintingFadeCounter--; sFadeCounter--;
break; break;
case 1: case 1:
if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))
{ {
gContestPaintingState++; sHoldState++;
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0));
} }
if (gUnknown_030011F6) if (sVarsInitialized)
gContestPaintingFadeCounter = 0; sFadeCounter = 0;
break; break;
case 2: case 2:
if (!gPaletteFade.active) if (!gPaletteFade.active)
SetMainCallback2(CB2_QuitContestPainting); SetMainCallback2(CB2_QuitContestPainting);
if (gUnknown_030011F6 && gContestPaintingFadeCounter < 30) if (sVarsInitialized && sFadeCounter < 30)
gContestPaintingFadeCounter++; sFadeCounter++;
break; break;
} }
} }
@@ -268,45 +266,48 @@ static void HoldContestPainting(void)
static void InitContestPaintingWindow(void) static void InitContestPaintingWindow(void)
{ {
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sContestPaintingBgTemplates, ARRAY_COUNT(sContestPaintingBgTemplates)); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
ChangeBgX(1, 0, 0); ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0); ChangeBgY(1, 0, 0);
SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
gContestPaintingWindowId = AddWindow(&sContestPaintingWindowTemplate); sWindowId = AddWindow(&sWindowTemplate);
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
FillWindowPixelBuffer(gContestPaintingWindowId, PIXEL_FILL(0)); FillWindowPixelBuffer(sWindowId, PIXEL_FILL(0));
PutWindowTilemap(gContestPaintingWindowId); PutWindowTilemap(sWindowId);
CopyWindowToVram(gContestPaintingWindowId, 3); CopyWindowToVram(sWindowId, 3);
ShowBg(1); ShowBg(1);
} }
static void PrintContestPaintingCaption(u8 contestType, bool8 arg1) static void PrintContestPaintingCaption(u8 contestType, bool8 isForArtist)
{ {
int x; int x;
u8 category; u8 category;
if (arg1 == TRUE) // Artist's painting has no caption
if (isForArtist == TRUE)
return; return;
category = gContestPaintingWinner->contestCategory; category = gContestPaintingWinner->contestCategory;
if (contestType < 8) if (contestType < MUSEUM_CONTEST_WINNERS_START)
{ {
// Contest Hall caption
BufferContestName(gStringVar1, category); BufferContestName(gStringVar1, category);
StringAppend(gStringVar1, gText_Space); StringAppend(gStringVar1, gText_Space);
StringAppend(gStringVar1, sContestRankNames[gContestPaintingWinner->contestRank]); StringAppend(gStringVar1, sContestRankNames[gContestPaintingWinner->contestRank]);
StringCopy(gStringVar2, gContestPaintingWinner->trainerName); StringCopy(gStringVar2, gContestPaintingWinner->trainerName);
sub_81DB5AC(gStringVar2); ConvertInternationalContestantName(gStringVar2);
StringCopy(gStringVar3, gContestPaintingWinner->monName); StringCopy(gStringVar3, gContestPaintingWinner->monName);
StringExpandPlaceholders(gStringVar4, gContestPaintingCaption); StringExpandPlaceholders(gStringVar4, gContestHallPaintingCaption);
} }
else else
{ {
// Museum caption
StringCopy(gStringVar1, gContestPaintingWinner->monName); StringCopy(gStringVar1, gContestPaintingWinner->monName);
StringExpandPlaceholders(gStringVar4, sContestPaintingDescriptionPointers[category]); StringExpandPlaceholders(gStringVar4, sMuseumCaptions[category]);
} }
x = GetStringCenterAlignXOffset(1, gStringVar4, 208); x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
AddTextPrinterParameterized(gContestPaintingWindowId, 1, gStringVar4, x, 1, 0, 0); AddTextPrinterParameterized(sWindowId, 1, gStringVar4, x, 1, 0, 0);
CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(1);
} }
@@ -321,33 +322,34 @@ static void InitContestPaintingBg(void)
SetGpuReg(REG_OFFSET_BLDY, 0); SetGpuReg(REG_OFFSET_BLDY, 0);
} }
static void InitContestPaintingVars(bool8 arg0) static void InitContestPaintingVars(bool8 reset)
{ {
if (arg0 == FALSE) if (reset == FALSE)
{ {
gUnknown_030011F6 = FALSE; // Never reached
gContestPaintingMosaicVal = 0; sVarsInitialized = FALSE;
gContestPaintingFadeCounter = 0; sMosaicVal = 0;
sFadeCounter = 0;
} }
else else
{ {
gUnknown_030011F6 = TRUE; sVarsInitialized = TRUE;
gContestPaintingMosaicVal = 15; sMosaicVal = 15;
gContestPaintingFadeCounter = 30; sFadeCounter = 30;
} }
} }
static void UpdateContestPaintingMosaicEffect(void) static void UpdateContestPaintingMosaicEffect(void)
{ {
if (!gUnknown_030011F6) if (!sVarsInitialized)
{ {
SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_MOSAIC, 0);
} }
else else
{ {
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
gContestPaintingMosaicVal = gContestPaintingFadeCounter / 2; sMosaicVal = sFadeCounter / 2;
SetGpuReg(REG_OFFSET_MOSAIC, (gContestPaintingMosaicVal << 12) | (gContestPaintingMosaicVal << 8) | (gContestPaintingMosaicVal << 4) | (gContestPaintingMosaicVal << 0)); SetGpuReg(REG_OFFSET_MOSAIC, (sMosaicVal << 12) | (sMosaicVal << 8) | (sMosaicVal << 4) | (sMosaicVal << 0));
} }
} }
@@ -414,34 +416,35 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)
#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)]) #define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])
static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1) static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 isForArtist)
{ {
u8 x, y; u8 x, y;
LoadPalette(gPictureFramePalettes, 0, 0x100); LoadPalette(sPictureFramePalettes, 0, 0x100);
if (arg1 == TRUE) if (isForArtist == TRUE)
{ {
switch (gContestPaintingWinner->contestCategory / 3) // Load Artist's frame
switch (gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS)
{ {
case CONTEST_CATEGORY_COOL: case CONTEST_CATEGORY_COOL:
RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Cool, (void *)VRAM);
RLUnCompWram(gPictureFrameTilemap_0, gContestMonPixels); RLUnCompWram(sPictureFrameTilemap_Cool, gContestMonPixels);
break; break;
case CONTEST_CATEGORY_BEAUTY: case CONTEST_CATEGORY_BEAUTY:
RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Beauty, (void *)VRAM);
RLUnCompWram(gPictureFrameTilemap_1, gContestMonPixels); RLUnCompWram(sPictureFrameTilemap_Beauty, gContestMonPixels);
break; break;
case CONTEST_CATEGORY_CUTE: case CONTEST_CATEGORY_CUTE:
RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Cute, (void *)VRAM);
RLUnCompWram(gPictureFrameTilemap_2, gContestMonPixels); RLUnCompWram(sPictureFrameTilemap_Cute, gContestMonPixels);
break; break;
case CONTEST_CATEGORY_SMART: case CONTEST_CATEGORY_SMART:
RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Smart, (void *)VRAM);
RLUnCompWram(gPictureFrameTilemap_3, gContestMonPixels); RLUnCompWram(sPictureFrameTilemap_Smart, gContestMonPixels);
break; break;
case CONTEST_CATEGORY_TOUGH: case CONTEST_CATEGORY_TOUGH:
RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Tough, (void *)VRAM);
RLUnCompWram(gPictureFrameTilemap_4, gContestMonPixels); RLUnCompWram(sPictureFrameTilemap_Tough, gContestMonPixels);
break; break;
} }
@@ -463,34 +466,36 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1)
for (x = 0; x < 16; x++) for (x = 0; x < 16; x++)
VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7]; VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7];
} }
else if (contestWinnerId < 8) else if (contestWinnerId < MUSEUM_CONTEST_WINNERS_START)
{ {
RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM); // Load Contest Hall lobby frame
RLUnCompVram(gPictureFrameTilemap_5, (void *)(BG_SCREEN_ADDR(12))); RLUnCompVram(sPictureFrameTiles_HallLobby, (void *)VRAM);
RLUnCompVram(sPictureFrameTilemap_HallLobby, (void *)(BG_SCREEN_ADDR(12)));
} }
else else
{ {
switch (gContestPaintingWinner->contestCategory / 3) // Load Museum frame
switch (gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS)
{ {
case CONTEST_CATEGORY_COOL: case CONTEST_CATEGORY_COOL:
RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Cool, (void *)VRAM);
RLUnCompVram(gPictureFrameTilemap_0, (void *)(BG_SCREEN_ADDR(12))); RLUnCompVram(sPictureFrameTilemap_Cool, (void *)(BG_SCREEN_ADDR(12)));
break; break;
case CONTEST_CATEGORY_BEAUTY: case CONTEST_CATEGORY_BEAUTY:
RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Beauty, (void *)VRAM);
RLUnCompVram(gPictureFrameTilemap_1, (void *)(BG_SCREEN_ADDR(12))); RLUnCompVram(sPictureFrameTilemap_Beauty, (void *)(BG_SCREEN_ADDR(12)));
break; break;
case CONTEST_CATEGORY_CUTE: case CONTEST_CATEGORY_CUTE:
RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Cute, (void *)VRAM);
RLUnCompVram(gPictureFrameTilemap_2, (void *)(BG_SCREEN_ADDR(12))); RLUnCompVram(sPictureFrameTilemap_Cute, (void *)(BG_SCREEN_ADDR(12)));
break; break;
case CONTEST_CATEGORY_SMART: case CONTEST_CATEGORY_SMART:
RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Smart, (void *)VRAM);
RLUnCompVram(gPictureFrameTilemap_3, (void *)(BG_SCREEN_ADDR(12))); RLUnCompVram(sPictureFrameTilemap_Smart, (void *)(BG_SCREEN_ADDR(12)));
break; break;
case CONTEST_CATEGORY_TOUGH: case CONTEST_CATEGORY_TOUGH:
RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); RLUnCompVram(sPictureFrameTiles_Tough, (void *)VRAM);
RLUnCompVram(gPictureFrameTilemap_4, (void *)(BG_SCREEN_ADDR(12))); RLUnCompVram(sPictureFrameTilemap_Tough, (void *)(BG_SCREEN_ADDR(12)));
break; break;
} }
} }
@@ -519,10 +524,10 @@ static u8 GetImageEffectForContestWinner(u8 contestWinnerId)
{ {
u8 contestCategory; u8 contestCategory;
if (contestWinnerId < 8) if (contestWinnerId < MUSEUM_CONTEST_WINNERS_START)
contestCategory = gContestPaintingWinner->contestCategory; contestCategory = gContestPaintingWinner->contestCategory;
else else
contestCategory = gContestPaintingWinner->contestCategory / 3; contestCategory = gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS;
switch (contestCategory) switch (contestCategory)
{ {
@@ -584,12 +589,12 @@ static void DoContestPaintingImageProcessing(u8 imageEffect)
LoadPalette(gContestPaintingMonPalette, 0x100, 0x200); LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
} }
static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 arg1) static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist)
{ {
AllocPaintingResources(); AllocPaintingResources();
InitContestMonPixels(gContestPaintingWinner->species, 0); InitContestMonPixels(gContestPaintingWinner->species, 0);
DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId)); DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId));
InitPaintingMonOamData(contestWinnerId); InitPaintingMonOamData(contestWinnerId);
LoadContestPaintingFrame(contestWinnerId, arg1); LoadContestPaintingFrame(contestWinnerId, isForArtist);
} }
+167 -132
View File
@@ -61,10 +61,29 @@ enum {
#define GET_CONTEST_WINNER_ID(i) { for ((i) = 0; (i) < CONTESTANT_COUNT && gContestFinalStandings[(i)] != 0; (i)++); } #define GET_CONTEST_WINNER_ID(i) { for ((i) = 0; (i) < CONTESTANT_COUNT && gContestFinalStandings[(i)] != 0; (i)++); }
// Gfx/pal tags for the text window sprites on the contest results screen.
// Both types of text windows are made up of 4 individual sprites
// These tags are used by the spritesheets, and implicitly in the loop in CreateResultsTextWindowSprites
#define TAG_TEXT_WINDOW_BASE 3009
enum {
TAG_RESULTS_TEXT_WINDOW_LEFT = TAG_TEXT_WINDOW_BASE,
TAG_RESULTS_TEXT_WINDOW_MIDLEFT,
TAG_RESULTS_TEXT_WINDOW_MIDRIGHT,
TAG_RESULTS_TEXT_WINDOW_RIGHT,
TAG_LINK_TEXT_WINDOW_LEFT,
TAG_LINK_TEXT_WINDOW_MIDLEFT,
TAG_LINK_TEXT_WINDOW_MIDRIGHT,
TAG_LINK_TEXT_WINDOW_RIGHT, // 3016
};
#define TAG_CONFETTI 3017 #define TAG_CONFETTI 3017
#define TAG_WIRELESS_INDICATOR_WINDOW 22222
#define MAX_BAR_LENGTH 87 #define MAX_BAR_LENGTH 87
// Starting x/y for the sliding results screen text box
#define TEXT_BOX_X (DISPLAY_WIDTH + 32)
#define TEXT_BOX_Y (DISPLAY_HEIGHT - 16)
struct ContestResultsInternal struct ContestResultsInternal
{ {
u8 slidingTextBoxSpriteId; u8 slidingTextBoxSpriteId;
@@ -105,14 +124,14 @@ struct ContestResults
static EWRAM_DATA struct ContestResults *sContestResults = NULL; static EWRAM_DATA struct ContestResults *sContestResults = NULL;
static void LoadAllContestMonIconPalettes(void); static void LoadAllContestMonIconPalettes(void);
static void LoadContestResultsTilemaps(void); static void LoadContestResultsTitleBarTilemaps(void);
static u8 GetNumPreliminaryPoints(u8, bool8); static u8 GetNumPreliminaryPoints(u8, bool8);
static s8 GetNumRound2Points(u8, bool8); static s8 GetNumRound2Points(u8, bool8);
static void AddContestTextPrinter(int, u8 *, int); static void AddContestTextPrinter(int, u8 *, int);
static void AllocContestResults(void); static void AllocContestResults(void);
static void FreeContestResults(void); static void FreeContestResults(void);
static void LoadAllContestMonIcons(u8, u8); static void LoadAllContestMonIcons(u8, u8);
static void LoadContestResultSprites(void); static void CreateResultsTextWindowSprites(void);
static void TryCreateWirelessSprites(void); static void TryCreateWirelessSprites(void);
static void Task_StartShowContestResults(u8 taskId); static void Task_StartShowContestResults(u8 taskId);
static void CB2_StartShowContestResults(void); static void CB2_StartShowContestResults(void);
@@ -166,11 +185,11 @@ static void SpriteCB_Confetti(struct Sprite *sprite);
static void Task_ShowContestEntryMonPic(u8 taskId); static void Task_ShowContestEntryMonPic(u8 taskId);
static void Task_LinkContestWaitForConnection(u8 taskId); static void Task_LinkContestWaitForConnection(u8 taskId);
static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal"); static const u16 sResultsTextWindow_Pal[] = INCBIN_U16("graphics/contest/results_screen/text_window.gbapal");
static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp"); static const u8 sResultsTextWindow_Gfx[] = INCBIN_U8("graphics/contest/results_screen/text_window.4bpp");
static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal"); static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
static const struct OamData sOamData_858D7F0 = static const struct OamData sOamData_ResultsTextWindow =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@@ -187,33 +206,33 @@ static const struct OamData sOamData_858D7F0 =
.affineParam = 0, .affineParam = 0,
}; };
static const struct SpriteTemplate sSpriteTemplate_858D7F8 = static const struct SpriteTemplate sSpriteTemplate_ResultsTextWindow =
{ {
.tileTag = 3009, .tileTag = TAG_TEXT_WINDOW_BASE,
.paletteTag = 3009, .paletteTag = TAG_TEXT_WINDOW_BASE,
.oam = &sOamData_858D7F0, .oam = &sOamData_ResultsTextWindow,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy .callback = SpriteCallbackDummy
}; };
static const struct SpriteSheet sUnknown_0858D810[] = static const struct SpriteSheet sSpriteSheets_ResultsTextWindow[] =
{ {
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3009 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_LEFT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3010 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_MIDLEFT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3011 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_MIDRIGHT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3012 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_RIGHT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3013 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_LEFT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3014 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_MIDLEFT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3015 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_MIDRIGHT },
{ .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3016 }, { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_RIGHT },
}; };
static const struct SpritePalette sUnknown_0858D850 = static const struct SpritePalette sSpritePalette_ResultsTextWindow =
{ {
.data = sMiscBlank_Pal, .data = sMiscBlank_Pal,
.tag = 3009, .tag = TAG_TEXT_WINDOW_BASE,
}; };
static const struct OamData sOamData_Confetti = static const struct OamData sOamData_Confetti =
@@ -339,7 +358,7 @@ static const struct WindowTemplate sWindowTemplates[] =
DUMMY_WIN_TEMPLATE, DUMMY_WIN_TEMPLATE,
}; };
static const struct OamData sUnknown_0858D8C0 = static const struct OamData sOamData_WirelessIndicatorWindow =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@@ -357,22 +376,22 @@ static const struct OamData sUnknown_0858D8C0 =
}; };
static const struct SpriteTemplate sSpriteTemplate_858D8C8 = static const struct SpriteTemplate sSpriteTemplate_WirelessIndicatorWindow =
{ {
.tileTag = 22222, .tileTag = TAG_WIRELESS_INDICATOR_WINDOW,
.paletteTag = 0, .paletteTag = 0,
.oam = &sUnknown_0858D8C0, .oam = &sOamData_WirelessIndicatorWindow,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy .callback = SpriteCallbackDummy
}; };
static const struct SpriteSheet sUnknown_0858D8E0 = static const struct SpriteSheet sSpriteSheet_WirelessIndicatorWindow =
{ {
.data = gMiscBlank_Gfx, .data = gMiscBlank_Gfx,
.size = 0x200, .size = 0x200,
.tag = 22222 .tag = TAG_WIRELESS_INDICATOR_WINDOW
}; };
static const u8 sContestLinkTextColors[4] = {TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5}; static const u8 sContestLinkTextColors[4] = {TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
@@ -430,12 +449,12 @@ static void LoadContestResultsBgGfx(void)
u16 tile1, tile2; u16 tile1, tile2;
LZDecompressVram(gContestResults_Gfx, (void *)BG_CHAR_ADDR(0)); LZDecompressVram(gContestResults_Gfx, (void *)BG_CHAR_ADDR(0));
CopyToBgTilemapBuffer(3, gUnknown_08C1A12C, 0, 0); CopyToBgTilemapBuffer(3, gContestResults_Bg_Tilemap, 0, 0);
CopyToBgTilemapBuffer(2, gUnknown_08C1A000, 0, 0); CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0);
CopyToBgTilemapBuffer(0, gUnknown_08C19EEC, 0, 0); CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0);
LoadContestResultsTilemaps(); LoadContestResultsTitleBarTilemaps();
LoadCompressedPalette(gContestResults_Pal, 0, 0x200); LoadCompressedPalette(gContestResults_Pal, 0, 0x200);
LoadPalette(sUnknown_0858D6B0, 0xF0, 0x20); LoadPalette(sResultsTextWindow_Pal, 0xF0, sizeof(sResultsTextWindow_Pal));
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
@@ -515,14 +534,14 @@ static void CB2_StartShowContestResults(void)
LoadAllContestMonNames(); LoadAllContestMonNames();
memset(sContestResults->data, 0, sizeof(*sContestResults->data)); memset(sContestResults->data, 0, sizeof(*sContestResults->data));
memset(sContestResults->monResults, 0, sizeof(*sContestResults->monResults)); memset(sContestResults->monResults, 0, sizeof(*sContestResults->monResults));
LoadContestResultSprites(); CreateResultsTextWindowSprites();
TryCreateWirelessSprites(); TryCreateWirelessSprites();
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
gPaletteFade.bufferTransferDisabled = FALSE; gPaletteFade.bufferTransferDisabled = FALSE;
sContestResults->data->showResultsTaskId = CreateTask(Task_ShowContestResults, 5); sContestResults->data->showResultsTaskId = CreateTask(Task_ShowContestResults, 5);
SetMainCallback2(CB2_ShowContestResults); SetMainCallback2(CB2_ShowContestResults);
gBattle_WIN1H = WIN_RANGE(0, DISPLAY_WIDTH); gBattle_WIN1H = WIN_RANGE(0, DISPLAY_WIDTH);
gBattle_WIN1V = WIN_RANGE(128, DISPLAY_HEIGHT); gBattle_WIN1V = WIN_RANGE(DISPLAY_HEIGHT - 32, DISPLAY_HEIGHT);
CreateTask(Task_SlideContestResultsBg, 20); CreateTask(Task_SlideContestResultsBg, 20);
CalculateContestantsResultData(); CalculateContestantsResultData();
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
@@ -587,10 +606,10 @@ static void Task_ShowContestResults(u8 taskId)
} }
TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST); TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST);
sub_80DEDA8(gSpecialVar_ContestRank); SaveContestWinner(gSpecialVar_ContestRank); // Save for lobby painting
sub_80DEDA8(0xFE); SaveContestWinner(CONTEST_SAVE_FOR_ARTIST);
gUnknown_02039F5C = TRUE; gCurContestWinnerIsForArtist = TRUE;
gUnknown_02039F5D = sub_80DEFA8(0xFE, 0); gCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(CONTEST_SAVE_FOR_ARTIST, FALSE);
var = VarGet(VAR_CONTEST_HALL_STATE); var = VarGet(VAR_CONTEST_HALL_STATE);
VarSet(VAR_CONTEST_HALL_STATE, 0); VarSet(VAR_CONTEST_HALL_STATE, 0);
SetContinueGameWarpStatusToDynamicWarp(); SetContinueGameWarpStatusToDynamicWarp();
@@ -637,10 +656,10 @@ static void Task_ShowContestResults(u8 taskId)
if (gContestFinalStandings[gContestPlayerMonIndex] == 0) if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
IncrementGameStat(GAME_STAT_WON_CONTEST); IncrementGameStat(GAME_STAT_WON_CONTEST);
sub_80DEDA8(gSpecialVar_ContestRank); SaveContestWinner(gSpecialVar_ContestRank); // Save for lobby painting
sub_80DEDA8(0xFE); SaveContestWinner(CONTEST_SAVE_FOR_ARTIST);
gUnknown_02039F5C = TRUE; gCurContestWinnerIsForArtist = TRUE;
gUnknown_02039F5D = sub_80DEFA8(0xFE, 0); gCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(CONTEST_SAVE_FOR_ARTIST, FALSE);
TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST); TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST);
gTasks[taskId].func = Task_AnnouncePreliminaryResults; gTasks[taskId].func = Task_AnnouncePreliminaryResults;
} }
@@ -679,7 +698,7 @@ static void Task_AnnouncePreliminaryResults(u8 taskId)
{ {
CreateTask(Task_FlashStarsAndHearts, 20); CreateTask(Task_FlashStarsAndHearts, 20);
x = DrawResultsTextWindow(gText_AnnouncingResults, sContestResults->data->slidingTextBoxSpriteId); x = DrawResultsTextWindow(gText_AnnouncingResults, sContestResults->data->slidingTextBoxSpriteId);
StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, 120, 1088); StartTextBoxSlideIn(x, TEXT_BOX_Y, 120, 1088);
gTasks[taskId].tState++; gTasks[taskId].tState++;
} }
else if (gTasks[taskId].tState == 1) else if (gTasks[taskId].tState == 1)
@@ -702,7 +721,7 @@ static void Task_AnnouncePreliminaryResults(u8 taskId)
else if (gTasks[taskId].tState == 3) else if (gTasks[taskId].tState == 3)
{ {
x = DrawResultsTextWindow(gText_PreliminaryResults, sContestResults->data->slidingTextBoxSpriteId); x = DrawResultsTextWindow(gText_PreliminaryResults, sContestResults->data->slidingTextBoxSpriteId);
StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, -1, 1088); StartTextBoxSlideIn(x, TEXT_BOX_Y, -1, 1088);
gTasks[taskId].tState++; gTasks[taskId].tState++;
} }
else if (gTasks[taskId].tState == 4) else if (gTasks[taskId].tState == 4)
@@ -752,7 +771,7 @@ static void Task_AnnounceRound2Results(u8 taskId)
{ {
gTasks[taskId].tTimer = 0; gTasks[taskId].tTimer = 0;
x = DrawResultsTextWindow(gText_Round2Results, sContestResults->data->slidingTextBoxSpriteId); x = DrawResultsTextWindow(gText_Round2Results, sContestResults->data->slidingTextBoxSpriteId);
StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, -1, 1088); StartTextBoxSlideIn(x, TEXT_BOX_Y, -1, 1088);
} }
} }
else if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_ARRIVED) else if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_ARRIVED)
@@ -837,11 +856,11 @@ static void Task_AnnounceWinner(u8 taskId)
gTasks[taskId].tTimer = 0; gTasks[taskId].tTimer = 0;
GET_CONTEST_WINNER_ID(i); GET_CONTEST_WINNER_ID(i);
StringCopy(gStringVar1, gContestMons[i].trainerName); StringCopy(gStringVar1, gContestMons[i].trainerName);
sub_81DB5AC(gStringVar1); ConvertInternationalContestantName(gStringVar1);
StringCopy(gStringVar2, gContestMons[i].nickname); StringCopy(gStringVar2, gContestMons[i].nickname);
StringExpandPlaceholders(winnerTextBuffer, gText_ContestantsMonWon); StringExpandPlaceholders(winnerTextBuffer, gText_ContestantsMonWon);
x = DrawResultsTextWindow(winnerTextBuffer, sContestResults->data->slidingTextBoxSpriteId); x = DrawResultsTextWindow(winnerTextBuffer, sContestResults->data->slidingTextBoxSpriteId);
StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, -1, 1088); StartTextBoxSlideIn(x, TEXT_BOX_Y, -1, 1088);
gTasks[taskId].tState++; gTasks[taskId].tState++;
} }
break; break;
@@ -892,7 +911,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId)
LoadCompressedSpritePalette(pokePal); LoadCompressedSpritePalette(pokePal);
SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT); SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT);
gMultiuseSpriteTemplate.paletteTag = pokePal->tag; gMultiuseSpriteTemplate.paletteTag = pokePal->tag;
spriteId = CreateSprite(&gMultiuseSpriteTemplate, DISPLAY_WIDTH + 32, 80, 10); spriteId = CreateSprite(&gMultiuseSpriteTemplate, DISPLAY_WIDTH + 32, DISPLAY_HEIGHT / 2, 10);
gSprites[spriteId].data[1] = species; gSprites[spriteId].data[1] = species;
gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].callback = SpriteCB_WinnerMonSlideIn; gSprites[spriteId].callback = SpriteCB_WinnerMonSlideIn;
@@ -1136,9 +1155,9 @@ static void TryCreateWirelessSprites(void)
LoadWirelessStatusIndicatorSpriteGfx(); LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(8, 8); CreateWirelessStatusIndicatorSprite(8, 8);
gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1; gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1;
sheet = LoadSpriteSheet(&sUnknown_0858D8E0); sheet = LoadSpriteSheet(&sSpriteSheet_WirelessIndicatorWindow);
RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1); RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1);
spriteId = CreateSprite(&sSpriteTemplate_858D8C8, 8, 8, 0); spriteId = CreateSprite(&sSpriteTemplate_WirelessIndicatorWindow, 8, 8, 0);
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
} }
} }
@@ -1150,14 +1169,13 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
int strWidth; int strWidth;
u8 *spriteTilePtrs[4]; u8 *spriteTilePtrs[4];
u8 *dst; u8 *dst;
{
struct WindowTemplate windowTemplate; struct WindowTemplate windowTemplate;
memset(&windowTemplate, 0, sizeof(windowTemplate)); memset(&windowTemplate, 0, sizeof(windowTemplate));
windowTemplate.width = 30; windowTemplate.width = 30;
windowTemplate.height = 2; windowTemplate.height = 2;
windowId = AddWindow(&windowTemplate); windowId = AddWindow(&windowTemplate);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
}
origWidth = GetStringWidth(1, text, 0); origWidth = GetStringWidth(1, text, 0);
strWidth = (origWidth + 9) / 8; strWidth = (origWidth + 9) / 8;
@@ -1169,16 +1187,16 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
s32 i; s32 i;
struct Sprite *sprite; struct Sprite *sprite;
const u8 *src, *windowTilesPtr; const u8 *src, *windowTilesPtr;
windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); windowTilesPtr = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
src = (u8 *)(sUnknown_0858D6D0); src = (u8 *)sResultsTextWindow_Gfx;
sprite = &gSprites[spriteId]; sprite = &gSprites[spriteId];
spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0); spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0);
for (i = 1; i < 4; i++) for (i = 1; i < (int)ARRAY_COUNT(spriteTilePtrs); i++)
spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0); spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0);
for (i = 0; i < 4; i++) for (i = 0; i < (int)ARRAY_COUNT(spriteTilePtrs); i++)
CpuFill32(0, spriteTilePtrs[i], 0x400); CpuFill32(0, spriteTilePtrs[i], 0x400);
dst = spriteTilePtrs[0]; dst = spriteTilePtrs[0];
@@ -1208,27 +1226,31 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
return (DISPLAY_WIDTH - (strWidth + 2) * 8) / 2; return (DISPLAY_WIDTH - (strWidth + 2) * 8) / 2;
} }
static void LoadContestResultSprites(void) static void CreateResultsTextWindowSprites(void)
{ {
int i; int i;
struct SpriteTemplate template; struct SpriteTemplate template;
u8 spriteIds[ARRAY_COUNT(sUnknown_0858D810)]; u8 spriteIds[ARRAY_COUNT(sSpriteSheets_ResultsTextWindow)];
template = sSpriteTemplate_858D7F8; template = sSpriteTemplate_ResultsTextWindow;
for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++) for (i = 0; i < (int)ARRAY_COUNT(sSpriteSheets_ResultsTextWindow); i++)
LoadSpriteSheet(&sUnknown_0858D810[i]); LoadSpriteSheet(&sSpriteSheets_ResultsTextWindow[i]);
LoadSpritePalette(&sUnknown_0858D850); LoadSpritePalette(&sSpritePalette_ResultsTextWindow);
for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
// Create sprites for the two window types, each made up of 4 sprites
for (i = 0; i < (int)ARRAY_COUNT(sSpriteSheets_ResultsTextWindow); i++)
{ {
spriteIds[i] = CreateSprite(&template, DISPLAY_WIDTH + 32, DISPLAY_HEIGHT - 16, 10); spriteIds[i] = CreateSprite(&template, TEXT_BOX_X, TEXT_BOX_Y, 10);
template.tileTag++; template.tileTag++;
} }
// Save sprite ids of the sliding text box onto its leftmost sprite
gSprites[spriteIds[0]].data[0] = spriteIds[1]; gSprites[spriteIds[0]].data[0] = spriteIds[1];
gSprites[spriteIds[0]].data[1] = spriteIds[2]; gSprites[spriteIds[0]].data[1] = spriteIds[2];
gSprites[spriteIds[0]].data[2] = spriteIds[3]; gSprites[spriteIds[0]].data[2] = spriteIds[3];
// Save sprite ids of the link text box onto its leftmost sprite
gSprites[spriteIds[4]].data[0] = spriteIds[5]; gSprites[spriteIds[4]].data[0] = spriteIds[5];
gSprites[spriteIds[4]].data[1] = spriteIds[6]; gSprites[spriteIds[4]].data[1] = spriteIds[6];
gSprites[spriteIds[4]].data[2] = spriteIds[7]; gSprites[spriteIds[4]].data[2] = spriteIds[7];
@@ -1248,7 +1270,7 @@ static void LoadContestResultSprites(void)
static void StartTextBoxSlideIn(s16 x, u16 y, u16 slideOutTimer, u16 slideIncrement) static void StartTextBoxSlideIn(s16 x, u16 y, u16 slideOutTimer, u16 slideIncrement)
{ {
struct Sprite *sprite = &gSprites[sContestResults->data->slidingTextBoxSpriteId]; struct Sprite *sprite = &gSprites[sContestResults->data->slidingTextBoxSpriteId];
sprite->pos1.x = DISPLAY_WIDTH + 32; sprite->pos1.x = TEXT_BOX_X;
sprite->pos1.y = y; sprite->pos1.y = y;
sprite->pos2.x = 0; sprite->pos2.x = 0;
sprite->pos2.y = 0; sprite->pos2.y = 0;
@@ -1275,8 +1297,8 @@ static void StartTextBoxSlideOut(u16 slideIncrement)
static void EndTextBoxSlideOut(struct Sprite *sprite) static void EndTextBoxSlideOut(struct Sprite *sprite)
{ {
sprite->pos1.x = DISPLAY_WIDTH + 32; sprite->pos1.x = TEXT_BOX_X;
sprite->pos1.y = DISPLAY_HEIGHT - 16; sprite->pos1.y = TEXT_BOX_Y;
sprite->pos2.y = 0; sprite->pos2.y = 0;
sprite->pos2.x = 0; sprite->pos2.x = 0;
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
@@ -1377,7 +1399,7 @@ static void HideLinkResultsTextBox(void)
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
} }
static void LoadContestResultsTilemaps(void) static void LoadContestResultsTitleBarTilemaps(void)
{ {
u8 palette; u8 palette;
int x, y; int x, y;
@@ -1386,58 +1408,58 @@ static void LoadContestResultsTilemaps(void)
y = 1; y = 1;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{ {
CopyToBgTilemapBufferRect(2, gLinkContestResults_Tilemap, 5, 1, 5, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Link_Tilemap, 5, 1, 5, 2);
x = 10; x = 10;
} }
else if (gSpecialVar_ContestRank == CONTEST_RANK_NORMAL) else if (gSpecialVar_ContestRank == CONTEST_RANK_NORMAL)
{ {
CopyToBgTilemapBufferRect(2, gNormalContestResults_Tilemap, 5, 1, 10, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Normal_Tilemap, 5, 1, 10, 2);
x = 15; x = 15;
} }
else if (gSpecialVar_ContestRank == CONTEST_RANK_SUPER) else if (gSpecialVar_ContestRank == CONTEST_RANK_SUPER)
{ {
CopyToBgTilemapBufferRect(2, gSuperContestResults_Tilemap, 5, 1, 10, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Super_Tilemap, 5, 1, 10, 2);
x = 15; x = 15;
} }
else if (gSpecialVar_ContestRank == CONTEST_RANK_HYPER) else if (gSpecialVar_ContestRank == CONTEST_RANK_HYPER)
{ {
CopyToBgTilemapBufferRect(2, gHyperContestResults_Tilemap, 5, 1, 10, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Hyper_Tilemap, 5, 1, 10, 2);
x = 15; x = 15;
} }
else // CONTEST_RANK_MASTER else // CONTEST_RANK_MASTER
{ {
CopyToBgTilemapBufferRect(2, gMasterContestResults_Tilemap, 5, 1, 10, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Master_Tilemap, 5, 1, 10, 2);
x = 15; x = 15;
} }
if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_COOL) if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_COOL)
{ {
palette = 0; palette = 0;
CopyToBgTilemapBufferRect(2, gCoolContestResults_Tilemap, x, y, 5, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Cool_Tilemap, x, y, 5, 2);
} }
else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_BEAUTY) else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_BEAUTY)
{ {
palette = 1; palette = 1;
CopyToBgTilemapBufferRect(2, gBeautyContestResults_Tilemap, x, y, 5, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Beauty_Tilemap, x, y, 5, 2);
} }
else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_CUTE) else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_CUTE)
{ {
palette = 2; palette = 2;
CopyToBgTilemapBufferRect(2, gCuteContestResults_Tilemap, x, y, 5, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Cute_Tilemap, x, y, 5, 2);
} }
else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_SMART) else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_SMART)
{ {
palette = 3; palette = 3;
CopyToBgTilemapBufferRect(2, gSmartContestResults_Tilemap, x, y, 5, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Smart_Tilemap, x, y, 5, 2);
} }
else // CONTEST_CATEGORY_TOUGH else // CONTEST_CATEGORY_TOUGH
{ {
palette = 4; palette = 4;
CopyToBgTilemapBufferRect(2, gToughContestResults_Tilemap, x, y, 5, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Tough_Tilemap, x, y, 5, 2);
} }
x += 5; x += 5;
CopyToBgTilemapBufferRect(2, gContestResults_Tilemap, x, y, 6, 2); CopyToBgTilemapBufferRect(2, gContestResultsTitle_Tilemap, x, y, 6, 2);
CopyToBgTilemapBufferRect_ChangePalette(2, sContestResults->tilemapBuffers[2], 0, 0, 32, 4, palette); CopyToBgTilemapBufferRect_ChangePalette(2, sContestResults->tilemapBuffers[2], 0, 0, 32, 4, palette);
} }
@@ -1567,10 +1589,10 @@ static void SpriteCB_WinnerMonSlideIn(struct Sprite *sprite)
sprite->pos1.x -= delta >> 8; sprite->pos1.x -= delta >> 8;
sprite->data[1] += 0x600; sprite->data[1] += 0x600;
sprite->data[1] &= 0xFF; sprite->data[1] &= 0xFF;
if (sprite->pos1.x < 120) if (sprite->pos1.x < DISPLAY_WIDTH / 2)
sprite->pos1.x = 120; sprite->pos1.x = DISPLAY_WIDTH / 2;
if (sprite->pos1.x == 120) if (sprite->pos1.x == DISPLAY_WIDTH / 2)
{ {
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
sprite->data[1] = 0; sprite->data[1] = 0;
@@ -1628,7 +1650,7 @@ static void SpriteCB_Confetti(struct Sprite *sprite)
if (sContestResults->data->destroyConfetti) if (sContestResults->data->destroyConfetti)
sprite->invisible = TRUE; sprite->invisible = TRUE;
if (sprite->pos1.x > 248 || sprite->pos1.y > 116) if (sprite->pos1.x > DISPLAY_WIDTH + 8 || sprite->pos1.y > 116)
{ {
DestroySprite(sprite); DestroySprite(sprite);
sContestResults->data->confettiCount--; sContestResults->data->confettiCount--;
@@ -2035,7 +2057,7 @@ void GiveMonContestRibbon(void)
void BufferContestantTrainerName(void) void BufferContestantTrainerName(void)
{ {
StringCopy(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName); StringCopy(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName);
sub_81DB5AC(gStringVar1); ConvertInternationalContestantName(gStringVar1);
} }
void BufferContestantMonNickname(void) void BufferContestantMonNickname(void)
@@ -2074,7 +2096,7 @@ void BufferContestWinnerTrainerName(void)
u8 i; u8 i;
GET_CONTEST_WINNER_ID(i); GET_CONTEST_WINNER_ID(i);
StringCopy(gStringVar3, gContestMons[i].trainerName); StringCopy(gStringVar3, gContestMons[i].trainerName);
sub_81DB5AC(gStringVar3); ConvertInternationalContestantName(gStringVar3);
} }
void BufferContestWinnerMonName(void) void BufferContestWinnerMonName(void)
@@ -2257,6 +2279,10 @@ static void Task_LinkContest_WaitDisconnect(u8 taskId)
} }
} }
/*
A section of contest script functions starts here
*/
void SetContestTrainerGfxIds(void) void SetContestTrainerGfxIds(void)
{ {
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId; gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
@@ -2265,27 +2291,27 @@ void SetContestTrainerGfxIds(void)
} }
// Unused // Unused
void sub_80F8814(void) void GetNpcContestantLocalId(void)
{ {
u16 var1; u16 localId;
u8 var0 = gSpecialVar_0x8005; u8 contestant = gSpecialVar_0x8005;
switch (var0) switch (contestant)
{ {
case 0: case 0:
var1 = 3; localId = 3;
break; break;
case 1: case 1:
var1 = 4; localId = 4;
break; break;
case 2: case 2:
var1 = 5; localId = 5;
break; break;
default: default: // Invalid
var1 = 100; localId = 100;
break; break;
} }
gSpecialVar_0x8004 = var1; gSpecialVar_0x8004 = localId;
} }
void BufferContestTrainerAndMonNames(void) void BufferContestTrainerAndMonNames(void)
@@ -2296,26 +2322,26 @@ void BufferContestTrainerAndMonNames(void)
} }
// Unused // Unused
void DoesContestCategoryHaveWinner(void) void DoesContestCategoryHaveMuseumPainting(void)
{ {
int contestWinner; int contestWinner;
switch (gSpecialVar_ContestCategory) switch (gSpecialVar_ContestCategory)
{ {
case CONTEST_CATEGORY_COOL: case CONTEST_CATEGORY_COOL:
contestWinner = 8; contestWinner = CONTEST_WINNER_MUSEUM_COOL - 1;
break; break;
case CONTEST_CATEGORY_BEAUTY: case CONTEST_CATEGORY_BEAUTY:
contestWinner = 9; contestWinner = CONTEST_WINNER_MUSEUM_BEAUTY - 1;
break; break;
case CONTEST_CATEGORY_CUTE: case CONTEST_CATEGORY_CUTE:
contestWinner = 10; contestWinner = CONTEST_WINNER_MUSEUM_CUTE - 1;
break; break;
case CONTEST_CATEGORY_SMART: case CONTEST_CATEGORY_SMART:
contestWinner = 11; contestWinner = CONTEST_WINNER_MUSEUM_SMART - 1;
break; break;
case CONTEST_CATEGORY_TOUGH: case CONTEST_CATEGORY_TOUGH:
default: default:
contestWinner = 12; contestWinner = CONTEST_WINNER_MUSEUM_TOUGH - 1;
break; break;
} }
@@ -2327,7 +2353,7 @@ void DoesContestCategoryHaveWinner(void)
void SaveMuseumContestPainting(void) void SaveMuseumContestPainting(void)
{ {
sub_80DEDA8(0xFF); SaveContestWinner(CONTEST_SAVE_FOR_MUSEUM);
} }
void ShouldReadyContestArtist(void) void ShouldReadyContestArtist(void)
@@ -2344,14 +2370,14 @@ void ShouldReadyContestArtist(void)
} }
} }
u8 CountPlayerContestPaintings(void) u8 CountPlayerMuseumPaintings(void)
{ {
int i; int i;
u8 count = 0; u8 count = 0;
for (i = 0; i < 5; i++) for (i = 0; i < NUM_CONTEST_WINNERS - MUSEUM_CONTEST_WINNERS_START; i++)
{ {
if (gSaveBlock1Ptr->contestWinners[8 + i].species) if (gSaveBlock1Ptr->contestWinners[MUSEUM_CONTEST_WINNERS_START + i].species)
count++; count++;
} }
@@ -2359,19 +2385,21 @@ u8 CountPlayerContestPaintings(void)
} }
// Unused // Unused
void sub_80F8970(void) void GetContestantNamesAtRank(void)
{ {
s16 conditions[CONTESTANT_COUNT]; s16 conditions[CONTESTANT_COUNT];
int i, j; int i, j;
s16 condition; s16 condition;
s8 var0; s8 numAtCondition;
u8 var2; u8 contestantOffset;
u8 r8; u8 tieRank;
u8 r7; u8 rank;
// Get round 1 points
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
conditions[i] = gContestMonRound1Points[i]; conditions[i] = gContestMonRound1Points[i];
// Sort round 1 points
for (i = 0; i < CONTESTANT_COUNT - 1; i++) for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{ {
for (j = CONTESTANT_COUNT - 1; j > i; j--) for (j = CONTESTANT_COUNT - 1; j > i; j--)
@@ -2384,58 +2412,65 @@ void sub_80F8970(void)
} }
} }
// Get round 1 points at specified rank
condition = conditions[gSpecialVar_0x8006]; condition = conditions[gSpecialVar_0x8006];
var0 = 0;
r8 = 0; // Count number of contestants with the same number of points
numAtCondition = 0;
tieRank = 0;
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
if (conditions[i] == condition) if (conditions[i] == condition)
{ {
var0++; numAtCondition++;
if (i == gSpecialVar_0x8006) if (i == gSpecialVar_0x8006)
r8 = var0; tieRank = numAtCondition;
} }
} }
// Get rank of first contestant with the same number of points
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
if (conditions[i] == condition) if (conditions[i] == condition)
break; break;
} }
rank = i;
r7 = i; // Get contestant id of player at rank (taking ties into account)
var2 = r8; contestantOffset = tieRank;
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
{ {
if (condition == gContestMonRound1Points[i]) if (condition == gContestMonRound1Points[i])
{ {
if (var2 == 1) if (contestantOffset == 1)
break; break;
var2--; contestantOffset--;
} }
} }
// Use contestant id to get names
StringCopy(gStringVar1, gContestMons[i].nickname); StringCopy(gStringVar1, gContestMons[i].nickname);
StringCopy(gStringVar2, gContestMons[i].trainerName); StringCopy(gStringVar2, gContestMons[i].trainerName);
sub_81DB5AC(gStringVar2); ConvertInternationalContestantName(gStringVar2);
if (var0 == 1) // Return adjusted rank
gSpecialVar_0x8006 = r7; if (numAtCondition == 1)
else if (r8 == var0) gSpecialVar_0x8006 = rank;
gSpecialVar_0x8006 = r7; else if (tieRank == numAtCondition)
gSpecialVar_0x8006 = rank;
else else
gSpecialVar_0x8006 = r7 + 4; gSpecialVar_0x8006 = rank + CONTESTANT_COUNT;
} }
static void ExitContestWinnerPainting(void) static void ExitContestPainting(void)
{ {
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
} }
void ShowContestWinnerPainting(void) void ShowContestPainting(void)
{ {
SetMainCallback2(CB2_ContestPainting); SetMainCallback2(CB2_ContestPainting);
gMain.savedCallback = ExitContestWinnerPainting; gMain.savedCallback = ExitContestPainting;
} }
void SetLinkContestPlayerGfx(void) void SetLinkContestPlayerGfx(void)
+8 -8
View File
@@ -138,7 +138,7 @@
const struct ContestWinner gDefaultContestWinners[] = const struct ContestWinner gDefaultContestWinners[] =
{ {
{ [CONTEST_WINNER_HALL_1 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_ELECTRIKE, .species = SPECIES_ELECTRIKE,
@@ -147,7 +147,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("EZRA"), .trainerName = _("EZRA"),
.contestRank = CONTEST_RANK_NORMAL .contestRank = CONTEST_RANK_NORMAL
}, },
{ [CONTEST_WINNER_HALL_2 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_TROPIUS, .species = SPECIES_TROPIUS,
@@ -156,7 +156,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("ALLAN"), .trainerName = _("ALLAN"),
.contestRank = CONTEST_RANK_HYPER .contestRank = CONTEST_RANK_HYPER
}, },
{ [CONTEST_WINNER_HALL_3 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_XATU, .species = SPECIES_XATU,
@@ -165,7 +165,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("JULIET"), .trainerName = _("JULIET"),
.contestRank = CONTEST_RANK_NORMAL .contestRank = CONTEST_RANK_NORMAL
}, },
{ [CONTEST_WINNER_HALL_4 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_PLUSLE, .species = SPECIES_PLUSLE,
@@ -174,7 +174,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("BAILY"), .trainerName = _("BAILY"),
.contestRank = CONTEST_RANK_MASTER .contestRank = CONTEST_RANK_MASTER
}, },
{ [CONTEST_WINNER_HALL_5 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_SHUPPET, .species = SPECIES_SHUPPET,
@@ -183,7 +183,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("MELANY"), .trainerName = _("MELANY"),
.contestRank = CONTEST_RANK_SUPER .contestRank = CONTEST_RANK_SUPER
}, },
{ [CONTEST_WINNER_HALL_6 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_ZANGOOSE, .species = SPECIES_ZANGOOSE,
@@ -192,7 +192,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("HANA"), .trainerName = _("HANA"),
.contestRank = CONTEST_RANK_HYPER .contestRank = CONTEST_RANK_HYPER
}, },
{ [CONTEST_WINNER_HALL_UNUSED_1 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_LOUDRED, .species = SPECIES_LOUDRED,
@@ -201,7 +201,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("BRYANT"), .trainerName = _("BRYANT"),
.contestRank = CONTEST_RANK_HYPER .contestRank = CONTEST_RANK_HYPER
}, },
{ [CONTEST_WINNER_HALL_UNUSED_2 - 1] = {
.personality = 0, .personality = 0,
.trainerId = 0xFFFF, .trainerId = 0xFFFF,
.species = SPECIES_DELCATTY, .species = SPECIES_DELCATTY,
+16 -16
View File
@@ -471,11 +471,11 @@ const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4b
const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz"); const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz");
const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz"); const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz");
const u32 gContestResults_Gfx[] = INCBIN_U32("graphics/contest/results_screen.4bpp.lz"); const u32 gContestResults_Gfx[] = INCBIN_U32("graphics/contest/results_screen/tiles.4bpp.lz");
const u32 gUnknown_08C19EEC[] = INCBIN_U32("graphics/contest/misc_2_tilemap_1.bin.lz"); const u32 gContestResults_WinnerBanner_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/winner_banner.bin.lz");
const u32 gUnknown_08C1A000[] = INCBIN_U32("graphics/contest/misc_2_tilemap_2.bin.lz"); const u32 gContestResults_Interface_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/interface.bin.lz");
const u32 gUnknown_08C1A12C[] = INCBIN_U32("graphics/contest/misc_2_tilemap_3.bin.lz"); const u32 gContestResults_Bg_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/bg.bin.lz");
const u32 gContestResults_Pal[] = INCBIN_U32("graphics/contest/results_screen.gbapal.lz"); const u32 gContestResults_Pal[] = INCBIN_U32("graphics/contest/results_screen/tiles.gbapal.lz");
const u32 gBattleAnimSpriteGfx_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.4bpp.lz");
const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.gbapal.lz"); const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.gbapal.lz");
@@ -1296,17 +1296,17 @@ const u8 gBagMenuHMIcon_Gfx[] = INCBIN_U8("graphics/interface/hm.4bpp");
// contest results screen // contest results screen
const u16 gNormalContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_normal.bin"); const u16 gContestResultsTitle_Normal_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_normal.bin");
const u16 gSuperContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_super.bin"); const u16 gContestResultsTitle_Super_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_super.bin");
const u16 gHyperContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_hyper.bin"); const u16 gContestResultsTitle_Hyper_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_hyper.bin");
const u16 gMasterContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_master.bin"); const u16 gContestResultsTitle_Master_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_master.bin");
const u16 gLinkContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_link.bin"); const u16 gContestResultsTitle_Link_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_link.bin");
const u16 gCoolContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_cool.bin"); const u16 gContestResultsTitle_Cool_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_cool.bin");
const u16 gBeautyContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_beauty.bin"); const u16 gContestResultsTitle_Beauty_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_beauty.bin");
const u16 gCuteContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_cute.bin"); const u16 gContestResultsTitle_Cute_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_cute.bin");
const u16 gSmartContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_smart.bin"); const u16 gContestResultsTitle_Smart_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_smart.bin");
const u16 gToughContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_tough.bin"); const u16 gContestResultsTitle_Tough_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_tough.bin");
const u16 gContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen.bin"); const u16 gContestResultsTitle_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title.bin");
// pokenav // pokenav
+1 -1
View File
@@ -185,7 +185,7 @@ void ConvertInternationalPlayerNameStripChar(u8 *str, u8 removeChar)
} }
} }
void sub_81DB5AC(u8 *str) void ConvertInternationalContestantName(u8 *str)
{ {
if (*str++ == EXT_CTRL_CODE_BEGIN && *str++ == EXT_CTRL_CODE_JPN) if (*str++ == EXT_CTRL_CODE_BEGIN && *str++ == EXT_CTRL_CODE_JPN)
{ {
+3 -5
View File
@@ -48,23 +48,19 @@
extern const u8 EventScript_ResetAllMapFlags[]; extern const u8 EventScript_ResetAllMapFlags[];
// this file's functions
static void ClearFrontierRecord(void); static void ClearFrontierRecord(void);
static void WarpToTruck(void); static void WarpToTruck(void);
static void ResetMiniGamesRecords(void); static void ResetMiniGamesRecords(void);
// EWRAM vars
EWRAM_DATA bool8 gDifferentSaveFile = FALSE; EWRAM_DATA bool8 gDifferentSaveFile = FALSE;
EWRAM_DATA bool8 gEnableContestDebugging = FALSE; EWRAM_DATA bool8 gEnableContestDebugging = FALSE;
// const rom data
static const struct ContestWinner sContestWinnerPicDummy = static const struct ContestWinner sContestWinnerPicDummy =
{ {
.monName = _(""), .monName = _(""),
.trainerName = _("") .trainerName = _("")
}; };
// code
void SetTrainerId(u32 trainerId, u8 *dst) void SetTrainerId(u32 trainerId, u8 *dst)
{ {
dst[0] = trainerId; dst[0] = trainerId;
@@ -114,7 +110,9 @@ void ClearAllContestWinnerPics(void)
s32 i; s32 i;
ClearContestWinnerPicsInContestHall(); ClearContestWinnerPicsInContestHall();
for (i = 8; i < 13; i++)
// Clear Museum paintings
for (i = MUSEUM_CONTEST_WINNERS_START; i < NUM_CONTEST_WINNERS; i++)
gSaveBlock1Ptr->contestWinners[i] = sContestWinnerPicDummy; gSaveBlock1Ptr->contestWinners[i] = sContestWinnerPicDummy;
} }
+3 -3
View File
@@ -1466,15 +1466,15 @@ bool8 ScrCmd_hidemonpic(struct ScriptContext *ctx)
return TRUE; return TRUE;
} }
bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) bool8 ScrCmd_showcontestpainting(struct ScriptContext *ctx)
{ {
u8 contestWinnerId = ScriptReadByte(ctx); u8 contestWinnerId = ScriptReadByte(ctx);
// Don't save artist's painting yet // Artist's painting is temporary and already has its data loaded
if (contestWinnerId != CONTEST_WINNER_ARTIST) if (contestWinnerId != CONTEST_WINNER_ARTIST)
SetContestWinnerForPainting(contestWinnerId); SetContestWinnerForPainting(contestWinnerId);
ShowContestWinnerPainting(); ShowContestPainting();
ScriptContext1_Stop(); ScriptContext1_Stop();
return TRUE; return TRUE;
} }
+2 -2
View File
@@ -661,7 +661,7 @@ u32 CountPlayerTrainerStars(void)
stars++; stars++;
if (HasAllHoennMons()) if (HasAllHoennMons())
stars++; stars++;
if (CountPlayerContestPaintings() > 4) if (CountPlayerMuseumPaintings() >= CONTEST_CATEGORIES_COUNT)
stars++; stars++;
if (HasAllFrontierSymbols()) if (HasAllFrontierSymbols())
stars++; stars++;
@@ -735,7 +735,7 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType)
case CARD_TYPE_FRLG: case CARD_TYPE_FRLG:
trainerCard->contestsWithFriends = GetCappedGameStat(GAME_STAT_WON_LINK_CONTEST, 999); trainerCard->contestsWithFriends = GetCappedGameStat(GAME_STAT_WON_LINK_CONTEST, 999);
trainerCard->pokeblocksWithFriends = GetCappedGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); trainerCard->pokeblocksWithFriends = GetCappedGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF);
if (CountPlayerContestPaintings() > 4) if (CountPlayerMuseumPaintings() >= CONTEST_CATEGORIES_COUNT)
trainerCard->hasAllPaintings = TRUE; trainerCard->hasAllPaintings = TRUE;
trainerCard->stars = GetRubyTrainerStars(trainerCard); trainerCard->stars = GetRubyTrainerStars(trainerCard);
break; break;