From ec38d03d18d295c7be48f73b36cea6d9256727c9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 27 Oct 2022 15:17:38 -0400 Subject: [PATCH 1/4] Rename mevent_show_* files --- ld_script.txt | 8 ++++---- src/{mevent_show_card.c => mystery_gift_show_card.c} | 0 src/{mevent_show_news.c => mystery_gift_show_news.c} | 0 sym_ewram.txt | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) rename src/{mevent_show_card.c => mystery_gift_show_card.c} (100%) rename src/{mevent_show_news.c => mystery_gift_show_news.c} (100%) diff --git a/ld_script.txt b/ld_script.txt index 69dae4b5b..f8fbe3753 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -279,8 +279,8 @@ SECTIONS { src/mevent_server_helpers.o(.text); src/mevent_client.o(.text); src/mevent_server.o(.text); - src/mevent_show_card.o(.text); - src/mevent_show_news.o(.text); + src/mystery_gift_show_card.o(.text); + src/mystery_gift_show_news.o(.text); src/menews_jisan.o(.text); src/seagallop.o(.text); src/pokemon_jump.o(.text); @@ -572,8 +572,8 @@ SECTIONS { src/mevent_server_helpers.o(.rodata); src/mevent_client.o(.rodata); src/mevent_server.o(.rodata); - src/mevent_show_card.o(.rodata); - src/mevent_show_news.o(.rodata); + src/mystery_gift_show_card.o(.rodata); + src/mystery_gift_show_news.o(.rodata); src/mevent_scripts.o(.rodata); src/menews_jisan.o(.rodata); src/menews_jisan.o(.rodata.str1.4); diff --git a/src/mevent_show_card.c b/src/mystery_gift_show_card.c similarity index 100% rename from src/mevent_show_card.c rename to src/mystery_gift_show_card.c diff --git a/src/mevent_show_news.c b/src/mystery_gift_show_news.c similarity index 100% rename from src/mevent_show_news.c rename to src/mystery_gift_show_news.c diff --git a/sym_ewram.txt b/sym_ewram.txt index ef48abffa..0dc0544c1 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -125,8 +125,8 @@ .include "src/mevent_server_helpers.o" .include "src/mevent_client.o" .include "src/mevent_server.o" - .include "src/mevent_show_card.o" - .include "src/mevent_show_news.o" + .include "src/mystery_gift_show_card.o" + .include "src/mystery_gift_show_news.o" .include "src/seagallop.o" .include "src/pokemon_jump.o" .include "src/berry_crush.o" From 8c887bca44cff538770ccdc32912b0dea57bd2e1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 27 Oct 2022 15:42:50 -0400 Subject: [PATCH 2/4] Sync mystery_gift_show_card --- include/constants/mystery_gift.h | 47 +++ include/mevent.h | 8 +- src/mystery_gift_menu.c | 8 +- src/mystery_gift_show_card.c | 478 ++++++++++++++++++------------- 4 files changed, 327 insertions(+), 214 deletions(-) create mode 100644 include/constants/mystery_gift.h diff --git a/include/constants/mystery_gift.h b/include/constants/mystery_gift.h new file mode 100644 index 000000000..8ff71c3aa --- /dev/null +++ b/include/constants/mystery_gift.h @@ -0,0 +1,47 @@ +#ifndef GUARD_CONSTANTS_MYSTERY_GIFT_H +#define GUARD_CONSTANTS_MYSTERY_GIFT_H + +#define GET_NUM_STAMPS 0 +#define GET_MAX_STAMPS 1 +#define GET_CARD_BATTLES_WON 2 +#define GET_CARD_BATTLES_LOST 3 +#define GET_CARD_NUM_TRADES 4 + +#define CARD_STAT_BATTLES_WON 0 +#define CARD_STAT_BATTLES_LOST 1 +#define CARD_STAT_NUM_TRADES 2 +#define CARD_STAT_NUM_STAMPS 3 +#define CARD_STAT_MAX_STAMPS 4 + +// Values for the type field of Wonder Card +#define CARD_TYPE_GIFT 0 // Normal "Wonder Card" +#define CARD_TYPE_STAMP 1 // "Stamp Card" +#define CARD_TYPE_LINK_STAT 2 // Referred to as the "Battle Card", shows battle and trade stats +#define CARD_TYPE_COUNT 3 + +// Values for the sendType field of Wonder Card/News +#define SEND_TYPE_DISALLOWED 0 +#define SEND_TYPE_ALLOWED 1 +#define SEND_TYPE_ALLOWED_ALWAYS 2 + +// Return values for MysteryGift_CompareCardFlags, handled by gMysteryGiftServerScript_SendWonderCard +#define HAS_NO_CARD 0 +#define HAS_SAME_CARD 1 +#define HAS_DIFF_CARD 2 + +// The number of battles needed to be recorded on a Battle Card to win a prize +#define REQUIRED_CARD_BATTLES 3 + +// Stamps are 32 bits. The first 16 bits are the species +// and the second 16 bits are a number (presumably an ID of some kind) +#define STAMP_SPECIES 0 +#define STAMP_ID 1 + +// Number of different types/colors of Wonder Card and News backgrounds +#define NUM_WONDER_BGS 8 + +#define MAX_WONDER_CARD_STAT 999 + +#define WONDER_CARD_FLAG_OFFSET 1000 + +#endif //GUARD_CONSTANTS_MYSTERY_GIFT_H diff --git a/include/mevent.h b/include/mevent.h index 8a75dde65..f75518774 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -73,15 +73,15 @@ u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void *unused); bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1); u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command); -bool32 InitWonderCardResources(struct WonderCard * r5, struct WonderCardMetadata * r6); +bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata); bool32 InitWonderNewsResources(const struct WonderNews * a0); -s32 FadeToWonderCardMenu(void); +s32 WonderCard_Enter(void); s32 FadeToWonderNewsMenu(void); void DestroyWonderCard(void); void DestroyWonderNews(void); -void DestroyWonderCardResources(void); +void WonderCard_Destroy(void); void DestroyWonderNewsResources(void); -s32 FadeOutFromWonderCard(bool32 flag); +s32 WonderCard_Exit(bool32 flag); s32 FadeOutFromWonderNews(bool32 flag); bool32 CheckReceivedGiftFromWonderCard(void); void MENews_AddScrollIndicatorArrowPair(void); diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index e21cd6724..7dad2865e 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -802,7 +802,7 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) case 0: if (cardOrNews == 0) { - InitWonderCardResources(GetSavedWonderCard(), sav1_get_mevent_buffer_2()); + WonderCard_Init(GetSavedWonderCard(), sav1_get_mevent_buffer_2()); } else { @@ -813,7 +813,7 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) case 1: if (cardOrNews == 0) { - v0 = FadeToWonderCardMenu(); + v0 = WonderCard_Enter(); check: if (v0 != 0) { @@ -851,9 +851,9 @@ bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) { if (cardOrNews == 0) { - if (FadeOutFromWonderCard(arg1) != 0) + if (WonderCard_Exit(arg1) != 0) { - DestroyWonderCardResources(); + WonderCard_Destroy(); return TRUE; } else diff --git a/src/mystery_gift_show_card.c b/src/mystery_gift_show_card.c index 8d3ce4895..8f19dad64 100644 --- a/src/mystery_gift_show_card.c +++ b/src/mystery_gift_show_card.c @@ -7,73 +7,91 @@ #include "mystery_gift_menu.h" #include "mevent.h" #include "battle_anim.h" +#include "constants/mystery_gift.h" -struct MEventScreenMgr_02DC -{ - u8 nDigits; - u8 nameTxt[41]; - u8 numberTxt[4]; +enum { + WIN_HEADER, + WIN_BODY, + WIN_FOOTER, + WIN_COUNT }; -struct MEventScreenMgr +#define TAG_STAMP_SHADOW 0x8000 + +struct CardStatTextData { - /*0000*/ struct WonderCard wonderCard; - /*014c*/ struct WonderCardMetadata buff3430Sub; - /*0170*/ const struct UnkStruct_8467FB8 * bgSpec; - /*0174*/ u8 state; + u8 width; + u8 statText[WONDER_CARD_TEXT_LENGTH + 1]; + u8 statNumberText[4]; +}; + +struct WonderCardData +{ + /*0000*/ struct WonderCard card; + /*014c*/ struct WonderCardMetadata cardMetadata; + /*0170*/ const struct UnkStruct_8467FB8 * gfx; + /*0174*/ u8 enterExitState; /*0175*/ u8 recordIdx; - /*0176*/ u16 windowIds[3]; - /*017C*/ u8 monIconId; - /*017D*/ u8 cardIconAndShadowSprites[7][2]; - /*018B*/ u8 title[41]; - /*01B4*/ u8 subtitle[41]; - /*01DD*/ u8 unk_01DD[7]; - /*01E4*/ u8 mainMessageLines[4][41]; - /*0288*/ u8 instructionsLine1[41]; - /*02B1*/ u8 instructionsLine2[41]; - /*02DC*/ struct MEventScreenMgr_02DC recordStrings[8]; - /*045C*/ u8 buffer_045C[0x1000]; + /*0176*/ u16 windowIds[WIN_COUNT]; + /*017C*/ u8 monIconSpriteId; + /*017D*/ u8 stampSpriteIds[MAX_STAMP_CARD_STAMPS][2]; // 2 sprites each, 1 for the shadow and 1 for the Pokémon + /*018B*/ u8 titleText[WONDER_CARD_TEXT_LENGTH + 1]; + /*01B4*/ u8 subtitleText[WONDER_CARD_TEXT_LENGTH + 1]; + /*01DD*/ u8 idNumberText[7]; + /*01E4*/ u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH + 1]; + /*0288*/ u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH + 1]; + /*02B1*/ u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH + 1]; + /*02DC*/ struct CardStatTextData statTextData[8]; + /*045C*/ u8 bgTilemapBuffer[0x1000]; }; -static EWRAM_DATA struct MEventScreenMgr * sMEventScreenData = NULL; +static EWRAM_DATA struct WonderCardData * sWonderCardData = NULL; -static void sub_8145A98(void); -static void sub_8145D18(u8 whichWindow); -static void sub_8146060(void); -static void sub_81461D8(void); +static void BufferCardText(void); +static void DrawCardWindow(u8 whichWindow); +static void CreateCardSprites(void); +static void DestroyCardSprites(void); -static const u8 gUnknown_8467068[][3] = { +static const u8 sTextColorTable[][3] = { {0, 2, 3}, {0, 1, 2} }; -static const u8 ALIGNED(4) sTextYCoords[3] = {7, 4, 7}; +static const u8 ALIGNED(4) sFooterTextOffsets[CARD_TYPE_COUNT] = +{ + [CARD_TYPE_GIFT] = 7, + [CARD_TYPE_STAMP] = 4, + [CARD_TYPE_LINK_STAT] = 7 +}; static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_HEADER] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, .width = 25, .height = 4, .paletteNum = 15, - .baseBlock = 0x29c}, - { + .baseBlock = 0x29c + }, + [WIN_BODY] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 6, .width = 28, .height = 8, .paletteNum = 15, - .baseBlock = 0x1bc}, - { + .baseBlock = 0x1bc + }, + [WIN_FOOTER] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 14, .width = 28, .height = 5, .paletteNum = 15, - .baseBlock = 0x130} + .baseBlock = 0x130 + } }; static const u16 sCard0Pal[] = INCBIN_U16("graphics/mevent/pal_46708C.gbapal"); @@ -104,11 +122,11 @@ static const u16 sUnknown_8467EB4[] = INCBIN_U16("graphics/mevent/pal_467EB4.gba static const u16 sUnknown_8467ED4[] = INCBIN_U16("graphics/mevent/pal_467ED4.gbapal"); static const u32 sUnknown_8467EF4[] = INCBIN_U32("graphics/mevent/gfx_467EF4.4bpp.lz"); -static const struct CompressedSpriteSheet sShadowSpriteSheet = { +static const struct CompressedSpriteSheet sSpriteSheet_StampShadow = { sUnknown_8467EF4, 0x100, 0x8000 }; -static const struct SpritePalette sShadowSpritePalettes[] = { +static const struct SpritePalette sSpritePalettes_StampShadow[] = { {sUnknown_8467DF4, 0x8000}, {sUnknown_8467E14, 0x8000}, {sUnknown_8467E34, 0x8000}, @@ -119,11 +137,17 @@ static const struct SpritePalette sShadowSpritePalettes[] = { {sUnknown_8467ED4, 0x8000} }; -static const struct SpriteTemplate sShadowSpriteTemplate = { - 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +static const struct SpriteTemplate sSpriteTemplate_StampShadow = { + .tileTag = TAG_STAMP_SHADOW, + .paletteTag = TAG_STAMP_SHADOW, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy }; -static const struct UnkStruct_8467FB8 sCardGfxPtrs[8] = { +static const struct UnkStruct_8467FB8 sCardGraphics[8] = { {1, 0, 0, 0, sCard0Gfx, sCard0Map, sCard0Pal}, {1, 0, 0, 1, sCard1Gfx, sCard1Map, gCard1Pal}, {1, 0, 0, 2, sCard2Gfx, sCard2Map, gCard2Pal}, @@ -134,40 +158,39 @@ static const struct UnkStruct_8467FB8 sCardGfxPtrs[8] = { {1, 0, 0, 7, sCard7Gfx, sCard7Map, sCard7Pal} }; -bool32 InitWonderCardResources(struct WonderCard * card, struct WonderCardMetadata * b3430sub) +bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata) { - if (card == NULL || b3430sub == NULL) + if (card == NULL || metadata == NULL) return FALSE; - sMEventScreenData = AllocZeroed(sizeof(struct MEventScreenMgr)); - if (sMEventScreenData == NULL) + sWonderCardData = AllocZeroed(sizeof(*sWonderCardData)); + if (sWonderCardData == NULL) return FALSE; - sMEventScreenData->wonderCard = *card; - sMEventScreenData->buff3430Sub = *b3430sub; - if (sMEventScreenData->wonderCard.bgType >= NELEMS(sCardGfxPtrs)) - sMEventScreenData->wonderCard.bgType = 0; - if (sMEventScreenData->wonderCard.type >= NELEMS(sTextYCoords)) - sMEventScreenData->wonderCard.type = 0; - if (sMEventScreenData->wonderCard.maxStamps > NELEMS(sMEventScreenData->cardIconAndShadowSprites)) - sMEventScreenData->wonderCard.maxStamps = 0; - sMEventScreenData->bgSpec = &sCardGfxPtrs[sMEventScreenData->wonderCard.bgType]; + sWonderCardData->card = *card; + sWonderCardData->cardMetadata = *metadata; + if (sWonderCardData->card.bgType >= NUM_WONDER_BGS) + sWonderCardData->card.bgType = 0; + if (sWonderCardData->card.type >= CARD_TYPE_COUNT) + sWonderCardData->card.type = 0; + if (sWonderCardData->card.maxStamps > MAX_STAMP_CARD_STAMPS) + sWonderCardData->card.maxStamps = 0; + sWonderCardData->gfx = &sCardGraphics[sWonderCardData->card.bgType]; return TRUE; } -void DestroyWonderCardResources(void) +void WonderCard_Destroy(void) { - if (sMEventScreenData != NULL) + if (sWonderCardData != NULL) { - *sMEventScreenData = (struct MEventScreenMgr){}; - Free(sMEventScreenData); - sMEventScreenData = NULL; + *sWonderCardData = (struct WonderCardData){}; + FREE_AND_SET_NULL(sWonderCardData); } } -s32 FadeToWonderCardMenu(void) +s32 WonderCard_Enter(void) { - if (sMEventScreenData == NULL) + if (sWonderCardData == NULL) return -1; - switch(sMEventScreenData->state) + switch(sWonderCardData->enterExitState) { case 0: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); @@ -183,27 +206,27 @@ s32 FadeToWonderCardMenu(void) CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); - DecompressAndCopyTileDataToVram(2, sMEventScreenData->bgSpec->tiles, 0, 0x008, 0); - sMEventScreenData->windowIds[0] = AddWindow(&sWindowTemplates[0]); - sMEventScreenData->windowIds[1] = AddWindow(&sWindowTemplates[1]); - sMEventScreenData->windowIds[2] = AddWindow(&sWindowTemplates[2]); + DecompressAndCopyTileDataToVram(2, sWonderCardData->gfx->tiles, 0, 0x008, 0); + sWonderCardData->windowIds[WIN_HEADER] = AddWindow(&sWindowTemplates[WIN_HEADER]); + sWonderCardData->windowIds[WIN_BODY] = AddWindow(&sWindowTemplates[WIN_BODY]); + sWonderCardData->windowIds[WIN_FOOTER] = AddWindow(&sWindowTemplates[WIN_FOOTER]); break; case 3: if (FreeTempTileDataBuffersIfPossible()) return 0; gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(sMEventScreenData->bgSpec->pal, 0x10, 0x20); - LZ77UnCompWram(sMEventScreenData->bgSpec->map, sMEventScreenData->buffer_045C); - CopyRectToBgTilemapBufferRect(2, sMEventScreenData->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); + LoadPalette(sWonderCardData->gfx->pal, 0x10, 0x20); + LZ77UnCompWram(sWonderCardData->gfx->map, sWonderCardData->bgTilemapBuffer); + CopyRectToBgTilemapBufferRect(2, sWonderCardData->bgTilemapBuffer, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); CopyBgTilemapBufferToVram(2); break; case 4: - sub_8145A98(); + BufferCardText(); break; case 5: - sub_8145D18(0); - sub_8145D18(1); - sub_8145D18(2); + DrawCardWindow(WIN_HEADER); + DrawCardWindow(WIN_BODY); + DrawCardWindow(WIN_FOOTER); CopyBgTilemapBufferToVram(1); break; case 6: @@ -213,25 +236,25 @@ s32 FadeToWonderCardMenu(void) ShowBg(1); ShowBg(2); gPaletteFade.bufferTransferDisabled = FALSE; - sub_8146060(); + CreateCardSprites(); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); UpdatePaletteFade(); break; default: if (UpdatePaletteFade()) return 0; - sMEventScreenData->state = 0; + sWonderCardData->enterExitState = 0; return 1; } - ++sMEventScreenData->state; + sWonderCardData->enterExitState++; return 0; } -s32 FadeOutFromWonderCard(bool32 flag) +s32 WonderCard_Exit(bool32 useCancel) { - if (sMEventScreenData == NULL) + if (sWonderCardData == NULL) return -1; - switch (sMEventScreenData->state) + switch (sWonderCardData->enterExitState) { case 0: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); @@ -251,16 +274,16 @@ s32 FadeOutFromWonderCard(bool32 flag) case 3: HideBg(1); HideBg(2); - RemoveWindow(sMEventScreenData->windowIds[2]); - RemoveWindow(sMEventScreenData->windowIds[1]); - RemoveWindow(sMEventScreenData->windowIds[0]); + RemoveWindow(sWonderCardData->windowIds[WIN_FOOTER]); + RemoveWindow(sWonderCardData->windowIds[WIN_BODY]); + RemoveWindow(sWonderCardData->windowIds[WIN_HEADER]); break; case 4: - sub_81461D8(); + DestroyCardSprites(); FreeMonIconPalettes(); break; case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag); + PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); break; case 6: CopyBgTilemapBufferToVram(0); @@ -269,184 +292,227 @@ s32 FadeOutFromWonderCard(bool32 flag) default: if (UpdatePaletteFade()) return 0; - sMEventScreenData->state = 0; + sWonderCardData->enterExitState = 0; return 1; } - ++sMEventScreenData->state; + sWonderCardData->enterExitState++; return 0; } -static void sub_8145A98(void) +static void BufferCardText(void) { u16 i = 0; - u16 r6; - u16 sp0[3] = {0, 0, 0}; + u16 charsUntilStat; + u16 stats[3] = {0, 0, 0}; - memcpy(sMEventScreenData->title, sMEventScreenData->wonderCard.titleText, 40); - sMEventScreenData->title[40] = EOS; - memcpy(sMEventScreenData->subtitle, sMEventScreenData->wonderCard.subtitleText, 40); - sMEventScreenData->subtitle[40] = EOS; - if (sMEventScreenData->wonderCard.idNumber > 999999) - sMEventScreenData->wonderCard.idNumber = 999999; - ConvertIntToDecimalStringN(sMEventScreenData->unk_01DD, sMEventScreenData->wonderCard.idNumber, STR_CONV_MODE_LEFT_ALIGN, 6); - for (i = 0; i < 4; i++) + // Copy title/subtitle text + memcpy(sWonderCardData->titleText, sWonderCardData->card.titleText, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->titleText[WONDER_CARD_TEXT_LENGTH] = EOS; + memcpy(sWonderCardData->subtitleText, sWonderCardData->card.subtitleText, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->subtitleText[WONDER_CARD_TEXT_LENGTH] = EOS; + + // Copy card id number + if (sWonderCardData->card.idNumber > 999999) + sWonderCardData->card.idNumber = 999999; + ConvertIntToDecimalStringN(sWonderCardData->idNumberText, sWonderCardData->card.idNumber, STR_CONV_MODE_LEFT_ALIGN, 6); + + // Copy body text + for (i = 0; i < WONDER_CARD_BODY_TEXT_LINES; i++) { - memcpy(sMEventScreenData->mainMessageLines[i], sMEventScreenData->wonderCard.bodyText[i], 40); - sMEventScreenData->mainMessageLines[i][40] = EOS; + memcpy(sWonderCardData->bodyText[i], sWonderCardData->card.bodyText[i], WONDER_CARD_TEXT_LENGTH); + sWonderCardData->bodyText[i][WONDER_CARD_TEXT_LENGTH] = EOS; } - memcpy(sMEventScreenData->instructionsLine1, sMEventScreenData->wonderCard.footerLine1Text, 40); - sMEventScreenData->instructionsLine1[40] = EOS; - switch (sMEventScreenData->wonderCard.type) + + // Copy footer line 1 + memcpy(sWonderCardData->footerLine1Text, sWonderCardData->card.footerLine1Text, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->footerLine1Text[WONDER_CARD_TEXT_LENGTH] = EOS; + + // Copy footer line 2 + switch (sWonderCardData->card.type) { - case 0: - memcpy(sMEventScreenData->instructionsLine2, sMEventScreenData->wonderCard.footerLine2Text, 40); - sMEventScreenData->instructionsLine2[40] = EOS; - break; - case 1: - sMEventScreenData->instructionsLine2[00] = EOS; - break; - case 2: - sMEventScreenData->instructionsLine2[00] = EOS; - sp0[0] = sMEventScreenData->buff3430Sub.battlesWon < 999 ? sMEventScreenData->buff3430Sub.battlesWon : 999; - sp0[1] = sMEventScreenData->buff3430Sub.battlesLost < 999 ? sMEventScreenData->buff3430Sub.battlesLost : 999; - sp0[2] = sMEventScreenData->buff3430Sub.numTrades < 999 ? sMEventScreenData->buff3430Sub.numTrades : 999; - for (i = 0; i < 8; i++) + case CARD_TYPE_GIFT: + memcpy(sWonderCardData->footerLine2Text, sWonderCardData->card.footerLine2Text, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->footerLine2Text[WONDER_CARD_TEXT_LENGTH] = EOS; + break; + case CARD_TYPE_STAMP: + sWonderCardData->footerLine2Text[0] = EOS; + break; + case CARD_TYPE_LINK_STAT: + sWonderCardData->footerLine2Text[0] = EOS; + + // Load stats + stats[0] = sWonderCardData->cardMetadata.battlesWon < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.battlesWon : MAX_WONDER_CARD_STAT; + stats[1] = sWonderCardData->cardMetadata.battlesLost < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.battlesLost : MAX_WONDER_CARD_STAT; + stats[2] = sWonderCardData->cardMetadata.numTrades < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.numTrades : MAX_WONDER_CARD_STAT; + + // Init stat text arrays + for (i = 0; i < ARRAY_COUNT(sWonderCardData->statTextData); i++) + { + memset(sWonderCardData->statTextData[i].statNumberText, EOS, sizeof(sWonderCardData->statTextData[i].statNumberText)); + memset(sWonderCardData->statTextData[i].statText, EOS, sizeof(sWonderCardData->statTextData[i].statText)); + } + + // Copy stat texts + for (i = 0, charsUntilStat = 0; i < WONDER_CARD_TEXT_LENGTH; i++) + { + if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC_PLACEHOLDER) { - memset(sMEventScreenData->recordStrings[i].numberTxt, EOS, 4); - memset(sMEventScreenData->recordStrings[i].nameTxt, EOS, 41); + // Regular text, just copy as is + sWonderCardData->statTextData[sWonderCardData->recordIdx].statText[charsUntilStat] = sWonderCardData->card.footerLine2Text[i]; + charsUntilStat++; } - for (i = 0, r6 = 0; i < 40; i++) + else { - if (sMEventScreenData->wonderCard.footerLine2Text[i] != CHAR_DYNAMIC_PLACEHOLDER) + // Dynamic char encountered + // These are used to give the id of which stat to print + u8 id = sWonderCardData->card.footerLine2Text[i + 1]; + if (id >= ARRAY_COUNT(stats)) { - sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.footerLine2Text[i]; - r6++; + // Invalid stat id, skip ahead + i += 2; } else { - u8 r3 = sMEventScreenData->wonderCard.footerLine2Text[i + 1]; - if (r3 > 2) - { - i += 2; - } - else - { - ConvertIntToDecimalStringN(sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].numberTxt, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); - sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nDigits = sMEventScreenData->wonderCard.footerLine2Text[i + 2]; - sMEventScreenData->recordIdx++; - if (sMEventScreenData->recordIdx > 7) - break; - r6 = 0; - i += 2; - } + // Copy stat number + ConvertIntToDecimalStringN(sWonderCardData->statTextData[sWonderCardData->recordIdx].statNumberText, stats[id], STR_CONV_MODE_LEADING_ZEROS, 3); + sWonderCardData->statTextData[sWonderCardData->recordIdx].width = sWonderCardData->card.footerLine2Text[i + 2]; + sWonderCardData->recordIdx++; + if (sWonderCardData->recordIdx >= ARRAY_COUNT(sWonderCardData->statTextData)) + break; + charsUntilStat = 0; + i += 2; } } + } } } -static void sub_8145D18(u8 whichWindow) +static void DrawCardWindow(u8 whichWindow) { - s8 sp0C = 0; - s32 windowId = sMEventScreenData->windowIds[whichWindow]; + s8 i = 0; + s32 windowId = sWonderCardData->windowIds[whichWindow]; PutWindowTilemap(windowId); FillWindowPixelBuffer(windowId, 0); switch (whichWindow) { - case 0: + case WIN_HEADER: + { + // Print card title/subtitle + s32 x; + AddTextPrinterParameterized3(windowId, FONT_3, 0, 1, sTextColorTable[sWonderCardData->gfx->textPal1], 0, sWonderCardData->titleText); + x = 160 - GetStringWidth(FONT_3, sWonderCardData->subtitleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING)); + if (x < 0) + x = 0; + AddTextPrinterParameterized3(windowId, FONT_3, x, 17, sTextColorTable[sWonderCardData->gfx->textPal1], 0, sWonderCardData->subtitleText); + + // Print id number + if (sWonderCardData->card.idNumber != 0) + AddTextPrinterParameterized3(windowId, FONT_2, 166, 17, sTextColorTable[sWonderCardData->gfx->textPal1], 0, sWonderCardData->idNumberText); + break; + } + case WIN_BODY: + // Print body text + for (; i < WONDER_CARD_BODY_TEXT_LINES; i++) + AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->textPal2], 0, sWonderCardData->bodyText[i]); + break; + case WIN_FOOTER: + // Print footer line 1 + AddTextPrinterParameterized3(windowId, FONT_3, 0, + sFooterTextOffsets[sWonderCardData->card.type], + sTextColorTable[sWonderCardData->gfx->textPal3], + 0, sWonderCardData->footerLine1Text); + + // Print footer line 2 + if (sWonderCardData->card.type != CARD_TYPE_LINK_STAT) { - s32 x; - AddTextPrinterParameterized3(windowId, FONT_3, 0, 1, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->title); - x = 160 - GetStringWidth(FONT_3, sMEventScreenData->subtitle, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING)); - if (x < 0) - x = 0; - AddTextPrinterParameterized3(windowId, FONT_3, x, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->subtitle); - if (sMEventScreenData->wonderCard.idNumber != 0) - { - AddTextPrinterParameterized3(windowId, FONT_2, 166, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->unk_01DD); - } - break; + // Print gift text + // Odd that CARD_TYPE_STAMP is not ignored, it has empty text for this + AddTextPrinterParameterized3(windowId, FONT_3, 0, + 16 + sFooterTextOffsets[sWonderCardData->card.type], + sTextColorTable[sWonderCardData->gfx->textPal3], + 0, sWonderCardData->footerLine2Text); } - case 1: - for (; sp0C < 4; sp0C++) + else + { + s32 x = 0; + s32 y = sFooterTextOffsets[sWonderCardData->card.type] + 16; + s32 spacing = GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING); + for (; i < sWonderCardData->recordIdx; i++) { - AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 * sp0C + 2, gUnknown_8467068[sMEventScreenData->bgSpec->textPal2], 0, sMEventScreenData->mainMessageLines[sp0C]); - } - break; - case 2: - AddTextPrinterParameterized3(windowId, FONT_3, 0, sTextYCoords[sMEventScreenData->wonderCard.type], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine1); - if (sMEventScreenData->wonderCard.type != 2) - { - AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 + sTextYCoords[sMEventScreenData->wonderCard.type], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine2); - } - else - { - s32 x = 0; - s32 y = sTextYCoords[sMEventScreenData->wonderCard.type] + 16; - s32 spacing = GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING); - for (; sp0C < sMEventScreenData->recordIdx; sp0C++) + // Print stat text + AddTextPrinterParameterized3(windowId, FONT_3, x, y, sTextColorTable[sWonderCardData->gfx->textPal3], 0, sWonderCardData->statTextData[i].statText); + if (sWonderCardData->statTextData[i].statNumberText[0] != EOS) { - AddTextPrinterParameterized3(windowId, FONT_3, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].nameTxt); - if (sMEventScreenData->recordStrings[sp0C].numberTxt[0] != EOS) - { - x += GetStringWidth(FONT_3, sMEventScreenData->recordStrings[sp0C].nameTxt, spacing); - AddTextPrinterParameterized3(windowId, FONT_2, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].numberTxt); - x += GetStringWidth(FONT_3, sMEventScreenData->recordStrings[sp0C].numberTxt, spacing) + sMEventScreenData->recordStrings[sp0C].nDigits; - } + // Print stat number + x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statText, spacing); + AddTextPrinterParameterized3(windowId, FONT_2, x, y, + sTextColorTable[sWonderCardData->gfx->textPal3], + 0, sWonderCardData->statTextData[i].statNumberText); + x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width; } } - break; + } + break; } CopyWindowToVram(windowId, COPYWIN_FULL); } -static void sub_8146060(void) +static void CreateCardSprites(void) { - u8 r7 = 0; - sMEventScreenData->monIconId = 0xFF; - if (sMEventScreenData->buff3430Sub.iconSpecies != SPECIES_NONE) + u8 i = 0; + sWonderCardData->monIconSpriteId = SPRITE_NONE; + + // Create icon sprite + if (sWonderCardData->cardMetadata.iconSpecies != SPECIES_NONE) { - sMEventScreenData->monIconId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.iconSpecies), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE); - gSprites[sMEventScreenData->monIconId].oam.priority = 2; + sWonderCardData->monIconSpriteId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sWonderCardData->cardMetadata.iconSpecies), SpriteCallbackDummy, 220, 20, 0, FALSE); + gSprites[sWonderCardData->monIconSpriteId].oam.priority = 2; } - if (sMEventScreenData->wonderCard.maxStamps != 0 && sMEventScreenData->wonderCard.type == 1) + + // Create stamp sprites + if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP) { - LoadCompressedSpriteSheetUsingHeap(&sShadowSpriteSheet); - LoadSpritePalette(&sShadowSpritePalettes[sMEventScreenData->bgSpec->index]); - for (; r7 < sMEventScreenData->wonderCard.maxStamps; r7++) + LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_StampShadow); + LoadSpritePalette(&sSpritePalettes_StampShadow[sWonderCardData->gfx->index]); + for (; i < sWonderCardData->card.maxStamps; i++) { - sMEventScreenData->cardIconAndShadowSprites[r7][0] = 0xFF; - sMEventScreenData->cardIconAndShadowSprites[r7][1] = 0xFF; - sMEventScreenData->cardIconAndShadowSprites[r7][0] = CreateSprite(&sShadowSpriteTemplate, 0xd8 - 32 * r7, 0x90, 8); - if (sMEventScreenData->buff3430Sub.stampData[0][r7] != 0) + sWonderCardData->stampSpriteIds[i][0] = SPRITE_NONE; + sWonderCardData->stampSpriteIds[i][1] = SPRITE_NONE; + sWonderCardData->stampSpriteIds[i][0] = CreateSprite(&sSpriteTemplate_StampShadow, 216 - 32 * i, 0x90, 8); + if (sWonderCardData->cardMetadata.stampData[0][i] != 0) { - sMEventScreenData->cardIconAndShadowSprites[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.stampData[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0); - gSprites[sMEventScreenData->cardIconAndShadowSprites[r7][1]].oam.priority = 2; + sWonderCardData->stampSpriteIds[i][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sWonderCardData->cardMetadata.stampData[0][i]), SpriteCallbackDummy, 216 - 32 * i, 136, 0, 0); + gSprites[sWonderCardData->stampSpriteIds[i][1]].oam.priority = 2; } } } } -static void sub_81461D8(void) +static void DestroyCardSprites(void) { - u8 r6 = 0; - if (sMEventScreenData->monIconId != 0xFF) - DestroyMonIcon(&gSprites[sMEventScreenData->monIconId]); - if (sMEventScreenData->wonderCard.maxStamps != 0 && sMEventScreenData->wonderCard.type == 1) + u8 i = 0; + + // Destroy icon sprite + if (sWonderCardData->monIconSpriteId != SPRITE_NONE) + DestroyMonIcon(&gSprites[sWonderCardData->monIconSpriteId]); + + // Destroy stamp sprites + if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP) { - for (; r6 < sMEventScreenData->wonderCard.maxStamps; r6++) + for (; i < sWonderCardData->card.maxStamps; i++) { - if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF) + if (sWonderCardData->stampSpriteIds[i][0] != SPRITE_NONE) { - DestroySprite(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][0]]); - // This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior. - // if (sMEventScreenData->cardIconAndShadowSprites[r6][1] != 0xFF) - if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF) - { - DestroyMonIcon(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][1]]); - } + DestroySprite(&gSprites[sWonderCardData->stampSpriteIds[i][0]]); + #ifdef BUGFIX + if (sWonderCardData->stampSpriteIds[i][1] != SPRITE_NONE) + #else + if (sWonderCardData->stampSpriteIds[i][0] != SPRITE_NONE) + #endif + DestroyMonIcon(&gSprites[sWonderCardData->stampSpriteIds[i][1]]); } } - FreeSpriteTilesByTag(0x8000); - FreeSpritePaletteByTag(0x8000); + FreeSpriteTilesByTag(TAG_STAMP_SHADOW); + FreeSpritePaletteByTag(TAG_STAMP_SHADOW); } } From 59330307a539c628d574068a55113f3025702e3b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 28 Oct 2022 02:01:58 -0400 Subject: [PATCH 3/4] Sync mystery_gift_show_news --- include/mevent.h | 22 ++- src/mystery_gift_menu.c | 14 +- src/mystery_gift_show_news.c | 339 ++++++++++++++++++++--------------- 3 files changed, 215 insertions(+), 160 deletions(-) diff --git a/include/mevent.h b/include/mevent.h index f75518774..00d199fb0 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -9,6 +9,14 @@ #define CARD_STAT_NUM_STAMPS 3 #define CARD_STAT_MAX_STAMPS 4 +enum { + NEWS_INPUT_A, + NEWS_INPUT_B, + NEWS_INPUT_SCROLL_UP, + NEWS_INPUT_SCROLL_DOWN, + NEWS_INPUT_NONE = 0xFF +}; + struct MEventClientHeaderStruct { u32 unk_00; @@ -74,21 +82,21 @@ u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventCl bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1); u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command); bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata); -bool32 InitWonderNewsResources(const struct WonderNews * a0); +bool32 WonderNews_Init(const struct WonderNews * a0); s32 WonderCard_Enter(void); -s32 FadeToWonderNewsMenu(void); +s32 WonderNews_Enter(void); void DestroyWonderCard(void); void DestroyWonderNews(void); void WonderCard_Destroy(void); -void DestroyWonderNewsResources(void); +void WonderNews_Destroy(void); s32 WonderCard_Exit(bool32 flag); -s32 FadeOutFromWonderNews(bool32 flag); +s32 WonderNews_Exit(bool32 flag); bool32 CheckReceivedGiftFromWonderCard(void); -void MENews_AddScrollIndicatorArrowPair(void); -void MENews_RemoveScrollIndicatorArrowPair(void); +void WonderNews_AddScrollIndicatorArrowPair(void); +void WonderNews_RemoveScrollIndicatorArrowPair(void); bool32 WonderNews_Test_Unk_02(void); bool32 WonderCard_Test_Unk_08_6(void); -u32 MENews_GetInput(u16 input); +u32 WonderNews_GetInput(u16 input); void InitMEventData(void); u16 MEvent_GetBattleCardCount(u32 command); void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId); diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 7dad2865e..d71aebd6a 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -806,7 +806,7 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) } else { - InitWonderNewsResources(GetSavedWonderNews()); + WonderNews_Init(GetSavedWonderNews()); } (*state)++; break; @@ -823,7 +823,7 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) } else { - v0 = FadeToWonderNewsMenu(); + v0 = WonderNews_Enter(); goto check; } done: @@ -863,9 +863,9 @@ bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) } else { - if (FadeOutFromWonderNews(arg1) != 0) + if (WonderNews_Exit(arg1) != 0) { - DestroyWonderNewsResources(); + WonderNews_Destroy(); return TRUE; } else @@ -1456,10 +1456,10 @@ void task00_mystery_gift(u8 taskId) } else { - switch (MENews_GetInput(gMain.newKeys)) + switch (WonderNews_GetInput(gMain.newKeys)) { case 0: - MENews_RemoveScrollIndicatorArrowPair(); + WonderNews_RemoveScrollIndicatorArrowPair(); data->state = 21; break; case 1: @@ -1507,7 +1507,7 @@ void task00_mystery_gift(u8 taskId) case -2u: if (data->IsCardOrNews == 1) { - MENews_AddScrollIndicatorArrowPair(); + WonderNews_AddScrollIndicatorArrowPair(); } data->state = 20; break; diff --git a/src/mystery_gift_show_news.c b/src/mystery_gift_show_news.c index 088f00f11..a6f72296b 100644 --- a/src/mystery_gift_show_news.c +++ b/src/mystery_gift_show_news.c @@ -6,45 +6,80 @@ #include "mystery_gift_menu.h" #include "menu.h" #include "link_rfu.h" +#include "list_menu.h" +#include "constants/mystery_gift.h" -struct UnkStruct_203F3CC -{ - /*0000*/ struct WonderNews wonderNews; - /*01bc*/ const struct UnkStruct_8467FB8 * bgSpec; - /*01c0*/ u8 verticalScrollDisabled:1; - u8 state:7; - /*01c1*/ u8 menuIndicatorsId; - /*01c2*/ u8 unk_01C2_0:1; - u8 unk_01C2_1:7; - /*01c3*/ u8 scrollDirection:1; - u8 unk_01C3_1:7; - /*01c4*/ u16 numMails; - /*01c6*/ u16 scrollOffset; - /*01c8*/ u16 windowIds[2]; - /*01cc*/ u8 filler_01CC[2]; - /*01ce*/ u8 title[41]; - /*01f7*/ u8 messages[10][41]; - /*0394*/ struct ScrollArrowsTemplate scrollArrowsTemplate; - /*03a4*/ u8 buffer_03A4[0x1000]; +enum { + WIN_TITLE, + WIN_BODY, + WIN_COUNT }; -static EWRAM_DATA struct UnkStruct_203F3CC * sWork = NULL; +#define TAG_ARROWS 0x1000 -static void sub_8146980(void); -static void sub_8146A30(void); -static void sub_8146B58(void); +struct WonderNewsData +{ + struct WonderNews news; + const struct UnkStruct_8467FB8 * gfx; + bool8 verticalScrollDisabled:1; + u8 enterExitState:7; + u8 arrowTaskId; + bool8 scrolling:1; + u8 scrollIncrement:7; + bool8 scrollingDown:1; + u8 scrollTotal:7; + u16 scrollEnd; + u16 scrollOffset; + u16 windowIds[WIN_COUNT]; + u8 unused[2]; + u8 titleText[WONDER_NEWS_TEXT_LENGTH + 1]; + u8 bodyText[WONDER_NEWS_BODY_TEXT_LINES][WONDER_NEWS_TEXT_LENGTH + 1]; + struct ScrollArrowsTemplate arrowsTemplate; + u8 bgTilemapBuffer[0x1000]; +}; -static const u8 sTextPals[][3] = { +static EWRAM_DATA struct WonderNewsData * sWonderNewsData = NULL; + +static void BufferNewsText(void); +static void DrawNewsWindows(void); +static void UpdateNewsScroll(void); + +static const u8 sTextColorTable[][3] = { {0, 2, 3}, {0, 1, 2} }; -static const struct WindowTemplate gUnknown_8468040[] = { - {0, 1, 0, 28, 3, 15, 0x000}, - {2, 1, 3, 28, 20, 15, 0x000} +static const struct WindowTemplate sWindowTemplates[] = { + [WIN_TITLE] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0, + .width = 28, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x000 + }, + [WIN_BODY] = { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 28, + .height = 20, + .paletteNum = 15, + .baseBlock = 0x000 + } }; -static const struct ScrollArrowsTemplate sScrollArrowsTemplate = { - 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, - 0x0000, 0x0002, 0x1000, 0x1000, 0x0, +static const struct ScrollArrowsTemplate sArrowsTemplate = { + .firstArrowType = SCROLL_ARROW_UP, + .firstX = 232, + .firstY = 24, + .secondArrowType = SCROLL_ARROW_DOWN, + .secondX = 232, + .secondY = 152, + .fullyUpThreshold = 0, + .fullyDownThreshold = 2, + .tileTag = TAG_ARROWS, + .palTag = TAG_ARROWS, + .palNum = 0 }; static const u16 sNews1Pal[] = INCBIN_U16("graphics/mevent/pal_468060.gbapal"); @@ -61,7 +96,7 @@ static const u8 sNews6Map[] = INCBIN_U8("graphics/mevent/tilemap_4684D8.bin.lz") static const u8 sNews7Gfx[] = INCBIN_U8("graphics/mevent/gfx_4685B4.4bpp.lz"); static const u8 sNews7Map[] = INCBIN_U8("graphics/mevent/tilemap_468644.bin.lz"); -static const struct UnkStruct_8467FB8 sBgSpecs[] = { +static const struct UnkStruct_8467FB8 sNewsGraphics[NUM_WONDER_BGS] = { {1, 0, 0, 0, sNews0Gfx, sNews0Map, sNews1Pal}, {1, 0, 0, 0, sNews1Gfx, sNews1Map, gCard1Pal}, {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard2Pal}, @@ -72,37 +107,36 @@ static const struct UnkStruct_8467FB8 sBgSpecs[] = { {1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal} }; -bool32 InitWonderNewsResources(const struct WonderNews * news) +bool32 WonderNews_Init(const struct WonderNews * news) { if (news == NULL) return FALSE; - sWork = AllocZeroed(sizeof(struct UnkStruct_203F3CC)); - if (sWork == NULL) + sWonderNewsData = AllocZeroed(sizeof(*sWonderNewsData)); + if (sWonderNewsData == NULL) return FALSE; - sWork->wonderNews = *news; - if (sWork->wonderNews.bgType >= NELEMS(sBgSpecs)) - sWork->wonderNews.bgType = 0; - sWork->bgSpec = &sBgSpecs[sWork->wonderNews.bgType]; - sWork->menuIndicatorsId = 0xFF; + sWonderNewsData->news = *news; + if (sWonderNewsData->news.bgType >= NUM_WONDER_BGS) + sWonderNewsData->news.bgType = 0; + sWonderNewsData->gfx = &sNewsGraphics[sWonderNewsData->news.bgType]; + sWonderNewsData->arrowTaskId = TASK_NONE; return TRUE; } -void DestroyWonderNewsResources(void) +void WonderNews_Destroy(void) { - if (sWork != NULL) + if (sWonderNewsData != NULL) { - *sWork = (struct UnkStruct_203F3CC){}; - Free(sWork); - sWork = NULL; + *sWonderNewsData = (struct WonderNewsData){}; + FREE_AND_SET_NULL(sWonderNewsData); } } -s32 FadeToWonderNewsMenu(void) +s32 WonderNews_Enter(void) { - if (sWork == NULL) + if (sWonderNewsData == NULL) return -1; - switch (sWork->state) + switch (sWonderNewsData->enterExitState) { case 0: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); @@ -110,11 +144,11 @@ s32 FadeToWonderNewsMenu(void) case 1: if (UpdatePaletteFade()) return 0; - ChangeBgY(0, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgY(3, 0, 0); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, DISPLAY_WIDTH)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(26, 152)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); @@ -129,26 +163,26 @@ s32 FadeToWonderNewsMenu(void) CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); - DecompressAndCopyTileDataToVram(3, sWork->bgSpec->tiles, 0, 8, 0); - sWork->windowIds[0] = AddWindow(&gUnknown_8468040[0]); - sWork->windowIds[1] = AddWindow(&gUnknown_8468040[1]); + DecompressAndCopyTileDataToVram(3, sWonderNewsData->gfx->tiles, 0, 8, 0); + sWonderNewsData->windowIds[WIN_TITLE] = AddWindow(&sWindowTemplates[WIN_TITLE]); + sWonderNewsData->windowIds[WIN_BODY] = AddWindow(&sWindowTemplates[WIN_BODY]); break; case 3: if (FreeTempTileDataBuffersIfPossible()) return 0; gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(sWork->bgSpec->pal, 0x10, 0x20); - LZ77UnCompWram(sWork->bgSpec->map, sWork->buffer_03A4); - CopyRectToBgTilemapBufferRect(1, sWork->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); - CopyRectToBgTilemapBufferRect(3, sWork->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); + LoadPalette(sWonderNewsData->gfx->pal, 0x10, 0x20); + LZ77UnCompWram(sWonderNewsData->gfx->map, sWonderNewsData->bgTilemapBuffer); + CopyRectToBgTilemapBufferRect(1, sWonderNewsData->bgTilemapBuffer, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); + CopyRectToBgTilemapBufferRect(3, sWonderNewsData->bgTilemapBuffer, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(3); break; case 4: - sub_8146980(); + BufferNewsText(); break; case 5: - sub_8146A30(); + DrawNewsWindows(); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(2); break; @@ -157,26 +191,26 @@ s32 FadeToWonderNewsMenu(void) ShowBg(2); ShowBg(3); gPaletteFade.bufferTransferDisabled = FALSE; - sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset); + sWonderNewsData->arrowTaskId = AddScrollIndicatorArrowPair(&sWonderNewsData->arrowsTemplate, &sWonderNewsData->scrollOffset); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); UpdatePaletteFade(); break; default: if (UpdatePaletteFade()) return 0; - sWork->state = 0; + sWonderNewsData->enterExitState = 0; return 1; } - ++sWork->state; + sWonderNewsData->enterExitState++; return 0; } -s32 FadeOutFromWonderNews(bool32 flag) +s32 WonderNews_Exit(bool32 useCancel) { - if (sWork == NULL) + if (sWonderNewsData == NULL) return -1; - switch (sWork->state) + switch (sWonderNewsData->enterExitState) { case 0: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); @@ -184,7 +218,7 @@ s32 FadeOutFromWonderNews(bool32 flag) case 1: if (UpdatePaletteFade()) return 0; - ChangeBgY(2, 0, 0); + ChangeBgY(2, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_WIN0H, 0); SetGpuReg(REG_OFFSET_WIN0V, 0); SetGpuReg(REG_OFFSET_WININ, 0); @@ -204,20 +238,20 @@ s32 FadeOutFromWonderNews(bool32 flag) case 3: HideBg(1); HideBg(2); - RemoveWindow(sWork->windowIds[1]); - RemoveWindow(sWork->windowIds[0]); + RemoveWindow(sWonderNewsData->windowIds[WIN_BODY]); + RemoveWindow(sWonderNewsData->windowIds[WIN_TITLE]); break; case 4: - ChangeBgY(2, 0, 0); - ChangeBgY(3, 0, 0); - if (sWork->menuIndicatorsId != 0xFF) + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + if (sWonderNewsData->arrowTaskId != TASK_NONE) { - RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId); - sWork->menuIndicatorsId = 0xFF; + RemoveScrollIndicatorArrowPair(sWonderNewsData->arrowTaskId); + sWonderNewsData->arrowTaskId = TASK_NONE; } break; case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag); + PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); break; case 6: MG_DrawCheckerboardPattern(); @@ -228,130 +262,143 @@ s32 FadeOutFromWonderNews(bool32 flag) default: if (UpdatePaletteFade()) return 0; - sWork->state = 0; + sWonderNewsData->enterExitState = 0; return 1; } - ++sWork->state; + ++sWonderNewsData->enterExitState; return 0; } -void MENews_RemoveScrollIndicatorArrowPair(void) +void WonderNews_RemoveScrollIndicatorArrowPair(void) { - if (!sWork->verticalScrollDisabled && sWork->menuIndicatorsId != 0xFF) + if (!sWonderNewsData->verticalScrollDisabled && sWonderNewsData->arrowTaskId != TASK_NONE) { - RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId); - sWork->menuIndicatorsId = 0xFF; - sWork->verticalScrollDisabled = TRUE; + RemoveScrollIndicatorArrowPair(sWonderNewsData->arrowTaskId); + sWonderNewsData->arrowTaskId = TASK_NONE; + sWonderNewsData->verticalScrollDisabled = TRUE; } } -void MENews_AddScrollIndicatorArrowPair(void) +void WonderNews_AddScrollIndicatorArrowPair(void) { - if (sWork->verticalScrollDisabled) + if (sWonderNewsData->verticalScrollDisabled) { - sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset); - sWork->verticalScrollDisabled = FALSE; + sWonderNewsData->arrowTaskId = AddScrollIndicatorArrowPair(&sWonderNewsData->arrowsTemplate, &sWonderNewsData->scrollOffset); + sWonderNewsData->verticalScrollDisabled = FALSE; } } -u32 MENews_GetInput(u16 input) +u32 WonderNews_GetInput(u16 input) { - if (sWork->unk_01C2_0) + if (sWonderNewsData->scrolling) { - sub_8146B58(); - return 0xFF; + UpdateNewsScroll(); + return NEWS_INPUT_NONE; } switch (input) { case A_BUTTON: - return 0; + return NEWS_INPUT_A; case B_BUTTON: - return 1; + return NEWS_INPUT_B; case DPAD_UP: - if (sWork->scrollOffset == 0) - return 0xFF; - if (sWork->verticalScrollDisabled) - return 0xFF; - sWork->scrollDirection = FALSE; + if (sWonderNewsData->scrollOffset == 0) + return NEWS_INPUT_NONE; + if (sWonderNewsData->verticalScrollDisabled) + return NEWS_INPUT_NONE; + sWonderNewsData->scrollingDown = FALSE; break; case DPAD_DOWN: - if (sWork->scrollOffset == sWork->numMails) - return 0xFF; - if (sWork->verticalScrollDisabled) - return 0xFF; - sWork->scrollDirection = TRUE; + if (sWonderNewsData->scrollOffset == sWonderNewsData->scrollEnd) + return NEWS_INPUT_NONE; + if (sWonderNewsData->verticalScrollDisabled) + return NEWS_INPUT_NONE; + sWonderNewsData->scrollingDown = TRUE; break; default: - return 0xFF; + return NEWS_INPUT_NONE; } - sWork->unk_01C2_0 = TRUE; - sWork->unk_01C2_1 = 2; - sWork->unk_01C3_1 = 0; - if (sWork->scrollDirection == FALSE) - return 2; + + // Init scroll + sWonderNewsData->scrolling = TRUE; + sWonderNewsData->scrollIncrement = 2; + sWonderNewsData->scrollTotal = 0; + if (!sWonderNewsData->scrollingDown) + return NEWS_INPUT_SCROLL_UP; else - return 3; + return NEWS_INPUT_SCROLL_DOWN; } -static void sub_8146980(void) +static void BufferNewsText(void) { u8 i = 0; - memcpy(sWork->title, sWork->wonderNews.titleText, 40); - sWork->title[40] = EOS; - for (; i < 10; ++i) + + // Copy title text + memcpy(sWonderNewsData->titleText, sWonderNewsData->news.titleText, WONDER_NEWS_TEXT_LENGTH); + sWonderNewsData->titleText[WONDER_NEWS_TEXT_LENGTH] = EOS; + + // Copy body text + for (; i < WONDER_NEWS_BODY_TEXT_LINES; i++) { - memcpy(sWork->messages[i], sWork->wonderNews.bodyText[i], 40); - sWork->messages[i][40] = EOS; - if (i > 7 && sWork->messages[i][0] != EOS) - ++sWork->numMails; + memcpy(sWonderNewsData->bodyText[i], sWonderNewsData->news.bodyText[i], WONDER_NEWS_TEXT_LENGTH); + sWonderNewsData->bodyText[i][WONDER_NEWS_TEXT_LENGTH] = EOS; + if (i > 7 && sWonderNewsData->bodyText[i][0] != EOS) + sWonderNewsData->scrollEnd++; } - sWork->scrollArrowsTemplate = sScrollArrowsTemplate; - sWork->scrollArrowsTemplate.fullyDownThreshold = sWork->numMails; + sWonderNewsData->arrowsTemplate = sArrowsTemplate; + sWonderNewsData->arrowsTemplate.fullyDownThreshold = sWonderNewsData->scrollEnd; } -static void sub_8146A30(void) +static void DrawNewsWindows(void) { u8 i = 0; s32 x; - PutWindowTilemap(sWork->windowIds[0]); - PutWindowTilemap(sWork->windowIds[1]); - FillWindowPixelBuffer(sWork->windowIds[0], 0); - FillWindowPixelBuffer(sWork->windowIds[1], 0); - x = (0xe0 - GetStringWidth(FONT_3, sWork->title, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING))) / 2; + PutWindowTilemap(sWonderNewsData->windowIds[WIN_TITLE]); + PutWindowTilemap(sWonderNewsData->windowIds[WIN_BODY]); + FillWindowPixelBuffer(sWonderNewsData->windowIds[WIN_TITLE], 0); + FillWindowPixelBuffer(sWonderNewsData->windowIds[WIN_BODY], 0); + + // Print title text + x = (224 - GetStringWidth(FONT_3, sWonderNewsData->titleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING))) / 2; if (x < 0) x = 0; - AddTextPrinterParameterized3(sWork->windowIds[0], FONT_3, x, 6, sTextPals[sWork->bgSpec->textPal1], 0, sWork->title); - for (; i < 10; ++i) + AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_3, x, 6, sTextColorTable[sWonderNewsData->gfx->textPal1], 0, sWonderNewsData->titleText); + + // Print body text + for (; i < WONDER_NEWS_BODY_TEXT_LINES; ++i) { - AddTextPrinterParameterized3(sWork->windowIds[1], FONT_3, 0, 16 * i + 2, sTextPals[sWork->bgSpec->textPal2], 0, sWork->messages[i]); + AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_BODY], FONT_3, 0, + 16 * i + 2, + sTextColorTable[sWonderNewsData->gfx->textPal2], + 0, sWonderNewsData->bodyText[i]); } - CopyWindowToVram(sWork->windowIds[0], COPYWIN_FULL); - CopyWindowToVram(sWork->windowIds[1], COPYWIN_FULL); + CopyWindowToVram(sWonderNewsData->windowIds[WIN_TITLE], COPYWIN_FULL); + CopyWindowToVram(sWonderNewsData->windowIds[WIN_BODY], COPYWIN_FULL); } -static void sub_8146B58(void) +static void UpdateNewsScroll(void) { - u16 r4 = sWork->unk_01C2_1; - r4 <<= 8; - if (sWork->scrollDirection) + u16 bgMove = sWonderNewsData->scrollIncrement; + bgMove *= 256; + if (sWonderNewsData->scrollingDown) { - ChangeBgY(2, r4, 1); - ChangeBgY(3, r4, 1); + ChangeBgY(2, bgMove, BG_COORD_ADD); + ChangeBgY(3, bgMove, BG_COORD_ADD); } else { - ChangeBgY(2, r4, 2); - ChangeBgY(3, r4, 2); + ChangeBgY(2, bgMove, BG_COORD_SUB); + ChangeBgY(3, bgMove, BG_COORD_SUB); } - sWork->unk_01C3_1 += sWork->unk_01C2_1; - if (sWork->unk_01C3_1 > 15) + sWonderNewsData->scrollTotal += sWonderNewsData->scrollIncrement; + if (sWonderNewsData->scrollTotal > 15) { - if (sWork->scrollDirection) - ++sWork->scrollOffset; + if (sWonderNewsData->scrollingDown) + sWonderNewsData->scrollOffset++; else - --sWork->scrollOffset; - sWork->unk_01C2_0 = FALSE; - sWork->unk_01C3_1 = 0; + sWonderNewsData->scrollOffset--; + sWonderNewsData->scrolling = FALSE; + sWonderNewsData->scrollTotal = 0; } } From 42df883ebbdb3c03e93c21d4d4850f5d6e91e983 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 28 Oct 2022 02:05:47 -0400 Subject: [PATCH 4/4] Sync wonder card/news graphics --- graphics/mevent/gfx_46718C.png | Bin 330 -> 0 bytes graphics/mevent/gfx_46737C.png | Bin 314 -> 0 bytes graphics/mevent/gfx_467558.png | Bin 288 -> 0 bytes graphics/mevent/gfx_467700.png | Bin 558 -> 0 bytes graphics/mevent/gfx_467A7C.png | Bin 551 -> 0 bytes graphics/mevent/gfx_467EF4.png | Bin 116 -> 0 bytes graphics/mevent/gfx_4680C0.png | Bin 169 -> 0 bytes graphics/mevent/gfx_46821C.png | Bin 103 -> 0 bytes graphics/mevent/gfx_46830C.png | Bin 146 -> 0 bytes graphics/mevent/gfx_468448.png | Bin 173 -> 0 bytes graphics/mevent/gfx_4685B4.png | Bin 173 -> 0 bytes .../bg0.bin} | Bin .../pal_46708C.pal => wonder_card/bg0.pal} | 0 graphics/wonder_card/bg0.png | Bin 0 -> 318 bytes .../bg1.bin} | Bin .../pal_4670AC.pal => wonder_card/bg1.pal} | 0 graphics/wonder_card/bg1.png | Bin 0 -> 311 bytes .../bg2.bin} | Bin .../pal_4670CC.pal => wonder_card/bg2.pal} | 0 graphics/wonder_card/bg2.png | Bin 0 -> 279 bytes .../pal_4670EC.pal => wonder_card/bg3.pal} | 0 .../pal_46710C.pal => wonder_card/bg4.pal} | 0 .../pal_46712C.pal => wonder_card/bg5.pal} | 0 .../bg6.bin} | Bin .../pal_46714C.pal => wonder_card/bg6.pal} | 0 graphics/wonder_card/bg6.png | Bin 0 -> 545 bytes .../bg7.bin} | Bin .../pal_46716C.pal => wonder_card/bg7.pal} | 0 graphics/wonder_card/bg7.png | Bin 0 -> 534 bytes graphics/wonder_card/stamp_shadow.png | Bin 0 -> 167 bytes .../stamp_shadow_0.pal} | 0 .../stamp_shadow_1.pal} | 0 .../stamp_shadow_2.pal} | 0 .../stamp_shadow_3.pal} | 0 .../stamp_shadow_4.pal} | 0 .../stamp_shadow_5.pal} | 0 .../stamp_shadow_6.pal} | 0 .../stamp_shadow_7.pal} | 0 .../bg0.bin} | Bin .../pal_468060.pal => wonder_news/bg0.pal} | 0 graphics/wonder_news/bg0.png | Bin 0 -> 225 bytes .../bg1.bin} | Bin graphics/wonder_news/bg1.png | Bin 0 -> 160 bytes .../bg2.bin} | Bin graphics/wonder_news/bg2.png | Bin 0 -> 204 bytes .../bg6.bin} | Bin .../pal_468080.pal => wonder_news/bg6.pal} | 0 graphics/wonder_news/bg6.png | Bin 0 -> 223 bytes .../bg7.bin} | Bin .../pal_4680A0.pal => wonder_news/bg7.pal} | 0 graphics/wonder_news/bg7.png | Bin 0 -> 223 bytes include/mevent.h | 12 +- src/mystery_gift_show_card.c | 110 +++++++++--------- src/mystery_gift_show_news.c | 50 ++++---- 54 files changed, 86 insertions(+), 86 deletions(-) delete mode 100644 graphics/mevent/gfx_46718C.png delete mode 100644 graphics/mevent/gfx_46737C.png delete mode 100644 graphics/mevent/gfx_467558.png delete mode 100644 graphics/mevent/gfx_467700.png delete mode 100644 graphics/mevent/gfx_467A7C.png delete mode 100644 graphics/mevent/gfx_467EF4.png delete mode 100644 graphics/mevent/gfx_4680C0.png delete mode 100644 graphics/mevent/gfx_46821C.png delete mode 100644 graphics/mevent/gfx_46830C.png delete mode 100644 graphics/mevent/gfx_468448.png delete mode 100644 graphics/mevent/gfx_4685B4.png rename graphics/{mevent/tilemap_467288.bin => wonder_card/bg0.bin} (100%) rename graphics/{mevent/pal_46708C.pal => wonder_card/bg0.pal} (100%) create mode 100644 graphics/wonder_card/bg0.png rename graphics/{mevent/tilemap_467470.bin => wonder_card/bg1.bin} (100%) rename graphics/{mevent/pal_4670AC.pal => wonder_card/bg1.pal} (100%) create mode 100644 graphics/wonder_card/bg1.png rename graphics/{mevent/tilemap_46762C.bin => wonder_card/bg2.bin} (100%) rename graphics/{mevent/pal_4670CC.pal => wonder_card/bg2.pal} (100%) create mode 100644 graphics/wonder_card/bg2.png rename graphics/{mevent/pal_4670EC.pal => wonder_card/bg3.pal} (100%) rename graphics/{mevent/pal_46710C.pal => wonder_card/bg4.pal} (100%) rename graphics/{mevent/pal_46712C.pal => wonder_card/bg5.pal} (100%) rename graphics/{mevent/tilemap_467934.bin => wonder_card/bg6.bin} (100%) rename graphics/{mevent/pal_46714C.pal => wonder_card/bg6.pal} (100%) create mode 100644 graphics/wonder_card/bg6.png rename graphics/{mevent/tilemap_467CAC.bin => wonder_card/bg7.bin} (100%) rename graphics/{mevent/pal_46716C.pal => wonder_card/bg7.pal} (100%) create mode 100644 graphics/wonder_card/bg7.png create mode 100644 graphics/wonder_card/stamp_shadow.png rename graphics/{mevent/pal_467DF4.pal => wonder_card/stamp_shadow_0.pal} (100%) rename graphics/{mevent/pal_467E14.pal => wonder_card/stamp_shadow_1.pal} (100%) rename graphics/{mevent/pal_467E34.pal => wonder_card/stamp_shadow_2.pal} (100%) rename graphics/{mevent/pal_467E54.pal => wonder_card/stamp_shadow_3.pal} (100%) rename graphics/{mevent/pal_467E74.pal => wonder_card/stamp_shadow_4.pal} (100%) rename graphics/{mevent/pal_467E94.pal => wonder_card/stamp_shadow_5.pal} (100%) rename graphics/{mevent/pal_467EB4.pal => wonder_card/stamp_shadow_6.pal} (100%) rename graphics/{mevent/pal_467ED4.pal => wonder_card/stamp_shadow_7.pal} (100%) rename graphics/{mevent/tilemap_468140.bin => wonder_news/bg0.bin} (100%) rename graphics/{mevent/pal_468060.pal => wonder_news/bg0.pal} (100%) create mode 100644 graphics/wonder_news/bg0.png rename graphics/{mevent/tilemap_46824C.bin => wonder_news/bg1.bin} (100%) create mode 100644 graphics/wonder_news/bg1.png rename graphics/{mevent/tilemap_46837C.bin => wonder_news/bg2.bin} (100%) create mode 100644 graphics/wonder_news/bg2.png rename graphics/{mevent/tilemap_4684D8.bin => wonder_news/bg6.bin} (100%) rename graphics/{mevent/pal_468080.pal => wonder_news/bg6.pal} (100%) create mode 100644 graphics/wonder_news/bg6.png rename graphics/{mevent/tilemap_468644.bin => wonder_news/bg7.bin} (100%) rename graphics/{mevent/pal_4680A0.pal => wonder_news/bg7.pal} (100%) create mode 100644 graphics/wonder_news/bg7.png diff --git a/graphics/mevent/gfx_46718C.png b/graphics/mevent/gfx_46718C.png deleted file mode 100644 index bf52445e63c00d8981e96586f119e629efe610ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^96QU(D&A+AwJr(C^y)yvB(DJ$#h zUaxmogT8&c`v3p`XV0#_dw2Ce!+$iiT>jb#px&#VE{-7minaV!jGB&eZY6whgWTTcfIeo7_;TyY&^~>s(-RyZ2A5ByZNpwOyidDp5B%7 z!2R;}O{sr>opIz^D*4RX^zdwH%MFIE;ZAcN=^T9aV%1@f64fKs%Z@((%Px6uO0J>K U{r&NWfF5M67ethj0^wK_`|6}QtZ`qfoyx1=@ z!^1FPL!#ctt*;Nf%rmSLy}du)tHr8?=TTtI6V>Tza;~9$Y@P0j?ngFVdE0Sfnw6W% z`JC9?%4a_=8YxFByy||(73@6e+M#N0ap$DlGj^_4%E@-VYP!?!Ca| diff --git a/graphics/mevent/gfx_467558.png b/graphics/mevent/gfx_467558.png deleted file mode 100644 index c28edd8919a36a835cb99082a94bac3163c1e0d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^96-E*g&9a5*kQB)NErn9gt$f>oe~t3)!f{@WX_tS zd#`?b_y0cw0=;{8^x3oSd-sa3UX9wj*Yf}W|0{M{B?0xW_H=O!(U`b&;zhwG2OgKj zvMqc^{ErLe+z?tKJo5&F@s$Vn+|-K-*n56|RCCBXoa*}R`B*Tke3-eUHx3vIVCg!0ORk3S^xk5 diff --git a/graphics/mevent/gfx_467700.png b/graphics/mevent/gfx_467700.png deleted file mode 100644 index f31385746f99871768c7f044393b52d65390ce3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmV+}0@3}6P)5bTGh>3-ql*w)oSkcV&>jr)y-nXv|{e&V)pK8rx32b0005G zNkld(hGQx*7#mW+_4d%^momtt6uysAy&yq!iP}j!!5R3~14+LQ1SJ&TI zpa7u)9HDaacr{rJFu`nJY>5C9tah{@p#d&q@++~La2*w~h#w%{ z^9^72bz#od7RDXyyK!GOSC}H+pudZ%DH}Rugs8uik*t>oKS8I-Pu6MfC*9CIEe}l6 zk7zW~OG8UW8d@^a(2~J^QC!EE?_Mo4p*Z7!Vj)3NpAZ+zj0MNiljqvM^v6T++1;O` zQTl0d$|n*YaDK|^Q9t+3J3sWu_ZJ;JamB}4eUfEwE&H`&2Niy8djqJK?X15fnhwgj wKTNKBd%F*-g!qdEZE^aS>E*tSvUy7T1L-+ub}9f2?*IS*07*qoM6N<$f+>FjRR910 diff --git a/graphics/mevent/gfx_467A7C.png b/graphics/mevent/gfx_467A7C.png deleted file mode 100644 index f94b6c50f9459613f0c7d62411050bd395d2ba51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)v$<5grazyz~>u_XdbuszU%gc@kZ$R$7rqGM&}tI14DhM*q6ZXUqC<9(B#B3{?W zo1Hmf@at55WGjAJ4EIp&+vnx9TSg7sfz^5p*i)Vf`0~JlpPc8UE4gm|gTiDCCny2P z46owg@~062arGzx*I;1=PND*x9-RshjRKMmj>cVz!nguh@++{Ka32-1h+iPS^Bq6- z-NxLk-57TQzHP2BMZ7_OjjAYLbjS!%f9XcDUf%o!ohCn7r@5c>Li1~RU~>J4S|h#G zv}B~FB_lO08SEFub&2;qs%0i5XKYX`BuMHEak0!;a4bE!ul-AZ+yp&H6}dffL96})oB$6TGsvRTW1?N~vDU)w$as%1N?FNvmua-MIU>)Ae@ p!zv;E#ez0D{bX9*w^kNUX)l}OX71l}(B%LC002ovPDHLkV1mrb1lRxo diff --git a/graphics/mevent/gfx_467EF4.png b/graphics/mevent/gfx_467EF4.png deleted file mode 100644 index 51a1aeb0c246cfd35423131ef327d13e4f077f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et0wfrw&pzJ*q^vz%9780gCjaPXljsnxU}p_z ztbhODfvpF_iTY|bo_CEd68{eG5Kx?OKvJb4mLZnAZK1@qB&(i~^NbAo)8B`#x6Ww; O8RzNh=d#Wzp$Py25F?-f diff --git a/graphics/mevent/gfx_4680C0.png b/graphics/mevent/gfx_4680C0.png deleted file mode 100644 index 1a27f321311d1b05ce15cabadb03105bc4a562f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^96(&b0wfspw=qr!QU#tajv*Qor}kasJ)pqBI&<4H z?i-Oa4)Uh3x^39JWx+Bvww_w~=?;1}4<;U9%ky+jOw({lNvc>Q_i~-$@;e*9OwxM! z`OYHFu=d@vt^R#|wfk}P_GaGmujcOYW->f-A;3Mmd`^e8!=2`O*Gn7snA^z4cd`3M TtoNwf2y%m`tDnm{r-UW|%sxRt diff --git a/graphics/mevent/gfx_46821C.png b/graphics/mevent/gfx_46821C.png deleted file mode 100644 index aab27d16cc9859a77903a0ac9d2b591cb49b0ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^96+qW0wfreEjSZ^l%A)HV+hC0mdKI;Vst07su1 ANB{r; diff --git a/graphics/mevent/gfx_46830C.png b/graphics/mevent/gfx_46830C.png deleted file mode 100644 index 3c2b8e6d14767499a4b39235619946b47071e3fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^96%hw0wfqTq*xXLsYp*3#}J9B$v^m6cw7V)Iyh(v zs+?dr;@~9U!P3~_Ah3`_N#GTWW6UHDRfUEPJ&g>9iWr$XDt|<(DTuvnF`mQ0_(?Km sj<3TrOKE4HWBv`Yo-I}ejwuoh3{6{8PM(iD%?h&2)78&qol`;+0L$ShU;qFB diff --git a/graphics/mevent/gfx_468448.png b/graphics/mevent/gfx_468448.png deleted file mode 100644 index 137dbe9f3c41ee24757da3a6b5f4efd774fcd350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^96(&b0wfspw=qr!QYD@)jv*Qo*Pg$~+n~V1a$(&8 zt~CtO5B&O)b_Kg1i2TweC6N2!@b3zhCzqIVIcgJJ`8IU~q&*AI^51g2s(ho#jJ=YX z2I8e9k9~K2RQqODn^*g{`1nu$o!@tTOgrEH;vmZ+Bhg7h4na%>912oFeTj9lPw()( Wm3}<^gc^f0$Q_=pelF{r5}E+q%t40$ diff --git a/graphics/mevent/gfx_4685B4.png b/graphics/mevent/gfx_4685B4.png deleted file mode 100644 index 137dbe9f3c41ee24757da3a6b5f4efd774fcd350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^96(&b0wfspw=qr!QYD@)jv*Qo*Pg$~+n~V1a$(&8 zt~CtO5B&O)b_Kg1i2TweC6N2!@b3zhCzqIVIcgJJ`8IU~q&*AI^51g2s(ho#jJ=YX z2I8e9k9~K2RQqODn^*g{`1nu$o!@tTOgrEH;vmZ+Bhg7h4na%>912oFeTj9lPw()( Wm3}<^gc^f0$Q_=pelF{r5}E+q%t40$ diff --git a/graphics/mevent/tilemap_467288.bin b/graphics/wonder_card/bg0.bin similarity index 100% rename from graphics/mevent/tilemap_467288.bin rename to graphics/wonder_card/bg0.bin diff --git a/graphics/mevent/pal_46708C.pal b/graphics/wonder_card/bg0.pal similarity index 100% rename from graphics/mevent/pal_46708C.pal rename to graphics/wonder_card/bg0.pal diff --git a/graphics/wonder_card/bg0.png b/graphics/wonder_card/bg0.png new file mode 100644 index 0000000000000000000000000000000000000000..924a46dac5cbab9a5f51b90e97e15a1fd58a1ab5 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bZ!VDzyEjb#px%?7E{-7@6X#xj%iCli!1iFBLS8}6 zf}VuOObWss(hbT7*!r^LtK_FFa*Y2sMZNs`GS9i(mIYmx%=Hd+3N$x`Ih44G^o7I; zv^K3`Gvw$#f1w~N{x{2}uKf?Ka+tUIFmQJ|-9M^P@|&@_j>R%{w~aej|BiqiyxJN2 z56Euj`DJmZp}hF?{GUzJp0e2lIGz)FVA(w9+JUxrtS{xAgJ#49^C`PW7jdNiSfkp! zR`OHx>7tl*;FVdQ&MBb@ E0A?JB9RL6T literal 0 HcmV?d00001 diff --git a/graphics/mevent/tilemap_467470.bin b/graphics/wonder_card/bg1.bin similarity index 100% rename from graphics/mevent/tilemap_467470.bin rename to graphics/wonder_card/bg1.bin diff --git a/graphics/mevent/pal_4670AC.pal b/graphics/wonder_card/bg1.pal similarity index 100% rename from graphics/mevent/pal_4670AC.pal rename to graphics/wonder_card/bg1.pal diff --git a/graphics/wonder_card/bg1.png b/graphics/wonder_card/bg1.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea8b1a4115b5c182563c64f16c4cba327b3095a GIT binary patch literal 311 zcmV-70m%M|P)!1fFZa>wl0lXVDiBw)gx4)GdIv0kj*S=~T;-fQJRxei68TwTv2Bj&2Ox zs4+|lZ$!{>p0t)5W$(Y>Tjv^sPabgwXW`CFfahk-SUwA98NRYHD20xL101 V%QkiG{SS04gQu&X%Q~loCIA(keA55` literal 0 HcmV?d00001 diff --git a/graphics/mevent/pal_4670EC.pal b/graphics/wonder_card/bg3.pal similarity index 100% rename from graphics/mevent/pal_4670EC.pal rename to graphics/wonder_card/bg3.pal diff --git a/graphics/mevent/pal_46710C.pal b/graphics/wonder_card/bg4.pal similarity index 100% rename from graphics/mevent/pal_46710C.pal rename to graphics/wonder_card/bg4.pal diff --git a/graphics/mevent/pal_46712C.pal b/graphics/wonder_card/bg5.pal similarity index 100% rename from graphics/mevent/pal_46712C.pal rename to graphics/wonder_card/bg5.pal diff --git a/graphics/mevent/tilemap_467934.bin b/graphics/wonder_card/bg6.bin similarity index 100% rename from graphics/mevent/tilemap_467934.bin rename to graphics/wonder_card/bg6.bin diff --git a/graphics/mevent/pal_46714C.pal b/graphics/wonder_card/bg6.pal similarity index 100% rename from graphics/mevent/pal_46714C.pal rename to graphics/wonder_card/bg6.pal diff --git a/graphics/wonder_card/bg6.png b/graphics/wonder_card/bg6.png new file mode 100644 index 0000000000000000000000000000000000000000..f534b555eca7610b7c05b20b2034792229756b2f GIT binary patch literal 545 zcmV++0^a?JP)5bTGh>3-ql*w)oSkcV&>jr)y-nXv|{e&V)pK8rx32b00053 zNkl?#Y|xU+03jo^6ZFn6?tFQ{8-z+o0{qi} z?wt6N4`ItPC6(2mr9 zsRs$t6I14>4+PC9>y5NbfO~JZ(xLo)k=;ttO9|AqjJUs&R3kVz1^~B*R!qk2Rvn}p9%r;F#GBuv( j@RD!8;ZFEw@Lb>@ztv}Un*>d#00000NkvXXu0mjfiD~#f literal 0 HcmV?d00001 diff --git a/graphics/mevent/tilemap_467CAC.bin b/graphics/wonder_card/bg7.bin similarity index 100% rename from graphics/mevent/tilemap_467CAC.bin rename to graphics/wonder_card/bg7.bin diff --git a/graphics/mevent/pal_46716C.pal b/graphics/wonder_card/bg7.pal similarity index 100% rename from graphics/mevent/pal_46716C.pal rename to graphics/wonder_card/bg7.pal diff --git a/graphics/wonder_card/bg7.png b/graphics/wonder_card/bg7.png new file mode 100644 index 0000000000000000000000000000000000000000..90890ded9923aa929bb4d42de47da60bdf87d132 GIT binary patch literal 534 zcmV+x0_pvUP)(YQ`TA;Hdi8MuZ^LWWC14JREL>MLS62aX7vahq}IacW2)6P;=>PgH?9VGS-<{u-)U z)*+X|NS*NSTr>?S;nhHmA_hV(S-2@EwKdWJQs78i9*ltl1^QM9kIc6~574zhXo8^y z4*$aU5uy%1#<2~O8-EbuJIn>1ySK3jNnmW>3PEN_{g+z??-+g~c(InDpQ-EtBA0;HT{q92Df1Swlbt|6o{>da3VM*$RphEvS!Bk2myht8nW6Zc;>7j+#_o0!+X4~ zATIVC>2hI5Fs@b%707*qoM6N<$f>wO@2LJ#7 literal 0 HcmV?d00001 diff --git a/graphics/wonder_card/stamp_shadow.png b/graphics/wonder_card/stamp_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1c92a93bad2516e6a6f4e8808d143235c3a9e9 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%AmxltF+`h-=i*DSP)WIeT`^)vJ5| zGyErr=G|hy4%BPp>Eak7F*P|sfuF;Pamr~84tA!1eG?2NG@M)#Vmbso4oGk&h&xaQKAI34{BrtJ57< z$yAFyX}3PVS@EBu1z!=z^^-Q6u0@|0+N3b!y`&r4#~#+41LcNsM>a_ZRZh5h`dLaZ P&|U^lS3j3^P6gTe~DWM4f D6jwTo literal 0 HcmV?d00001 diff --git a/graphics/mevent/tilemap_46837C.bin b/graphics/wonder_news/bg2.bin similarity index 100% rename from graphics/mevent/tilemap_46837C.bin rename to graphics/wonder_news/bg2.bin diff --git a/graphics/wonder_news/bg2.png b/graphics/wonder_news/bg2.png new file mode 100644 index 0000000000000000000000000000000000000000..518283c86445749510071d3591b39473ac846697 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^96%hw!VDy>*01&lQU(D&A+AwJrvwFMH8*!JnX~5T z-mBl<{r}H^gq}V7fAr}8B}=|_cfX5@`v3p`44L{Wpx$s#7sn8ZsZ%Fh4#6!JA_~6Rad%bL{IA2kr%Z;8%Nm{^!lxGI~>hRxo(F`njxgN@xNA3xHfh literal 0 HcmV?d00001 diff --git a/graphics/mevent/tilemap_4684D8.bin b/graphics/wonder_news/bg6.bin similarity index 100% rename from graphics/mevent/tilemap_4684D8.bin rename to graphics/wonder_news/bg6.bin diff --git a/graphics/mevent/pal_468080.pal b/graphics/wonder_news/bg6.pal similarity index 100% rename from graphics/mevent/pal_468080.pal rename to graphics/wonder_news/bg6.pal diff --git a/graphics/wonder_news/bg6.png b/graphics/wonder_news/bg6.png new file mode 100644 index 0000000000000000000000000000000000000000..6e26cdc06cfd86ecb7571cf0476adc555edd2d77 GIT binary patch literal 223 zcmV<503iQ~P)5bTGh>3-ql*w)oSkcV&>jr)y-nXv|{e&V)pK8rx32b0001L zNklqaTIrg4Pb??zzWz$E75?S^glHDE-wKhX|ZU)>NJJd z9x@^oGb&|n%sBAMr1iSo#=Q)a zixc)Um-of~Vy$cXeAD6o1jaeS;wJ@IwrWjcoGg>q!S$y21eZ_I9wlk7)!R6pXJ@eM XZu`|Ozj*g`psfs^u6{1-oD!M<>nUG- literal 0 HcmV?d00001 diff --git a/include/mevent.h b/include/mevent.h index 00d199fb0..9a273a872 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -47,12 +47,12 @@ struct MEvent_Str_2 u8 fill_00[0x40]; }; -struct UnkStruct_8467FB8 +struct WonderGraphics { - u8 textPal1:4; - u8 textPal2:4; - u8 textPal3:4; - u8 index:4; + u8 titleTextPal:4; + u8 bodyTextPal:4; + u8 footerTextPal:4; + u8 stampShadowPal:4; const u8 * tiles; const u8 * map; const u16 * pal; @@ -82,7 +82,7 @@ u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventCl bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1); u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command); bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata); -bool32 WonderNews_Init(const struct WonderNews * a0); +bool32 WonderNews_Init(const struct WonderNews * news); s32 WonderCard_Enter(void); s32 WonderNews_Enter(void); void DestroyWonderCard(void); diff --git a/src/mystery_gift_show_card.c b/src/mystery_gift_show_card.c index 8f19dad64..c462bda76 100644 --- a/src/mystery_gift_show_card.c +++ b/src/mystery_gift_show_card.c @@ -29,7 +29,7 @@ struct WonderCardData { /*0000*/ struct WonderCard card; /*014c*/ struct WonderCardMetadata cardMetadata; - /*0170*/ const struct UnkStruct_8467FB8 * gfx; + /*0170*/ const struct WonderGraphics * gfx; /*0174*/ u8 enterExitState; /*0175*/ u8 recordIdx; /*0176*/ u16 windowIds[WIN_COUNT]; @@ -94,47 +94,47 @@ static const struct WindowTemplate sWindowTemplates[] = { } }; -static const u16 sCard0Pal[] = INCBIN_U16("graphics/mevent/pal_46708C.gbapal"); -const u16 gCard1Pal[] = INCBIN_U16("graphics/mevent/pal_4670AC.gbapal"); -const u16 gCard2Pal[] = INCBIN_U16("graphics/mevent/pal_4670CC.gbapal"); -const u16 gCard3Pal[] = INCBIN_U16("graphics/mevent/pal_4670EC.gbapal"); -const u16 gCard4Pal[] = INCBIN_U16("graphics/mevent/pal_46710C.gbapal"); -const u16 gCard5Pal[] = INCBIN_U16("graphics/mevent/pal_46712C.gbapal"); -static const u16 sCard6Pal[] = INCBIN_U16("graphics/mevent/pal_46714C.gbapal"); -static const u16 sCard7Pal[] = INCBIN_U16("graphics/mevent/pal_46716C.gbapal"); -static const u8 sCard0Gfx[] = INCBIN_U8("graphics/mevent/gfx_46718C.4bpp.lz"); -static const u8 sCard0Map[] = INCBIN_U8("graphics/mevent/tilemap_467288.bin.lz"); -static const u8 sCard1Gfx[] = INCBIN_U8("graphics/mevent/gfx_46737C.4bpp.lz"); -static const u8 sCard1Map[] = INCBIN_U8("graphics/mevent/tilemap_467470.bin.lz"); -static const u8 sCard2Gfx[] = INCBIN_U8("graphics/mevent/gfx_467558.4bpp.lz"); -static const u8 sCard2Map[] = INCBIN_U8("graphics/mevent/tilemap_46762C.bin.lz"); -static const u8 sCard6Gfx[] = INCBIN_U8("graphics/mevent/gfx_467700.4bpp.lz"); -static const u8 sCard6Map[] = INCBIN_U8("graphics/mevent/tilemap_467934.bin.lz"); -static const u8 sCard7Gfx[] = INCBIN_U8("graphics/mevent/gfx_467A7C.4bpp.lz"); -static const u8 sCard7Map[] = INCBIN_U8("graphics/mevent/tilemap_467CAC.bin.lz"); -static const u16 sUnknown_8467DF4[] = INCBIN_U16("graphics/mevent/pal_467DF4.gbapal"); -static const u16 sUnknown_8467E14[] = INCBIN_U16("graphics/mevent/pal_467E14.gbapal"); -static const u16 sUnknown_8467E34[] = INCBIN_U16("graphics/mevent/pal_467E34.gbapal"); -static const u16 sUnknown_8467E54[] = INCBIN_U16("graphics/mevent/pal_467E54.gbapal"); -static const u16 sUnknown_8467E74[] = INCBIN_U16("graphics/mevent/pal_467E74.gbapal"); -static const u16 sUnknown_8467E94[] = INCBIN_U16("graphics/mevent/pal_467E94.gbapal"); -static const u16 sUnknown_8467EB4[] = INCBIN_U16("graphics/mevent/pal_467EB4.gbapal"); -static const u16 sUnknown_8467ED4[] = INCBIN_U16("graphics/mevent/pal_467ED4.gbapal"); -static const u32 sUnknown_8467EF4[] = INCBIN_U32("graphics/mevent/gfx_467EF4.4bpp.lz"); +static const u16 sCard0Pal[] = INCBIN_U16("graphics/wonder_card/bg0.gbapal"); +const u16 gCard1Pal[] = INCBIN_U16("graphics/wonder_card/bg1.gbapal"); +const u16 gCard2Pal[] = INCBIN_U16("graphics/wonder_card/bg2.gbapal"); +const u16 gCard3Pal[] = INCBIN_U16("graphics/wonder_card/bg3.gbapal"); +const u16 gCard4Pal[] = INCBIN_U16("graphics/wonder_card/bg4.gbapal"); +const u16 gCard5Pal[] = INCBIN_U16("graphics/wonder_card/bg5.gbapal"); +static const u16 sCard6Pal[] = INCBIN_U16("graphics/wonder_card/bg6.gbapal"); +static const u16 sCard7Pal[] = INCBIN_U16("graphics/wonder_card/bg7.gbapal"); +static const u8 sCard0Gfx[] = INCBIN_U8("graphics/wonder_card/bg0.4bpp.lz"); +static const u8 sCard0Map[] = INCBIN_U8("graphics/wonder_card/bg0.bin.lz"); +static const u8 sCard1Gfx[] = INCBIN_U8("graphics/wonder_card/bg1.4bpp.lz"); +static const u8 sCard1Map[] = INCBIN_U8("graphics/wonder_card/bg1.bin.lz"); +static const u8 sCard2Gfx[] = INCBIN_U8("graphics/wonder_card/bg2.4bpp.lz"); +static const u8 sCard2Map[] = INCBIN_U8("graphics/wonder_card/bg2.bin.lz"); +static const u8 sCard6Gfx[] = INCBIN_U8("graphics/wonder_card/bg6.4bpp.lz"); +static const u8 sCard6Map[] = INCBIN_U8("graphics/wonder_card/bg6.bin.lz"); +static const u8 sCard7Gfx[] = INCBIN_U8("graphics/wonder_card/bg7.4bpp.lz"); +static const u8 sCard7Map[] = INCBIN_U8("graphics/wonder_card/bg7.bin.lz"); +static const u16 sStampShadowPal0[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_0.gbapal"); +static const u16 sStampShadowPal1[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_1.gbapal"); +static const u16 sStampShadowPal2[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_2.gbapal"); +static const u16 sStampShadowPal3[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_3.gbapal"); +static const u16 sStampShadowPal4[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_4.gbapal"); +static const u16 sStampShadowPal5[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_5.gbapal"); +static const u16 sStampShadowPal6[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_6.gbapal"); +static const u16 sStampShadowPal7[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_7.gbapal"); +static const u32 sStampShadowGfx[] = INCBIN_U32("graphics/wonder_card/stamp_shadow.4bpp.lz"); static const struct CompressedSpriteSheet sSpriteSheet_StampShadow = { - sUnknown_8467EF4, 0x100, 0x8000 + sStampShadowGfx, 0x100, TAG_STAMP_SHADOW }; static const struct SpritePalette sSpritePalettes_StampShadow[] = { - {sUnknown_8467DF4, 0x8000}, - {sUnknown_8467E14, 0x8000}, - {sUnknown_8467E34, 0x8000}, - {sUnknown_8467E54, 0x8000}, - {sUnknown_8467E74, 0x8000}, - {sUnknown_8467E94, 0x8000}, - {sUnknown_8467EB4, 0x8000}, - {sUnknown_8467ED4, 0x8000} + {sStampShadowPal0, TAG_STAMP_SHADOW}, + {sStampShadowPal1, TAG_STAMP_SHADOW}, + {sStampShadowPal2, TAG_STAMP_SHADOW}, + {sStampShadowPal3, TAG_STAMP_SHADOW}, + {sStampShadowPal4, TAG_STAMP_SHADOW}, + {sStampShadowPal5, TAG_STAMP_SHADOW}, + {sStampShadowPal6, TAG_STAMP_SHADOW}, + {sStampShadowPal7, TAG_STAMP_SHADOW} }; static const struct SpriteTemplate sSpriteTemplate_StampShadow = { @@ -147,15 +147,15 @@ static const struct SpriteTemplate sSpriteTemplate_StampShadow = { .callback = SpriteCallbackDummy }; -static const struct UnkStruct_8467FB8 sCardGraphics[8] = { - {1, 0, 0, 0, sCard0Gfx, sCard0Map, sCard0Pal}, - {1, 0, 0, 1, sCard1Gfx, sCard1Map, gCard1Pal}, - {1, 0, 0, 2, sCard2Gfx, sCard2Map, gCard2Pal}, - {1, 0, 0, 3, sCard2Gfx, sCard2Map, gCard3Pal}, - {1, 0, 0, 4, sCard2Gfx, sCard2Map, gCard4Pal}, - {1, 0, 0, 5, sCard2Gfx, sCard2Map, gCard5Pal}, - {1, 0, 0, 6, sCard6Gfx, sCard6Map, sCard6Pal}, - {1, 0, 0, 7, sCard7Gfx, sCard7Map, sCard7Pal} +static const struct WonderGraphics sCardGraphics[NUM_WONDER_BGS] = { + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 0, .tiles = sCard0Gfx, .map = sCard0Map, .pal = sCard0Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 1, .tiles = sCard1Gfx, .map = sCard1Map, .pal = gCard1Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 2, .tiles = sCard2Gfx, .map = sCard2Map, .pal = gCard2Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 3, .tiles = sCard2Gfx, .map = sCard2Map, .pal = gCard3Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 4, .tiles = sCard2Gfx, .map = sCard2Map, .pal = gCard4Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 5, .tiles = sCard2Gfx, .map = sCard2Map, .pal = gCard5Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 6, .tiles = sCard6Gfx, .map = sCard6Map, .pal = sCard6Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 7, .tiles = sCard7Gfx, .map = sCard7Map, .pal = sCard7Pal} }; bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata) @@ -399,27 +399,27 @@ static void DrawCardWindow(u8 whichWindow) { // Print card title/subtitle s32 x; - AddTextPrinterParameterized3(windowId, FONT_3, 0, 1, sTextColorTable[sWonderCardData->gfx->textPal1], 0, sWonderCardData->titleText); + AddTextPrinterParameterized3(windowId, FONT_3, 0, 1, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->titleText); x = 160 - GetStringWidth(FONT_3, sWonderCardData->subtitleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING)); if (x < 0) x = 0; - AddTextPrinterParameterized3(windowId, FONT_3, x, 17, sTextColorTable[sWonderCardData->gfx->textPal1], 0, sWonderCardData->subtitleText); + AddTextPrinterParameterized3(windowId, FONT_3, x, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->subtitleText); // Print id number if (sWonderCardData->card.idNumber != 0) - AddTextPrinterParameterized3(windowId, FONT_2, 166, 17, sTextColorTable[sWonderCardData->gfx->textPal1], 0, sWonderCardData->idNumberText); + AddTextPrinterParameterized3(windowId, FONT_2, 166, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->idNumberText); break; } case WIN_BODY: // Print body text for (; i < WONDER_CARD_BODY_TEXT_LINES; i++) - AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->textPal2], 0, sWonderCardData->bodyText[i]); + AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->bodyTextPal], 0, sWonderCardData->bodyText[i]); break; case WIN_FOOTER: // Print footer line 1 AddTextPrinterParameterized3(windowId, FONT_3, 0, sFooterTextOffsets[sWonderCardData->card.type], - sTextColorTable[sWonderCardData->gfx->textPal3], + sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->footerLine1Text); // Print footer line 2 @@ -429,7 +429,7 @@ static void DrawCardWindow(u8 whichWindow) // Odd that CARD_TYPE_STAMP is not ignored, it has empty text for this AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 + sFooterTextOffsets[sWonderCardData->card.type], - sTextColorTable[sWonderCardData->gfx->textPal3], + sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->footerLine2Text); } else @@ -440,13 +440,13 @@ static void DrawCardWindow(u8 whichWindow) for (; i < sWonderCardData->recordIdx; i++) { // Print stat text - AddTextPrinterParameterized3(windowId, FONT_3, x, y, sTextColorTable[sWonderCardData->gfx->textPal3], 0, sWonderCardData->statTextData[i].statText); + AddTextPrinterParameterized3(windowId, FONT_3, x, y, sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statText); if (sWonderCardData->statTextData[i].statNumberText[0] != EOS) { // Print stat number x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statText, spacing); AddTextPrinterParameterized3(windowId, FONT_2, x, y, - sTextColorTable[sWonderCardData->gfx->textPal3], + sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statNumberText); x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width; } @@ -473,7 +473,7 @@ static void CreateCardSprites(void) if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP) { LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_StampShadow); - LoadSpritePalette(&sSpritePalettes_StampShadow[sWonderCardData->gfx->index]); + LoadSpritePalette(&sSpritePalettes_StampShadow[sWonderCardData->gfx->stampShadowPal]); for (; i < sWonderCardData->card.maxStamps; i++) { sWonderCardData->stampSpriteIds[i][0] = SPRITE_NONE; diff --git a/src/mystery_gift_show_news.c b/src/mystery_gift_show_news.c index a6f72296b..b97e74c8c 100644 --- a/src/mystery_gift_show_news.c +++ b/src/mystery_gift_show_news.c @@ -20,7 +20,7 @@ enum { struct WonderNewsData { struct WonderNews news; - const struct UnkStruct_8467FB8 * gfx; + const struct WonderGraphics * gfx; bool8 verticalScrollDisabled:1; u8 enterExitState:7; u8 arrowTaskId; @@ -82,29 +82,29 @@ static const struct ScrollArrowsTemplate sArrowsTemplate = { .palNum = 0 }; -static const u16 sNews1Pal[] = INCBIN_U16("graphics/mevent/pal_468060.gbapal"); -static const u16 sNews6Pal[] = INCBIN_U16("graphics/mevent/pal_468080.gbapal"); -static const u16 sNews7Pal[] = INCBIN_U16("graphics/mevent/pal_4680A0.gbapal"); -static const u8 sNews0Gfx[] = INCBIN_U8("graphics/mevent/gfx_4680C0.4bpp.lz"); -static const u8 sNews0Map[] = INCBIN_U8("graphics/mevent/tilemap_468140.bin.lz"); -static const u8 sNews1Gfx[] = INCBIN_U8("graphics/mevent/gfx_46821C.4bpp.lz"); -static const u8 sNews1Map[] = INCBIN_U8("graphics/mevent/tilemap_46824C.bin.lz"); -static const u8 sNews2Gfx[] = INCBIN_U8("graphics/mevent/gfx_46830C.4bpp.lz"); -static const u8 sNews2Map[] = INCBIN_U8("graphics/mevent/tilemap_46837C.bin.lz"); -static const u8 sNews6Gfx[] = INCBIN_U8("graphics/mevent/gfx_468448.4bpp.lz"); -static const u8 sNews6Map[] = INCBIN_U8("graphics/mevent/tilemap_4684D8.bin.lz"); -static const u8 sNews7Gfx[] = INCBIN_U8("graphics/mevent/gfx_4685B4.4bpp.lz"); -static const u8 sNews7Map[] = INCBIN_U8("graphics/mevent/tilemap_468644.bin.lz"); +static const u16 sNews0Pal[] = INCBIN_U16("graphics/wonder_news/bg0.gbapal"); +static const u16 sNews6Pal[] = INCBIN_U16("graphics/wonder_news/bg6.gbapal"); +static const u16 sNews7Pal[] = INCBIN_U16("graphics/wonder_news/bg7.gbapal"); +static const u8 sNews0Gfx[] = INCBIN_U8("graphics/wonder_news/bg0.4bpp.lz"); +static const u8 sNews0Map[] = INCBIN_U8("graphics/wonder_news/bg0.bin.lz"); +static const u8 sNews1Gfx[] = INCBIN_U8("graphics/wonder_news/bg1.4bpp.lz"); +static const u8 sNews1Map[] = INCBIN_U8("graphics/wonder_news/bg1.bin.lz"); +static const u8 sNews2Gfx[] = INCBIN_U8("graphics/wonder_news/bg2.4bpp.lz"); +static const u8 sNews2Map[] = INCBIN_U8("graphics/wonder_news/bg2.bin.lz"); +static const u8 sNews6Gfx[] = INCBIN_U8("graphics/wonder_news/bg6.4bpp.lz"); +static const u8 sNews6Map[] = INCBIN_U8("graphics/wonder_news/bg6.bin.lz"); +static const u8 sNews7Gfx[] = INCBIN_U8("graphics/wonder_news/bg7.4bpp.lz"); +static const u8 sNews7Map[] = INCBIN_U8("graphics/wonder_news/bg7.bin.lz"); -static const struct UnkStruct_8467FB8 sNewsGraphics[NUM_WONDER_BGS] = { - {1, 0, 0, 0, sNews0Gfx, sNews0Map, sNews1Pal}, - {1, 0, 0, 0, sNews1Gfx, sNews1Map, gCard1Pal}, - {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard2Pal}, - {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard3Pal}, - {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard4Pal}, - {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard5Pal}, - {1, 0, 0, 0, sNews6Gfx, sNews6Map, sNews6Pal}, - {1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal} +static const struct WonderGraphics sNewsGraphics[NUM_WONDER_BGS] = { + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews0Gfx, .map = sNews0Map, .pal = sNews0Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews1Gfx, .map = sNews1Map, .pal = gCard1Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews2Gfx, .map = sNews2Map, .pal = gCard2Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews2Gfx, .map = sNews2Map, .pal = gCard3Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews2Gfx, .map = sNews2Map, .pal = gCard4Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews2Gfx, .map = sNews2Map, .pal = gCard5Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews6Gfx, .map = sNews6Map, .pal = sNews6Pal}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sNews7Gfx, .map = sNews7Map, .pal = sNews7Pal} }; bool32 WonderNews_Init(const struct WonderNews * news) @@ -363,14 +363,14 @@ static void DrawNewsWindows(void) x = (224 - GetStringWidth(FONT_3, sWonderNewsData->titleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING))) / 2; if (x < 0) x = 0; - AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_3, x, 6, sTextColorTable[sWonderNewsData->gfx->textPal1], 0, sWonderNewsData->titleText); + AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_3, x, 6, sTextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText); // Print body text for (; i < WONDER_NEWS_BODY_TEXT_LINES; ++i) { AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_BODY], FONT_3, 0, 16 * i + 2, - sTextColorTable[sWonderNewsData->gfx->textPal2], + sTextColorTable[sWonderNewsData->gfx->bodyTextPal], 0, sWonderNewsData->bodyText[i]); } CopyWindowToVram(sWonderNewsData->windowIds[WIN_TITLE], COPYWIN_FULL);