From 4aa3ff78ecb33723818e44595f0b54c6fd1ca7a9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 11 Oct 2019 11:55:54 -0400 Subject: Dump in-game trades --- src/trade.c | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/trade.c (limited to 'src') diff --git a/src/trade.c b/src/trade.c new file mode 100644 index 000000000..5c17035fa --- /dev/null +++ b/src/trade.c @@ -0,0 +1,3 @@ +#include "global.h" + + -- cgit v1.2.3 From 9fe74ac590f75a0571de8ebcd499fdf892419328 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 14 Oct 2019 09:40:17 -0400 Subject: trade through sub_804C728 (nonmatching --- src/mevent_8145654.c | 2 +- src/trade.c | 405 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 406 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 85c1dfccb..9c03dc0d5 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -200,7 +200,7 @@ s32 FadeToWonderCardMenu(void) CopyBgTilemapBufferToVram(1); break; case 6: - sub_809707C(); + LoadMonIconPalettes(); break; case 7: ShowBg(1); diff --git a/src/trade.c b/src/trade.c index 5c17035fa..742650e4a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1,3 +1,408 @@ #include "global.h" +#include "palette.h" +#include "task.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "malloc.h" +#include "bg.h" +#include "text.h" +#include "window.h" +#include "text_window.h" +#include "pokemon_icon.h" +#include "graphics.h" +#include "link.h" +#include "link_rfu.h" +#include "cable_club.h" +#include "sound.h" +#include "party_menu.h" +#include "pokemon_storage_system.h" +#include "constants/species.h" +#include "constants/items.h" +#include "constants/easy_chat.h" +#include "constants/songs.h" +struct TradeResources +{ + /*0x0000*/ u8 unk_0; + /*0x0001*/ u8 unk_1; + /*0x0002*/ u8 filler_2[0x28 - 2]; + /*0x0028*/ u8 partyIcons[2][PARTY_SIZE]; + /*0x0034*/ u8 tradeMenuCursorSpriteIdx; + /*0x0035*/ u8 tradeMenuCursorPosition; + /*0x0036*/ u8 partyCounts[2]; + /*0x0038*/ bool8 tradeMenuOptionsActive[12]; + /*0x0044*/ u8 unk_44; + /*0x0045*/ u8 unk_45[2][PARTY_SIZE]; + /*0x0051*/ u8 unk_51[2][PARTY_SIZE]; + /*0x005D*/ u8 unk_5D[2][PARTY_SIZE]; + /*0x0069*/ u8 unk_69; + /*0x006A*/ u8 filler_6A[0x6F - 0x6A]; + /*0x006F*/ u8 unk_6F; + /*0x0070*/ u8 unk_70; + /*0x0071*/ u8 filler_71; + /*0x0072*/ u16 unk_72; + /*0x0074*/ u8 unk_74[2]; + /*0x0076*/ u8 unk_76[2]; + /*0x0078*/ u8 unk_78; + /*0x0079*/ u8 unk_79; + /*0x007A*/ u8 unk_7A; + /*0x007B*/ u8 unk_7B; + /*0x007C*/ u8 filler_7C[0x7E - 0x7C]; + /*0x007E*/ u8 unk_7E; + /*0x007F*/ u8 filler_7F; + /*0x0080*/ u16 linkData[20]; + /*0x00A8*/ u8 unk_A8; + /*0x00A9*/ u8 unk_A9[11]; + /*0x00B4*/ u8 filler_B4[0x8D0-0xB4]; + /*0x08D0*/ struct { + bool8 unk_0; + u16 unk_2; + u8 unk_4; + } unk_8D0[4]; + /*0x08F0*/ u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; +}; +IWRAM_DATA vu16 gUnknown_3000E78; + +EWRAM_DATA u8 *gUnknown_2031C90 = NULL; +EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; + +void sub_804C728(void); +void sub_804D4F8(void); +u8 shedinja_maker_maybe(void); +void sub_804F5BC(u8 str_idx); +void sub_804F9D8(void); +bool8 sub_804F610(void); +void sub_804F748(u8 side); +void sub_804F020(u8 side); +void sub_804D764(void); +void sub_804D694(u8 imgIdx); +void sub_804F890(u8 side); +void sub_804F964(void); +void sub_804DFF0(void); +void sub_804D638(void); +void LoadHeldItemIcons(void); +void sub_804F728(const u8 *name, u8 *a1, u8 unused); + +extern const struct BgTemplate gUnknown_8261F1C[4]; +extern const struct WindowTemplate gUnknown_8261F2C[18]; +extern const u8 gTradeMonSpriteCoords[][2]; +extern const u8 *gUnknown_8261ECC[]; +extern const u8 gTradeUnknownSpriteCoords[][4]; +extern const struct SpriteTemplate gUnknown_8261CB0; +extern const struct SpriteTemplate gUnknown_8261CC8; + +void sub_804C600(void) +{ + int i; + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + SetVBlankCallback(sub_804D4F8); + LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x14); + LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); + SetBgTilemapBuffer(1, gUnknown_2031DA8->bg1TilemapBuffer); + if (InitWindows(gUnknown_8261F2C)) + { + DeactivateAllTextPrinters(); + gUnknown_3000E78 = 590; // ? + for (i = 0; i < NELEMS(gUnknown_8261F2C); i++) + { + ClearWindowTilemap(i); + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + } + FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); + TextWindow_SetStdFrame0_WithPal(0, 0x014, 0xC0); + TextWindow_SetUserSelectedFrame(2, 0x001, 0xE0); + LoadMonIconPalettes(); + gUnknown_2031DA8->unk_69 = 0; + gUnknown_2031DA8->unk_6F = 0; + gUnknown_2031DA8->unk_70 = 0; + gUnknown_2031DA8->unk_74[0] = 0; + gUnknown_2031DA8->unk_74[1] = 0; + gUnknown_2031DA8->unk_7A = 0; + gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_A8 = 0; + } +} + +void sub_804C718(void) +{ + SetMainCallback2(sub_804C728); +} + +void sub_804C728(void) +{ + int i; + struct SpriteTemplate temp; + u8 id; + s32 width; + u32 xPos; + + switch (gMain.state) + { + case 0: + gUnknown_2031DA8 = AllocZeroed(sizeof(*gUnknown_2031DA8)); + sub_804C600(); + gUnknown_2031C90 = AllocZeroed(0xE00); + + for (i = 0; i < 14; i++) + { + gUnknown_2031C94[i] = &gUnknown_2031C90[i * 256]; + } + + gMain.state++; + break; + case 1: + gPaletteFade.bufferTransferDisabled = FALSE; + + for (i = 0; i < PARTY_SIZE; i++) + { + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); + } + + sub_804F5BC(0); + ShowBg(0); + + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = 0x1122; + gUnknown_2031DA8->unk_A8 = 0; + + if (gWirelessCommType) + { + sub_800B1F4(); + OpenLink(); + sub_80FBB20(); + } + else + { + OpenLink(); + gMain.state++; + } + if (gWirelessCommType == 0) + CreateTask(sub_8081A90, 1); + } + else + { + gMain.state = 4; + } + break; + case 2: + gUnknown_2031DA8->unk_A8++; + if (gUnknown_2031DA8->unk_A8 > 11) + { + gUnknown_2031DA8->unk_A8 = 0; + gMain.state++; + } + break; + case 3: + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + if (IsLinkMaster()) + { + if (++gUnknown_2031DA8->unk_A8 > 30) + { + CheckShouldAdvanceLinkState(); + gMain.state++; + } + } + else + { + gMain.state++; + } + } + break; + case 4: + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_80FBB4C(); + CalculatePlayerPartyCount(); + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + if (gWirelessCommType) + { + sub_80FA484(TRUE); + sub_800AB9C(); + } + } + break; + case 5: + if (gWirelessCommType) + { + if (IsRfuTaskFinished()) + { + gMain.state++; + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + } + else + { + gMain.state++; + } + break; + case 6: + if (shedinja_maker_maybe()) + { + sub_804F9D8(); + gMain.state++; + } + break; + case 7: + CalculateEnemyPartyCount(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; + gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + struct Pokemon *mon = &gPlayerParty[i]; + gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sub_809718C, + (gTradeMonSpriteCoords[i][0] * 8) + 14, + (gTradeMonSpriteCoords[i][1] * 8) - 12, + 1, + GetMonData(mon, MON_DATA_PERSONALITY), + TRUE); + } + + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + struct Pokemon *mon = &gEnemyParty[i]; + gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sub_809718C, + (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, + (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, + 1, + GetMonData(mon, MON_DATA_PERSONALITY), + FALSE); + } + gMain.state++; + break; + case 8: + LoadHeldItemIcons(); + sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 0); + gMain.state++; + break; + case 9: + sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 1); + gMain.state++; + break; + case 10: + sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + id = GetMultiplayerId(); + sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); + sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); + sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 11: + if (sub_804F610()) + gMain.state++; + break; + case 12: + width = GetStringWidth(1, gSaveBlock2Ptr->playerName, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + } + + id = GetMultiplayerId(); + id ^= 1; + width = GetStringWidth(1, gLinkPlayers[id].name, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 3; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + } + gMain.state++; + break; + case 13: + temp = gUnknown_8261CC8; + temp.tileTag += 6; + CreateSprite(&temp, 215, 151, 1); + temp = gUnknown_8261CC8; + temp.tileTag += 7; + CreateSprite(&temp, 247, 151, 1); + + for (i = 0; i < PARTY_SIZE; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 8; + CreateSprite(&temp, (i * 32) + 24, 150, 1); + } + + gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + gUnknown_2031DA8->tradeMenuCursorPosition = 0; + gMain.state++; + rbox_fill_rectangle(0); + break; + case 14: + sub_804F748(0); + sub_804F020(0); + gUnknown_2031DA8->unk_0 = 0; + gUnknown_2031DA8->unk_1 = 0; + sub_804D764(); + gMain.state++; + PlayBGM(MUS_SLOT); + break; + case 15: + sub_804F748(1); + sub_804F020(1); + gMain.state++; + // fallthrough + case 16: + sub_804D694(0); + gMain.state++; + break; + case 17: + sub_804D694(1); + gMain.state++; + break; + case 18: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + case 19: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + sub_804D694(2); + gMain.state++; + break; + case 20: + sub_804F890(0); + gMain.state++; + break; + case 21: + sub_804F890(1); + sub_804F964(); + gMain.state++; + break; + case 22: + if (!gPaletteFade.active) + { + gMain.callback1 = sub_804DFF0; + SetMainCallback2(sub_804D638); + } + break; + } + + RunTextPrinters(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From 3710c0a370eab7d7eac8a69f2b843381b36c22de Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 10:23:51 -0400 Subject: Nonmatching sub_804CF14 --- src/trade.c | 882 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 880 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 08e0d6372..e816d773f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -15,6 +15,7 @@ #include "cable_club.h" #include "sound.h" #include "party_menu.h" +#include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "constants/species.h" #include "constants/items.h" @@ -138,6 +139,7 @@ void sub_804C718(void) } #ifdef NONMATCHING +// See note on case 12 below void sub_804C728(void) { int i; @@ -290,11 +292,11 @@ void sub_804C728(void) break; case 8: LoadHeldItemIcons(); - sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 0); + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); gMain.state++; break; case 9: - sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 1); + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); gMain.state++; break; case 10: @@ -1323,3 +1325,879 @@ void sub_804C728(void) "_0804CF10: .4byte sub_804D638"); } #endif //NONMATCHING + +#ifdef NONMATCHING +// Nonmatching behaviour is the same as the function above +void sub_804CF14(void) +{ + int i; + struct SpriteTemplate temp; + u8 id; + s32 width; + u32 xPos; + + switch (gMain.state) + { + case 0: + sub_804C600(); + gMain.state++; + break; + case 1: + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 2: + gMain.state++; + break; + case 3: + gMain.state++; + break; + case 4: + CalculatePlayerPartyCount(); + gMain.state++; + break; + case 5: + if (gWirelessCommType != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + gMain.state++; + break; + case 6: + gMain.state++; + break; + case 7: + CalculateEnemyPartyCount(); + gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; + gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + ClearWindowTilemap(0); + sub_804F020(0); + sub_804F020(1); + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon( + GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + gTradeMonSpriteCoords[i][0] * 8 + 14, + gTradeMonSpriteCoords[i][1] * 8 - 12, + 1, + GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY), + TRUE + ); + } + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon( + GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + gTradeMonSpriteCoords[i + 6][0] * 8 + 14, + gTradeMonSpriteCoords[i + 6][1] * 8 - 12, + 1, + GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY), + FALSE + ); + } + gMain.state++; + break; + case 8: + LoadHeldItemIcons(); + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); + gMain.state++; + break; + case 9: + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); + gMain.state++; + break; + case 10: + sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + id = GetMultiplayerId(); + sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); + sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); + sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 11: + if (sub_804F610()) + { + gMain.state++; + } + break; + case 12: + width = GetStringWidth(1, gSaveBlock2Ptr->playerName, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + } + + /* + * These three lines are a pain to match due to register alloc and + * pointer arithmetic misbehavior. + */ + id = GetMultiplayerId(); + id ^= 1; + width = GetStringWidth(1, gLinkPlayers[id].name, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 3; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + } + gMain.state++; + break; + case 13: + temp = gUnknown_8261CC8; + temp.tileTag += 6; + CreateSprite(&temp, 215, 151, 1); + temp = gUnknown_8261CC8; + temp.tileTag += 7; + CreateSprite(&temp, 247, 151, 1); + + for (i = 0; i < PARTY_SIZE; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 8; + CreateSprite(&temp, (i * 32) + 24, 150, 1); + } + + if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) + gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20(); + else + gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20() + 6; + + gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][1] * 8, 2); + gMain.state = 16; + break; + case 16: + sub_804D694(0); + gMain.state++; + break; + case 17: + sub_804D694(1); + gUnknown_2031DA8->unk_0 = 0; + gUnknown_2031DA8->unk_1 = 0; + sub_804D764(); + gMain.state++; + break; + case 18: + gPaletteFade.bufferTransferDisabled = FALSE; + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + case 19: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + sub_804D694(2); + gMain.state++; + break; + case 20: + gMain.state++; + break; + case 21: + sub_804F964(); + gMain.state++; + break; + case 22: + if (!gPaletteFade.active) + { + SetMainCallback2(sub_804D638); + } + break; + } + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} +#else +NAKED +void sub_804CF14(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x24\n" + "\tldr r1, _0804CF38 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r0, r1, r2\n" + "\tldrb r0, [r0]\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0x16\n" + "\tbls _0804CF2E\n" + "\tb _0804D4D2\n" + "_0804CF2E:\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804CF3C @ =_0804CF40\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_0804CF38: .4byte gMain\n" + "_0804CF3C: .4byte _0804CF40\n" + "\t.align 2, 0\n" + "_0804CF40:\n" + "\t.4byte _0804CF9C\n" + "\t.4byte _0804CFB0\n" + "\t.4byte _0804CFB8\n" + "\t.4byte _0804CFC0\n" + "\t.4byte _0804CFC8\n" + "\t.4byte _0804CFDC\n" + "\t.4byte _0804D004\n" + "\t.4byte _0804D00C\n" + "\t.4byte _0804D150\n" + "\t.4byte _0804D178\n" + "\t.4byte _0804D19C\n" + "\t.4byte _0804D230\n" + "\t.4byte _0804D24C\n" + "\t.4byte _0804D320\n" + "\t.4byte _0804D4D2\n" + "\t.4byte _0804D4D2\n" + "\t.4byte _0804D414\n" + "\t.4byte _0804D41C\n" + "\t.4byte _0804D444\n" + "\t.4byte _0804D480\n" + "\t.4byte _0804D4A0\n" + "\t.4byte _0804D4A8\n" + "\t.4byte _0804D4C0\n" + "_0804CF9C:\n" + "\tbl sub_804C600\n" + "\tldr r1, _0804CFAC @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804CFAC: .4byte gMain\n" + "_0804CFB0:\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r2, r5\n" + "\tb _0804D200\n" + "_0804CFB8:\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r1, r2, r7\n" + "\tb _0804D4B4\n" + "_0804CFC0:\n" + "\tmovs r0, 0x87\n" + "\tlsls r0, 3\n" + "\tadds r1, r2, r0\n" + "\tb _0804D4B4\n" + "_0804CFC8:\n" + "\tbl CalculatePlayerPartyCount\n" + "\tldr r1, _0804CFD8 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r1, r2\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804CFD8: .4byte gMain\n" + "_0804CFDC:\n" + "\tldr r0, _0804CFFC @ =gWirelessCommType\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _0804CFF0\n" + "\tbl LoadWirelessStatusIndicatorSpriteGfx\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tbl CreateWirelessStatusIndicatorSprite\n" + "_0804CFF0:\n" + "\tldr r1, _0804D000 @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804CFFC: .4byte gWirelessCommType\n" + "_0804D000: .4byte gMain\n" + "_0804D004:\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r2, r5\n" + "\tb _0804D4B4\n" + "_0804D00C:\n" + "\tbl CalculateEnemyPartyCount\n" + "\tldr r4, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0804D130 @ =gPlayerPartyCount\n" + "\tldrb r1, [r1]\n" + "\tadds r0, 0x36\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0804D134 @ =gEnemyPartyCount\n" + "\tldrb r1, [r1]\n" + "\tadds r0, 0x37\n" + "\tstrb r1, [r0]\n" + "\tmovs r0, 0\n" + "\tbl ClearWindowTilemap\n" + "\tmovs r0, 0\n" + "\tbl sub_804F020\n" + "\tmovs r0, 0x1\n" + "\tbl sub_804F020\n" + "\tmovs r6, 0\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x36\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbge _0804D0A8\n" + "\tmov r8, r4\n" + "\tldr r7, _0804D138 @ =gTradeMonSpriteCoords\n" + "_0804D048:\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804D13C @ =gPlayerParty\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x41\n" + "\tmovs r2, 0\n" + "\tbl GetMonData\n" + "\tadds r5, r0, 0\n" + "\tlsls r5, 16\n" + "\tlsrs r5, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl GetMonData\n" + "\tldrb r2, [r7]\n" + "\tlsls r2, 19\n" + "\tmovs r1, 0xE0\n" + "\tlsls r1, 12\n" + "\tadds r2, r1\n" + "\tasrs r2, 16\n" + "\tldrb r3, [r7, 0x1]\n" + "\tlsls r3, 19\n" + "\tldr r1, _0804D140 @ =0xfff40000\n" + "\tadds r3, r1\n" + "\tasrs r3, 16\n" + "\tmovs r1, 0x1\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r1, [sp, 0x8]\n" + "\tadds r0, r5, 0\n" + "\tldr r1, _0804D144 @ =SpriteCB_MonIcon\n" + "\tbl CreateMonIcon\n" + "\tmov r2, r8\n" + "\tldr r1, [r2]\n" + "\tadds r1, 0x28\n" + "\tadds r1, r6\n" + "\tstrb r0, [r1]\n" + "\tadds r7, 0x2\n" + "\tadds r6, 0x1\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x36\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tblt _0804D048\n" + "_0804D0A8:\n" + "\tmovs r6, 0\n" + "\tldr r1, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x37\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbge _0804D120\n" + "\tldr r0, _0804D138 @ =gTradeMonSpriteCoords\n" + "\tmov r8, r1\n" + "\tadds r7, r0, 0\n" + "\tadds r7, 0xC\n" + "_0804D0BE:\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804D148 @ =gEnemyParty\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x41\n" + "\tmovs r2, 0\n" + "\tbl GetMonData\n" + "\tadds r5, r0, 0\n" + "\tlsls r5, 16\n" + "\tlsrs r5, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl GetMonData\n" + "\tldrb r2, [r7]\n" + "\tlsls r2, 19\n" + "\tmovs r3, 0xE0\n" + "\tlsls r3, 12\n" + "\tadds r2, r3\n" + "\tasrs r2, 16\n" + "\tldrb r3, [r7, 0x1]\n" + "\tlsls r3, 19\n" + "\tldr r1, _0804D140 @ =0xfff40000\n" + "\tadds r3, r1\n" + "\tasrs r3, 16\n" + "\tmovs r1, 0x1\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x8]\n" + "\tadds r0, r5, 0\n" + "\tldr r1, _0804D144 @ =SpriteCB_MonIcon\n" + "\tbl CreateMonIcon\n" + "\tmov r2, r8\n" + "\tldr r1, [r2]\n" + "\tadds r1, 0x2E\n" + "\tadds r1, r6\n" + "\tstrb r0, [r1]\n" + "\tadds r7, 0x2\n" + "\tadds r6, 0x1\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x37\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tblt _0804D0BE\n" + "_0804D120:\n" + "\tldr r1, _0804D14C @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D12C: .4byte gUnknown_2031DA8\n" + "_0804D130: .4byte gPlayerPartyCount\n" + "_0804D134: .4byte gEnemyPartyCount\n" + "_0804D138: .4byte gTradeMonSpriteCoords\n" + "_0804D13C: .4byte gPlayerParty\n" + "_0804D140: .4byte 0xfff40000\n" + "_0804D144: .4byte SpriteCB_MonIcon\n" + "_0804D148: .4byte gEnemyParty\n" + "_0804D14C: .4byte gMain\n" + "_0804D150:\n" + "\tbl LoadHeldItemIcons\n" + "\tldr r0, _0804D170 @ =gUnknown_2031DA8\n" + "\tldr r1, [r0]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x36\n" + "\tadds r1, 0x28\n" + "\tmovs r2, 0\n" + "\tbl sub_812256C\n" + "\tldr r1, _0804D174 @ =gMain\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r5\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D170: .4byte gUnknown_2031DA8\n" + "_0804D174: .4byte gMain\n" + "_0804D178:\n" + "\tldr r0, _0804D194 @ =gUnknown_2031DA8\n" + "\tldr r1, [r0]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x36\n" + "\tadds r1, 0x28\n" + "\tmovs r2, 0x1\n" + "\tbl sub_812256C\n" + "\tldr r1, _0804D198 @ =gMain\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r1, r7\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D194: .4byte gUnknown_2031DA8\n" + "_0804D198: .4byte gMain\n" + "_0804D19C:\n" + "\tldr r0, _0804D214 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r0]\n" + "\tldr r6, _0804D218 @ =gUnknown_2031C94\n" + "\tldr r1, [r6]\n" + "\tldr r5, _0804D21C @ =gDecompressionBuffer\n" + "\tstr r5, [sp]\n" + "\tmovs r4, 0x3\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_808BEB4\n" + "\tbl GetMultiplayerId\n" + "\tlsls r0, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 17\n" + "\teors r1, r0\n" + "\tlsrs r1, 24\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804D220 @ =gLinkPlayers + 8\n" + "\tadds r0, r1\n" + "\tldr r1, [r6, 0xC]\n" + "\tstr r5, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_808BEB4\n" + "\tldr r4, _0804D224 @ =gUnknown_8261ECC\n" + "\tldr r0, [r4]\n" + "\tldr r1, [r6, 0x18]\n" + "\tstr r5, [sp]\n" + "\tmovs r2, 0x2\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_808BEB4\n" + "\tldr r0, [r4, 0x4]\n" + "\tldr r1, [r6, 0x20]\n" + "\tmovs r2, 0x18\n" + "\tbl sub_804F728\n" + "\tldr r1, _0804D228 @ =gMain\n" + "\tmovs r0, 0x87\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "_0804D200:\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tmovs r2, 0\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804D22C @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0xA8\n" + "\tstrb r2, [r0]\n" + "\tb _0804D4D2\n" + "\t.align 2, 0\n" + "_0804D214: .4byte gSaveBlock2Ptr\n" + "_0804D218: .4byte gUnknown_2031C94\n" + "_0804D21C: .4byte gDecompressionBuffer\n" + "_0804D220: .4byte gLinkPlayers + 8\n" + "_0804D224: .4byte gUnknown_8261ECC\n" + "_0804D228: .4byte gMain\n" + "_0804D22C: .4byte gUnknown_2031DA8\n" + "_0804D230:\n" + "\tbl sub_804F610\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0804D23C\n" + "\tb _0804D4D2\n" + "_0804D23C:\n" + "\tldr r1, _0804D248 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r1, r2\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D248: .4byte gMain\n" + "_0804D24C:\n" + "\tldr r0, _0804D30C @ =gSaveBlock2Ptr\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0x38\n" + "\tsubs r0, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tmovs r6, 0\n" + "\tadd r5, sp, 0xC\n" + "\tldr r3, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tmov r8, r3\n" + "\tasrs r0, 1\n" + "\tldrb r7, [r3, 0x4]\n" + "\tadds r4, r0, r7\n" + "_0804D270:\n" + "\tadd r1, sp, 0xC\n" + "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldrh r0, [r5]\n" + "\tadds r0, r6\n" + "\tstrh r0, [r5]\n" + "\tlsls r1, r4, 16\n" + "\tasrs r1, 16\n" + "\tadd r0, sp, 0xC\n" + "\tmov r3, r8\n" + "\tldrb r2, [r3, 0x5]\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tadds r4, 0x20\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x2\n" + "\tble _0804D270\n" + "\tbl GetMultiplayerId\n" + "\tlsls r0, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 17\n" + "\teors r1, r0\n" + "\tlsrs r1, 24\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804D318 @ =gLinkPlayers + 8\n" + "\tadds r1, r0, r1\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0x38\n" + "\tsubs r0, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tmovs r6, 0\n" + "\tadd r5, sp, 0xC\n" + "\tldr r7, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tmov r8, r7\n" + "\tasrs r0, 1\n" + "\tmov r1, r8\n" + "\tldrb r1, [r1, 0x6]\n" + "\tadds r4, r0, r1\n" + "_0804D2D4:\n" + "\tadd r1, sp, 0xC\n" + "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tadds r0, r6, 0x3\n" + "\tldrh r1, [r5]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5]\n" + "\tlsls r1, r4, 16\n" + "\tasrs r1, 16\n" + "\tadd r0, sp, 0xC\n" + "\tmov r3, r8\n" + "\tldrb r2, [r3, 0x7]\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tadds r4, 0x20\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x2\n" + "\tble _0804D2D4\n" + "\tldr r1, _0804D31C @ =gMain\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r5\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D30C: .4byte gSaveBlock2Ptr\n" + "_0804D310: .4byte gTradeUnknownSpriteCoords\n" + "_0804D314: .4byte gUnknown_8261CC8\n" + "_0804D318: .4byte gLinkPlayers + 8\n" + "_0804D31C: .4byte gMain\n" + "_0804D320:\n" + "\tldr r4, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tadd r1, sp, 0xC\n" + "\tadds r0, r4, 0\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r5,r7}\n" + "\tstm r1!, {r2,r5,r7}\n" + "\tadd r1, sp, 0xC\n" + "\tadds r0, r1, 0\n" + "\tldrh r0, [r0]\n" + "\tadds r0, 0x6\n" + "\tstrh r0, [r1]\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0xD7\n" + "\tmovs r2, 0x97\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tadd r0, sp, 0xC\n" + "\tldm r4!, {r3,r5,r7}\n" + "\tstm r0!, {r3,r5,r7}\n" + "\tldm r4!, {r1-r3}\n" + "\tstm r0!, {r1-r3}\n" + "\tadd r1, sp, 0xC\n" + "\tadds r0, r1, 0\n" + "\tldrh r0, [r0]\n" + "\tadds r0, 0x7\n" + "\tstrh r0, [r1]\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0xF7\n" + "\tmovs r2, 0x97\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r6, 0\n" + "\tadd r4, sp, 0xC\n" + "\tmovs r5, 0xC0\n" + "\tlsls r5, 13\n" + "_0804D36C:\n" + "\tadd r1, sp, 0xC\n" + "\tldr r0, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tadds r0, r6, 0\n" + "\tadds r0, 0x8\n" + "\tldrh r7, [r4]\n" + "\tadds r0, r7\n" + "\tstrh r0, [r4]\n" + "\tasrs r1, r5, 16\n" + "\tadd r0, sp, 0xC\n" + "\tmovs r2, 0x96\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 14\n" + "\tadds r5, r0\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _0804D36C\n" + "\tldr r4, _0804D3B4 @ =gUnknown_2031DA8\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x35\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x5\n" + "\tbhi _0804D3B8\n" + "\tbl sub_8138B20\n" + "\tldr r1, [r4]\n" + "\tb _0804D3C0\n" + "\t.align 2, 0\n" + "_0804D3B0: .4byte gUnknown_8261CC8\n" + "_0804D3B4: .4byte gUnknown_2031DA8\n" + "_0804D3B8:\n" + "\tbl sub_8138B20\n" + "\tldr r1, [r4]\n" + "\tadds r0, 0x6\n" + "_0804D3C0:\n" + "\tadds r1, 0x35\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804D404 @ =gUnknown_8261CB0\n" + "\tldr r3, _0804D408 @ =gTradeMonSpriteCoords\n" + "\tldr r4, _0804D40C @ =gUnknown_2031DA8\n" + "\tldr r1, [r4]\n" + "\tadds r1, 0x35\n" + "\tldrb r2, [r1]\n" + "\tlsls r2, 1\n" + "\tadds r1, r2, r3\n" + "\tldrb r1, [r1]\n" + "\tlsls r1, 19\n" + "\tmovs r5, 0x80\n" + "\tlsls r5, 14\n" + "\tadds r1, r5\n" + "\tasrs r1, 16\n" + "\tadds r3, 0x1\n" + "\tadds r2, r3\n" + "\tldrb r2, [r2]\n" + "\tlsls r2, 3\n" + "\tmovs r3, 0x2\n" + "\tbl CreateSprite\n" + "\tldr r1, [r4]\n" + "\tadds r1, 0x34\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804D410 @ =gMain\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x10\n" + "\tstrb r1, [r0]\n" + "\tb _0804D4D2\n" + "\t.align 2, 0\n" + "_0804D404: .4byte gUnknown_8261CB0\n" + "_0804D408: .4byte gTradeMonSpriteCoords\n" + "_0804D40C: .4byte gUnknown_2031DA8\n" + "_0804D410: .4byte gMain\n" + "_0804D414:\n" + "\tmovs r0, 0\n" + "\tbl sub_804D694\n" + "\tb _0804D4AC\n" + "_0804D41C:\n" + "\tmovs r0, 0x1\n" + "\tbl sub_804D694\n" + "\tldr r2, _0804D43C @ =gUnknown_2031DA8\n" + "\tldr r0, [r2]\n" + "\tmovs r1, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r2]\n" + "\tstrb r1, [r0, 0x1]\n" + "\tbl sub_804D764\n" + "\tldr r1, _0804D440 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r1, r2\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D43C: .4byte gUnknown_2031DA8\n" + "_0804D440: .4byte gMain\n" + "_0804D444:\n" + "\tldr r2, _0804D478 @ =gPaletteFade\n" + "\tldrb r1, [r2, 0x8]\n" + "\tmovs r0, 0x7F\n" + "\tands r0, r1\n" + "\tstrb r0, [r2, 0x8]\n" + "\tmovs r4, 0x1\n" + "\tnegs r4, r4\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tldr r1, _0804D47C @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D478: .4byte gPaletteFade\n" + "_0804D47C: .4byte gMain\n" + "_0804D480:\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x2\n" + "\tbl sub_804D694\n" + "\tldr r1, _0804D49C @ =gMain\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r5\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D49C: .4byte gMain\n" + "_0804D4A0:\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r1, r2, r7\n" + "\tb _0804D4B4\n" + "_0804D4A8:\n" + "\tbl sub_804F964\n" + "_0804D4AC:\n" + "\tldr r1, _0804D4BC @ =gMain\n" + "\tmovs r0, 0x87\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "_0804D4B4:\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tb _0804D4D2\n" + "\t.align 2, 0\n" + "_0804D4BC: .4byte gMain\n" + "_0804D4C0:\n" + "\tldr r0, _0804D4F0 @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _0804D4D2\n" + "\tldr r0, _0804D4F4 @ =sub_804D638\n" + "\tbl SetMainCallback2\n" + "_0804D4D2:\n" + "\tbl RunTasks\n" + "\tbl AnimateSprites\n" + "\tbl BuildOamBuffer\n" + "\tbl UpdatePaletteFade\n" + "\tadd sp, 0x24\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804D4F0: .4byte gPaletteFade\n" + "_0804D4F4: .4byte sub_804D638"); +} +#endif //NONMATCHING -- cgit v1.2.3 From b290a1a570efc77a419d74aa41e97770fe792154 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 10:43:57 -0400 Subject: trade through sub_804D694 --- src/trade.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 125 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index e816d773f..a84cce7f4 100644 --- a/src/trade.c +++ b/src/trade.c @@ -17,6 +17,7 @@ #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" +#include "new_menu_helpers.h" #include "constants/species.h" #include "constants/items.h" #include "constants/easy_chat.h" @@ -67,25 +68,33 @@ IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; void sub_804C728(void); void sub_804D4F8(void); +void sub_804D638(void); +void sub_804D694(u8 state); +void sub_804D764(void); +void sub_804DFF0(void); +void sub_804E9E4(void); +void sub_804EAE4(u8 side); u8 shedinja_maker_maybe(void); +void sub_804F020(u8 side); +void sub_804F284(u8 side); +void sub_804F4DC(void); void sub_804F5BC(u8 str_idx); -void sub_804F9D8(void); bool8 sub_804F610(void); +void sub_804F728(const u8 *name, u8 *a1, u8 unused); void sub_804F748(u8 side); -void sub_804F020(u8 side); -void sub_804D764(void); -void sub_804D694(u8 imgIdx); void sub_804F890(u8 side); void sub_804F964(void); -void sub_804DFF0(void); -void sub_804D638(void); +void sub_804F9D8(void); void LoadHeldItemIcons(void); -void sub_804F728(const u8 *name, u8 *a1, u8 unused); +void sub_8050138(void); +extern const u16 gUnknown_8260C30[]; +extern const u16 gUnknown_8261430[]; extern const struct BgTemplate gUnknown_8261F1C[4]; extern const struct WindowTemplate gUnknown_8261F2C[18]; extern const u8 gTradeMonSpriteCoords[][2]; @@ -2201,3 +2210,112 @@ void sub_804CF14(void) "_0804D4F4: .4byte sub_804D638"); } #endif //NONMATCHING + +void sub_804D4F8(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804D50C(void) +{ + if (++gUnknown_2031DA8->unk_A8 >= 16) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 10; + } +} + +void sub_804D548(void) +{ + if (!gPaletteFade.active) + { + gUnknown_2031DA4[0] = gUnknown_2031DA8->tradeMenuCursorPosition; + gUnknown_2031DA4[1] = gUnknown_2031DA8->unk_7E; + if (gWirelessCommType != 0) + { + gUnknown_2031DA8->unk_6F = 16; + } + else + { + sub_800AA80(32); + gUnknown_2031DA8->unk_6F = 13; + } + } +} + +void sub_804D5A4(void) +{ + gMain.savedCallback = sub_804C718; + if (gWirelessCommType != 0) + { + if (IsLinkRfuTaskFinished()) + { + Free(gUnknown_2031C90); + FreeAllWindowBuffers(); + Free(gUnknown_2031DA8); + gMain.callback1 = NULL; + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(sub_8050138); + } + } + else + { + if (gReceivedRemoteLinkPlayers == 0) + { + Free(gUnknown_2031C90); + FreeAllWindowBuffers(); + Free(gUnknown_2031DA8); + gMain.callback1 = NULL; + SetMainCallback2(sub_8050138); + } + } +} + +void sub_804D638(void) +{ + sub_804E9E4(); + sub_804F4DC(); + sub_804EAE4(0); + sub_804EAE4(1); + SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DA8->unk_0++); + SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_2031DA8->unk_1--); + RunTextPrinters_CheckPrinter0Active(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_804D694(u8 state) +{ + int i; + + switch (state) + { + case 0: + LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60); + LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); + LoadBgTilemap(2, gUnknown_8260C30, 0x800, 0); + break; + case 1: + LoadBgTilemap(3, gUnknown_8261430, 0x800, 0); + sub_804F284(0); + sub_804F284(1); + CopyBgTilemapBufferToVram(1); + break; + case 2: + for (i = 0; i < 4; i++) + { + // BG0 and BG1 coords only + SetGpuReg(REG_OFFSET_BG0HOFS + 2 * i, 0); + } + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + break; + } +} -- cgit v1.2.3 From a5ff9f2d00fbcc6bc73475069dcbe93eaf518c1b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 11:15:08 -0400 Subject: trade through sub_804D814 --- src/trade.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a84cce7f4..445338803 100644 --- a/src/trade.c +++ b/src/trade.c @@ -32,8 +32,7 @@ struct TradeResources /*0x0034*/ u8 tradeMenuCursorSpriteIdx; /*0x0035*/ u8 tradeMenuCursorPosition; /*0x0036*/ u8 partyCounts[2]; - /*0x0038*/ bool8 tradeMenuOptionsActive[12]; - /*0x0044*/ u8 unk_44; + /*0x0038*/ bool8 tradeMenuOptionsActive[13]; /*0x0045*/ u8 unk_45[2][PARTY_SIZE]; /*0x0051*/ u8 unk_51[2][PARTY_SIZE]; /*0x005D*/ u8 unk_5D[2][PARTY_SIZE]; @@ -2319,3 +2318,37 @@ void sub_804D694(u8 state) break; } } + +void sub_804D764(void) +{ + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (i < gUnknown_2031DA8->partyCounts[0]) + { + gSprites[gUnknown_2031DA8->partyIcons[0][i]].invisible = FALSE; + gUnknown_2031DA8->tradeMenuOptionsActive[i] = TRUE; + } + else + { + gUnknown_2031DA8->tradeMenuOptionsActive[i] = FALSE; + } + if (i < gUnknown_2031DA8->partyCounts[1]) + { + gSprites[gUnknown_2031DA8->partyIcons[1][i]].invisible = FALSE; + gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = TRUE; + } + else + { + gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = FALSE; + } + } + gUnknown_2031DA8->tradeMenuOptionsActive[12] = TRUE; +} + +void sub_804D814(char *dest, const char *src, size_t size) +{ + int i; + for (i = 0; i < size; i++) + dest[i] = src[i]; +} -- cgit v1.2.3 From e9cf9fc104ceedd50330af6b22c6e896e85930e1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 12:16:01 -0400 Subject: port shedinja_maker_maybe; resolve within-array party pointers --- src/pokemon.c | 8 +-- src/trade.c | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 168 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/pokemon.c b/src/pokemon.c index 17f28c7a6..fb7a8c626 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -64,9 +64,11 @@ struct OakSpeechNidoranFStruct struct SpriteFrameImage *frameImages; }; -// TODO: move sLearningMoveTableID, gPlayerPartyCount, gEnemyPartyCount, -// gEnemyParty, gPlayerParty here after resolving symbol ref in between. -extern u8 sLearningMoveTableID; +static EWRAM_DATA u8 sLearningMoveTableID = 0; +EWRAM_DATA u8 gPlayerPartyCount = 0; +EWRAM_DATA u8 gEnemyPartyCount = 0; +EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {}; +EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; static EWRAM_DATA struct OakSpeechNidoranFStruct *sOakSpeechNidoranResources = NULL; diff --git a/src/trade.c b/src/trade.c index 445338803..42c2792ff 100644 --- a/src/trade.c +++ b/src/trade.c @@ -13,7 +13,9 @@ #include "link.h" #include "link_rfu.h" #include "cable_club.h" +#include "data.h" #include "sound.h" +#include "string_util.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -67,8 +69,10 @@ IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +EWRAM_DATA u8 gUnknown_2031CCC[216] = {}; EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; +EWRAM_DATA void * gUnknown_2031DAC = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -101,6 +105,7 @@ extern const u8 *gUnknown_8261ECC[]; extern const u8 gTradeUnknownSpriteCoords[][4]; extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; +extern const u8 gJPText_Shedinja[]; void sub_804C600(void) { @@ -2346,9 +2351,165 @@ void sub_804D764(void) gUnknown_2031DA8->tradeMenuOptionsActive[12] = TRUE; } -void sub_804D814(char *dest, const char *src, size_t size) +static void Trade_Memcpy(void *dest, const void *src, size_t size) { int i; + char *_dest = dest; + const char *_src = src; for (i = 0; i < size; i++) - dest[i] = src[i]; + _dest[i] = _src[i]; +} + +bool8 shedinja_maker_maybe(void) +{ + u8 id = GetMultiplayerId(); + int i; + struct Pokemon *mon; + + switch (gUnknown_2031DA8->unk_69) + { + case 0: + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); + gUnknown_2031DA8->unk_69++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 1: + if (IsLinkTaskFinished()) + { + if (GetBlockReceivedStatus() == 0) + { + gUnknown_2031DA8->unk_69++; + } + else + { + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + } + break; + case 3: + if (id == 0) + { + sub_800A474(1); + } + gUnknown_2031DA8->unk_69++; + break; + case 4: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 5: + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); + gUnknown_2031DA8->unk_69++; + break; + case 7: + if (id == 0) + { + sub_800A474(1); + } + gUnknown_2031DA8->unk_69++; + break; + case 8: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 9: + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200); + gUnknown_2031DA8->unk_69++; + break; + case 11: + if (id == 0) + { + sub_800A474(1); + } + gUnknown_2031DA8->unk_69++; + break; + case 12: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 13: + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220); + gUnknown_2031DA8->unk_69++; + break; + case 15: + if (id == 0) + { + sub_800A474(3); + } + gUnknown_2031DA8->unk_69++; + break; + case 16: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(gUnknown_2031CCC, gBlockRecvBuffer[id ^ 1], 216); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 17: + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11); + gUnknown_2031DA8->unk_69++; + break; + case 19: + if (id == 0) + { + sub_800A474(4); + } + gUnknown_2031DA8->unk_69++; + break; + case 20: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(gUnknown_2031DA8->unk_A9, gBlockRecvBuffer[id ^ 1], 11); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 21: + for (i = 0, mon = gEnemyParty; i < PARTY_SIZE; mon++, i++) + { + u8 name[POKEMON_NAME_LENGTH + 1]; + u16 species = GetMonData(mon, MON_DATA_SPECIES); + + if (species != SPECIES_NONE) + { + if (species == SPECIES_SHEDINJA && GetMonData(mon, MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) + { + GetMonData(mon, MON_DATA_NICKNAME, name); + + if (!StringCompareWithoutExtCtrlCodes(name, gJPText_Shedinja)) + { + SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); + } + } + } + } + return TRUE; + case 2: + case 6: + case 10: + case 14: + case 18: + gUnknown_2031DA8->unk_A8++; + if (gUnknown_2031DA8->unk_A8 > 10) + { + gUnknown_2031DA8->unk_A8 = 0; + gUnknown_2031DA8->unk_69++; + } + break; + } + return FALSE; } -- cgit v1.2.3 From efe914a5bab5062834f35cbae7824d1703f45618 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 15:55:57 -0400 Subject: trade through sub_804E944 --- src/random.c | 6 +- src/trade.c | 571 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 573 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/random.c b/src/random.c index 54dae0824..f6c49971d 100644 --- a/src/random.c +++ b/src/random.c @@ -8,11 +8,11 @@ u32 gRngValue; u16 Random(void) { - gRngValue = 1103515245 * gRngValue + 24691; - return gRngValue >> 16; + gRngValue = 1103515245 * gRngValue + 24691; + return gRngValue >> 16; } void SeedRng(u16 seed) { - gRngValue = seed; + gRngValue = seed; } diff --git a/src/trade.c b/src/trade.c index 42c2792ff..7c77556db 100644 --- a/src/trade.c +++ b/src/trade.c @@ -16,6 +16,9 @@ #include "data.h" #include "sound.h" #include "string_util.h" +#include "strings.h" +#include "menu.h" +#include "overworld.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -79,12 +82,16 @@ void sub_804D4F8(void); void sub_804D638(void); void sub_804D694(u8 state); void sub_804D764(void); +u8 shedinja_maker_maybe(void); void sub_804DFF0(void); void sub_804E9E4(void); +void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); -u8 shedinja_maker_maybe(void); void sub_804F020(u8 side); void sub_804F284(u8 side); +void sub_804F3B4(void); +void sub_804F3C8(u8 a0); +void sub_804F488(u16 a0, u8 a1); void sub_804F4DC(void); void sub_804F5BC(u8 str_idx); bool8 sub_804F610(void); @@ -93,6 +100,7 @@ void sub_804F748(u8 side); void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); +u32 sub_804FA14(struct Pokemon * party, u8 partyCount, u8 cursorPos); void LoadHeldItemIcons(void); void sub_8050138(void); @@ -106,6 +114,7 @@ extern const u8 gTradeUnknownSpriteCoords[][4]; extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; extern const u8 gJPText_Shedinja[]; +extern const u8 gUnknown_8261D08[][4][6]; void sub_804C600(void) { @@ -2513,3 +2522,563 @@ bool8 shedinja_maker_maybe(void) } return FALSE; } + +void sub_804DBAC(void) +{ + sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 0x18); +} + +void sub_804DBD4(u8 a0, u8 a1) +{ + if (a1 & 1) + { + switch (gBlockRecvBuffer[0][0]) + { + case 0xEEAA: + gUnknown_2031DA8->unk_78 = 2; + break; + case 0xAABB: + gUnknown_2031DA8->unk_78 = 1; + break; + case 0xBBBB: + gUnknown_2031DA8->unk_7A = 1; + break; + case 0xBBCC: + gUnknown_2031DA8->unk_7A = 2; + break; + } + ResetBlockReceivedFlag(0); + } + + if (a1 & 2) + { + switch (gBlockRecvBuffer[1][0]) + { + case 0xEEAA: + gUnknown_2031DA8->unk_79 = 2; + break; + case 0xAABB: + gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[1][1] + 6; + gUnknown_2031DA8->unk_79 = 1; + break; + case 0xBBBB: + gUnknown_2031DA8->unk_7B = 1; + break; + case 0xBBCC: + gUnknown_2031DA8->unk_7B = 2; + break; + } + ResetBlockReceivedFlag(1); + } +} + +void sub_804DCF4(u8 a0, u8 a1) +{ + if (a1 & 1) + { + switch (gBlockRecvBuffer[0][0]) + { + case 0xEEBB: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sub_804F5BC(4); + gUnknown_2031DA8->unk_6F = 11; + break; + case 0xEECC: + sub_804F5BC(5); + gUnknown_2031DA8->unk_6F = 8; + break; + case 0xDDDD: + gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[0][1] + 6; + rbox_fill_rectangle(0); + sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); + sub_804EAAC(gUnknown_2031DA8->unk_7E); + gUnknown_2031DA8->unk_6F = 7; + break; + case 0xCCDD: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 10; + break; + case 0xDDEE: + sub_804F5BC(1); + gUnknown_2031DA8->unk_6F = 8; + } + ResetBlockReceivedFlag(0); + } + + if (a1 & 2) + ResetBlockReceivedFlag(1); +} + +void sub_804DDF0(void) +{ + if (gUnknown_2031DA8->unk_78 && gUnknown_2031DA8->unk_79) + { + if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 1) + { + gUnknown_2031DA8->unk_6F = 6; + gUnknown_2031DA8->linkData[0] = 0xDDDD; + gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + } + else if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 2) + { + sub_804F5BC(1); + gUnknown_2031DA8->linkData[0] = 0xEECC; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + gUnknown_2031DA8->unk_6F = 8; + } + else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 1) + { + sub_804F5BC(5); + gUnknown_2031DA8->linkData[0] = 0xDDEE; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + gUnknown_2031DA8->unk_6F = 8; + } + else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 2) + { + gUnknown_2031DA8->linkData[0] = 0xEEBB; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + gUnknown_2031DA8->unk_6F = 11; + } + } + + if (gUnknown_2031DA8->unk_7A && gUnknown_2031DA8->unk_7B) + { + if (gUnknown_2031DA8->unk_7A == 1 && gUnknown_2031DA8->unk_7B == 1) + { + gUnknown_2031DA8->linkData[0] = 0xCCDD; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = 0; + gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_6F = 9; + } + + if (gUnknown_2031DA8->unk_7A == 2 || gUnknown_2031DA8->unk_7B == 2) + { + sub_804F5BC(1); + gUnknown_2031DA8->linkData[0] = 0xDDEE; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = 0; + gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_6F = 8; + } + } +} + +void sub_804DFF0(void) +{ + u8 mpId = GetMultiplayerId(); + u8 status; + if ((status = GetBlockReceivedStatus())) + { + if (mpId == 0) + sub_804DBD4(0, status); + else + sub_804DCF4(mpId, status); + } + if (mpId == 0) + sub_804DDF0(); +} + +u8 sub_804E028(u8 oldPosition, u8 direction) +{ + int i; + u8 newPosition = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_2031DA8->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) + { + newPosition = gUnknown_8261D08[oldPosition][direction][i]; + break; + } + } + + return newPosition; +} + + +void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) +{ + u8 newPosition = sub_804E028(*tradeMenuCursorPosition, direction); + + if (newPosition == 12) // CANCEL + { + StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 1); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = 224; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = 160; + } + else + { + StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 0); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + } + + if (*tradeMenuCursorPosition != newPosition) + { + PlaySE(SE_SELECT); + } + + *tradeMenuCursorPosition = newPosition; +} + +void sub_804E134(void) +{ + sub_804F5BC(0); + gUnknown_2031DA8->unk_6F = 5; + + if (GetMultiplayerId() == 1) + { + gUnknown_2031DA8->linkData[0] = 0xAABB; + gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 0x14); + } + else + { + gUnknown_2031DA8->unk_78 = 1; + } +} + +extern const struct MenuAction gUnknown_8261EE4[]; +extern const struct WindowTemplate gUnknown_8261FC4; + +void sub_804E194(void) +{ + int i; + + if (JOY_REPT(DPAD_UP)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 0); + } + else if (JOY_REPT(DPAD_DOWN)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 1); + } + else if (JOY_REPT(DPAD_LEFT)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 2); + } + else if (JOY_REPT(DPAD_RIGHT)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 3); + } + + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + + if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) // PlayerParty + { + DrawTextBorderOuter(1, 1, 14); + FillWindowPixelBuffer(1, PIXEL_FILL(1)); + UnionRoomAndTradeMenuPrintOptions(1, 3, 16, 2, gUnknown_8261EE4); + Menu_InitCursor(1, 3, 0, 0, 16, 2, 0); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); + gUnknown_2031DA8->unk_6F = 1; + } + else if (gUnknown_2031DA8->tradeMenuCursorPosition < 12) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 2; + } + else if (gUnknown_2031DA8->tradeMenuCursorPosition == 12) + { + CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0); + gUnknown_2031DA8->unk_6F = 4; + sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); + } + } + if (JOY_NEW(R_BUTTON)) + { + for (i = 0; i < 10; i++) + gUnknown_2031DA8->linkData[i] = i; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + } +} + +void sub_804E330(void) +{ + sub_804F3B4(); + gUnknown_2031DA8->unk_6F = 0; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); +} + +void sub_804E388(void) +{ + switch (Menu_ProcessInputNoWrapAround()) + { + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + sub_804E330(); + break; + case MENU_NOTHING_CHOSEN: + break; + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 2; + break; + case 1: + switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, gUnknown_2031DA8->tradeMenuCursorPosition)) + { + case 0: + sub_804E134(); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; + break; + case 1: + sub_804F488(3, 3); + gUnknown_2031DA8->unk_6F = 8; + break; + case 2: + case 4: + sub_804F488(3, 6); + gUnknown_2031DA8->unk_6F = 8; + break; + case 3: + case 5: + sub_804F488(3, 7); + gUnknown_2031DA8->unk_6F = 8; + break; + } + break; + } +} + +void sub_804E46C(void) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_804E330(); + } +} + +void sub_804E494(void) +{ + if (!gPaletteFade.active) + { + if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) + ShowPokemonSummaryScreen(gPlayerParty, gUnknown_2031DA8->tradeMenuCursorPosition, gUnknown_2031DA8->partyCounts[0] - 1, sub_804CF14, 4); + else + ShowPokemonSummaryScreen(gEnemyParty, gUnknown_2031DA8->tradeMenuCursorPosition - 6, gUnknown_2031DA8->partyCounts[1] - 1, sub_804CF14, 4); + FreeAllWindowBuffers(); + } +} + +u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) +{ + s32 i; + u16 species; + u8 r4 = 0; + for (i = 0; i < a1; i++) + { + if (a2 != i) + r4 += a0[i]; + } + species = GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_SPECIES); + if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_OBEDIENCE)) + return 2; + if (r4 != 0) + r4 = 1; + return r4; +} + +void sub_804E5A0(void) +{ + int i; + u8 arr[12]; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + arr[i] = gUnknown_2031DA8->unk_45[0][i]; + } + + switch (sub_804E50C(arr, gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->tradeMenuCursorPosition)) + { + case 0: + sub_804F488(3, 3); + gUnknown_2031DA8->linkData[0] = 0xBBCC; + sub_804F488(0xB4, 0); + break; + case 1: + sub_804F488(3, 1); + gUnknown_2031DA8->linkData[0] = 0xBBBB; + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + } + break; + case 2: + sub_804F488(3, 8); + gUnknown_2031DA8->linkData[0] = 0xBBCC; + sub_804F488(0xB4, 0); + break; + } +} + +void sub_804E674(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + sub_804E5A0(); + gUnknown_2031DA8->unk_6F = 100; + PutWindowTilemap(17); + break; + case 1: + case MENU_B_PRESSED: + sub_804F488(3, 1); + if (IsLinkTaskFinished()) + { + gUnknown_2031DA8->linkData[0] = 0xBBCC; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + } + gUnknown_2031DA8->unk_6F = 100; + PutWindowTilemap(17); + break; + } +} + +void sub_804E6FC(void) +{ + int i; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[1] - 4; i++) + { + PutWindowTilemap(i + 12); + CopyWindowToVram(i + 12, 1); + } +} + +void sub_804E744(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + sub_804F5BC(4); + gUnknown_2031DA8->linkData[0] = 0xEEAA; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; + gUnknown_2031DA8->unk_6F = 100; + sub_804E6FC(); + break; + case 1: + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + sub_804E330(); + break; + } +} + +void sub_804E7C8(void) +{ + if (GetMultiplayerId() == 0) + { + rbox_fill_rectangle(0); + sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); + sub_804EAAC(gUnknown_2031DA8->unk_7E); + } + gUnknown_2031DA8->unk_6F = 7; +} + +void sub_804E804(void) +{ + if (gUnknown_2031DA8->unk_74[0] == 5 && gUnknown_2031DA8->unk_74[1] == 5) + { + sub_804DBAC(); + gUnknown_2031DA8->unk_6F = 14; + } +} + +void sub_804E830(void) +{ + gUnknown_2031DA8->unk_A8++; + + if (gUnknown_2031DA8->unk_A8 > 120) + { + CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 1, 14, 0); + gUnknown_2031DA8->unk_A8 = 0; + gUnknown_2031DA8->unk_6F = 3; + } +} + +void sub_804E880(void) +{ + int i; + + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + rbox_fill_rectangle(0); + rbox_fill_rectangle(1); + + for (i = 0; i < 4; i++) + { + FillWindowPixelBuffer(i + 14, PIXEL_FILL(0)); + rbox_fill_rectangle(i + 14); + } + + sub_804F3C8(0); + sub_804F3C8(1); + gUnknown_2031DA8->unk_6F = 0; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; + } +} + +void sub_804E908(void) +{ + if (!gPaletteFade.active) + { + if (gWirelessCommType) + { + sub_800AB9C(); + } + else + { + sub_800AA80(12); + } + + gUnknown_2031DA8->unk_6F = 12; + } +} + +void sub_804E944(void) +{ + if (gWirelessCommType) + { + if (IsLinkTaskFinished()) + { + Free(gUnknown_2031C90); + Free(gUnknown_2031DA8); + FreeAllWindowBuffers(); + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(c2_8056854); + } + } + else + { + if (!gReceivedRemoteLinkPlayers) + { + Free(gUnknown_2031C90); + Free(gUnknown_2031DA8); + FreeAllWindowBuffers(); + SetMainCallback2(c2_8056854); + } + } +} + -- cgit v1.2.3 From 4e296b8777eae2a824bf6511aa51d3b78b2e39dc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 16:31:59 -0400 Subject: trade through sub_804EED4 --- src/trade.c | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 7c77556db..b0f3b0e90 100644 --- a/src/trade.c +++ b/src/trade.c @@ -19,6 +19,7 @@ #include "strings.h" #include "menu.h" #include "overworld.h" +#include "battle_anim.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -27,6 +28,7 @@ #include "constants/items.h" #include "constants/easy_chat.h" #include "constants/songs.h" +#include "constants/moves.h" struct TradeResources { @@ -87,7 +89,10 @@ void sub_804DFF0(void); void sub_804E9E4(void); void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); +u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); +void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); void sub_804F020(u8 side); +void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); @@ -115,6 +120,13 @@ extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; extern const u8 gJPText_Shedinja[]; extern const u8 gUnknown_8261D08[][4][6]; +extern const u16 gTradePartyBoxTilemap[]; +extern const u16 gTradeMovesBoxTilemap[]; +extern const u8 gUnknown_8262055[][2]; +extern const u8 gUnknown_8261F18[]; +extern const u8 gUnknown_8261EB6[]; +extern const u8 gUnknown_8261EC7[]; +extern const u8 gUnknown_841E09F[]; void sub_804C600(void) { @@ -3082,3 +3094,197 @@ void sub_804E944(void) } } +void sub_804E9C0(void) +{ + if (!sub_80FA484(FALSE)) + { + sub_800AB9C(); + gUnknown_2031DA8->unk_6F = 13; + } +} + +void sub_804E9E4(void) +{ + switch (gUnknown_2031DA8->unk_6F) + { + case 0: + sub_804E194(); + break; + case 1: + sub_804E388(); + break; + case 2: + sub_804E494(); + break; + case 3: + sub_804E674(); + break; + case 4: + sub_804E744(); + break; + case 6: + sub_804E7C8(); + break; + case 7: + sub_804E804(); + break; + case 8: + sub_804E880(); + break; + case 9: + sub_804D50C(); + break; + case 10: + sub_804D548(); + break; + case 11: + sub_804E908(); + break; + case 12: + sub_804E944(); + break; + case 13: + sub_804D5A4(); + break; + case 14: + sub_804E830(); + break; + case 15: + sub_804E46C(); + break; + case 16: + sub_804E9C0(); + break; + } +} + +void sub_804EAAC(u8 a0) +{ + u8 whichParty = a0 / PARTY_SIZE; + + if (gUnknown_2031DA8->unk_74[whichParty] == 0) + { + gUnknown_2031DA8->unk_74[whichParty] = 1; + gUnknown_2031DA8->unk_76[whichParty] = a0; + } +} + +void sub_804EAE4(u8 a0) +{ + s8 nameStringWidth; + u8 nickname[20]; + u8 movesString[56]; + u8 i; + u8 partyIdx; + u8 whichParty; + u8 monIdx = gUnknown_2031DA8->unk_76[a0]; + + whichParty = 1; + if (gUnknown_2031DA8->unk_76[a0] < PARTY_SIZE) + whichParty = 0; + partyIdx = monIdx % PARTY_SIZE; + nameStringWidth = 0; + + switch (gUnknown_2031DA8->unk_74[a0]) + { + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[a0]; i++) + { + gSprites[gUnknown_2031DA8->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; + } + + for (i = 0; i < 6; i++) + { + ClearWindowTilemap(i + (a0 * 6 + 2)); + } + + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); + gUnknown_2031DA8->unk_74[a0]++; + sub_8075490(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + + if (whichParty == 0) + sub_804F3B4(); + break; + case 2: + if (gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) + gUnknown_2031DA8->unk_74[a0] = 3; + break; + case 3: + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; + nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); + AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_8261F18, 0, nickname); + sub_804EED4(movesString, whichParty, partyIdx); + AddTextPrinterParameterized4((a0 * 2) + 15, 1, 0, 0, 0, 0, gUnknown_8261F18, 0, movesString); + PutWindowTilemap((a0 * 2) + 14); + CopyWindowToVram((a0 * 2) + 14, 3); + PutWindowTilemap((a0 * 2) + 15); + CopyWindowToVram((a0 * 2) + 15, 3); + gUnknown_2031DA8->unk_74[a0]++; + break; + case 4: + sub_804F08C(a0, partyIdx, gUnknown_8262055[a0][0] + 4, gUnknown_8262055[a0][1] + 1, gUnknown_8262055[a0][0], gUnknown_8262055[a0][1]); + gUnknown_2031DA8->unk_74[a0]++; + break; + } +} + +u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) +{ + u8 nickname[11]; + if (whichParty == 0) + GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); + else + GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); + StringCopy10(dest, nickname); + return GetStringWidth(0, dest, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); +} + +void sub_804EED4(u8 *a0, u8 a1, u8 a2) +{ + u16 moves[MAX_MON_MOVES]; + u16 i; + + if (!gUnknown_2031DA8->unk_51[a1][a2]) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (!a1) + { + moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL); + } + else + { + moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL); + } + } + + StringCopy(a0, gUnknown_8261EB6); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE) + { + StringAppend(a0, gMoveNames[moves[i]]); + } + + StringAppend(a0, gUnknown_8261EC7); + } + } + else + { + StringCopy(a0, gUnknown_8261EB6); + StringAppend(a0, gUnknown_841E09F); + } +} -- cgit v1.2.3 From b07899b2d25fea57d1f4f167ace97cedb865a43f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 20:39:06 -0400 Subject: Remove unused header --- src/battle_main.c | 1 - src/daycare.c | 8 -------- 2 files changed, 9 deletions(-) (limited to 'src') diff --git a/src/battle_main.c b/src/battle_main.c index 1b1614a5a..9104bc381 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -20,7 +20,6 @@ #include "graphics.h" #include "gpu_regs.h" #include "help_system.h" -#include "international_string_util.h" #include "item.h" #include "link.h" #include "link_rfu.h" diff --git a/src/daycare.c b/src/daycare.c index c016bbc38..f034bc220 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -14,7 +14,6 @@ #include "text.h" #include "menu.h" #include "new_menu_helpers.h" -#include "international_string_util.h" #include "script.h" #include "strings.h" #include "task.h" @@ -24,25 +23,18 @@ #include "overworld.h" #include "pokedex.h" #include "decompress.h" -#include "task.h" #include "palette.h" -#include "main.h" #include "sound.h" #include "constants/songs.h" #include "text_window.h" #include "trig.h" #include "malloc.h" -#include "dma3.h" #include "gpu_regs.h" #include "bg.h" #include "m4a.h" #include "graphics.h" -#include "constants/abilities.h" -#include "constants/species.h" #include "scanline_effect.h" -#include "field_weather.h" #include "naming_screen.h" -#include "field_screen_effect.h" #include "help_system.h" #include "field_fadetransition.h" -- cgit v1.2.3 From 4c5e645e90fbbcc902346404fefef38d1c1ddbf3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 11:02:57 -0400 Subject: trade port through sub_804FA14 --- src/trade.c | 508 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 505 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index b0f3b0e90..765eb394d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -21,6 +21,9 @@ #include "overworld.h" #include "battle_anim.h" #include "party_menu.h" +#include "daycare.h" +#include "event_data.h" +#include "battle_interface.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "new_menu_helpers.h" @@ -67,7 +70,7 @@ struct TradeResources u16 unk_2; u8 unk_4; } unk_8D0[4]; - /*0x08F0*/ u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; + /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; IWRAM_DATA vu16 gUnknown_3000E78; @@ -105,7 +108,7 @@ void sub_804F748(u8 side); void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); -u32 sub_804FA14(struct Pokemon * party, u8 partyCount, u8 cursorPos); +u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); void LoadHeldItemIcons(void); void sub_8050138(void); @@ -123,10 +126,16 @@ extern const u8 gUnknown_8261D08[][4][6]; extern const u16 gTradePartyBoxTilemap[]; extern const u16 gTradeMovesBoxTilemap[]; extern const u8 gUnknown_8262055[][2]; +extern const u8 gUnknown_8261E5A[][12]; +extern const u8 gUnknown_8261E72[][12]; extern const u8 gUnknown_8261F18[]; extern const u8 gUnknown_8261EB6[]; extern const u8 gUnknown_8261EC7[]; extern const u8 gUnknown_841E09F[]; +extern const u8 *const gUnknown_8261EF4[]; +extern const struct SpritePalette gUnknown_8261D00; +extern const struct SpritePalette gUnknown_8261C60; +extern const struct SpriteSheet gUnknown_8261C58; void sub_804C600(void) { @@ -142,7 +151,7 @@ void sub_804C600(void) LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); - SetBgTilemapBuffer(1, gUnknown_2031DA8->bg1TilemapBuffer); + SetBgTilemapBuffer(1, gUnknown_2031DA8->tilemapBuffer); if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); @@ -3288,3 +3297,496 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) StringAppend(a0, gUnknown_841E09F); } } + +void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) +{ + u8 xPos; + s8 speed; + windowId += (whichParty * PARTY_SIZE) + 2; + speed = 0; + xPos = (64u - GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING))) / 2; + AddTextPrinterParameterized3(windowId, 0, xPos, 4, gUnknown_8261F18, speed, str); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); +} + +void sub_804F020(u8 whichParty) +{ + u8 buff[20]; + u8 nickname[30]; + struct Pokemon * party = whichParty == 0 ? gPlayerParty : gEnemyParty; + u8 i; + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + GetMonData(&party[i], MON_DATA_NICKNAME, buff); + StringCopy10(nickname, buff); + sub_804EFB4(whichParty, i, nickname); + } +} + +void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) +{ + u8 level; + u32 r2; + u8 gender; + u8 nickname[12]; + + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9F1FC, a4, a5, 6, 3, 0); + CopyBgTilemapBufferToVram(1); + + if (whichParty == 0) + level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL); + else + level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); + + if (gUnknown_2031DA8->unk_51[whichParty][monIdx] == 0) + { + if (level / 10 != 0) + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; + + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; + } + else + { + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 33]; + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; + } + + if (gUnknown_2031DA8->unk_51[whichParty][monIdx] != 0) + { + r2 = 0x480; + } + else + { + if (whichParty == 0) + { + gender = GetMonGender(&gPlayerParty[monIdx]); + GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); + } + else + { + gender = GetMonGender(&gEnemyParty[monIdx]); + GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); + } + + switch (gender) + { + case MON_MALE: + r2 = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; + break; + case MON_FEMALE: + r2 = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; + break; + default: + r2 = 0x83; + break; + } + } + gUnknown_2031DA8->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; +} + +#ifdef NONMATCHING +// Instruction swap when setting r5 and r4 +void sub_804F284(u8 whichParty) +{ + s32 i; + const u8 *r5; + const u8 *r4; + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + r5 = gUnknown_8261E5A[whichParty]; + r4 = gUnknown_8261E72[whichParty]; + sub_804F08C(whichParty, i, r5[2 * i + 0], r5[2 * i + 1], r4[2 * i + 0], r4[2 * i + 1]); + } +} +#else +NAKED +void sub_804F284(u8 whichParty) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmovs r7, 0\n" + "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x36\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tbge _0804F2D4\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r6\n" + "\tldr r1, _0804F2E0 @ =gUnknown_8261E5A\n" + "\tlsls r0, 2\n" + "\tadds r5, r0, r1\n" + "\tldr r1, _0804F2E4 @ =gUnknown_8261E72\n" + "\tadds r4, r0, r1\n" + "_0804F2AA:\n" + "\tlsls r1, r7, 24\n" + "\tlsrs r1, 24\n" + "\tldrb r2, [r5]\n" + "\tldrb r3, [r5, 0x1]\n" + "\tldrb r0, [r4]\n" + "\tstr r0, [sp]\n" + "\tldrb r0, [r4, 0x1]\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r6, 0\n" + "\tbl sub_804F08C\n" + "\tadds r5, 0x2\n" + "\tadds r4, 0x2\n" + "\tadds r7, 0x1\n" + "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x36\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804F2AA\n" + "_0804F2D4:\n" + "\tadd sp, 0x8\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804F2DC: .4byte gUnknown_2031DA8\n" + "_0804F2E0: .4byte gUnknown_8261E5A\n" + "_0804F2E4: .4byte gUnknown_8261E72"); +} +#endif //NONMATCHING + +void sub_804F2E8(u8 whichParty) +{ + int i; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].invisible = FALSE; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.x = 0; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.y = 0; + } +} + +void sub_804F3B4(void) +{ + rbox_fill_rectangle(1); + sub_804F020(1); +} + +void sub_804F3C8(u8 whichParty) +{ + CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + sub_804F284(whichParty); + sub_804F020(whichParty); + sub_804F2E8(whichParty); + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * gUnknown_2031DA8->unk_72, 24); + gUnknown_2031DA8->unk_74[whichParty] = 0; +} + +void sub_804F440(void) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); +} + +void sub_804F464(void) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); +} + +void sub_804F488(u16 a0, u8 a1) +{ + int i; + for (i = 0; i < 4; i++) + { + if (!gUnknown_2031DA8->unk_8D0[i].unk_0) + { + gUnknown_2031DA8->unk_8D0[i].unk_2 = a0; + gUnknown_2031DA8->unk_8D0[i].unk_4 = a1; + gUnknown_2031DA8->unk_8D0[i].unk_0 = TRUE; + break; + } + } +} + +void sub_804F4DC(void) +{ + int i; + + for (i = 0; i < 4; i++) + { + if (gUnknown_2031DA8->unk_8D0[i].unk_0) + { + if (gUnknown_2031DA8->unk_8D0[i].unk_2) + { + gUnknown_2031DA8->unk_8D0[i].unk_2--; + } + else + { + switch (gUnknown_2031DA8->unk_8D0[i].unk_4) + { + case 0: + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + break; + case 1: + sub_804F5BC(0); + break; + case 2: + sub_804F5BC(2); + break; + case 3: + case 4: + case 5: + sub_804F5BC(3); + break; + case 6: + sub_804F5BC(6); + break; + case 7: + sub_804F5BC(7); + break; + case 8: + sub_804F5BC(8); + break; + } + gUnknown_2031DA8->unk_8D0[i].unk_0 = FALSE; + } + } + } +} + +void sub_804F5BC(u8 idx) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized(0, 3, gUnknown_8261EF4[idx], 0, 2, 0xFF, NULL); + DrawTextBorderOuter(0, 0x014, 12); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +bool8 sub_804F610(void) +{ + struct SpriteSheet sheet; + + if (gUnknown_2031DA8->unk_A8 < 14) + { + sheet.data = gUnknown_2031C94[gUnknown_2031DA8->unk_A8]; + sheet.size = 0x100; + sheet.tag = 200 + gUnknown_2031DA8->unk_A8; + } + + switch (gUnknown_2031DA8->unk_A8) + { + case 0 ... 7: + LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 8: + gUnknown_2031DA8->unk_72 = LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 9 ... 13: + LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 14: + LoadSpritePalette(&gUnknown_8261D00); + gUnknown_2031DA8->unk_A8++; + break; + case 15: + LoadSpritePalette(&gUnknown_8261C60); + gUnknown_2031DA8->unk_A8++; + break; + case 16: + LoadSpriteSheet(&gUnknown_8261C58); + gUnknown_2031DA8->unk_A8++; + break; + case 17: + gUnknown_2031DA8->unk_A8 = 0; + return TRUE; + } + + return FALSE; +} + +void sub_804F728(const u8 *name, u8 *dest, u8 unused) +{ + sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); +} + +void sub_804F748(u8 who) +{ + int i; + + switch (who) + { + case 0: + for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 1; + } + else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + else + { + gUnknown_2031DA8->unk_45[who][i] = 1; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + } + break; + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 1; + } + else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + else + { + gUnknown_2031DA8->unk_45[who][i] = 1; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + } + break; + } +} + +void sub_804F890(u8 who) +{ + u16 i, curHp, maxHp; + + switch (who) + { + case 0: + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_2031DA8->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); + } + break; + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); + gUnknown_2031DA8->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); + } + break; + } +} + +void sub_804F964(void) +{ + int i, j; + for (i = 0; i < 2; i++) + { + for (j = 0; j < gUnknown_2031DA8->partyCounts[i]; j++) + { + MonIcon_SetAnim(&gSprites[gUnknown_2031DA8->partyIcons[i][j]], 4 - gUnknown_2031DA8->unk_5D[i][j]); + } + } +} + +void sub_804F9D8(void) +{ + int i; + for (i = 0; i < 11; i++) + { + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_2031DA8->unk_A9[i] != 0) + gSaveBlock1Ptr->giftRibbons[i] = gUnknown_2031DA8->unk_A9[i]; + } +} + +u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +{ + int i, sum; + struct LinkPlayer *player; + int species[6]; + int species2[6]; + + for (i = 0; i < partyCount; i++) + { + species2[i] = GetMonData(&party[i], MON_DATA_SPECIES2); + species[i] = GetMonData(&party[i], MON_DATA_SPECIES); + } + + if (!IsNationalPokedexEnabled()) + { + if (species2[cursorPos] > SPECIES_MEW) + { + return 2; + } + if (species2[cursorPos] == SPECIES_NONE) + { + return 3; + } + } + + player = &gLinkPlayers[GetMultiplayerId() ^ 1]; + if ((player->version & 0xFF) != VERSION_RUBY && + (player->version & 0xFF) != VERSION_SAPPHIRE) + { + if ((player->name[10] & 0xF) == 0) + { + if (species2[cursorPos] == SPECIES_EGG) + { + return 5; + } + + if (species2[cursorPos] > SPECIES_MEW) + { + return 4; + } + } + } + + if (species[cursorPos] == SPECIES_DEOXYS || species[cursorPos] == SPECIES_MEW) + { + if (!GetMonData(&party[cursorPos], MON_DATA_OBEDIENCE)) + { + return 4; + } + } + + for (i = 0; i < partyCount; i++) + { + if (species2[i] == SPECIES_EGG) + { + species2[i] = SPECIES_NONE; + } + } + + for (sum = 0, i = 0; i < partyCount; i++) + { + if (i != cursorPos) + { + sum += species2[i]; + } + } + + if (sum != 0) + { + return 0; + } + else + { + return 1; + } +} -- cgit v1.2.3 From a1ec6ccff14cb0e95359b6595f35620ab606bc03 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 11:40:48 -0400 Subject: Port through sub_804FE00 --- src/trade.c | 231 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 765eb394d..48f559861 100644 --- a/src/trade.c +++ b/src/trade.c @@ -7,6 +7,7 @@ #include "bg.h" #include "text.h" #include "window.h" +#include "librfu.h" #include "text_window.h" #include "pokemon_icon.h" #include "graphics.h" @@ -136,6 +137,7 @@ extern const u8 *const gUnknown_8261EF4[]; extern const struct SpritePalette gUnknown_8261D00; extern const struct SpritePalette gUnknown_8261C60; extern const struct SpriteSheet gUnknown_8261C58; +extern const u16 gUnknown_826CF60[]; void sub_804C600(void) { @@ -3790,3 +3792,232 @@ u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) return 1; } } + +s32 sub_804FB34(void) +{ + s32 val; + u16 version; + + if (gReceivedRemoteLinkPlayers != 0) + { + val = 0; + version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF); + + if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) + { + // this value could actually be anything 0 or less + val = 0; + } + else if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + { + val = 1; + } + else + { + val = 2; + } + + if (val > 0) + { + if (gLinkPlayers[GetMultiplayerId()].name[10] & 0xF0) + { + if (val == 2) + { + if (gLinkPlayers[GetMultiplayerId() ^ 1].name[10] & 0xF0) + { + return 0; + } + else + { + return 2; + } + } + } + else + { + return 1; + } + } + } + return 0; +} + +bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) +{ + if (species == SPECIES_DEOXYS || species == SPECIES_MEW) + { + if (!isObedientBitSet) + return TRUE; + } + return FALSE; +} + +int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) +{ + u8 r9 = a0.unk_01_0; + u8 r4 = a0.unk_00_7; + u8 r10 = a1.unk_01_0; + u8 r0 = a1.unk_00_7; + u8 r1 = a1.unk_01_2; + u8 r2; + + if (r1 == VERSION_FIRE_RED || r1 == VERSION_LEAF_GREEN) + { + r2 = 0; + } + else + { + r2 = 1; + } + if (r2) + { + if (!r4) + { + return 8; + } + else if (!r0) + { + return 9; + } + } + + if (IsDeoxysOrMewUntradable(species3, isObedientBitSet)) + { + return 4; + } + + if (species2 == SPECIES_EGG) + { + if (species1 != species2) + { + return 2; + } + } + else + { + if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type) + { + return 1; + } + } + + if (species1 == SPECIES_EGG && species1 != species2) + { + return 3; + } + + if (!r9) + { + if (species1 == SPECIES_EGG) + { + return 6; + } + + if (species1 > SPECIES_MEW) + { + return 4; + } + + if (species2 > SPECIES_MEW) + { + return 5; + } + } + + if (!r10 && species1 > SPECIES_MEW) + { + return 7; + } + + return 0; +} + +int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) +{ + u8 unk = a0.unk_01_0; + + if (IsDeoxysOrMewUntradable(a2, a3)) + { + return 1; + } + + if (unk) + { + return 0; + } + + if (species == SPECIES_EGG) + { + return 2; + } + + if (species > SPECIES_MEW && species != SPECIES_EGG) + { + return 1; + } + + return 0; +} + +// Sprite callback for link cable transfer glow +void sub_804FD24(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_BOWA); + sprite->data[0] = 0; + } +} + +// Sprite callback for wireless transfer glow +void sub_804FD48(struct Sprite * sprite) +{ + if (!sprite->invisible) + { + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_W207B); + sprite->data[0] = 0; + } + } +} + +// Palette flash for transfer glow core +void sub_804FD78(struct Sprite * sprite) +{ + if (sprite->data[1] == 0) + { + sprite->data[0]++; + if (sprite->data[0] == 12) + sprite->data[0] = 0; + LoadPalette(&gUnknown_826CF60[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + } +} + +void sub_804FDB8(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y++; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void sub_804FDDC(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y--; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void sub_804FE00(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 15) + { + PlaySE(SE_W107); + sprite->data[0] = 0; + } +} -- cgit v1.2.3 From ce5c3fdd776a47d5d6c3790249c53afaff844553 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 12:58:40 -0400 Subject: Trade through sub_804FFE4 --- src/trade.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 168 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 48f559861..716b74eb5 100644 --- a/src/trade.c +++ b/src/trade.c @@ -22,6 +22,7 @@ #include "overworld.h" #include "battle_anim.h" #include "party_menu.h" +#include "util.h" #include "daycare.h" #include "event_data.h" #include "battle_interface.h" @@ -74,6 +75,52 @@ struct TradeResources /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; +struct TradeResources2 { + /*0x00*/ struct Pokemon mon; + /*0x64*/ u32 timer; + /*0x68*/ u32 unk_68[2]; + /*0x70*/ u8 filler_70[2]; + /*0x72*/ u8 unk_72; + /*0x73*/ u8 unk_73; + /*0x74*/ u16 linkData[10]; + /*0x88*/ u8 unk_88; + /*0x89*/ u8 unk_89; + /*0x8A*/ u16 unk_8A; + /*0x8C*/ u16 unk_8C; + /*0x8E*/ u8 pokePicSpriteIdxs[2]; + /*0x90*/ u8 unk_90; + /*0x91*/ u8 unk_91; + /*0x92*/ u8 unk_92; + /*0x93*/ u8 unk_93; + /*0x94*/ u16 state; + /*0x96*/ u8 filler_96[0xD2 - 0x96]; + /*0xD2*/ u8 unk_D2; + /*0xD3*/ u8 unk_D3; + /*0xD4*/ u16 unk_D4; + /*0xD6*/ u16 unk_D6; + /*0xD8*/ u16 unk_D8; + /*0xDA*/ u16 unk_DA; + /*0xDC*/ u16 unk_DC; + /*0xDE*/ u16 unk_DE; + /*0xE0*/ s16 bg1vofs; + /*0xE2*/ s16 bg1hofs; + /*0xE4*/ s16 bg2vofs; + /*0xE6*/ s16 bg2hofs; + /*0xE8*/ u16 unk_E8; + /*0xEA*/ u16 unk_EA; + /*0xEC*/ u16 unk_EC; + /*0xEE*/ bool8 isLinkTrade; + /*0xF0*/ u16 tradeSpecies[2]; + /*0xF4*/ u16 cachedMapMusic; + /*0xF6*/ u8 unk_F6[3]; + /*0xF9*/ u8 filler_F9; + /*0xFA*/ u8 unk_FA; + /*0xFB*/ u8 unk_FB; + /*0xFC*/ u8 unk_FC; + /*0xFD*/ u8 unk_FD; + /*0xFE*/ u8 unk_FE; +}; + IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; @@ -81,7 +128,7 @@ EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA u8 gUnknown_2031CCC[216] = {}; EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; -EWRAM_DATA void * gUnknown_2031DAC = NULL; +EWRAM_DATA struct TradeResources2 * gUnknown_2031DAC = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -137,7 +184,7 @@ extern const u8 *const gUnknown_8261EF4[]; extern const struct SpritePalette gUnknown_8261D00; extern const struct SpritePalette gUnknown_8261C60; extern const struct SpriteSheet gUnknown_8261C58; -extern const u16 gUnknown_826CF60[]; +extern const u16 gTradeGlow2PaletteAnimTable[]; void sub_804C600(void) { @@ -3959,7 +4006,7 @@ int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a return 0; } -// Sprite callback for link cable transfer glow +// Sprite callback for link cable trade glow void sub_804FD24(struct Sprite * sprite) { sprite->data[0]++; @@ -3970,7 +4017,7 @@ void sub_804FD24(struct Sprite * sprite) } } -// Sprite callback for wireless transfer glow +// Sprite callback for wireless trade glow void sub_804FD48(struct Sprite * sprite) { if (!sprite->invisible) @@ -3984,7 +4031,7 @@ void sub_804FD48(struct Sprite * sprite) } } -// Palette flash for transfer glow core +// Palette flash for trade glow core void sub_804FD78(struct Sprite * sprite) { if (sprite->data[1] == 0) @@ -3992,7 +4039,7 @@ void sub_804FD78(struct Sprite * sprite) sprite->data[0]++; if (sprite->data[0] == 12) sprite->data[0] = 0; - LoadPalette(&gUnknown_826CF60[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); } } @@ -4021,3 +4068,118 @@ void sub_804FE00(struct Sprite * sprite) sprite->data[0] = 0; } } + +void sub_804FE24(void) +{ + struct BgAffineDstData affine; + DoBgAffineSet(&affine, gUnknown_2031DAC->unk_D4 * 0x100, gUnknown_2031DAC->unk_D6 * 0x100, gUnknown_2031DAC->unk_DC, gUnknown_2031DAC->unk_DE, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_EC); + SetGpuReg(REG_OFFSET_BG2PA, affine.pa); + SetGpuReg(REG_OFFSET_BG2PB, affine.pb); + SetGpuReg(REG_OFFSET_BG2PC, affine.pc); + SetGpuReg(REG_OFFSET_BG2PD, affine.pd); + SetGpuReg(REG_OFFSET_BG2X, affine.dx); + SetGpuReg(REG_OFFSET_BG2Y, affine.dy); +} + +void sub_804FEB4(void) +{ + u16 dispcnt; + + SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_2031DAC->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_2031DAC->bg1hofs); + + dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); + if ((dispcnt & 7) == DISPCNT_MODE_0) + { + SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_2031DAC->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DAC->bg2hofs); + } + else + { + sub_804FE24(); + } +} + +void sub_804FF0C(void) +{ + sub_804FEB4(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804FF24(void) +{ + gUnknown_2031DAC->unk_8A = 0; + gUnknown_2031DAC->unk_88 = 0; + gUnknown_2031DAC->unk_89 = 0; +} + +void sub_804FF4C(void) +{ + if (gUnknown_2031DAC->unk_88 == gUnknown_2031DAC->unk_89) + gUnknown_2031DAC->unk_8A++; + else + gUnknown_2031DAC->unk_8A = 0; + + if (gUnknown_2031DAC->unk_8A > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + gUnknown_2031DAC->unk_8A = 0; + gUnknown_2031DAC->unk_89 = 0; + gUnknown_2031DAC->unk_88 = 0; + } + + gUnknown_2031DAC->unk_89 = gUnknown_2031DAC->unk_88; +} + +u32 sub_804FFC4(void) +{ + if (gReceivedRemoteLinkPlayers) + return GetMultiplayerId(); + return 0; +} + +void sub_804FFE4(u8 whichParty, u8 a1) +{ + int pos = 0; + struct Pokemon *mon = NULL; + u16 species; + u32 personality; + + if (whichParty == 0) + { + mon = &gPlayerParty[gUnknown_2031DA4[0]]; + pos = 1; + } + + if (whichParty == 1) + { + mon = &gEnemyParty[gUnknown_2031DA4[1] % PARTY_SIZE]; + pos = 3; + } + + switch (a1) + { + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + if (whichParty == 0) + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + else + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); + gUnknown_2031DAC->tradeSpecies[whichParty] = species; + gUnknown_2031DAC->unk_68[whichParty] = personality; + break; + case 1: + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); + gUnknown_2031DAC->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; + } +} -- cgit v1.2.3 From 316337b031d35d89db0f2ad939972588cae291bd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 17:05:56 -0400 Subject: trade partway through sub_8050968 --- src/trade.c | 1257 +++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 843 insertions(+), 414 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 716b74eb5..026f77db8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -10,6 +10,8 @@ #include "librfu.h" #include "text_window.h" #include "pokemon_icon.h" +#include "pokedex.h" +#include "mail_data.h" #include "graphics.h" #include "link.h" #include "link_rfu.h" @@ -35,7 +37,7 @@ #include "constants/songs.h" #include "constants/moves.h" -struct TradeResources +struct TradeMenuResources { /*0x0000*/ u8 unk_0; /*0x0001*/ u8 unk_1; @@ -75,7 +77,7 @@ struct TradeResources /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; -struct TradeResources2 { +struct TradeAnimationResources { /*0x00*/ struct Pokemon mon; /*0x64*/ u32 timer; /*0x68*/ u32 unk_68[2]; @@ -112,23 +114,36 @@ struct TradeResources2 { /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 unk_F6[3]; - /*0xF9*/ u8 filler_F9; - /*0xFA*/ u8 unk_FA; - /*0xFB*/ u8 unk_FB; - /*0xFC*/ u8 unk_FC; - /*0xFD*/ u8 unk_FD; - /*0xFE*/ u8 unk_FE; + /*0xF6*/ u8 unk_F6; + /*0xF8*/ u16 unk_F8; + /*0xFA*/ u16 unk_FA; + /*0xFC*/ u8 unk_FC[7]; + /*0x103*/ u8 filler_103[5]; + /*0x108*/ u8 unk_108; + /*0x109*/ u8 filler_109[7]; +}; + +enum TradeStatusMsg +{ + TRADESTATMSG_COMMSTANDBY = 0, + TRADESTATMSG_CANCELED, + TRADESTATMSG_ONLYMON, + TRADESTATMSG_ONLYMON2, + TRADESTATMSG_WAITINGFORFRIEND, + TRADESTATMSG_FRIENDWANTSTOTRADE, + TRADESTATMSG_YOURMONCANTBETRADED, + TRADESTATMSG_EGGCANTBETRADED, + TRADESTATMSG_PARTNERMONCANTBETRADED }; IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; -EWRAM_DATA u8 gUnknown_2031CCC[216] = {}; +EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; -EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; -EWRAM_DATA struct TradeResources2 * gUnknown_2031DAC = NULL; +EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; +EWRAM_DATA struct TradeAnimationResources * sTradeAnimationResourcesPtr = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -137,7 +152,7 @@ void sub_804D694(u8 state); void sub_804D764(void); u8 shedinja_maker_maybe(void); void sub_804DFF0(void); -void sub_804E9E4(void); +static void RunTradeMenuCallback(void); void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); @@ -148,8 +163,8 @@ void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); void sub_804F488(u16 a0, u8 a1); -void sub_804F4DC(void); -void sub_804F5BC(u8 str_idx); +static void sub_804F4DC(void); +void PrintTradeErrorOrStatusMessage(u8 str_idx); bool8 sub_804F610(void); void sub_804F728(const u8 *name, u8 *a1, u8 unused); void sub_804F748(u8 side); @@ -157,8 +172,17 @@ void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); +void CB2_InitTradeAnim_LinkTrade(void); +void sub_805049C(void); +void sub_80504B0(void); +void TradeAnimInit_LoadGfx(void); +void CB2_RunTradeAnim_InGameTrade(void); +void sub_8050968(u8 idx); +void sub_8050DE0(void); +void sub_8050E24(void); +void sub_8050F14(void); +void CB2_RunTradeAnim_LinkTrade(void); void LoadHeldItemIcons(void); -void sub_8050138(void); extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; @@ -180,11 +204,19 @@ extern const u8 gUnknown_8261F18[]; extern const u8 gUnknown_8261EB6[]; extern const u8 gUnknown_8261EC7[]; extern const u8 gUnknown_841E09F[]; -extern const u8 *const gUnknown_8261EF4[]; +extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; extern const struct SpritePalette gUnknown_8261D00; extern const struct SpritePalette gUnknown_8261C60; extern const struct SpriteSheet gUnknown_8261C58; extern const u16 gTradeGlow2PaletteAnimTable[]; +extern const struct SpriteSheet gUnknown_826CDD4; +extern const struct SpritePalette gUnknown_826CDDC; +extern const struct BgTemplate gUnknown_826D1D4[4]; +extern const struct WindowTemplate gUnknown_826D1BC[]; +extern const u16 gUnknown_826AA5C[]; +extern const u16 gUnknown_8269A5C[]; +extern const u32 gUnknown_3379A0Bin[]; +extern const u16 gUnknown_826407C[]; void sub_804C600(void) { @@ -200,7 +232,7 @@ void sub_804C600(void) LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); - SetBgTilemapBuffer(1, gUnknown_2031DA8->tilemapBuffer); + SetBgTilemapBuffer(1, sTradeMenuResourcesPtr->tilemapBuffer); if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); @@ -214,14 +246,14 @@ void sub_804C600(void) TextWindow_SetStdFrame0_WithPal(0, 0x014, 0xC0); TextWindow_SetUserSelectedFrame(2, 0x001, 0xE0); LoadMonIconPalettes(); - gUnknown_2031DA8->unk_69 = 0; - gUnknown_2031DA8->unk_6F = 0; - gUnknown_2031DA8->unk_70 = 0; - gUnknown_2031DA8->unk_74[0] = 0; - gUnknown_2031DA8->unk_74[1] = 0; - gUnknown_2031DA8->unk_7A = 0; - gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_69 = 0; + sTradeMenuResourcesPtr->unk_6F = 0; + sTradeMenuResourcesPtr->unk_70 = 0; + sTradeMenuResourcesPtr->unk_74[0] = 0; + sTradeMenuResourcesPtr->unk_74[1] = 0; + sTradeMenuResourcesPtr->unk_7A = 0; + sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; } } @@ -243,7 +275,7 @@ void sub_804C728(void) switch (gMain.state) { case 0: - gUnknown_2031DA8 = AllocZeroed(sizeof(*gUnknown_2031DA8)); + sTradeMenuResourcesPtr = AllocZeroed(sizeof(*sTradeMenuResourcesPtr)); sub_804C600(); gUnknown_2031C90 = AllocZeroed(0xE00); @@ -262,13 +294,13 @@ void sub_804C728(void) CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); } - sub_804F5BC(0); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); ShowBg(0); if (!gReceivedRemoteLinkPlayers) { gLinkType = 0x1122; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; if (gWirelessCommType) { @@ -290,10 +322,10 @@ void sub_804C728(void) } break; case 2: - gUnknown_2031DA8->unk_A8++; - if (gUnknown_2031DA8->unk_A8 > 11) + sTradeMenuResourcesPtr->unk_A8++; + if (sTradeMenuResourcesPtr->unk_A8 > 11) { - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; gMain.state++; } break; @@ -302,7 +334,7 @@ void sub_804C728(void) { if (IsLinkMaster()) { - if (++gUnknown_2031DA8->unk_A8 > 30) + if (++sTradeMenuResourcesPtr->unk_A8 > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -320,7 +352,7 @@ void sub_804C728(void) sub_80FBB4C(); CalculatePlayerPartyCount(); gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; if (gWirelessCommType) { sub_80FA484(TRUE); @@ -354,13 +386,13 @@ void sub_804C728(void) CalculateEnemyPartyCount(); SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); - gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; - gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + sTradeMenuResourcesPtr->partyCounts[0] = gPlayerPartyCount; + sTradeMenuResourcesPtr->partyCounts[1] = gEnemyPartyCount; - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, (gTradeMonSpriteCoords[i][0] * 8) + 14, (gTradeMonSpriteCoords[i][1] * 8) - 12, @@ -369,10 +401,10 @@ void sub_804C728(void) TRUE); } - for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -384,11 +416,11 @@ void sub_804C728(void) break; case 8: LoadHeldItemIcons(); - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0); gMain.state++; break; case 9: - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1); gMain.state++; break; case 10: @@ -398,7 +430,7 @@ void sub_804C728(void) sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 11: if (sub_804F610()) @@ -445,16 +477,16 @@ void sub_804C728(void) CreateSprite(&temp, (i * 32) + 24, 150, 1); } - gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); - gUnknown_2031DA8->tradeMenuCursorPosition = 0; + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); break; case 14: sub_804F748(0); sub_804F020(0); - gUnknown_2031DA8->unk_0 = 0; - gUnknown_2031DA8->unk_1 = 0; + sTradeMenuResourcesPtr->unk_0 = 0; + sTradeMenuResourcesPtr->unk_1 = 0; sub_804D764(); gMain.state++; PlayBGM(MUS_SLOT); @@ -557,7 +589,7 @@ void sub_804C728(void) "\t.4byte _0804CEB0\n" "\t.4byte _0804CED0\n" "_0804C7B0:\n" - "\tldr r4, _0804C7E8 @ =gUnknown_2031DA8\n" + "\tldr r4, _0804C7E8 @ =sTradeMenuResourcesPtr\n" "\tldr r0, _0804C7EC @ =0x000010f0\n" "\tbl AllocZeroed\n" "\tstr r0, [r4]\n" @@ -583,7 +615,7 @@ void sub_804C728(void) "\tadds r1, r3\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804C7E8: .4byte gUnknown_2031DA8\n" + "_0804C7E8: .4byte sTradeMenuResourcesPtr\n" "_0804C7EC: .4byte 0x000010f0\n" "_0804C7F0: .4byte gUnknown_2031C90\n" "_0804C7F4: .4byte gUnknown_2031C94\n" @@ -613,7 +645,7 @@ void sub_804C728(void) "\tcmp r6, 0x5\n" "\tble _0804C80A\n" "\tmovs r0, 0\n" - "\tbl sub_804F5BC\n" + "\tbl PrintTradeErrorOrStatusMessage\n" "\tmovs r0, 0\n" "\tbl ShowBg\n" "\tldr r0, _0804C86C @ =gReceivedRemoteLinkPlayers\n" @@ -624,7 +656,7 @@ void sub_804C728(void) "\tldr r5, _0804C874 @ =0x00001122\n" "\tadds r0, r5, 0\n" "\tstrh r0, [r1]\n" - "\tldr r0, _0804C878 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804C878 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -642,7 +674,7 @@ void sub_804C728(void) "_0804C86C: .4byte gReceivedRemoteLinkPlayers\n" "_0804C870: .4byte gLinkType\n" "_0804C874: .4byte 0x00001122\n" - "_0804C878: .4byte gUnknown_2031DA8\n" + "_0804C878: .4byte sTradeMenuResourcesPtr\n" "_0804C87C: .4byte gWirelessCommType\n" "_0804C880:\n" "\tbl OpenLink\n" @@ -679,7 +711,7 @@ void sub_804C728(void) "\t.align 2, 0\n" "_0804C8C4: .4byte gMain\n" "_0804C8C8:\n" - "\tldr r2, _0804C8F0 @ =gUnknown_2031DA8\n" + "\tldr r2, _0804C8F0 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r2]\n" "\tadds r1, 0xA8\n" "\tldrb r0, [r1]\n" @@ -700,7 +732,7 @@ void sub_804C728(void) "\tadds r1, r3, r2\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804C8F0: .4byte gUnknown_2031DA8\n" + "_0804C8F0: .4byte sTradeMenuResourcesPtr\n" "_0804C8F4:\n" "\tbl GetLinkPlayerCount_2\n" "\tadds r4, r0, 0\n" @@ -715,7 +747,7 @@ void sub_804C728(void) "\tlsls r0, 24\n" "\tcmp r0, 0\n" "\tbeq _0804C940\n" - "\tldr r0, _0804C938 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804C938 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r1, 0xA8\n" "\tldrb r0, [r1]\n" @@ -734,7 +766,7 @@ void sub_804C728(void) "\tadds r1, r3\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804C938: .4byte gUnknown_2031DA8\n" + "_0804C938: .4byte sTradeMenuResourcesPtr\n" "_0804C93C: .4byte gMain\n" "_0804C940:\n" "\tldr r1, _0804C94C @ =gMain\n" @@ -768,7 +800,7 @@ void sub_804C728(void) "\tadds r0, 0x1\n" "\tmovs r2, 0\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804C9A8 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804C9A8 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -785,7 +817,7 @@ void sub_804C728(void) "\t.align 2, 0\n" "_0804C9A0: .4byte gReceivedRemoteLinkPlayers\n" "_0804C9A4: .4byte gMain\n" - "_0804C9A8: .4byte gUnknown_2031DA8\n" + "_0804C9A8: .4byte sTradeMenuResourcesPtr\n" "_0804C9AC: .4byte gWirelessCommType\n" "_0804C9B0:\n" "\tldr r0, _0804C9E0 @ =gWirelessCommType\n" @@ -841,7 +873,7 @@ void sub_804C728(void) "\tmovs r0, 0x50\n" "\tmovs r1, 0\n" "\tbl SetGpuReg\n" - "\tldr r2, _0804CB2C @ =gUnknown_2031DA8\n" + "\tldr r2, _0804CB2C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r2]\n" "\tldr r1, _0804CB30 @ =gPlayerPartyCount\n" "\tldrb r1, [r1]\n" @@ -907,7 +939,7 @@ void sub_804C728(void) "\tblt _0804CA4A\n" "_0804CAA8:\n" "\tmovs r6, 0\n" - "\tldr r1, _0804CB2C @ =gUnknown_2031DA8\n" + "\tldr r1, _0804CB2C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r1]\n" "\tadds r0, 0x37\n" "\tldrb r0, [r0]\n" @@ -971,7 +1003,7 @@ void sub_804C728(void) "\tadds r1, r3\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804CB2C: .4byte gUnknown_2031DA8\n" + "_0804CB2C: .4byte sTradeMenuResourcesPtr\n" "_0804CB30: .4byte gPlayerPartyCount\n" "_0804CB34: .4byte gEnemyPartyCount\n" "_0804CB38: .4byte gTradeMonSpriteCoords\n" @@ -982,7 +1014,7 @@ void sub_804C728(void) "_0804CB4C: .4byte gMain\n" "_0804CB50:\n" "\tbl LoadHeldItemIcons\n" - "\tldr r0, _0804CB70 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804CB70 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -995,10 +1027,10 @@ void sub_804C728(void) "\tadds r1, r5\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804CB70: .4byte gUnknown_2031DA8\n" + "_0804CB70: .4byte sTradeMenuResourcesPtr\n" "_0804CB74: .4byte gMain\n" "_0804CB78:\n" - "\tldr r0, _0804CB94 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804CB94 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -1011,7 +1043,7 @@ void sub_804C728(void) "\tadds r1, r7\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804CB94: .4byte gUnknown_2031DA8\n" + "_0804CB94: .4byte sTradeMenuResourcesPtr\n" "_0804CB98: .4byte gMain\n" "_0804CB9C:\n" "\tldr r0, _0804CC14 @ =gSaveBlock2Ptr\n" @@ -1063,7 +1095,7 @@ void sub_804C728(void) "\tadds r0, 0x1\n" "\tmovs r2, 0\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804CC2C @ =gUnknown_2031DA8\n" + "\tldr r0, _0804CC2C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -1075,7 +1107,7 @@ void sub_804C728(void) "_0804CC20: .4byte gLinkPlayers + 8\n" "_0804CC24: .4byte gUnknown_8261ECC\n" "_0804CC28: .4byte gMain\n" - "_0804CC2C: .4byte gUnknown_2031DA8\n" + "_0804CC2C: .4byte sTradeMenuResourcesPtr\n" "_0804CC30:\n" "\tbl sub_804F610\n" "\tlsls r0, 24\n" @@ -1255,7 +1287,7 @@ void sub_804C728(void) "\tlsls r2, 3\n" "\tmovs r3, 0x2\n" "\tbl CreateSprite\n" - "\tldr r2, _0804CDD8 @ =gUnknown_2031DA8\n" + "\tldr r2, _0804CDD8 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r2]\n" "\tadds r1, 0x34\n" "\tmovs r3, 0\n" @@ -1277,14 +1309,14 @@ void sub_804C728(void) "_0804CDCC: .4byte gUnknown_8261CC8\n" "_0804CDD0: .4byte gUnknown_8261CB0\n" "_0804CDD4: .4byte gTradeMonSpriteCoords\n" - "_0804CDD8: .4byte gUnknown_2031DA8\n" + "_0804CDD8: .4byte sTradeMenuResourcesPtr\n" "_0804CDDC: .4byte gMain\n" "_0804CDE0:\n" "\tmovs r0, 0\n" "\tbl sub_804F748\n" "\tmovs r0, 0\n" "\tbl sub_804F020\n" - "\tldr r2, _0804CE14 @ =gUnknown_2031DA8\n" + "\tldr r2, _0804CE14 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r2]\n" "\tmovs r1, 0\n" "\tstrb r1, [r0]\n" @@ -1302,7 +1334,7 @@ void sub_804C728(void) "\tbl PlayBGM\n" "\tb _0804CEE6\n" "\t.align 2, 0\n" - "_0804CE14: .4byte gUnknown_2031DA8\n" + "_0804CE14: .4byte sTradeMenuResourcesPtr\n" "_0804CE18: .4byte gMain\n" "_0804CE1C: .4byte 0x00000111\n" "_0804CE20:\n" @@ -1436,7 +1468,7 @@ void sub_804CF14(void) break; case 1: gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 2: gMain.state++; @@ -1461,14 +1493,14 @@ void sub_804CF14(void) break; case 7: CalculateEnemyPartyCount(); - gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; - gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + sTradeMenuResourcesPtr->partyCounts[0] = gPlayerPartyCount; + sTradeMenuResourcesPtr->partyCounts[1] = gEnemyPartyCount; ClearWindowTilemap(0); sub_804F020(0); sub_804F020(1); - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { - gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon( + sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon( GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, gTradeMonSpriteCoords[i][0] * 8 + 14, @@ -1478,9 +1510,9 @@ void sub_804CF14(void) TRUE ); } - for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { - gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon( + sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon( GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, gTradeMonSpriteCoords[i + 6][0] * 8 + 14, @@ -1494,11 +1526,11 @@ void sub_804CF14(void) break; case 8: LoadHeldItemIcons(); - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0); gMain.state++; break; case 9: - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1); gMain.state++; break; case 10: @@ -1508,7 +1540,7 @@ void sub_804CF14(void) sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 11: if (sub_804F610()) @@ -1557,12 +1589,12 @@ void sub_804CF14(void) CreateSprite(&temp, (i * 32) + 24, 150, 1); } - if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) - gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20(); + if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) + sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20(); else - gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20() + 6; + sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20() + 6; - gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: @@ -1571,8 +1603,8 @@ void sub_804CF14(void) break; case 17: sub_804D694(1); - gUnknown_2031DA8->unk_0 = 0; - gUnknown_2031DA8->unk_1 = 0; + sTradeMenuResourcesPtr->unk_0 = 0; + sTradeMenuResourcesPtr->unk_1 = 0; sub_804D764(); gMain.state++; break; @@ -1716,7 +1748,7 @@ void sub_804CF14(void) "\tb _0804D4B4\n" "_0804D00C:\n" "\tbl CalculateEnemyPartyCount\n" - "\tldr r4, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r4, _0804D12C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r4]\n" "\tldr r1, _0804D130 @ =gPlayerPartyCount\n" "\tldrb r1, [r1]\n" @@ -1789,7 +1821,7 @@ void sub_804CF14(void) "\tblt _0804D048\n" "_0804D0A8:\n" "\tmovs r6, 0\n" - "\tldr r1, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r1, _0804D12C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r1]\n" "\tadds r0, 0x37\n" "\tldrb r0, [r0]\n" @@ -1853,7 +1885,7 @@ void sub_804CF14(void) "\tadds r1, r3\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D12C: .4byte gUnknown_2031DA8\n" + "_0804D12C: .4byte sTradeMenuResourcesPtr\n" "_0804D130: .4byte gPlayerPartyCount\n" "_0804D134: .4byte gEnemyPartyCount\n" "_0804D138: .4byte gTradeMonSpriteCoords\n" @@ -1864,7 +1896,7 @@ void sub_804CF14(void) "_0804D14C: .4byte gMain\n" "_0804D150:\n" "\tbl LoadHeldItemIcons\n" - "\tldr r0, _0804D170 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804D170 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -1877,10 +1909,10 @@ void sub_804CF14(void) "\tadds r1, r5\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D170: .4byte gUnknown_2031DA8\n" + "_0804D170: .4byte sTradeMenuResourcesPtr\n" "_0804D174: .4byte gMain\n" "_0804D178:\n" - "\tldr r0, _0804D194 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804D194 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -1893,7 +1925,7 @@ void sub_804CF14(void) "\tadds r1, r7\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D194: .4byte gUnknown_2031DA8\n" + "_0804D194: .4byte sTradeMenuResourcesPtr\n" "_0804D198: .4byte gMain\n" "_0804D19C:\n" "\tldr r0, _0804D214 @ =gSaveBlock2Ptr\n" @@ -1946,7 +1978,7 @@ void sub_804CF14(void) "\tadds r0, 0x1\n" "\tmovs r2, 0\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804D22C @ =gUnknown_2031DA8\n" + "\tldr r0, _0804D22C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -1958,7 +1990,7 @@ void sub_804CF14(void) "_0804D220: .4byte gLinkPlayers + 8\n" "_0804D224: .4byte gUnknown_8261ECC\n" "_0804D228: .4byte gMain\n" - "_0804D22C: .4byte gUnknown_2031DA8\n" + "_0804D22C: .4byte sTradeMenuResourcesPtr\n" "_0804D230:\n" "\tbl sub_804F610\n" "\tlsls r0, 24\n" @@ -2132,7 +2164,7 @@ void sub_804CF14(void) "\tadds r6, 0x1\n" "\tcmp r6, 0x5\n" "\tble _0804D36C\n" - "\tldr r4, _0804D3B4 @ =gUnknown_2031DA8\n" + "\tldr r4, _0804D3B4 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r4]\n" "\tadds r0, 0x35\n" "\tldrb r0, [r0]\n" @@ -2143,7 +2175,7 @@ void sub_804CF14(void) "\tb _0804D3C0\n" "\t.align 2, 0\n" "_0804D3B0: .4byte gUnknown_8261CC8\n" - "_0804D3B4: .4byte gUnknown_2031DA8\n" + "_0804D3B4: .4byte sTradeMenuResourcesPtr\n" "_0804D3B8:\n" "\tbl sub_8138B20\n" "\tldr r1, [r4]\n" @@ -2153,7 +2185,7 @@ void sub_804CF14(void) "\tstrb r0, [r1]\n" "\tldr r0, _0804D404 @ =gUnknown_8261CB0\n" "\tldr r3, _0804D408 @ =gTradeMonSpriteCoords\n" - "\tldr r4, _0804D40C @ =gUnknown_2031DA8\n" + "\tldr r4, _0804D40C @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r4]\n" "\tadds r1, 0x35\n" "\tldrb r2, [r1]\n" @@ -2184,7 +2216,7 @@ void sub_804CF14(void) "\t.align 2, 0\n" "_0804D404: .4byte gUnknown_8261CB0\n" "_0804D408: .4byte gTradeMonSpriteCoords\n" - "_0804D40C: .4byte gUnknown_2031DA8\n" + "_0804D40C: .4byte sTradeMenuResourcesPtr\n" "_0804D410: .4byte gMain\n" "_0804D414:\n" "\tmovs r0, 0\n" @@ -2193,7 +2225,7 @@ void sub_804CF14(void) "_0804D41C:\n" "\tmovs r0, 0x1\n" "\tbl sub_804D694\n" - "\tldr r2, _0804D43C @ =gUnknown_2031DA8\n" + "\tldr r2, _0804D43C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r2]\n" "\tmovs r1, 0\n" "\tstrb r1, [r0]\n" @@ -2206,7 +2238,7 @@ void sub_804CF14(void) "\tadds r1, r2\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D43C: .4byte gUnknown_2031DA8\n" + "_0804D43C: .4byte sTradeMenuResourcesPtr\n" "_0804D440: .4byte gMain\n" "_0804D444:\n" "\tldr r2, _0804D478 @ =gPaletteFade\n" @@ -2303,10 +2335,10 @@ void sub_804D4F8(void) void sub_804D50C(void) { - if (++gUnknown_2031DA8->unk_A8 >= 16) + if (++sTradeMenuResourcesPtr->unk_A8 >= 16) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 10; + sTradeMenuResourcesPtr->unk_6F = 10; } } @@ -2314,16 +2346,16 @@ void sub_804D548(void) { if (!gPaletteFade.active) { - gUnknown_2031DA4[0] = gUnknown_2031DA8->tradeMenuCursorPosition; - gUnknown_2031DA4[1] = gUnknown_2031DA8->unk_7E; + gUnknown_2031DA4[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; + gUnknown_2031DA4[1] = sTradeMenuResourcesPtr->unk_7E; if (gWirelessCommType != 0) { - gUnknown_2031DA8->unk_6F = 16; + sTradeMenuResourcesPtr->unk_6F = 16; } else { sub_800AA80(32); - gUnknown_2031DA8->unk_6F = 13; + sTradeMenuResourcesPtr->unk_6F = 13; } } } @@ -2337,10 +2369,10 @@ void sub_804D5A4(void) { Free(gUnknown_2031C90); FreeAllWindowBuffers(); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); - SetMainCallback2(sub_8050138); + SetMainCallback2(CB2_InitTradeAnim_LinkTrade); } } else @@ -2349,21 +2381,21 @@ void sub_804D5A4(void) { Free(gUnknown_2031C90); FreeAllWindowBuffers(); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; - SetMainCallback2(sub_8050138); + SetMainCallback2(CB2_InitTradeAnim_LinkTrade); } } } void sub_804D638(void) { - sub_804E9E4(); + RunTradeMenuCallback(); sub_804F4DC(); sub_804EAE4(0); sub_804EAE4(1); - SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DA8->unk_0++); - SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_2031DA8->unk_1--); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuResourcesPtr->unk_0++); + SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuResourcesPtr->unk_1--); RunTextPrinters_CheckPrinter0Active(); RunTasks(); AnimateSprites(); @@ -2408,26 +2440,26 @@ void sub_804D764(void) int i; for (i = 0; i < PARTY_SIZE; i++) { - if (i < gUnknown_2031DA8->partyCounts[0]) + if (i < sTradeMenuResourcesPtr->partyCounts[0]) { - gSprites[gUnknown_2031DA8->partyIcons[0][i]].invisible = FALSE; - gUnknown_2031DA8->tradeMenuOptionsActive[i] = TRUE; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][i]].invisible = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i] = TRUE; } else { - gUnknown_2031DA8->tradeMenuOptionsActive[i] = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i] = FALSE; } - if (i < gUnknown_2031DA8->partyCounts[1]) + if (i < sTradeMenuResourcesPtr->partyCounts[1]) { - gSprites[gUnknown_2031DA8->partyIcons[1][i]].invisible = FALSE; - gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = TRUE; + gSprites[sTradeMenuResourcesPtr->partyIcons[1][i]].invisible = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i + 6] = TRUE; } else { - gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i + 6] = FALSE; } } - gUnknown_2031DA8->tradeMenuOptionsActive[12] = TRUE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[12] = TRUE; } static void Trade_Memcpy(void *dest, const void *src, size_t size) @@ -2445,24 +2477,24 @@ bool8 shedinja_maker_maybe(void) int i; struct Pokemon *mon; - switch (gUnknown_2031DA8->unk_69) + switch (sTradeMenuResourcesPtr->unk_69) { case 0: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); - gUnknown_2031DA8->unk_69++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_69++; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 1: if (IsLinkTaskFinished()) { if (GetBlockReceivedStatus() == 0) { - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } else { ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } } break; @@ -2471,90 +2503,90 @@ bool8 shedinja_maker_maybe(void) { sub_800A474(1); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 4: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 5: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 7: if (id == 0) { sub_800A474(1); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 8: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 9: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 11: if (id == 0) { sub_800A474(1); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 12: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 13: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 15: if (id == 0) { sub_800A474(3); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 16: if (GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gUnknown_2031CCC, gBlockRecvBuffer[id ^ 1], 216); + Trade_Memcpy(gLinkPartnerMail, gBlockRecvBuffer[id ^ 1], 216); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 17: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 19: if (id == 0) { sub_800A474(4); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 20: if (GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gUnknown_2031DA8->unk_A9, gBlockRecvBuffer[id ^ 1], 11); + Trade_Memcpy(sTradeMenuResourcesPtr->unk_A9, gBlockRecvBuffer[id ^ 1], 11); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 21: @@ -2582,11 +2614,11 @@ bool8 shedinja_maker_maybe(void) case 10: case 14: case 18: - gUnknown_2031DA8->unk_A8++; - if (gUnknown_2031DA8->unk_A8 > 10) + sTradeMenuResourcesPtr->unk_A8++; + if (sTradeMenuResourcesPtr->unk_A8 > 10) { - gUnknown_2031DA8->unk_A8 = 0; - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_69++; } break; } @@ -2595,7 +2627,7 @@ bool8 shedinja_maker_maybe(void) void sub_804DBAC(void) { - sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 0x18); + sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); } void sub_804DBD4(u8 a0, u8 a1) @@ -2605,16 +2637,16 @@ void sub_804DBD4(u8 a0, u8 a1) switch (gBlockRecvBuffer[0][0]) { case 0xEEAA: - gUnknown_2031DA8->unk_78 = 2; + sTradeMenuResourcesPtr->unk_78 = 2; break; case 0xAABB: - gUnknown_2031DA8->unk_78 = 1; + sTradeMenuResourcesPtr->unk_78 = 1; break; case 0xBBBB: - gUnknown_2031DA8->unk_7A = 1; + sTradeMenuResourcesPtr->unk_7A = 1; break; case 0xBBCC: - gUnknown_2031DA8->unk_7A = 2; + sTradeMenuResourcesPtr->unk_7A = 2; break; } ResetBlockReceivedFlag(0); @@ -2625,17 +2657,17 @@ void sub_804DBD4(u8 a0, u8 a1) switch (gBlockRecvBuffer[1][0]) { case 0xEEAA: - gUnknown_2031DA8->unk_79 = 2; + sTradeMenuResourcesPtr->unk_79 = 2; break; case 0xAABB: - gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[1][1] + 6; - gUnknown_2031DA8->unk_79 = 1; + sTradeMenuResourcesPtr->unk_7E = gBlockRecvBuffer[1][1] + 6; + sTradeMenuResourcesPtr->unk_79 = 1; break; case 0xBBBB: - gUnknown_2031DA8->unk_7B = 1; + sTradeMenuResourcesPtr->unk_7B = 1; break; case 0xBBCC: - gUnknown_2031DA8->unk_7B = 2; + sTradeMenuResourcesPtr->unk_7B = 2; break; } ResetBlockReceivedFlag(1); @@ -2650,27 +2682,27 @@ void sub_804DCF4(u8 a0, u8 a1) { case 0xEEBB: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sub_804F5BC(4); - gUnknown_2031DA8->unk_6F = 11; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); + sTradeMenuResourcesPtr->unk_6F = 11; break; case 0xEECC: - sub_804F5BC(5); - gUnknown_2031DA8->unk_6F = 8; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); + sTradeMenuResourcesPtr->unk_6F = 8; break; case 0xDDDD: - gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[0][1] + 6; + sTradeMenuResourcesPtr->unk_7E = gBlockRecvBuffer[0][1] + 6; rbox_fill_rectangle(0); - sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); - sub_804EAAC(gUnknown_2031DA8->unk_7E); - gUnknown_2031DA8->unk_6F = 7; + sub_804EAAC(sTradeMenuResourcesPtr->tradeMenuCursorPosition); + sub_804EAAC(sTradeMenuResourcesPtr->unk_7E); + sTradeMenuResourcesPtr->unk_6F = 7; break; case 0xCCDD: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 10; + sTradeMenuResourcesPtr->unk_6F = 10; break; case 0xDDEE: - sub_804F5BC(1); - gUnknown_2031DA8->unk_6F = 8; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); + sTradeMenuResourcesPtr->unk_6F = 8; } ResetBlockReceivedFlag(0); } @@ -2681,68 +2713,68 @@ void sub_804DCF4(u8 a0, u8 a1) void sub_804DDF0(void) { - if (gUnknown_2031DA8->unk_78 && gUnknown_2031DA8->unk_79) + if (sTradeMenuResourcesPtr->unk_78 && sTradeMenuResourcesPtr->unk_79) { - if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 1) + if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 1) { - gUnknown_2031DA8->unk_6F = 6; - gUnknown_2031DA8->linkData[0] = 0xDDDD; - gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; + sTradeMenuResourcesPtr->unk_6F = 6; + sTradeMenuResourcesPtr->linkData[0] = 0xDDDD; + sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; sub_804F488(5, 0); - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; } - else if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 2) + else if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 2) { - sub_804F5BC(1); - gUnknown_2031DA8->linkData[0] = 0xEECC; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); + sTradeMenuResourcesPtr->linkData[0] = 0xEECC; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + sTradeMenuResourcesPtr->unk_6F = 8; } - else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 1) + else if (sTradeMenuResourcesPtr->unk_78 == 2 && sTradeMenuResourcesPtr->unk_79 == 1) { - sub_804F5BC(5); - gUnknown_2031DA8->linkData[0] = 0xDDEE; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); + sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + sTradeMenuResourcesPtr->unk_6F = 8; } - else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 2) + else if (sTradeMenuResourcesPtr->unk_78 == 2 && sTradeMenuResourcesPtr->unk_79 == 2) { - gUnknown_2031DA8->linkData[0] = 0xEEBB; - gUnknown_2031DA8->linkData[1] = 0; + sTradeMenuResourcesPtr->linkData[0] = 0xEEBB; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; - gUnknown_2031DA8->unk_6F = 11; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + sTradeMenuResourcesPtr->unk_6F = 11; } } - if (gUnknown_2031DA8->unk_7A && gUnknown_2031DA8->unk_7B) + if (sTradeMenuResourcesPtr->unk_7A && sTradeMenuResourcesPtr->unk_7B) { - if (gUnknown_2031DA8->unk_7A == 1 && gUnknown_2031DA8->unk_7B == 1) + if (sTradeMenuResourcesPtr->unk_7A == 1 && sTradeMenuResourcesPtr->unk_7B == 1) { - gUnknown_2031DA8->linkData[0] = 0xCCDD; - gUnknown_2031DA8->linkData[1] = 0; + sTradeMenuResourcesPtr->linkData[0] = 0xCCDD; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = 0; - gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_6F = 9; + sTradeMenuResourcesPtr->unk_7A = 0; + sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_6F = 9; } - if (gUnknown_2031DA8->unk_7A == 2 || gUnknown_2031DA8->unk_7B == 2) + if (sTradeMenuResourcesPtr->unk_7A == 2 || sTradeMenuResourcesPtr->unk_7B == 2) { - sub_804F5BC(1); - gUnknown_2031DA8->linkData[0] = 0xDDEE; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); + sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = 0; - gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_7A = 0; + sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_6F = 8; } } } @@ -2769,7 +2801,7 @@ u8 sub_804E028(u8 oldPosition, u8 direction) for (i = 0; i < PARTY_SIZE; i++) { - if (gUnknown_2031DA8->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) + if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) { newPosition = gUnknown_8261D08[oldPosition][direction][i]; break; @@ -2786,15 +2818,15 @@ void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) if (newPosition == 12) // CANCEL { - StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 1); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = 224; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = 160; + StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 1); + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = 224; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = 160; } else { - StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 0); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 0); + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; } if (*tradeMenuCursorPosition != newPosition) @@ -2807,18 +2839,18 @@ void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) void sub_804E134(void) { - sub_804F5BC(0); - gUnknown_2031DA8->unk_6F = 5; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); + sTradeMenuResourcesPtr->unk_6F = 5; if (GetMultiplayerId() == 1) { - gUnknown_2031DA8->linkData[0] = 0xAABB; - gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 0x14); + sTradeMenuResourcesPtr->linkData[0] = 0xAABB; + sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 0x14); } else { - gUnknown_2031DA8->unk_78 = 1; + sTradeMenuResourcesPtr->unk_78 = 1; } } @@ -2831,26 +2863,26 @@ void sub_804E194(void) if (JOY_REPT(DPAD_UP)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 0); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 0); } else if (JOY_REPT(DPAD_DOWN)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 1); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 1); } else if (JOY_REPT(DPAD_LEFT)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 2); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 2); } else if (JOY_REPT(DPAD_RIGHT)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 3); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 3); } if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) // PlayerParty + if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) // PlayerParty { DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); @@ -2858,34 +2890,34 @@ void sub_804E194(void) Menu_InitCursor(1, 3, 0, 0, 16, 2, 0); PutWindowTilemap(1); CopyWindowToVram(1, 3); - gUnknown_2031DA8->unk_6F = 1; + sTradeMenuResourcesPtr->unk_6F = 1; } - else if (gUnknown_2031DA8->tradeMenuCursorPosition < 12) + else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 12) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 2; + sTradeMenuResourcesPtr->unk_6F = 2; } - else if (gUnknown_2031DA8->tradeMenuCursorPosition == 12) + else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition == 12) { CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0); - gUnknown_2031DA8->unk_6F = 4; - sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); + sTradeMenuResourcesPtr->unk_6F = 4; + sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } } if (JOY_NEW(R_BUTTON)) { for (i = 0; i < 10; i++) - gUnknown_2031DA8->linkData[i] = i; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + sTradeMenuResourcesPtr->linkData[i] = i; + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); } } void sub_804E330(void) { sub_804F3B4(); - gUnknown_2031DA8->unk_6F = 0; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); + sTradeMenuResourcesPtr->unk_6F = 0; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } void sub_804E388(void) @@ -2900,28 +2932,28 @@ void sub_804E388(void) break; case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 2; + sTradeMenuResourcesPtr->unk_6F = 2; break; case 1: - switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, gUnknown_2031DA8->tradeMenuCursorPosition)) + switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, sTradeMenuResourcesPtr->tradeMenuCursorPosition)) { case 0: sub_804E134(); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; break; case 1: sub_804F488(3, 3); - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_6F = 8; break; case 2: case 4: sub_804F488(3, 6); - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_6F = 8; break; case 3: case 5: sub_804F488(3, 7); - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_6F = 8; break; } break; @@ -2941,10 +2973,10 @@ void sub_804E494(void) { if (!gPaletteFade.active) { - if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) - ShowPokemonSummaryScreen(gPlayerParty, gUnknown_2031DA8->tradeMenuCursorPosition, gUnknown_2031DA8->partyCounts[0] - 1, sub_804CF14, 4); + if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) + ShowPokemonSummaryScreen(gPlayerParty, sTradeMenuResourcesPtr->tradeMenuCursorPosition, sTradeMenuResourcesPtr->partyCounts[0] - 1, sub_804CF14, 4); else - ShowPokemonSummaryScreen(gEnemyParty, gUnknown_2031DA8->tradeMenuCursorPosition - 6, gUnknown_2031DA8->partyCounts[1] - 1, sub_804CF14, 4); + ShowPokemonSummaryScreen(gEnemyParty, sTradeMenuResourcesPtr->tradeMenuCursorPosition - 6, sTradeMenuResourcesPtr->partyCounts[1] - 1, sub_804CF14, 4); FreeAllWindowBuffers(); } } @@ -2959,8 +2991,8 @@ u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) if (a2 != i) r4 += a0[i]; } - species = GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_SPECIES); - if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_OBEDIENCE)) + species = GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_SPECIES); + if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_OBEDIENCE)) return 2; if (r4 != 0) r4 = 1; @@ -2972,29 +3004,29 @@ void sub_804E5A0(void) int i; u8 arr[12]; - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { - arr[i] = gUnknown_2031DA8->unk_45[0][i]; + arr[i] = sTradeMenuResourcesPtr->unk_45[0][i]; } - switch (sub_804E50C(arr, gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->tradeMenuCursorPosition)) + switch (sub_804E50C(arr, sTradeMenuResourcesPtr->partyCounts[0], sTradeMenuResourcesPtr->tradeMenuCursorPosition)) { case 0: sub_804F488(3, 3); - gUnknown_2031DA8->linkData[0] = 0xBBCC; + sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; sub_804F488(0xB4, 0); break; case 1: sub_804F488(3, 1); - gUnknown_2031DA8->linkData[0] = 0xBBBB; + sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); } break; case 2: sub_804F488(3, 8); - gUnknown_2031DA8->linkData[0] = 0xBBCC; + sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; sub_804F488(0xB4, 0); break; } @@ -3006,7 +3038,7 @@ void sub_804E674(void) { case 0: sub_804E5A0(); - gUnknown_2031DA8->unk_6F = 100; + sTradeMenuResourcesPtr->unk_6F = 100; PutWindowTilemap(17); break; case 1: @@ -3014,10 +3046,10 @@ void sub_804E674(void) sub_804F488(3, 1); if (IsLinkTaskFinished()) { - gUnknown_2031DA8->linkData[0] = 0xBBCC; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); } - gUnknown_2031DA8->unk_6F = 100; + sTradeMenuResourcesPtr->unk_6F = 100; PutWindowTilemap(17); break; } @@ -3027,7 +3059,7 @@ void sub_804E6FC(void) { int i; - for (i = 0; i < gUnknown_2031DA8->partyCounts[1] - 4; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1] - 4; i++) { PutWindowTilemap(i + 12); CopyWindowToVram(i + 12, 1); @@ -3039,12 +3071,12 @@ void sub_804E744(void) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - sub_804F5BC(4); - gUnknown_2031DA8->linkData[0] = 0xEEAA; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); + sTradeMenuResourcesPtr->linkData[0] = 0xEEAA; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; - gUnknown_2031DA8->unk_6F = 100; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; + sTradeMenuResourcesPtr->unk_6F = 100; sub_804E6FC(); break; case 1: @@ -3060,30 +3092,30 @@ void sub_804E7C8(void) if (GetMultiplayerId() == 0) { rbox_fill_rectangle(0); - sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); - sub_804EAAC(gUnknown_2031DA8->unk_7E); + sub_804EAAC(sTradeMenuResourcesPtr->tradeMenuCursorPosition); + sub_804EAAC(sTradeMenuResourcesPtr->unk_7E); } - gUnknown_2031DA8->unk_6F = 7; + sTradeMenuResourcesPtr->unk_6F = 7; } void sub_804E804(void) { - if (gUnknown_2031DA8->unk_74[0] == 5 && gUnknown_2031DA8->unk_74[1] == 5) + if (sTradeMenuResourcesPtr->unk_74[0] == 5 && sTradeMenuResourcesPtr->unk_74[1] == 5) { sub_804DBAC(); - gUnknown_2031DA8->unk_6F = 14; + sTradeMenuResourcesPtr->unk_6F = 14; } } void sub_804E830(void) { - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; - if (gUnknown_2031DA8->unk_A8 > 120) + if (sTradeMenuResourcesPtr->unk_A8 > 120) { CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 1, 14, 0); - gUnknown_2031DA8->unk_A8 = 0; - gUnknown_2031DA8->unk_6F = 3; + sTradeMenuResourcesPtr->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_6F = 3; } } @@ -3105,8 +3137,8 @@ void sub_804E880(void) sub_804F3C8(0); sub_804F3C8(1); - gUnknown_2031DA8->unk_6F = 0; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; + sTradeMenuResourcesPtr->unk_6F = 0; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; } } @@ -3123,7 +3155,7 @@ void sub_804E908(void) sub_800AA80(12); } - gUnknown_2031DA8->unk_6F = 12; + sTradeMenuResourcesPtr->unk_6F = 12; } } @@ -3134,7 +3166,7 @@ void sub_804E944(void) if (IsLinkTaskFinished()) { Free(gUnknown_2031C90); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(c2_8056854); @@ -3145,7 +3177,7 @@ void sub_804E944(void) if (!gReceivedRemoteLinkPlayers) { Free(gUnknown_2031C90); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); SetMainCallback2(c2_8056854); } @@ -3157,13 +3189,13 @@ void sub_804E9C0(void) if (!sub_80FA484(FALSE)) { sub_800AB9C(); - gUnknown_2031DA8->unk_6F = 13; + sTradeMenuResourcesPtr->unk_6F = 13; } } -void sub_804E9E4(void) +static void RunTradeMenuCallback(void) { - switch (gUnknown_2031DA8->unk_6F) + switch (sTradeMenuResourcesPtr->unk_6F) { case 0: sub_804E194(); @@ -3220,10 +3252,10 @@ void sub_804EAAC(u8 a0) { u8 whichParty = a0 / PARTY_SIZE; - if (gUnknown_2031DA8->unk_74[whichParty] == 0) + if (sTradeMenuResourcesPtr->unk_74[whichParty] == 0) { - gUnknown_2031DA8->unk_74[whichParty] = 1; - gUnknown_2031DA8->unk_76[whichParty] = a0; + sTradeMenuResourcesPtr->unk_74[whichParty] = 1; + sTradeMenuResourcesPtr->unk_76[whichParty] = a0; } } @@ -3235,20 +3267,20 @@ void sub_804EAE4(u8 a0) u8 i; u8 partyIdx; u8 whichParty; - u8 monIdx = gUnknown_2031DA8->unk_76[a0]; + u8 monIdx = sTradeMenuResourcesPtr->unk_76[a0]; whichParty = 1; - if (gUnknown_2031DA8->unk_76[a0] < PARTY_SIZE) + if (sTradeMenuResourcesPtr->unk_76[a0] < PARTY_SIZE) whichParty = 0; partyIdx = monIdx % PARTY_SIZE; nameStringWidth = 0; - switch (gUnknown_2031DA8->unk_74[a0]) + switch (sTradeMenuResourcesPtr->unk_74[a0]) { case 1: - for (i = 0; i < gUnknown_2031DA8->partyCounts[a0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[a0]; i++) { - gSprites[gUnknown_2031DA8->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; } for (i = 0; i < 6; i++) @@ -3256,13 +3288,13 @@ void sub_804EAE4(u8 a0) ClearWindowTilemap(i + (a0 * 6 + 2)); } - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - StoreSpriteCallbackInData6(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); - gUnknown_2031DA8->unk_74[a0]++; - sub_8075490(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); + sTradeMenuResourcesPtr->unk_74[a0]++; + sub_8075490(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); @@ -3271,16 +3303,16 @@ void sub_804EAE4(u8 a0) sub_804F3B4(); break; case 2: - if (gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) - gUnknown_2031DA8->unk_74[a0] = 3; + if (gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) + sTradeMenuResourcesPtr->unk_74[a0] = 3; break; case 3: CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_8261F18, 0, nickname); sub_804EED4(movesString, whichParty, partyIdx); @@ -3289,11 +3321,11 @@ void sub_804EAE4(u8 a0) CopyWindowToVram((a0 * 2) + 14, 3); PutWindowTilemap((a0 * 2) + 15); CopyWindowToVram((a0 * 2) + 15, 3); - gUnknown_2031DA8->unk_74[a0]++; + sTradeMenuResourcesPtr->unk_74[a0]++; break; case 4: sub_804F08C(a0, partyIdx, gUnknown_8262055[a0][0] + 4, gUnknown_8262055[a0][1] + 1, gUnknown_8262055[a0][0], gUnknown_8262055[a0][1]); - gUnknown_2031DA8->unk_74[a0]++; + sTradeMenuResourcesPtr->unk_74[a0]++; break; } } @@ -3314,7 +3346,7 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) u16 moves[MAX_MON_MOVES]; u16 i; - if (!gUnknown_2031DA8->unk_51[a1][a2]) + if (!sTradeMenuResourcesPtr->unk_51[a1][a2]) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -3365,7 +3397,7 @@ void sub_804F020(u8 whichParty) u8 nickname[30]; struct Pokemon * party = whichParty == 0 ? gPlayerParty : gEnemyParty; u8 i; - for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { GetMonData(&party[i], MON_DATA_NICKNAME, buff); StringCopy10(nickname, buff); @@ -3388,20 +3420,20 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) else level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); - if (gUnknown_2031DA8->unk_51[whichParty][monIdx] == 0) + if (sTradeMenuResourcesPtr->unk_51[whichParty][monIdx] == 0) { if (level / 10 != 0) - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; } else { - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 33]; - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 32] = sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 33]; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 31] = sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; } - if (gUnknown_2031DA8->unk_51[whichParty][monIdx] != 0) + if (sTradeMenuResourcesPtr->unk_51[whichParty][monIdx] != 0) { r2 = 0x480; } @@ -3431,7 +3463,7 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) break; } } - gUnknown_2031DA8->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; + sTradeMenuResourcesPtr->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; } #ifdef NONMATCHING @@ -3441,7 +3473,7 @@ void sub_804F284(u8 whichParty) s32 i; const u8 *r5; const u8 *r4; - for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { r5 = gUnknown_8261E5A[whichParty]; r4 = gUnknown_8261E72[whichParty]; @@ -3457,7 +3489,7 @@ void sub_804F284(u8 whichParty) "\tlsls r0, 24\n" "\tlsrs r6, r0, 24\n" "\tmovs r7, 0\n" - "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, _0804F2DC @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0x36\n" "\tadds r0, r6\n" @@ -3485,7 +3517,7 @@ void sub_804F284(u8 whichParty) "\tadds r5, 0x2\n" "\tadds r4, 0x2\n" "\tadds r7, 0x1\n" - "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, _0804F2DC @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0x36\n" "\tadds r0, r6\n" @@ -3498,7 +3530,7 @@ void sub_804F284(u8 whichParty) "\tpop {r0}\n" "\tbx r0\n" "\t.align 2, 0\n" - "_0804F2DC: .4byte gUnknown_2031DA8\n" + "_0804F2DC: .4byte sTradeMenuResourcesPtr\n" "_0804F2E0: .4byte gUnknown_8261E5A\n" "_0804F2E4: .4byte gUnknown_8261E72"); } @@ -3508,13 +3540,13 @@ void sub_804F2E8(u8 whichParty) { int i; - for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].invisible = FALSE; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.x = 0; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.y = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].invisible = FALSE; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.x = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.y = 0; } } @@ -3531,8 +3563,8 @@ void sub_804F3C8(u8 whichParty) sub_804F284(whichParty); sub_804F020(whichParty); sub_804F2E8(whichParty); - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * gUnknown_2031DA8->unk_72, 24); - gUnknown_2031DA8->unk_74[whichParty] = 0; + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->unk_72, 24); + sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } void sub_804F440(void) @@ -3552,66 +3584,66 @@ void sub_804F488(u16 a0, u8 a1) int i; for (i = 0; i < 4; i++) { - if (!gUnknown_2031DA8->unk_8D0[i].unk_0) + if (!sTradeMenuResourcesPtr->unk_8D0[i].unk_0) { - gUnknown_2031DA8->unk_8D0[i].unk_2 = a0; - gUnknown_2031DA8->unk_8D0[i].unk_4 = a1; - gUnknown_2031DA8->unk_8D0[i].unk_0 = TRUE; + sTradeMenuResourcesPtr->unk_8D0[i].unk_2 = a0; + sTradeMenuResourcesPtr->unk_8D0[i].unk_4 = a1; + sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = TRUE; break; } } } -void sub_804F4DC(void) +static void sub_804F4DC(void) { int i; for (i = 0; i < 4; i++) { - if (gUnknown_2031DA8->unk_8D0[i].unk_0) + if (sTradeMenuResourcesPtr->unk_8D0[i].unk_0) { - if (gUnknown_2031DA8->unk_8D0[i].unk_2) + if (sTradeMenuResourcesPtr->unk_8D0[i].unk_2) { - gUnknown_2031DA8->unk_8D0[i].unk_2--; + sTradeMenuResourcesPtr->unk_8D0[i].unk_2--; } else { - switch (gUnknown_2031DA8->unk_8D0[i].unk_4) + switch (sTradeMenuResourcesPtr->unk_8D0[i].unk_4) { case 0: - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); break; case 1: - sub_804F5BC(0); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); break; case 2: - sub_804F5BC(2); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_ONLYMON); break; case 3: case 4: case 5: - sub_804F5BC(3); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_ONLYMON2); break; case 6: - sub_804F5BC(6); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_YOURMONCANTBETRADED); break; case 7: - sub_804F5BC(7); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_EGGCANTBETRADED); break; case 8: - sub_804F5BC(8); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_PARTNERMONCANTBETRADED); break; } - gUnknown_2031DA8->unk_8D0[i].unk_0 = FALSE; + sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = FALSE; } } } } -void sub_804F5BC(u8 idx) +void PrintTradeErrorOrStatusMessage(u8 idx) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 3, gUnknown_8261EF4[idx], 0, 2, 0xFF, NULL); + AddTextPrinterParameterized(0, 3, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); DrawTextBorderOuter(0, 0x014, 12); PutWindowTilemap(0); CopyWindowToVram(0, 3); @@ -3621,41 +3653,41 @@ bool8 sub_804F610(void) { struct SpriteSheet sheet; - if (gUnknown_2031DA8->unk_A8 < 14) + if (sTradeMenuResourcesPtr->unk_A8 < 14) { - sheet.data = gUnknown_2031C94[gUnknown_2031DA8->unk_A8]; + sheet.data = gUnknown_2031C94[sTradeMenuResourcesPtr->unk_A8]; sheet.size = 0x100; - sheet.tag = 200 + gUnknown_2031DA8->unk_A8; + sheet.tag = 200 + sTradeMenuResourcesPtr->unk_A8; } - switch (gUnknown_2031DA8->unk_A8) + switch (sTradeMenuResourcesPtr->unk_A8) { case 0 ... 7: LoadSpriteSheet(&sheet); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 8: - gUnknown_2031DA8->unk_72 = LoadSpriteSheet(&sheet); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_72 = LoadSpriteSheet(&sheet); + sTradeMenuResourcesPtr->unk_A8++; break; case 9 ... 13: LoadSpriteSheet(&sheet); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 14: LoadSpritePalette(&gUnknown_8261D00); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 15: LoadSpritePalette(&gUnknown_8261C60); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 16: LoadSpriteSheet(&gUnknown_8261C58); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 17: - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; return TRUE; } @@ -3674,42 +3706,42 @@ void sub_804F748(u8 who) switch (who) { case 0: - for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[who]; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 1; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 1; } else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } else { - gUnknown_2031DA8->unk_45[who][i] = 1; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 1; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } } break; case 1: - for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[who]; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 1; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 1; } else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } else { - gUnknown_2031DA8->unk_45[who][i] = 1; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 1; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } } break; @@ -3723,19 +3755,19 @@ void sub_804F890(u8 who) switch (who) { case 0: - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - gUnknown_2031DA8->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenuResourcesPtr->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); } break; case 1: - for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); - gUnknown_2031DA8->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenuResourcesPtr->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); } break; } @@ -3746,9 +3778,9 @@ void sub_804F964(void) int i, j; for (i = 0; i < 2; i++) { - for (j = 0; j < gUnknown_2031DA8->partyCounts[i]; j++) + for (j = 0; j < sTradeMenuResourcesPtr->partyCounts[i]; j++) { - MonIcon_SetAnim(&gSprites[gUnknown_2031DA8->partyIcons[i][j]], 4 - gUnknown_2031DA8->unk_5D[i][j]); + MonIcon_SetAnim(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->unk_5D[i][j]); } } } @@ -3758,8 +3790,8 @@ void sub_804F9D8(void) int i; for (i = 0; i < 11; i++) { - if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_2031DA8->unk_A9[i] != 0) - gSaveBlock1Ptr->giftRibbons[i] = gUnknown_2031DA8->unk_A9[i]; + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuResourcesPtr->unk_A9[i] != 0) + gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuResourcesPtr->unk_A9[i]; } } @@ -3979,16 +4011,16 @@ int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuS return 0; } -int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) +int Trade_CanTradeSelectedMon(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) { - u8 unk = a0.unk_01_0; + u8 canTradeEggAndNational = a0.unk_01_0; if (IsDeoxysOrMewUntradable(a2, a3)) { return 1; } - if (unk) + if (canTradeEggAndNational) { return 0; } @@ -4007,7 +4039,7 @@ int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a } // Sprite callback for link cable trade glow -void sub_804FD24(struct Sprite * sprite) +void SpriteCB_TradeGlowCable(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 10) @@ -4018,7 +4050,7 @@ void sub_804FD24(struct Sprite * sprite) } // Sprite callback for wireless trade glow -void sub_804FD48(struct Sprite * sprite) +void SpriteCB_TradeGlowWireless(struct Sprite * sprite) { if (!sprite->invisible) { @@ -4032,7 +4064,7 @@ void sub_804FD48(struct Sprite * sprite) } // Palette flash for trade glow core -void sub_804FD78(struct Sprite * sprite) +void SpriteCB_TradeGlowCore(struct Sprite * sprite) { if (sprite->data[1] == 0) { @@ -4043,7 +4075,7 @@ void sub_804FD78(struct Sprite * sprite) } } -void sub_804FDB8(struct Sprite * sprite) +void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y++; @@ -4051,7 +4083,7 @@ void sub_804FDB8(struct Sprite * sprite) DestroySprite(sprite); } -void sub_804FDDC(struct Sprite * sprite) +void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y--; @@ -4069,10 +4101,10 @@ void sub_804FE00(struct Sprite * sprite) } } -void sub_804FE24(void) +void TradeAnim_UpdateBgAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, gUnknown_2031DAC->unk_D4 * 0x100, gUnknown_2031DAC->unk_D6 * 0x100, gUnknown_2031DAC->unk_DC, gUnknown_2031DAC->unk_DE, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_EC); + DoBgAffineSet(&affine, sTradeAnimationResourcesPtr->unk_D4 * 0x100, sTradeAnimationResourcesPtr->unk_D6 * 0x100, sTradeAnimationResourcesPtr->unk_DC, sTradeAnimationResourcesPtr->unk_DE, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_EC); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -4081,28 +4113,28 @@ void sub_804FE24(void) SetGpuReg(REG_OFFSET_BG2Y, affine.dy); } -void sub_804FEB4(void) +static void TradeAnim_UpdateBgRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_2031DAC->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_2031DAC->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnimationResourcesPtr->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnimationResourcesPtr->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_2031DAC->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DAC->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnimationResourcesPtr->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnimationResourcesPtr->bg2hofs); } else { - sub_804FE24(); + TradeAnim_UpdateBgAffine(); } } -void sub_804FF0C(void) +static void VBlankCB_TradeAnim(void) { - sub_804FEB4(); + TradeAnim_UpdateBgRegs(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -4110,28 +4142,28 @@ void sub_804FF0C(void) void sub_804FF24(void) { - gUnknown_2031DAC->unk_8A = 0; - gUnknown_2031DAC->unk_88 = 0; - gUnknown_2031DAC->unk_89 = 0; + sTradeAnimationResourcesPtr->unk_8A = 0; + sTradeAnimationResourcesPtr->unk_88 = 0; + sTradeAnimationResourcesPtr->unk_89 = 0; } void sub_804FF4C(void) { - if (gUnknown_2031DAC->unk_88 == gUnknown_2031DAC->unk_89) - gUnknown_2031DAC->unk_8A++; + if (sTradeAnimationResourcesPtr->unk_88 == sTradeAnimationResourcesPtr->unk_89) + sTradeAnimationResourcesPtr->unk_8A++; else - gUnknown_2031DAC->unk_8A = 0; + sTradeAnimationResourcesPtr->unk_8A = 0; - if (gUnknown_2031DAC->unk_8A > 300) + if (sTradeAnimationResourcesPtr->unk_8A > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - gUnknown_2031DAC->unk_8A = 0; - gUnknown_2031DAC->unk_89 = 0; - gUnknown_2031DAC->unk_88 = 0; + sTradeAnimationResourcesPtr->unk_8A = 0; + sTradeAnimationResourcesPtr->unk_89 = 0; + sTradeAnimationResourcesPtr->unk_88 = 0; } - gUnknown_2031DAC->unk_89 = gUnknown_2031DAC->unk_88; + sTradeAnimationResourcesPtr->unk_89 = sTradeAnimationResourcesPtr->unk_88; } u32 sub_804FFC4(void) @@ -4172,14 +4204,411 @@ void sub_804FFE4(u8 whichParty, u8 a1) HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - gUnknown_2031DAC->tradeSpecies[whichParty] = species; - gUnknown_2031DAC->unk_68[whichParty] = personality; + sTradeAnimationResourcesPtr->tradeSpecies[whichParty] = species; + sTradeAnimationResourcesPtr->unk_68[whichParty] = personality; break; case 1: SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - gUnknown_2031DAC->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; + } +} + +void CB2_InitTradeAnim_LinkTrade(void) +{ + switch (gMain.state) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = 0x1144; + CloseLink(); + } + sTradeAnimationResourcesPtr = AllocZeroed(sizeof(struct TradeAnimationResources)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sub_804FF24(); + gMain.state++; + sTradeAnimationResourcesPtr->unk_8C = 0; + sTradeAnimationResourcesPtr->state = 0; + sTradeAnimationResourcesPtr->isLinkTrade = TRUE; + sTradeAnimationResourcesPtr->unk_D4 = 64; + sTradeAnimationResourcesPtr->unk_D6 = 64; + sTradeAnimationResourcesPtr->unk_D8 = 0; + sTradeAnimationResourcesPtr->unk_DA = 0; + sTradeAnimationResourcesPtr->unk_DC = 120; + sTradeAnimationResourcesPtr->unk_DE = 80; + sTradeAnimationResourcesPtr->unk_E8 = 256; + sTradeAnimationResourcesPtr->unk_EC = 0; + break; + case 1: + if (!gReceivedRemoteLinkPlayers) + { + sTradeAnimationResourcesPtr->unk_108 = TRUE; + OpenLink(); + gMain.state++; + sTradeAnimationResourcesPtr->timer = 0; + } + else + { + gMain.state = 4; + } + break; + case 2: + sTradeAnimationResourcesPtr->timer++; + if (sTradeAnimationResourcesPtr->timer > 60) + { + sTradeAnimationResourcesPtr->timer = 0; + gMain.state++; + } + break; + case 3: + if (IsLinkMaster()) + { + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + sTradeAnimationResourcesPtr->timer++; + if (sTradeAnimationResourcesPtr->timer > 30) + { + CheckShouldAdvanceLinkState(); + gMain.state++; + } + } + else + { + sub_804FF4C(); + } + } + else + { + gMain.state++; + } + break; + case 4: + sub_804FF4C(); + if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) + { + gMain.state++; + } break; + case 5: + sTradeAnimationResourcesPtr->unk_72 = 0; + sTradeAnimationResourcesPtr->unk_73 = 0; + sTradeAnimationResourcesPtr->unk_93 = 0; + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + sub_80504B0(); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + sTradeAnimationResourcesPtr->unk_F8 = GetMonData(&gPlayerParty[gUnknown_2031DA4[0]], MON_DATA_SPECIES2); + sTradeAnimationResourcesPtr->unk_FA = GetMonData(&gEnemyParty[gUnknown_2031DA4[1] % 6], MON_DATA_SPECIES2); + memcpy(sTradeAnimationResourcesPtr->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + gMain.state++; + break; + case 11: + sub_805049C(); + sub_8050E24(); + gMain.state++; + break; + case 12: + if (!gPaletteFade.active) + { + if (gWirelessCommType != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + SetMainCallback2(CB2_RunTradeAnim_LinkTrade); + } + break; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805049C(void) +{ + sub_8050968(5); + sub_8050968(0); +} + +void sub_80504B0(void) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +void TradeAnimInit_LoadGfx(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + DeactivateAllTextPrinters(); + // Doing the graphics load... + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); + InitWindows(gUnknown_826D1BC); + // ... and doing the same load again + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); +} + +void CB2_InitTradeAnim_InGameTrade(void) +{ + u8 otName[11]; + + switch (gMain.state) + { + case 0: + gUnknown_2031DA4[0] = gSpecialVar_0x8005; + gUnknown_2031DA4[1] = 6; + StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); + GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); + StringCopy(gLinkPlayers[1].name, otName); + sTradeAnimationResourcesPtr = AllocZeroed(sizeof(*sTradeAnimationResourcesPtr)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sTradeAnimationResourcesPtr->isLinkTrade = FALSE; + sTradeAnimationResourcesPtr->unk_8C = 0; + sTradeAnimationResourcesPtr->state = 0; + sTradeAnimationResourcesPtr->unk_D4 = 64; + sTradeAnimationResourcesPtr->unk_D6 = 64; + sTradeAnimationResourcesPtr->unk_D8 = 0; + sTradeAnimationResourcesPtr->unk_DA = 0; + sTradeAnimationResourcesPtr->unk_DC = 120; + sTradeAnimationResourcesPtr->unk_DE = 80; + sTradeAnimationResourcesPtr->unk_E8 = 256; + sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeAnimationResourcesPtr->timer = 0; + gMain.state = 5; + break; + case 5: + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + ShowBg(0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + ShowBg(0); + gMain.state++; + break; + case 11: + sub_8050968(5); + sub_8050968(0); + sub_8050E24(); + gMain.state++; + break; + case 12: + SetMainCallback2(CB2_RunTradeAnim_InGameTrade); + break; + } + + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void ReceivedMonSetPokedexFlags(u8 partyIdx) +{ + struct Pokemon *mon = &gPlayerParty[partyIdx]; + + if (!GetMonData(mon, MON_DATA_IS_EGG)) + { + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + species = SpeciesToNationalPokedexNum(species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality); + } +} + +static void RS_TryEnableNationalPokedex(void) +{ + u8 mpId = GetMultiplayerId(); + // Originally in Ruby but commented out + /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) + EnableNationalPokedex();*/ +} + +void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) +{ + u8 friendship; + + // Get whether the offered Pokemon have mail + struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; + u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); + + struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; + u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); + + // The mail attached to the sent Pokemon no longer exists in your file. + if (playerMail != 0xFF) + ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); + + // This is where the actual trade happens!! + sTradeAnimationResourcesPtr->mon = *playerMon; + *playerMon = *partnerMon; + *partnerMon = sTradeAnimationResourcesPtr->mon; + + // By default, a Pokemon received from a trade will have 70 Friendship. + friendship = 70; + if (!GetMonData(playerMon, MON_DATA_IS_EGG)) + SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); + + // Associate your partner's mail with the Pokemon they sent over. + if (partnerMail != 0xFF) + GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); + + ReceivedMonSetPokedexFlags(playerPartyIdx); + if (gReceivedRemoteLinkPlayers) + RS_TryEnableNationalPokedex(); +} + +void sub_80508F4(void) +{ + switch (sTradeAnimationResourcesPtr->unk_93) + { + case 1: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), sTradeAnimationResourcesPtr->linkData, 20); + sTradeAnimationResourcesPtr->unk_93++; + } + case 2: + sTradeAnimationResourcesPtr->unk_93 = 0; + break; + } +} + +void CB2_RunTradeAnim_InGameTrade(void) +{ + sub_8050F14(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} +/* + +void sub_8050968(u8 state) +{ + switch (state) + { + case 0: + sTradeAnimationResourcesPtr->bg2hofs = 0; + sTradeAnimationResourcesPtr->bg2vofs = 0xB4; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF256x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + break; + case 1: + sTradeAnimationResourcesPtr->bg1hofs = 0; + sTradeAnimationResourcesPtr->bg1vofs = 0x15C; + SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF512x512); + if (sTradeAnimationResourcesPtr->unk_108) + { + DmaCopy16(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + else + { + DmaCopy16(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); + break; + case 2: + sTradeAnimationResourcesPtr->bg1hofs = 0; + sTradeAnimationResourcesPtr->bg1vofs = 0; + if (sTradeAnimationResourcesPtr->unk_108 == FALSE) + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); + BlendPalettes(0x000000008, 0x10, RGB_BLACK); + } + else + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + DmaCopy16(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); + BlendPalettes(0x00000001, 0x10, RGB_BLACK); + } + break; + case 3: + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); + LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); + sTradeAnimationResourcesPtr->bg2hofs = 0x50; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + break; + case 4: + } } +*/ -- cgit v1.2.3 From e9592bee5d1aa74a39e8879d52c0e5f105bef9c1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 20:28:17 -0400 Subject: Finish sub_8050968 --- src/trade.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 68 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 026f77db8..19f6e47f6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -217,6 +217,13 @@ extern const u16 gUnknown_826AA5C[]; extern const u16 gUnknown_8269A5C[]; extern const u32 gUnknown_3379A0Bin[]; extern const u16 gUnknown_826407C[]; +extern const u16 gUnknown_826601C[]; +extern const u16 gUnknown_826BF5C[]; +extern const u16 gUnknown_826701C[]; +extern const u16 gUnknown_826985C[]; +extern const u16 gUnknown_826995C[]; +extern const u32 gWirelessSignal4bpp[]; +extern const u32 gUnknown_826C60C[]; void sub_804C600(void) { @@ -4554,39 +4561,40 @@ void CB2_RunTradeAnim_InGameTrade(void) BuildOamBuffer(); UpdatePaletteFade(); } -/* void sub_8050968(u8 state) { switch (state) { case 0: - sTradeAnimationResourcesPtr->bg2hofs = 0; - sTradeAnimationResourcesPtr->bg2vofs = 0xB4; + sTradeAnimationResourcesPtr->bg2vofs = 0; + sTradeAnimationResourcesPtr->bg2hofs = 0xB4; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF256x256); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); break; case 1: sTradeAnimationResourcesPtr->bg1hofs = 0; sTradeAnimationResourcesPtr->bg1vofs = 0x15C; SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF512x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); if (sTradeAnimationResourcesPtr->unk_108) { - DmaCopy16(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); } else { - DmaCopy16(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); } DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; case 2: - sTradeAnimationResourcesPtr->bg1hofs = 0; sTradeAnimationResourcesPtr->bg1vofs = 0; + sTradeAnimationResourcesPtr->bg1hofs = 0; if (sTradeAnimationResourcesPtr->unk_108 == FALSE) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); @@ -4596,7 +4604,7 @@ void sub_8050968(u8 state) else { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); + DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); BlendPalettes(0x00000001, 0x10, RGB_BLACK); } break; @@ -4604,11 +4612,59 @@ void sub_8050968(u8 state) LoadPalette(gUnknown_826BF5C, 0x30, 0x20); LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); - sTradeAnimationResourcesPtr->bg2hofs = 0x50; + sTradeAnimationResourcesPtr->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; case 4: - + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); + sTradeAnimationResourcesPtr->unk_D4 = 0x40; + sTradeAnimationResourcesPtr->unk_D6 = 0x5C; + sTradeAnimationResourcesPtr->unk_E8 = 0x20; + sTradeAnimationResourcesPtr->unk_EA = 0x400; + sTradeAnimationResourcesPtr->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeAnimationResourcesPtr->unk_108) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 5: + sTradeAnimationResourcesPtr->bg1vofs = 0; + sTradeAnimationResourcesPtr->bg1hofs = 0; + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); + sTradeAnimationResourcesPtr->unk_D4 = 0x40; + sTradeAnimationResourcesPtr->unk_D6 = 0x5C; + sTradeAnimationResourcesPtr->unk_E8 = 0x100; + sTradeAnimationResourcesPtr->unk_EA = 0x80; + sTradeAnimationResourcesPtr->unk_DC = 0x78; + sTradeAnimationResourcesPtr->unk_DE = 0x50; + sTradeAnimationResourcesPtr->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeAnimationResourcesPtr->unk_108) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 7: + sTradeAnimationResourcesPtr->bg2vofs = 0; + sTradeAnimationResourcesPtr->bg2hofs = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; } } -*/ -- cgit v1.2.3 From e7a66b294169572a70c65b7223ae16810e9a49a3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 21:29:10 -0400 Subject: port sub_8050F3C --- src/oak_speech.c | 2 +- src/trade.c | 810 +++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 695 insertions(+), 117 deletions(-) (limited to 'src') diff --git a/src/oak_speech.c b/src/oak_speech.c index c39ff262e..3f946e13f 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -977,7 +977,7 @@ static void Task_OakSpeech15(u8 taskId) { ClearDialogWindowAndFrame(0, 1); spriteId = gTasks[taskId].data[4]; - gTasks[taskId].data[6] = sub_804BB98(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1F3F); + gTasks[taskId].data[6] = CreateTradePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1F3F); gTasks[taskId].data[3] = 48; gTasks[taskId].data[0] = 64; gTasks[taskId].func = Task_OakSpeech16; diff --git a/src/trade.c b/src/trade.c index 19f6e47f6..a21781753 100644 --- a/src/trade.c +++ b/src/trade.c @@ -9,11 +9,13 @@ #include "window.h" #include "librfu.h" #include "text_window.h" +#include "evolution_scene.h" #include "pokemon_icon.h" #include "pokedex.h" #include "mail_data.h" #include "graphics.h" #include "link.h" +#include "help_system.h" #include "link_rfu.h" #include "cable_club.h" #include "data.h" @@ -23,6 +25,7 @@ #include "menu.h" #include "overworld.h" #include "battle_anim.h" +#include "pokeball.h" #include "party_menu.h" #include "util.h" #include "daycare.h" @@ -37,6 +40,22 @@ #include "constants/songs.h" #include "constants/moves.h" +struct InGameTrade { + /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x0C*/ u16 species; + /*0x0E*/ u8 ivs[NUM_STATS]; + /*0x14*/ u8 abilityNum; + /*0x18*/ u32 otId; + /*0x1C*/ u8 conditions[5]; + /*0x24*/ u32 personality; + /*0x28*/ u16 heldItem; + /*0x2A*/ u8 mailNum; + /*0x2B*/ u8 otName[11]; + /*0x36*/ u8 otGender; + /*0x37*/ u8 sheen; + /*0x38*/ u16 requestedSpecies; +}; + struct TradeMenuResources { /*0x0000*/ u8 unk_0; @@ -80,7 +99,7 @@ struct TradeMenuResources struct TradeAnimationResources { /*0x00*/ struct Pokemon mon; /*0x64*/ u32 timer; - /*0x68*/ u32 unk_68[2]; + /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; /*0x72*/ u8 unk_72; /*0x73*/ u8 unk_73; @@ -96,7 +115,7 @@ struct TradeAnimationResources { /*0x93*/ u8 unk_93; /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 unk_D2; + /*0xD2*/ u8 pokeballSpriteId; /*0xD3*/ u8 unk_D3; /*0xD4*/ u16 unk_D4; /*0xD6*/ u16 unk_D6; @@ -108,18 +127,17 @@ struct TradeAnimationResources { /*0xE2*/ s16 bg1hofs; /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 unk_E8; + /*0xE8*/ u16 sXY; /*0xEA*/ u16 unk_EA; /*0xEC*/ u16 unk_EC; /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; /*0xF4*/ u16 cachedMapMusic; /*0xF6*/ u8 unk_F6; - /*0xF8*/ u16 unk_F8; - /*0xFA*/ u16 unk_FA; + /*0xF8*/ u16 monSpecies[2]; /*0xFC*/ u8 unk_FC[7]; /*0x103*/ u8 filler_103[5]; - /*0x108*/ u8 unk_108; + /*0x108*/ u8 isCableTrade; /*0x109*/ u8 filler_109[7]; }; @@ -141,9 +159,9 @@ IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; -EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; +EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; -EWRAM_DATA struct TradeAnimationResources * sTradeAnimationResourcesPtr = NULL; +EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -177,12 +195,19 @@ void sub_805049C(void); void sub_80504B0(void); void TradeAnimInit_LoadGfx(void); void CB2_RunTradeAnim_InGameTrade(void); -void sub_8050968(u8 idx); +void SetTradeSequenceBgGpuRegs(u8 idx); void sub_8050DE0(void); void sub_8050E24(void); -void sub_8050F14(void); +u8 sub_8050F14(void); +u8 sub_8050F3C(void); +u8 sub_805232C(void); void CB2_RunTradeAnim_LinkTrade(void); void LoadHeldItemIcons(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +void CheckPartnersMonForRibbons(void); +void BufferInGameTradeMonName(void); +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; @@ -224,6 +249,19 @@ extern const u16 gUnknown_826985C[]; extern const u16 gUnknown_826995C[]; extern const u32 gWirelessSignal4bpp[]; extern const u32 gUnknown_826C60C[]; +extern const struct SpriteSheet gUnknown_826CE2C; +extern const struct SpriteSheet gUnknown_826CE7C; +extern const struct SpriteSheet gUnknown_826CEB0; +extern const struct SpriteSheet gUnknown_826CF28; +extern const struct SpritePalette gUnknown_826CE34; +extern const struct SpritePalette gUnknown_826CE3C; +extern const struct InGameTrade gIngameTrades[]; +extern const struct SpriteTemplate sTradePokeballSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CF30; +extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CE44; +extern const struct SpriteTemplate sGlowBallSpriteTemplate; +extern const union AffineAnimCmd *const gUnknown_826CF88[]; void sub_804C600(void) { @@ -2353,8 +2391,8 @@ void sub_804D548(void) { if (!gPaletteFade.active) { - gUnknown_2031DA4[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - gUnknown_2031DA4[1] = sTradeMenuResourcesPtr->unk_7E; + gSelectedTradeMonPositions[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; + gSelectedTradeMonPositions[1] = sTradeMenuResourcesPtr->unk_7E; if (gWirelessCommType != 0) { sTradeMenuResourcesPtr->unk_6F = 16; @@ -4108,10 +4146,10 @@ void sub_804FE00(struct Sprite * sprite) } } -void TradeAnim_UpdateBgAffine(void) +void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeAnimationResourcesPtr->unk_D4 * 0x100, sTradeAnimationResourcesPtr->unk_D6 * 0x100, sTradeAnimationResourcesPtr->unk_DC, sTradeAnimationResourcesPtr->unk_DE, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_EC); + DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -4124,18 +4162,18 @@ static void TradeAnim_UpdateBgRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnimationResourcesPtr->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnimationResourcesPtr->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnimationResourcesPtr->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnimationResourcesPtr->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); } else { - TradeAnim_UpdateBgAffine(); + SetTradeBGAffine(); } } @@ -4149,28 +4187,28 @@ static void VBlankCB_TradeAnim(void) void sub_804FF24(void) { - sTradeAnimationResourcesPtr->unk_8A = 0; - sTradeAnimationResourcesPtr->unk_88 = 0; - sTradeAnimationResourcesPtr->unk_89 = 0; + sTradeData->unk_8A = 0; + sTradeData->unk_88 = 0; + sTradeData->unk_89 = 0; } void sub_804FF4C(void) { - if (sTradeAnimationResourcesPtr->unk_88 == sTradeAnimationResourcesPtr->unk_89) - sTradeAnimationResourcesPtr->unk_8A++; + if (sTradeData->unk_88 == sTradeData->unk_89) + sTradeData->unk_8A++; else - sTradeAnimationResourcesPtr->unk_8A = 0; + sTradeData->unk_8A = 0; - if (sTradeAnimationResourcesPtr->unk_8A > 300) + if (sTradeData->unk_8A > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeAnimationResourcesPtr->unk_8A = 0; - sTradeAnimationResourcesPtr->unk_89 = 0; - sTradeAnimationResourcesPtr->unk_88 = 0; + sTradeData->unk_8A = 0; + sTradeData->unk_89 = 0; + sTradeData->unk_88 = 0; } - sTradeAnimationResourcesPtr->unk_89 = sTradeAnimationResourcesPtr->unk_88; + sTradeData->unk_89 = sTradeData->unk_88; } u32 sub_804FFC4(void) @@ -4189,13 +4227,13 @@ void sub_804FFE4(u8 whichParty, u8 a1) if (whichParty == 0) { - mon = &gPlayerParty[gUnknown_2031DA4[0]]; + mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; pos = 1; } if (whichParty == 1) { - mon = &gEnemyParty[gUnknown_2031DA4[1] % PARTY_SIZE]; + mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; pos = 3; } @@ -4211,14 +4249,14 @@ void sub_804FFE4(u8 whichParty, u8 a1) HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeAnimationResourcesPtr->tradeSpecies[whichParty] = species; - sTradeAnimationResourcesPtr->unk_68[whichParty] = personality; + sTradeData->tradeSpecies[whichParty] = species; + sTradeData->monPersonalities[whichParty] = personality; break; case 1: SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; break; } } @@ -4233,7 +4271,7 @@ void CB2_InitTradeAnim_LinkTrade(void) gLinkType = 0x1144; CloseLink(); } - sTradeAnimationResourcesPtr = AllocZeroed(sizeof(struct TradeAnimationResources)); + sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); @@ -4242,25 +4280,25 @@ void CB2_InitTradeAnim_LinkTrade(void) TradeAnimInit_LoadGfx(); sub_804FF24(); gMain.state++; - sTradeAnimationResourcesPtr->unk_8C = 0; - sTradeAnimationResourcesPtr->state = 0; - sTradeAnimationResourcesPtr->isLinkTrade = TRUE; - sTradeAnimationResourcesPtr->unk_D4 = 64; - sTradeAnimationResourcesPtr->unk_D6 = 64; - sTradeAnimationResourcesPtr->unk_D8 = 0; - sTradeAnimationResourcesPtr->unk_DA = 0; - sTradeAnimationResourcesPtr->unk_DC = 120; - sTradeAnimationResourcesPtr->unk_DE = 80; - sTradeAnimationResourcesPtr->unk_E8 = 256; - sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->isLinkTrade = TRUE; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) { - sTradeAnimationResourcesPtr->unk_108 = TRUE; + sTradeData->isCableTrade = TRUE; OpenLink(); gMain.state++; - sTradeAnimationResourcesPtr->timer = 0; + sTradeData->timer = 0; } else { @@ -4268,10 +4306,10 @@ void CB2_InitTradeAnim_LinkTrade(void) } break; case 2: - sTradeAnimationResourcesPtr->timer++; - if (sTradeAnimationResourcesPtr->timer > 60) + sTradeData->timer++; + if (sTradeData->timer > 60) { - sTradeAnimationResourcesPtr->timer = 0; + sTradeData->timer = 0; gMain.state++; } break; @@ -4280,8 +4318,8 @@ void CB2_InitTradeAnim_LinkTrade(void) { if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) { - sTradeAnimationResourcesPtr->timer++; - if (sTradeAnimationResourcesPtr->timer > 30) + sTradeData->timer++; + if (sTradeData->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -4305,9 +4343,9 @@ void CB2_InitTradeAnim_LinkTrade(void) } break; case 5: - sTradeAnimationResourcesPtr->unk_72 = 0; - sTradeAnimationResourcesPtr->unk_73 = 0; - sTradeAnimationResourcesPtr->unk_93 = 0; + sTradeData->unk_72 = 0; + sTradeData->unk_73 = 0; + sTradeData->unk_93 = 0; sub_804FFE4(0, 0); gMain.state++; break; @@ -4333,9 +4371,9 @@ void CB2_InitTradeAnim_LinkTrade(void) case 10: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); ShowBg(0); - sTradeAnimationResourcesPtr->unk_F8 = GetMonData(&gPlayerParty[gUnknown_2031DA4[0]], MON_DATA_SPECIES2); - sTradeAnimationResourcesPtr->unk_FA = GetMonData(&gEnemyParty[gUnknown_2031DA4[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeAnimationResourcesPtr->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); + sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); + memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); gMain.state++; break; case 11: @@ -4364,8 +4402,8 @@ void CB2_InitTradeAnim_LinkTrade(void) void sub_805049C(void) { - sub_8050968(5); - sub_8050968(0); + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); } void sub_80504B0(void) @@ -4406,30 +4444,30 @@ void CB2_InitTradeAnim_InGameTrade(void) switch (gMain.state) { case 0: - gUnknown_2031DA4[0] = gSpecialVar_0x8005; - gUnknown_2031DA4[1] = 6; + gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; + gSelectedTradeMonPositions[1] = 6; StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); StringCopy(gLinkPlayers[1].name, otName); - sTradeAnimationResourcesPtr = AllocZeroed(sizeof(*sTradeAnimationResourcesPtr)); + sTradeData = AllocZeroed(sizeof(*sTradeData)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); SetVBlankCallback(VBlankCB_TradeAnim); TradeAnimInit_LoadGfx(); - sTradeAnimationResourcesPtr->isLinkTrade = FALSE; - sTradeAnimationResourcesPtr->unk_8C = 0; - sTradeAnimationResourcesPtr->state = 0; - sTradeAnimationResourcesPtr->unk_D4 = 64; - sTradeAnimationResourcesPtr->unk_D6 = 64; - sTradeAnimationResourcesPtr->unk_D8 = 0; - sTradeAnimationResourcesPtr->unk_DA = 0; - sTradeAnimationResourcesPtr->unk_DC = 120; - sTradeAnimationResourcesPtr->unk_DE = 80; - sTradeAnimationResourcesPtr->unk_E8 = 256; - sTradeAnimationResourcesPtr->unk_EC = 0; - sTradeAnimationResourcesPtr->timer = 0; + sTradeData->isLinkTrade = FALSE; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; + sTradeData->timer = 0; gMain.state = 5; break; case 5: @@ -4463,8 +4501,8 @@ void CB2_InitTradeAnim_InGameTrade(void) gMain.state++; break; case 11: - sub_8050968(5); - sub_8050968(0); + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); sub_8050E24(); gMain.state++; break; @@ -4502,7 +4540,7 @@ static void RS_TryEnableNationalPokedex(void) EnableNationalPokedex();*/ } -void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) +void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) { u8 friendship; @@ -4518,9 +4556,9 @@ void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); // This is where the actual trade happens!! - sTradeAnimationResourcesPtr->mon = *playerMon; + sTradeData->mon = *playerMon; *playerMon = *partnerMon; - *partnerMon = sTradeAnimationResourcesPtr->mon; + *partnerMon = sTradeData->mon; // By default, a Pokemon received from a trade will have 70 Friendship. friendship = 70; @@ -4538,16 +4576,16 @@ void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) void sub_80508F4(void) { - switch (sTradeAnimationResourcesPtr->unk_93) + switch (sTradeData->unk_93) { case 1: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), sTradeAnimationResourcesPtr->linkData, 20); - sTradeAnimationResourcesPtr->unk_93++; + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_93++; } case 2: - sTradeAnimationResourcesPtr->unk_93 = 0; + sTradeData->unk_93 = 0; break; } } @@ -4562,13 +4600,13 @@ void CB2_RunTradeAnim_InGameTrade(void) UpdatePaletteFade(); } -void sub_8050968(u8 state) +void SetTradeSequenceBgGpuRegs(u8 state) { switch (state) { case 0: - sTradeAnimationResourcesPtr->bg2vofs = 0; - sTradeAnimationResourcesPtr->bg2hofs = 0xB4; + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0xB4; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); @@ -4576,12 +4614,12 @@ void sub_8050968(u8 state) DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); break; case 1: - sTradeAnimationResourcesPtr->bg1hofs = 0; - sTradeAnimationResourcesPtr->bg1vofs = 0x15C; + sTradeData->bg1hofs = 0; + sTradeData->bg1vofs = 0x15C; SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeAnimationResourcesPtr->unk_108) + if (sTradeData->isCableTrade) { DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); } @@ -4593,9 +4631,9 @@ void sub_8050968(u8 state) SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; case 2: - sTradeAnimationResourcesPtr->bg1vofs = 0; - sTradeAnimationResourcesPtr->bg1hofs = 0; - if (sTradeAnimationResourcesPtr->unk_108 == FALSE) + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + if (sTradeData->isCableTrade == FALSE) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); @@ -4612,19 +4650,19 @@ void sub_8050968(u8 state) LoadPalette(gUnknown_826BF5C, 0x30, 0x20); LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); - sTradeAnimationResourcesPtr->bg2vofs = 0x50; + sTradeData->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; case 4: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeAnimationResourcesPtr->unk_D4 = 0x40; - sTradeAnimationResourcesPtr->unk_D6 = 0x5C; - sTradeAnimationResourcesPtr->unk_E8 = 0x20; - sTradeAnimationResourcesPtr->unk_EA = 0x400; - sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x20; + sTradeData->unk_EA = 0x400; + sTradeData->unk_EC = 0; DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeAnimationResourcesPtr->unk_108) + if (sTradeData->isCableTrade) { DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); } @@ -4634,21 +4672,21 @@ void sub_8050968(u8 state) } break; case 5: - sTradeAnimationResourcesPtr->bg1vofs = 0; - sTradeAnimationResourcesPtr->bg1hofs = 0; + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; break; case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeAnimationResourcesPtr->unk_D4 = 0x40; - sTradeAnimationResourcesPtr->unk_D6 = 0x5C; - sTradeAnimationResourcesPtr->unk_E8 = 0x100; - sTradeAnimationResourcesPtr->unk_EA = 0x80; - sTradeAnimationResourcesPtr->unk_DC = 0x78; - sTradeAnimationResourcesPtr->unk_DE = 0x50; - sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x100; + sTradeData->unk_EA = 0x80; + sTradeData->unk_DC = 0x78; + sTradeData->unk_DE = 0x50; + sTradeData->unk_EC = 0; DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeAnimationResourcesPtr->unk_108) + if (sTradeData->isCableTrade) { DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); } @@ -4658,8 +4696,8 @@ void sub_8050968(u8 state) } break; case 7: - sTradeAnimationResourcesPtr->bg2vofs = 0; - sTradeAnimationResourcesPtr->bg2hofs = 0; + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); @@ -4668,3 +4706,543 @@ void sub_8050968(u8 state) break; } } + +void sub_8050DE0(void) +{ + LoadSpriteSheet(&gUnknown_826CE2C); + LoadSpriteSheet(&gUnknown_826CE7C); + LoadSpriteSheet(&gUnknown_826CEB0); + LoadSpriteSheet(&gUnknown_826CF28); + LoadSpritePalette(&gUnknown_826CE34); + LoadSpritePalette(&gUnknown_826CE3C); +} + +void sub_8050E24(void) +{ + u8 nickname[20]; + u8 mpId; + const struct InGameTrade * inGameTrade; + if (sTradeData->isLinkTrade) + { + mpId = GetMultiplayerId(); + StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); + GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar3, nickname); + GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } + else + { + inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, inGameTrade->otName); + StringCopy10(gStringVar3, inGameTrade->nickname); + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } +} + +bool8 sub_8050F14(void) +{ + if (sTradeData->isCableTrade) + return sub_8050F3C(); + else + return sub_805232C(); +} + + +bool8 sub_8050F3C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state++; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 24: + if (++sTradeData->timer > 20) + { + SetTradeBGAffine(); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state++; + } + break; + case 25: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG1 | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); + sTradeData->state++; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 2) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + } + break; + case 34: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state++; + } + break; + case 44: + if ((sTradeData->bg1vofs += 2) > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 45: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} -- cgit v1.2.3 From 0f0fb927a97fb3f1261e210235b9ada76da05479 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 06:36:12 -0400 Subject: Port sub_805232C --- src/trade.c | 526 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 525 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a21781753..40be0774b 100644 --- a/src/trade.c +++ b/src/trade.c @@ -208,6 +208,9 @@ void CheckPartnersMonForRibbons(void); void BufferInGameTradeMonName(void); void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +void Task_AnimateWirelessSignal(u8 taskId); +void c3_0805465C(u8 taskId); +void sub_8054734(u8 taskId); extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; @@ -262,6 +265,7 @@ extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; extern const struct SpriteTemplate gUnknown_826CE44; extern const struct SpriteTemplate sGlowBallSpriteTemplate; extern const union AffineAnimCmd *const gUnknown_826CF88[]; +extern const struct SpriteTemplate gUnknown_826CF48; void sub_804C600(void) { @@ -4749,7 +4753,6 @@ bool8 sub_8050F14(void) return sub_805232C(); } - bool8 sub_8050F3C(void) { u16 evoTarget; @@ -5246,3 +5249,524 @@ bool8 sub_8050F3C(void) } return FALSE; } + +bool8 sub_805232C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state = 124; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 124: + if (++sTradeData->timer > 20) + { + SetTradeSequenceBgGpuRegs(3); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); + sTradeData->state++; + } + break; + case 125: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | + BLDCNT_TGT1_OBJ | + BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); + CreateTask(Task_AnimateWirelessSignal, 5); + sTradeData->state++; + } + break; + case 126: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 26; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 3) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + CreateTask(c3_0805465C, 5); + } + break; + case 34: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 40; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 200; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + CreateTask(sub_8054734, 5); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + SetTradeSequenceBgGpuRegs(3); + sTradeData->bg2vofs = 412; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 4; + gSprites[sTradeData->unk_91].pos2.y += 4; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state = 144; + sTradeData->timer = 0; + } + break; + case 144: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + sTradeData->bg1vofs += 3; + sTradeData->bg2vofs += 3; + if (++sTradeData->timer == 10) + { + u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); + gTasks[taskId].data[2] = TRUE; + } + if (sTradeData->bg1vofs > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 145: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 146: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 46; + sTradeData->timer = 0; + } + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} -- cgit v1.2.3 From 265f8b5b259221dfa1a5fc5537059f262036eb52 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 11:16:26 -0400 Subject: trade through sub_8053E1C; dynamic sys flags start idx --- src/trade.c | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 269 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 40be0774b..f33388eed 100644 --- a/src/trade.c +++ b/src/trade.c @@ -38,6 +38,7 @@ #include "constants/items.h" #include "constants/easy_chat.h" #include "constants/songs.h" +#include "constants/region_map.h" #include "constants/moves.h" struct InGameTrade { @@ -201,13 +202,17 @@ void sub_8050E24(void); u8 sub_8050F14(void); u8 sub_8050F3C(void); u8 sub_805232C(void); +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +void BufferInGameTradeMonName(void); +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); void CB2_RunTradeAnim_LinkTrade(void); +void sub_8053E1C(void); +void sub_8053E8C(void); void LoadHeldItemIcons(void); void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); void CheckPartnersMonForRibbons(void); -void BufferInGameTradeMonName(void); -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); void Task_AnimateWirelessSignal(u8 taskId); void c3_0805465C(u8 taskId); void sub_8054734(u8 taskId); @@ -258,7 +263,7 @@ extern const struct SpriteSheet gUnknown_826CEB0; extern const struct SpriteSheet gUnknown_826CF28; extern const struct SpritePalette gUnknown_826CE34; extern const struct SpritePalette gUnknown_826CE3C; -extern const struct InGameTrade gIngameTrades[]; +extern const struct InGameTrade gInGameTrades[]; extern const struct SpriteTemplate sTradePokeballSpriteTemplate; extern const struct SpriteTemplate gUnknown_826CF30; extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; @@ -266,6 +271,8 @@ extern const struct SpriteTemplate gUnknown_826CE44; extern const struct SpriteTemplate sGlowBallSpriteTemplate; extern const union AffineAnimCmd *const gUnknown_826CF88[]; extern const struct SpriteTemplate gUnknown_826CF48; +extern const s8 gUnknown_826D1E4[]; +extern const u16 sInGameTradeMailMessages[][10]; void sub_804C600(void) { @@ -4737,7 +4744,7 @@ void sub_8050E24(void) } else { - inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, inGameTrade->otName); StringCopy10(gStringVar3, inGameTrade->nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); @@ -5770,3 +5777,260 @@ bool8 sub_805232C(void) } return FALSE; } + +void sub_8053788(void) +{ + u16 evoSpecies; + switch (gMain.state) + { + case 0: + gMain.state = 4; + gSoftResetDisabled = TRUE; + break; + case 4: + gCB2_AfterEvolution = sub_8053E8C; + evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); + if (evoSpecies != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + else + SetMainCallback2(sub_8053E8C); + gSelectedTradeMonPositions[0] = 0xFF; + break; + } + if (!HasLinkErrorOccurred()) + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805383C(void) +{ + u8 recvStatus; + sub_804FFC4(); + recvStatus = GetBlockReceivedStatus(); + if (recvStatus & (1 << 0)) + { + if (gBlockRecvBuffer[0][0] == 0xDCBA) + SetMainCallback2(sub_8053788); + if (gBlockRecvBuffer[0][0] == 0xABCD) + sTradeData->unk_72 = 1; + ResetBlockReceivedFlag(0); + } + if (recvStatus & (1 << 1)) + { + if (gBlockRecvBuffer[1][0] == 0xABCD) + sTradeData->unk_73 = 1; + ResetBlockReceivedFlag(1); + } +} + +void SpriteCB_TradePokeball_Default(struct Sprite * sprite) +{ + sprite->pos1.y += sprite->data[0] / 10; + sprite->data[5] += sprite->data[1]; + sprite->pos1.x = sprite->data[5] / 10; + if (sprite->pos1.y > 76) + { + sprite->pos1.y = 76; + sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; + sprite->data[3]++; + } + if (sprite->pos1.x == 120) + sprite->data[1] = 0; + sprite->data[0] += sprite->data[4]; + if (sprite->data[3] == 4) + { + sprite->data[7] = 1; + sprite->callback = SpriteCallbackDummy; + } +} + +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) +{ + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + if (sprite->data[0] == 22) + PlaySE(SE_KON); + sprite->data[0]++; + if (sprite->data[0] == 44) + { + PlaySE(SE_W025); + sprite->callback = SpriteCB_TradePokeball_Outbound2; + sprite->data[0] = 0; + BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); + } +} + +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) +{ + if (sprite->data[1] == 20) + StartSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + if (sprite->data[1] > 20) + { + sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 23) + { + DestroySprite(sprite); + sTradeData->state = 14; + } + } +} + +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos1.y += 4; + if (sprite->pos1.y > sprite->data[3]) + { + sprite->data[2]++; + sprite->data[0] = 22; + PlaySE(SE_KON); + } + } + else + { + if (sprite->data[0] == 66) + PlaySE(SE_KON2); + if (sprite->data[0] == 92) + PlaySE(SE_KON3); + if (sprite->data[0] == 107) + PlaySE(SE_KON4); + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 108) + sprite->callback = SpriteCallbackDummy; + } +} + +u16 GetInGameTradeSpeciesInfo(void) +{ + // Populates gStringVar1 with the name of the requested species and + // gStringVar2 with the name of the offered species. + // Returns the requested species. + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); + return inGameTrade->requestedSpecies; +} + +void BufferInGameTradeMonName(void) +{ + // Populates gStringVar1 with the nickname of the sent Pokemon and + // gStringVar2 with the name of the offered species. + u8 nickname[30]; + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); +} + +void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) +{ + const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; + u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); + struct MailStruct mail; + u8 metLocation = MAPSEC_IN_GAME_TRADE; + struct Pokemon * tradeMon = &gEnemyParty[0]; + u8 mailNum; + CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); + SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); + SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); + SetMonData(tradeMon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); + SetMonData(tradeMon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); + SetMonData(tradeMon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); + SetMonData(tradeMon, MON_DATA_NICKNAME, inGameTrade->nickname); + SetMonData(tradeMon, MON_DATA_OT_NAME, inGameTrade->otName); + SetMonData(tradeMon, MON_DATA_OT_GENDER, &inGameTrade->otGender); + SetMonData(tradeMon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); + SetMonData(tradeMon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); + SetMonData(tradeMon, MON_DATA_CUTE, &inGameTrade->conditions[2]); + SetMonData(tradeMon, MON_DATA_COOL, &inGameTrade->conditions[0]); + SetMonData(tradeMon, MON_DATA_SMART, &inGameTrade->conditions[3]); + SetMonData(tradeMon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); + SetMonData(tradeMon, MON_DATA_SHEEN, &inGameTrade->sheen); + SetMonData(tradeMon, MON_DATA_MET_LOCATION, &metLocation); + mailNum = 0; + if (inGameTrade->heldItem != ITEM_NONE) + { + if (ItemIsMail(inGameTrade->heldItem)) + { + GetInGameTradeMail(&mail, inGameTrade); + gLinkPartnerMail[0] = mail; + SetMonData(tradeMon, MON_DATA_MAIL, &mailNum); + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + else + { + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + } + CalculateMonStats(&gEnemyParty[0]); +} + +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) +{ + int i; + for (i = 0; i < 9; i++) + mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; + StringCopy(mail->playerName, inGameTrade->otName); + mail->trainerId[0] = inGameTrade->otId >> 24; + mail->trainerId[1] = inGameTrade->otId >> 16; + mail->trainerId[2] = inGameTrade->otId >> 8; + mail->trainerId[3] = inGameTrade->otId; + mail->species = inGameTrade->species; + mail->itemId = inGameTrade->heldItem; +} + +u16 GetTradeSpecies(void) +{ + if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) + return SPECIES_NONE; + else + return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); +} + +void CreateInGameTradePokemon(void) +{ + CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); +} + +void CB2_RunTradeAnim_LinkTrade(void) +{ + if (sub_8050F14() == TRUE) + { + DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); + TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); + sTradeData->linkData[0] = 0xABCD; + sTradeData->unk_93 = 1; + SetMainCallback2(sub_8053E1C); + } + sub_80508F4(); + sub_805383C(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8053E1C(void) +{ + u8 mpId = sub_804FFC4(); + sub_805383C(); + if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) + { + sTradeData->linkData[0] = 0xDCBA; + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_72 = 2; + sTradeData->unk_73 = 2; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From 2c2c179eb9b92d0998922cc96a115d3d1671a64b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 12:49:16 -0400 Subject: Finish trade code --- src/load_save.c | 4 +- src/save.c | 8 +- src/start_menu.c | 4 +- src/trade.c | 363 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 367 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/load_save.c b/src/load_save.c index 0a7bbbfc5..583844d17 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -146,13 +146,13 @@ void sub_804C1AC(void) gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP; } -void sub_804C1C0(void) +void SetContinueGameWarpStatusToDynamicWarp(void) { sub_8055778(0); gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP; } -void sav2_gender2_inplace_and_xFE(void) +void ClearContinueGameWarpStatus2(void) { gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP; } diff --git a/src/save.c b/src/save.c index 45f5fc6f0..30d2c22a9 100644 --- a/src/save.c +++ b/src/save.c @@ -70,8 +70,8 @@ extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen extern void sub_800AB9C(void); // link extern bool8 IsLinkTaskFinished(void); // link extern void save_serialize_map(void); // fieldmap -extern void sub_804C1C0(void); // load_save -extern void sav2_gender2_inplace_and_xFE(void); // load_save +extern void SetContinueGameWarpStatusToDynamicWarp(void); // load_save +extern void ClearContinueGameWarpStatus2(void); // load_save // Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) u16 gFirstSaveSector; @@ -872,7 +872,7 @@ void sub_80DA634(u8 taskId) } break; case 3: - sub_804C1C0(); + SetContinueGameWarpStatusToDynamicWarp(); sub_80DA3AC(); gTasks[taskId].data[0] = 4; break; @@ -894,7 +894,7 @@ void sub_80DA634(u8 taskId) gTasks[taskId].data[0] = 7; break; case 7: - sav2_gender2_inplace_and_xFE(); + ClearContinueGameWarpStatus2(); sub_800AB9C(); gTasks[taskId].data[0] = 8; break; diff --git a/src/start_menu.c b/src/start_menu.c index dddb5f44e..4a4fe52e3 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -923,14 +923,14 @@ static void task50_after_link_battle_save(u8 taskId) data[0] = 1; break; case 1: - sub_804C1C0(); + SetContinueGameWarpStatusToDynamicWarp(); sub_80DA45C(); data[0] = 2; break; case 2: if (sub_80DA4A0()) { - sav2_gender2_inplace_and_xFE(); + ClearContinueGameWarpStatus2(); data[0] = 3; } break; diff --git a/src/trade.c b/src/trade.c index f33388eed..6f35c1880 100644 --- a/src/trade.c +++ b/src/trade.c @@ -15,6 +15,12 @@ #include "mail_data.h" #include "graphics.h" #include "link.h" +#include "random.h" +#include "save.h" +#include "load_save.h" +#include "quest_log.h" +#include "field_fadetransition.h" +#include "mevent.h" #include "help_system.h" #include "link_rfu.h" #include "cable_club.h" @@ -29,6 +35,7 @@ #include "party_menu.h" #include "util.h" #include "daycare.h" +#include "script.h" #include "event_data.h" #include "battle_interface.h" #include "pokemon_summary_screen.h" @@ -137,9 +144,14 @@ struct TradeAnimationResources { /*0xF6*/ u8 unk_F6; /*0xF8*/ u16 monSpecies[2]; /*0xFC*/ u8 unk_FC[7]; - /*0x103*/ u8 filler_103[5]; + /*0x103*/ u8 filler_103[1]; + /*0x104*/ u8 textColor[3]; + /*0x107*/ u8 filler_107[1]; /*0x108*/ u8 isCableTrade; - /*0x109*/ u8 filler_109[7]; + /*0x109*/ u8 win0left; + /*0x10A*/ u8 win0top; + /*0x10B*/ u8 win0right; + /*0x10C*/ u8 win0bottom; }; enum TradeStatusMsg @@ -210,13 +222,25 @@ static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrad void CB2_RunTradeAnim_LinkTrade(void); void sub_8053E1C(void); void sub_8053E8C(void); -void LoadHeldItemIcons(void); -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +void sub_80543C4(void); +void sub_8054470(u8 taskId); void CheckPartnersMonForRibbons(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); void Task_AnimateWirelessSignal(u8 taskId); void c3_0805465C(u8 taskId); void sub_8054734(u8 taskId); +static const size_t gUnknown_8260814[] = { + sizeof(struct SaveBlock2), + sizeof(struct SaveBlock1), + sizeof(struct MapData), + 0x530, // unk + 0x34, // unk + sizeof(struct MailStruct), + sizeof(struct Pokemon), + 0x528 // unk +}; + extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; extern const struct BgTemplate gUnknown_8261F1C[4]; @@ -251,6 +275,8 @@ extern const u16 gUnknown_8269A5C[]; extern const u32 gUnknown_3379A0Bin[]; extern const u16 gUnknown_826407C[]; extern const u16 gUnknown_826601C[]; +extern const u16 gUnknown_826BB5C[]; +extern const u16 gUnknown_826BD5C[]; extern const u16 gUnknown_826BF5C[]; extern const u16 gUnknown_826701C[]; extern const u16 gUnknown_826985C[]; @@ -273,6 +299,7 @@ extern const union AffineAnimCmd *const gUnknown_826CF88[]; extern const struct SpriteTemplate gUnknown_826CF48; extern const s8 gUnknown_826D1E4[]; extern const u16 sInGameTradeMailMessages[][10]; +extern const u8 gUnknown_826D250[][2]; void sub_804C600(void) { @@ -6034,3 +6061,331 @@ void sub_8053E1C(void) BuildOamBuffer(); UpdatePaletteFade(); } + +void sub_8053E8C(void) +{ + switch (gMain.state) + { + case 0: + gMain.state++; + StringExpandPlaceholders(gStringVar4, gUnknown_841E325); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 1: + sub_800AB9C(); + gMain.state = 100; + sTradeData->timer = 0; + break; + case 100: + if (++sTradeData->timer > 180) + { + gMain.state = 101; + sTradeData->timer = 0; + } + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 101: + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 2: + gMain.state = 50; + StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffThePower2); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 50: + if (InUnionRoom()) + { + sub_8113550(18, sTradeData->monSpecies); + } + else + { + sub_8113550(12, sTradeData->monSpecies); + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + } + if (gWirelessCommType) + { + sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + } + SetContinueGameWarpStatusToDynamicWarp(); + sub_80DA3AC(); + gMain.state++; + sTradeData->timer = 0; + break; + case 51: + if (++sTradeData->timer == 5) + { + gMain.state++; + } + break; + case 52: + if (sub_80DA3D8()) + { + ClearContinueGameWarpStatus2(); + gMain.state = 4; + } + else + { + sTradeData->timer = 0; + gMain.state = 51; + } + break; + case 4: + sub_80DA40C(); + gMain.state = 40; + sTradeData->timer = 0; + break; + case 40: + if (++sTradeData->timer > 50) + { + if (GetMultiplayerId() == 0) + { + sTradeData->timer = Random() % 30; + } + else + { + sTradeData->timer = 0; + } + gMain.state = 41; + } + break; + case 41: + if (sTradeData->timer == 0) + { + sub_800AB9C(); + gMain.state = 42; + } + else + { + sTradeData->timer--; + } + break; + case 42: + if (IsLinkTaskFinished()) + { + sub_80DA434(); + gMain.state = 5; + } + break; + case 5: + if (++sTradeData->timer > 60) + { + gMain.state++; + sub_800AB9C(); + } + break; + case 6: + if (IsLinkTaskFinished()) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state ++; + } + break; + case 7: + if (!gPaletteFade.active) + { + FadeOutBGM(3); + gMain.state++; + } + break; + case 8: + if (IsBGMStopped() == TRUE) + { + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + sub_800AB9C(); + } + else + { + sub_800AAC0(); + } + gMain.state++; + } + break; + case 9: + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + if (IsLinkRfuTaskFinished()) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + } + else if (!gReceivedRemoteLinkPlayers) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + break; + } + if (!HasLinkErrorOccurred()) + { + RunTasks(); + } + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80543C4(void) +{ + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + if (gWirelessCommType != 0) + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(gMain.savedCallback); + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void DoInGameTradeScene(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_8054470, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + HelpSystem_Disable(); +} + +void sub_8054470(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTradeAnim_InGameTrade); + gFieldCallback = FieldCallback_ReturnToEventScript2; + DestroyTask(taskId); + } +} + +void CheckPartnersMonForRibbons(void) +{ + u8 nRibbons = 0; + u8 i; + for (i = 0; i < 12; i++) + { + nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); + } + if (nRibbons != 0) + FlagSet(FLAG_SYS_RIBBON_GET); +} + +void sub_80544FC(void) +{ + TradeAnimInit_LoadGfx(); +} + +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); + sTradeData->textColor[0] = 15; + sTradeData->textColor[1] = 1; + sTradeData->textColor[2] = 6; + AddTextPrinterParameterized4(windowId, 2, 0, 2, 0, 2, sTradeData->textColor, speed, str); + CopyWindowToVram(windowId, 3); +} + +void Task_AnimateWirelessSignal(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 r2 = 16 * gUnknown_826D250[data[0]][0]; + if (data[2] == 0) + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); + } + else + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); + } + if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) + PlaySE(SE_W215); + if (data[1] == gUnknown_826D250[data[0]][1]) + { + data[0]++; + data[1] = 0; + if (gUnknown_826D250[data[0]][1] == 0xFF) + DestroyTask(taskId); + } + else + data[1]++; +} + +void c3_0805465C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = sTradeData->win0right = 120; + sTradeData->win0top = 0; + sTradeData->win0bottom = 160; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + data[0]++; + sTradeData->win0left -= 5; + sTradeData->win0right += 5; + + if (sTradeData->win0left < 80) + { + DestroyTask(taskId); + } +} + +void sub_8054734(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = 80; + sTradeData->win0right = 160; + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + if (sTradeData->win0left != 120) + { + data[0]++; + sTradeData->win0left += 5; + sTradeData->win0right -= 5; + + if (sTradeData->win0left >= 116) + BlendPalettes(0x8, 0, RGB_WHITEALPHA); + } + else + { + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + } +} -- cgit v1.2.3 From f6d768d5ed9899f5814349cb232da861f85cbc60 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 14:20:32 -0400 Subject: Trade data; split off trade_scene --- src/trade.c | 2975 ++++++++++------------------------------------------- src/trade_scene.c | 2444 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2982 insertions(+), 2437 deletions(-) create mode 100644 src/trade_scene.c (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 6f35c1880..728258a50 100644 --- a/src/trade.c +++ b/src/trade.c @@ -41,6 +41,8 @@ #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "new_menu_helpers.h" +#include "trade.h" +#include "trade_scene.h" #include "constants/species.h" #include "constants/items.h" #include "constants/easy_chat.h" @@ -48,22 +50,6 @@ #include "constants/region_map.h" #include "constants/moves.h" -struct InGameTrade { - /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0C*/ u16 species; - /*0x0E*/ u8 ivs[NUM_STATS]; - /*0x14*/ u8 abilityNum; - /*0x18*/ u32 otId; - /*0x1C*/ u8 conditions[5]; - /*0x24*/ u32 personality; - /*0x28*/ u16 heldItem; - /*0x2A*/ u8 mailNum; - /*0x2B*/ u8 otName[11]; - /*0x36*/ u8 otGender; - /*0x37*/ u8 sheen; - /*0x38*/ u16 requestedSpecies; -}; - struct TradeMenuResources { /*0x0000*/ u8 unk_0; @@ -104,56 +90,6 @@ struct TradeMenuResources /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; -struct TradeAnimationResources { - /*0x00*/ struct Pokemon mon; - /*0x64*/ u32 timer; - /*0x68*/ u32 monPersonalities[2]; - /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 unk_72; - /*0x73*/ u8 unk_73; - /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 unk_88; - /*0x89*/ u8 unk_89; - /*0x8A*/ u16 unk_8A; - /*0x8C*/ u16 unk_8C; - /*0x8E*/ u8 pokePicSpriteIdxs[2]; - /*0x90*/ u8 unk_90; - /*0x91*/ u8 unk_91; - /*0x92*/ u8 unk_92; - /*0x93*/ u8 unk_93; - /*0x94*/ u16 state; - /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 pokeballSpriteId; - /*0xD3*/ u8 unk_D3; - /*0xD4*/ u16 unk_D4; - /*0xD6*/ u16 unk_D6; - /*0xD8*/ u16 unk_D8; - /*0xDA*/ u16 unk_DA; - /*0xDC*/ u16 unk_DC; - /*0xDE*/ u16 unk_DE; - /*0xE0*/ s16 bg1vofs; - /*0xE2*/ s16 bg1hofs; - /*0xE4*/ s16 bg2vofs; - /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 sXY; - /*0xEA*/ u16 unk_EA; - /*0xEC*/ u16 unk_EC; - /*0xEE*/ bool8 isLinkTrade; - /*0xF0*/ u16 tradeSpecies[2]; - /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 unk_F6; - /*0xF8*/ u16 monSpecies[2]; - /*0xFC*/ u8 unk_FC[7]; - /*0x103*/ u8 filler_103[1]; - /*0x104*/ u8 textColor[3]; - /*0x107*/ u8 filler_107[1]; - /*0x108*/ u8 isCableTrade; - /*0x109*/ u8 win0left; - /*0x10A*/ u8 win0top; - /*0x10B*/ u8 win0right; - /*0x10C*/ u8 win0bottom; -}; - enum TradeStatusMsg { TRADESTATMSG_COMMSTANDBY = 0, @@ -174,7 +110,6 @@ EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; -EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -193,6 +128,8 @@ void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); +void TradeMenuAction_Summary(u8 taskId); +void TradeMenuAction_Trade(u8 taskId); void sub_804F488(u16 a0, u8 a1); static void sub_804F4DC(void); void PrintTradeErrorOrStatusMessage(u8 str_idx); @@ -203,32 +140,6 @@ void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); -void CB2_InitTradeAnim_LinkTrade(void); -void sub_805049C(void); -void sub_80504B0(void); -void TradeAnimInit_LoadGfx(void); -void CB2_RunTradeAnim_InGameTrade(void); -void SetTradeSequenceBgGpuRegs(u8 idx); -void sub_8050DE0(void); -void sub_8050E24(void); -u8 sub_8050F14(void); -u8 sub_8050F3C(void); -u8 sub_805232C(void); -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); -void BufferInGameTradeMonName(void); -static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); -void CB2_RunTradeAnim_LinkTrade(void); -void sub_8053E1C(void); -void sub_8053E8C(void); -void sub_80543C4(void); -void sub_8054470(u8 taskId); -void CheckPartnersMonForRibbons(void); -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); -void Task_AnimateWirelessSignal(u8 taskId); -void c3_0805465C(u8 taskId); -void sub_8054734(u8 taskId); static const size_t gUnknown_8260814[] = { sizeof(struct SaveBlock2), @@ -241,65 +152,524 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -extern const u16 gUnknown_8260C30[]; -extern const u16 gUnknown_8261430[]; -extern const struct BgTemplate gUnknown_8261F1C[4]; -extern const struct WindowTemplate gUnknown_8261F2C[18]; -extern const u8 gTradeMonSpriteCoords[][2]; -extern const u8 *gUnknown_8261ECC[]; -extern const u8 gTradeUnknownSpriteCoords[][4]; -extern const struct SpriteTemplate gUnknown_8261CB0; -extern const struct SpriteTemplate gUnknown_8261CC8; -extern const u8 gJPText_Shedinja[]; -extern const u8 gUnknown_8261D08[][4][6]; -extern const u16 gTradePartyBoxTilemap[]; -extern const u16 gTradeMovesBoxTilemap[]; -extern const u8 gUnknown_8262055[][2]; -extern const u8 gUnknown_8261E5A[][12]; -extern const u8 gUnknown_8261E72[][12]; -extern const u8 gUnknown_8261F18[]; -extern const u8 gUnknown_8261EB6[]; -extern const u8 gUnknown_8261EC7[]; -extern const u8 gUnknown_841E09F[]; -extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; -extern const struct SpritePalette gUnknown_8261D00; -extern const struct SpritePalette gUnknown_8261C60; -extern const struct SpriteSheet gUnknown_8261C58; -extern const u16 gTradeGlow2PaletteAnimTable[]; -extern const struct SpriteSheet gUnknown_826CDD4; -extern const struct SpritePalette gUnknown_826CDDC; -extern const struct BgTemplate gUnknown_826D1D4[4]; -extern const struct WindowTemplate gUnknown_826D1BC[]; -extern const u16 gUnknown_826AA5C[]; -extern const u16 gUnknown_8269A5C[]; -extern const u32 gUnknown_3379A0Bin[]; -extern const u16 gUnknown_826407C[]; -extern const u16 gUnknown_826601C[]; -extern const u16 gUnknown_826BB5C[]; -extern const u16 gUnknown_826BD5C[]; -extern const u16 gUnknown_826BF5C[]; -extern const u16 gUnknown_826701C[]; -extern const u16 gUnknown_826985C[]; -extern const u16 gUnknown_826995C[]; -extern const u32 gWirelessSignal4bpp[]; -extern const u32 gUnknown_826C60C[]; -extern const struct SpriteSheet gUnknown_826CE2C; -extern const struct SpriteSheet gUnknown_826CE7C; -extern const struct SpriteSheet gUnknown_826CEB0; -extern const struct SpriteSheet gUnknown_826CF28; -extern const struct SpritePalette gUnknown_826CE34; -extern const struct SpritePalette gUnknown_826CE3C; -extern const struct InGameTrade gInGameTrades[]; -extern const struct SpriteTemplate sTradePokeballSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CF30; -extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CE44; -extern const struct SpriteTemplate sGlowBallSpriteTemplate; -extern const union AffineAnimCmd *const gUnknown_826CF88[]; -extern const struct SpriteTemplate gUnknown_826CF48; -extern const s8 gUnknown_826D1E4[]; -extern const u16 sInGameTradeMailMessages[][10]; -extern const u8 gUnknown_826D250[][2]; +const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); +const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); +const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); +const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); + +const struct OamData gOamData_8261C30 = { + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .priority = 1 +}; + +const struct OamData gOamData_8261C38 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_8261C40[] = { + ANIMCMD_FRAME(0x00, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C48[] = { + ANIMCMD_FRAME(0x20, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8261C50[] = { + gSpriteAnim_8261C40, + gSpriteAnim_8261C48 +}; + +const struct SpriteSheet gUnknown_8261C58 = { + gUnknown_8E9E1DC, + 0x800, + 300 +}; + +const struct SpritePalette gUnknown_8261C60 = { + gUnknown_8E9CF3C, + 2345 +}; + + +const union AnimCmd gSpriteAnim_8261C68[] = { + ANIMCMD_FRAME(0x00, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C70[] = { + ANIMCMD_FRAME(0x08, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C78[] = { + ANIMCMD_FRAME(0x10, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C80[] = { + ANIMCMD_FRAME(0x18, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C88[] = { + ANIMCMD_FRAME(0x20, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C90[] = { + ANIMCMD_FRAME(0x28, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8261C98[] = { + gSpriteAnim_8261C68, + gSpriteAnim_8261C70, + gSpriteAnim_8261C78, + gSpriteAnim_8261C80, + gSpriteAnim_8261C88, + gSpriteAnim_8261C90 +}; + +const struct SpriteTemplate gUnknown_8261CB0 = { + .tileTag = 300, + .paletteTag = 2345, + .oam = &gOamData_8261C38, + .anims = gSpriteAnimTable_8261C50, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct SpriteTemplate gUnknown_8261CC8 = { + .tileTag = 200, + .paletteTag = 4925, + .oam = &gOamData_8261C30, + .anims = gSpriteAnimTable_8261C98, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); + +const struct SpritePalette gUnknown_8261D00 = { + gUnknown_8261CE0, + 4925 +}; + +#define DIR_UP 0 +#define DIR_DOWN 1 +#define DIR_LEFT 2 +#define DIR_RIGHT 3 + +const u8 sCursorMoveDestinations[][4][6] = { + // Player's party + [0] = { + [DIR_UP] = { 4, 2, 12, 12, 0, 0}, + [DIR_DOWN] = { 2, 4, 12, 12, 0, 0}, + [DIR_LEFT] = { 7, 6, 1, 0, 0, 0}, + [DIR_RIGHT] = { 1, 6, 7, 0, 0, 0} + }, + [1] = { + [DIR_UP] = { 5, 3, 12, 12, 0, 0}, + [DIR_DOWN] = { 3, 5, 12, 12, 0, 0}, + [DIR_LEFT] = { 0, 7, 6, 1, 0, 0}, + [DIR_RIGHT] = { 6, 7, 0, 1, 0, 0} + }, + [2] = { + [DIR_UP] = { 0, 0, 0, 0, 0, 0}, + [DIR_DOWN] = { 4, 0, 0, 0, 0, 0}, + [DIR_LEFT] = { 9, 8, 7, 6, 0, 0}, + [DIR_RIGHT] = { 3, 1, 0, 0, 0, 0} + }, + [3] = { + [DIR_UP] = { 1, 1, 1, 1, 0, 0}, + [DIR_DOWN] = { 5, 1, 1, 1, 0, 0}, + [DIR_LEFT] = { 2, 9, 8, 7, 0, 0}, + [DIR_RIGHT] = { 8, 9, 6, 6, 0, 0} + }, + [4] = { + [DIR_UP] = { 2, 2, 2, 2, 0, 0}, + [DIR_DOWN] = { 0, 0, 0, 0, 0, 0}, + [DIR_LEFT] = {11, 10, 9, 8, 7, 6}, + [DIR_RIGHT] = { 5, 3, 1, 0, 0, 0} + }, + [5] = { + [DIR_UP] = { 3, 3, 3, 3, 0, 0}, + [DIR_DOWN] = { 1, 1, 1, 1, 0, 0}, + [DIR_LEFT] = { 4, 4, 4, 4, 0, 0}, + [DIR_RIGHT] = {10, 8, 6, 0, 0, 0} + }, + // Partner's party + [6] = { + [DIR_UP] = {10, 8, 12, 0, 0, 0}, + [DIR_DOWN] = { 8, 10, 12, 0, 0, 0}, + [DIR_LEFT] = { 1, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 7, 0, 1, 0, 0, 0} + }, + [7] = { + [DIR_UP] = {12, 0, 0, 0, 0, 0}, + [DIR_DOWN] = { 9, 12, 0, 0, 0, 0}, + [DIR_LEFT] = { 6, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 0, 0, 0, 0, 0, 0} + }, + [8] = { + [DIR_UP] = { 6, 0, 0, 0, 0, 0}, + [DIR_DOWN] = {10, 6, 0, 0, 0, 0}, + [DIR_LEFT] = { 3, 2, 1, 0, 0, 0}, + [DIR_RIGHT] = { 9, 7, 0, 0, 0, 0} + }, + [9] = { + [DIR_UP] = { 7, 0, 0, 0, 0, 0}, + [DIR_DOWN] = {11, 12, 0, 0, 0, 0}, + [DIR_LEFT] = { 8, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 2, 1, 0, 0, 0, 0} + }, + [10] = { + [DIR_UP] = { 8, 0, 0, 0, 0, 0}, + [DIR_DOWN] = { 6, 0, 0, 0, 0, 0}, + [DIR_LEFT] = { 5, 4, 3, 2, 1, 0}, + [DIR_RIGHT] = {11, 9, 7, 0, 0, 0} + }, + [11] = { + [DIR_UP] = { 9, 0, 0, 0, 0, 0}, + [DIR_DOWN] = {12, 0, 0, 0, 0, 0}, + [DIR_LEFT] = {10, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 4, 2, 0, 0, 0, 0} + }, + // Cancel + [12] = { + [DIR_UP] = {11, 9, 7, 6, 0, 0}, + [DIR_DOWN] = { 7, 6, 0, 0, 0, 0}, + [DIR_LEFT] = {12, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = {12, 0, 0, 0, 0, 0} + } +}; + +const u8 gTradeMonSpriteCoords[][2] = { + {0x01, 0x05}, + {0x08, 0x05}, + {0x01, 0x0a}, + {0x08, 0x0a}, + {0x01, 0x0f}, + {0x08, 0x0f}, + + {0x10, 0x05}, + {0x17, 0x05}, + {0x10, 0x0a}, + {0x17, 0x0a}, + {0x10, 0x0f}, + {0x17, 0x0f}, + + {0x17, 0x12}, +}; + +const u8 gUnknown_8261E5A[][2][6][2] = { + { + { + {0x05, 0x04}, + {0x0c, 0x04}, + {0x05, 0x09}, + {0x0c, 0x09}, + {0x05, 0x0e}, + {0x0c, 0x0e} + }, { + {0x14, 0x04}, + {0x1b, 0x04}, + {0x14, 0x09}, + {0x1b, 0x09}, + {0x14, 0x0e}, + {0x1b, 0x0e} + } + }, { + { + {0x01, 0x03}, + {0x08, 0x03}, + {0x01, 0x08}, + {0x08, 0x08}, + {0x01, 0x0d}, + {0x08, 0x0d} + }, { + {0x10, 0x03}, + {0x17, 0x03}, + {0x10, 0x08}, + {0x17, 0x08}, + {0x10, 0x0d}, + {0x17, 0x0d} + } + } +}; + +const u8 gTradeUnknownSpriteCoords[][4] = { + {0x3c, 0x09, 0xb4, 0x09}, + {0x30, 0x09, 0xa8, 0x09} +}; + +const u8 gUnknown_8261E92[] = { + 0x00, 0x0e, 0x0f, 0x1d, + 0x03, 0x05, 0x03, 0x07, + 0x12, 0x05, 0x12, 0x07, + 0x08, 0x07, 0x16, 0x0c, + 0x08, 0x07, 0x16, 0x0c, + 0x06, 0x07, 0x18, 0x0c, + 0x06, 0x07, 0x18, 0x0c, + 0x08, 0x07, 0x16, 0x0c, + 0x07, 0x07, 0x17, 0x0c +}; + +const u8 gUnknown_8261EB6[] = _(""); +const u8 gUnknown_8261EB7[] = _("{COLOR DARK_GREY}{HIGHLIGHT TRANSPARENT}{SHADOW RED}"); +const u8 gText_MaleSymbol4[] = _("♂"); +const u8 gText_FemaleSymbol4[] = _("♀"); +const u8 gText_GenderlessSymbol[] = _(""); +const u8 gUnknown_8261EC6[] = _(""); +const u8 gUnknown_8261EC7[] = _("\n"); +const u8 gUnknown_8261EC9[] = _("/"); + +const u8 *const gUnknown_8261ECC[] = { + gUnknown_841E0B9, + gUnknown_841E0C0, + gUnknown_841E0D2, + gUnknown_841E0DA, + gUnknown_841E0E0, + gUnknown_841E0EE +}; + +const struct MenuAction gUnknown_8261EE4[] = { + {gUnknown_841E10A, { .void_u8 = TradeMenuAction_Summary }}, + {gUnknown_841E112, { .void_u8 = TradeMenuAction_Trade }} +}; + +const u8 *const sTradeErrorOrStatusMessagePtrs[] = { + gUnknown_841E118, // Communication standby + gUnknown_841E145, // The trade has been canceled. + gUnknown_841E16B, // That's your only POKéMON for battle + gUnknown_8417094, // That's your only POKéMON for battle + gUnknown_841E199, // Waiting for your friend to finish + gUnknown_841E1C5, // Your friend wants to trade POKéMON + gUnknown_84170BC, // That POKéMON can't be traded now + gUnknown_84170E0, // An EGG can't be traded now + gUnknown_84170FC // The other TRAINER's POKéMON can't be traded now +}; + +const u8 gUnknown_8261F18[] = { 0, 1, 2 }; + +const struct BgTemplate gUnknown_8261F1C[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +const struct WindowTemplate gUnknown_8261F2C[] = { + { + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 7, + .width = 22, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x01e + }, { + .bg = 0, + .tilemapLeft = 17, + .tilemapTop = 15, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x076 + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0a6 + }, { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0b6 + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0c6 + }, { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0d6 + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0e6 + }, { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0f6 + }, { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x106 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x116 + }, { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x126 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x136 + }, { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x146 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x156 + }, { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 5, + .width = 14, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x166 + }, { + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 8, + .width = 11, + .height = 8, + .paletteNum = 15, + .baseBlock = 0x182 + }, { + .bg = 0, + .tilemapLeft = 17, + .tilemapTop = 5, + .width = 14, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x1da + }, { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 8, + .width = 11, + .height = 8, + .paletteNum = 15, + .baseBlock = 0x1f6 + }, DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gUnknown_8261FC4 = { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 13, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x24e +}; + +const u8 gUnknown_8261FCC[][13] = { + _("かいめの そうしん"), + _("かいめの じゅしん"), + _("ポケモンアイコンセット"), + _("OBJテキストセット"), + _("セルセット"), + _("OBJテキストADD"), + _("システムメッセージADD"), + _("はいけいセット") +}; + +const u8 gJPText_Shedinja[] = _("ヌケニン"); +const u8 gUnknown_8262039[] = _("こうかんせいりつ "); +const u8 gUnknown_8262047[] = _("だめだたらしいよ "); + +const u8 gUnknown_8262055[][2] = { + { 4, 3}, + {19, 3} +}; void sub_804C600(void) { @@ -320,7 +690,7 @@ void sub_804C600(void) { DeactivateAllTextPrinters(); gUnknown_3000E78 = 590; // ? - for (i = 0; i < NELEMS(gUnknown_8261F2C); i++) + for (i = 0; i < NELEMS(gUnknown_8261F2C) - 1; i++) { ClearWindowTilemap(i); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -2882,11 +3252,11 @@ u8 sub_804E028(u8 oldPosition, u8 direction) int i; u8 newPosition = 0; - for (i = 0; i < PARTY_SIZE; i++) + for (i = 0; i < 6; i++) { - if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) + if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[sCursorMoveDestinations[oldPosition][direction][i]] == TRUE) { - newPosition = gUnknown_8261D08[oldPosition][direction][i]; + newPosition = sCursorMoveDestinations[oldPosition][direction][i]; break; } } @@ -2937,9 +3307,6 @@ void sub_804E134(void) } } -extern const struct MenuAction gUnknown_8261EE4[]; -extern const struct WindowTemplate gUnknown_8261FC4; - void sub_804E194(void) { int i; @@ -3554,13 +3921,16 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) void sub_804F284(u8 whichParty) { s32 i; - const u8 *r5; - const u8 *r4; for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { - r5 = gUnknown_8261E5A[whichParty]; - r4 = gUnknown_8261E72[whichParty]; - sub_804F08C(whichParty, i, r5[2 * i + 0], r5[2 * i + 1], r4[2 * i + 0], r4[2 * i + 1]); + sub_804F08C( + whichParty, + i, + gUnknown_8261E5A[0][whichParty][i][0], + gUnknown_8261E5A[0][whichParty][i][1], + gUnknown_8261E5A[1][whichParty][i][0], + gUnknown_8261E5A[1][whichParty][i][1] + ); } } #else @@ -3584,7 +3954,7 @@ void sub_804F284(u8 whichParty) "\tldr r1, _0804F2E0 @ =gUnknown_8261E5A\n" "\tlsls r0, 2\n" "\tadds r5, r0, r1\n" - "\tldr r1, _0804F2E4 @ =gUnknown_8261E72\n" + "\tldr r1, _0804F2E4 @ =gUnknown_8261E5A+24\n" "\tadds r4, r0, r1\n" "_0804F2AA:\n" "\tlsls r1, r7, 24\n" @@ -3615,7 +3985,7 @@ void sub_804F284(u8 whichParty) "\t.align 2, 0\n" "_0804F2DC: .4byte sTradeMenuResourcesPtr\n" "_0804F2E0: .4byte gUnknown_8261E5A\n" - "_0804F2E4: .4byte gUnknown_8261E72"); + "_0804F2E4: .4byte gUnknown_8261E5A+24"); } #endif //NONMATCHING @@ -3650,13 +4020,13 @@ void sub_804F3C8(u8 whichParty) sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } -void sub_804F440(void) +void TradeMenuAction_Summary(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -void sub_804F464(void) +void TradeMenuAction_Trade(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); @@ -4120,2272 +4490,3 @@ int Trade_CanTradeSelectedMon(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 return 0; } - -// Sprite callback for link cable trade glow -void SpriteCB_TradeGlowCable(struct Sprite * sprite) -{ - sprite->data[0]++; - if (sprite->data[0] == 10) - { - PlaySE(SE_BOWA); - sprite->data[0] = 0; - } -} - -// Sprite callback for wireless trade glow -void SpriteCB_TradeGlowWireless(struct Sprite * sprite) -{ - if (!sprite->invisible) - { - sprite->data[0]++; - if (sprite->data[0] == 10) - { - PlaySE(SE_W207B); - sprite->data[0] = 0; - } - } -} - -// Palette flash for trade glow core -void SpriteCB_TradeGlowCore(struct Sprite * sprite) -{ - if (sprite->data[1] == 0) - { - sprite->data[0]++; - if (sprite->data[0] == 12) - sprite->data[0] = 0; - LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); - } -} - -void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) -{ - sprite->data[0]++; - sprite->pos2.y++; - if (sprite->data[0] == 10) - DestroySprite(sprite); -} - -void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) -{ - sprite->data[0]++; - sprite->pos2.y--; - if (sprite->data[0] == 10) - DestroySprite(sprite); -} - -void sub_804FE00(struct Sprite * sprite) -{ - sprite->data[0]++; - if (sprite->data[0] == 15) - { - PlaySE(SE_W107); - sprite->data[0] = 0; - } -} - -void SetTradeBGAffine(void) -{ - struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); - SetGpuReg(REG_OFFSET_BG2PA, affine.pa); - SetGpuReg(REG_OFFSET_BG2PB, affine.pb); - SetGpuReg(REG_OFFSET_BG2PC, affine.pc); - SetGpuReg(REG_OFFSET_BG2PD, affine.pd); - SetGpuReg(REG_OFFSET_BG2X, affine.dx); - SetGpuReg(REG_OFFSET_BG2Y, affine.dy); -} - -static void TradeAnim_UpdateBgRegs(void) -{ - u16 dispcnt; - - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); - - dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); - if ((dispcnt & 7) == DISPCNT_MODE_0) - { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); - } - else - { - SetTradeBGAffine(); - } -} - -static void VBlankCB_TradeAnim(void) -{ - TradeAnim_UpdateBgRegs(); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_804FF24(void) -{ - sTradeData->unk_8A = 0; - sTradeData->unk_88 = 0; - sTradeData->unk_89 = 0; -} - -void sub_804FF4C(void) -{ - if (sTradeData->unk_88 == sTradeData->unk_89) - sTradeData->unk_8A++; - else - sTradeData->unk_8A = 0; - - if (sTradeData->unk_8A > 300) - { - CloseLink(); - SetMainCallback2(CB2_LinkError); - sTradeData->unk_8A = 0; - sTradeData->unk_89 = 0; - sTradeData->unk_88 = 0; - } - - sTradeData->unk_89 = sTradeData->unk_88; -} - -u32 sub_804FFC4(void) -{ - if (gReceivedRemoteLinkPlayers) - return GetMultiplayerId(); - return 0; -} - -void sub_804FFE4(u8 whichParty, u8 a1) -{ - int pos = 0; - struct Pokemon *mon = NULL; - u16 species; - u32 personality; - - if (whichParty == 0) - { - mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; - pos = 1; - } - - if (whichParty == 1) - { - mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; - pos = 3; - } - - switch (a1) - { - case 0: - species = GetMonData(mon, MON_DATA_SPECIES2); - personality = GetMonData(mon, MON_DATA_PERSONALITY); - - if (whichParty == 0) - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); - else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); - - LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeData->tradeSpecies[whichParty] = species; - sTradeData->monPersonalities[whichParty] = personality; - break; - case 1: - SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; - break; - } -} - -void CB2_InitTradeAnim_LinkTrade(void) -{ - switch (gMain.state) - { - case 0: - if (!gReceivedRemoteLinkPlayers) - { - gLinkType = 0x1144; - CloseLink(); - } - sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); - AllocateMonSpritesGfx(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_TradeAnim); - TradeAnimInit_LoadGfx(); - sub_804FF24(); - gMain.state++; - sTradeData->unk_8C = 0; - sTradeData->state = 0; - sTradeData->isLinkTrade = TRUE; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; - sTradeData->unk_D8 = 0; - sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; - sTradeData->sXY = 256; - sTradeData->unk_EC = 0; - break; - case 1: - if (!gReceivedRemoteLinkPlayers) - { - sTradeData->isCableTrade = TRUE; - OpenLink(); - gMain.state++; - sTradeData->timer = 0; - } - else - { - gMain.state = 4; - } - break; - case 2: - sTradeData->timer++; - if (sTradeData->timer > 60) - { - sTradeData->timer = 0; - gMain.state++; - } - break; - case 3: - if (IsLinkMaster()) - { - if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) - { - sTradeData->timer++; - if (sTradeData->timer > 30) - { - CheckShouldAdvanceLinkState(); - gMain.state++; - } - } - else - { - sub_804FF4C(); - } - } - else - { - gMain.state++; - } - break; - case 4: - sub_804FF4C(); - if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) - { - gMain.state++; - } - break; - case 5: - sTradeData->unk_72 = 0; - sTradeData->unk_73 = 0; - sTradeData->unk_93 = 0; - sub_804FFE4(0, 0); - gMain.state++; - break; - case 6: - sub_804FFE4(0, 1); - gMain.state++; - break; - case 7: - sub_804FFE4(1, 0); - gMain.state++; - break; - case 8: - sub_804FFE4(1, 1); - sub_80504B0(); - gMain.state++; - break; - case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); - gMain.state++; - break; - case 10: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - ShowBg(0); - sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); - sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); - gMain.state++; - break; - case 11: - sub_805049C(); - sub_8050E24(); - gMain.state++; - break; - case 12: - if (!gPaletteFade.active) - { - if (gWirelessCommType != 0) - { - LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(0, 0); - } - SetMainCallback2(CB2_RunTradeAnim_LinkTrade); - } - break; - } - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_805049C(void) -{ - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(0); -} - -void sub_80504B0(void) -{ - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - PutWindowTilemap(0); - CopyWindowToVram(0, 3); -} - -void TradeAnimInit_LoadGfx(void) -{ - SetGpuReg(REG_OFFSET_DISPCNT, 0); - ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); - DeactivateAllTextPrinters(); - // Doing the graphics load... - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); - InitWindows(gUnknown_826D1BC); - // ... and doing the same load again - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); -} - -void CB2_InitTradeAnim_InGameTrade(void) -{ - u8 otName[11]; - - switch (gMain.state) - { - case 0: - gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; - gSelectedTradeMonPositions[1] = 6; - StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); - GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); - StringCopy(gLinkPlayers[1].name, otName); - sTradeData = AllocZeroed(sizeof(*sTradeData)); - AllocateMonSpritesGfx(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_TradeAnim); - TradeAnimInit_LoadGfx(); - sTradeData->isLinkTrade = FALSE; - sTradeData->unk_8C = 0; - sTradeData->state = 0; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; - sTradeData->unk_D8 = 0; - sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; - sTradeData->sXY = 256; - sTradeData->unk_EC = 0; - sTradeData->timer = 0; - gMain.state = 5; - break; - case 5: - sub_804FFE4(0, 0); - gMain.state++; - break; - case 6: - sub_804FFE4(0, 1); - gMain.state++; - break; - case 7: - sub_804FFE4(1, 0); - ShowBg(0); - gMain.state++; - break; - case 8: - sub_804FFE4(1, 1); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - PutWindowTilemap(0); - CopyWindowToVram(0, 3); - gMain.state++; - break; - case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); - gMain.state++; - break; - case 10: - ShowBg(0); - gMain.state++; - break; - case 11: - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(0); - sub_8050E24(); - gMain.state++; - break; - case 12: - SetMainCallback2(CB2_RunTradeAnim_InGameTrade); - break; - } - - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void ReceivedMonSetPokedexFlags(u8 partyIdx) -{ - struct Pokemon *mon = &gPlayerParty[partyIdx]; - - if (!GetMonData(mon, MON_DATA_IS_EGG)) - { - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - species = SpeciesToNationalPokedexNum(species); - GetSetPokedexFlag(species, FLAG_SET_SEEN); - HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality); - } -} - -static void RS_TryEnableNationalPokedex(void) -{ - u8 mpId = GetMultiplayerId(); - // Originally in Ruby but commented out - /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) - EnableNationalPokedex();*/ -} - -void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) -{ - u8 friendship; - - // Get whether the offered Pokemon have mail - struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; - u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); - - struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; - u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); - - // The mail attached to the sent Pokemon no longer exists in your file. - if (playerMail != 0xFF) - ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); - - // This is where the actual trade happens!! - sTradeData->mon = *playerMon; - *playerMon = *partnerMon; - *partnerMon = sTradeData->mon; - - // By default, a Pokemon received from a trade will have 70 Friendship. - friendship = 70; - if (!GetMonData(playerMon, MON_DATA_IS_EGG)) - SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); - - // Associate your partner's mail with the Pokemon they sent over. - if (partnerMail != 0xFF) - GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); - - ReceivedMonSetPokedexFlags(playerPartyIdx); - if (gReceivedRemoteLinkPlayers) - RS_TryEnableNationalPokedex(); -} - -void sub_80508F4(void) -{ - switch (sTradeData->unk_93) - { - case 1: - if (IsLinkTaskFinished()) - { - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_93++; - } - case 2: - sTradeData->unk_93 = 0; - break; - } -} - -void CB2_RunTradeAnim_InGameTrade(void) -{ - sub_8050F14(); - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void SetTradeSequenceBgGpuRegs(u8 state) -{ - switch (state) - { - case 0: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0xB4; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 0x10, 0x60); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); - break; - case 1: - sTradeData->bg1hofs = 0; - sTradeData->bg1vofs = 0x15C; - SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); - SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeData->isCableTrade) - { - DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); - } - else - { - DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); - } - DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - break; - case 2: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - if (sTradeData->isCableTrade == FALSE) - { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); - BlendPalettes(0x000000008, 0x10, RGB_BLACK); - } - else - { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); - BlendPalettes(0x00000001, 0x10, RGB_BLACK); - } - break; - case 3: - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); - LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); - sTradeData->bg2vofs = 0x50; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - break; - case 4: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; - sTradeData->sXY = 0x20; - sTradeData->unk_EA = 0x400; - sTradeData->unk_EC = 0; - DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) - { - DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - else - { - DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - break; - case 5: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - break; - case 6: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; - sTradeData->sXY = 0x100; - sTradeData->unk_EA = 0x80; - sTradeData->unk_DC = 0x78; - sTradeData->unk_DE = 0x50; - sTradeData->unk_EC = 0; - DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) - { - DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - else - { - DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - break; - case 7: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0; - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 0x10, 0x60); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); - break; - } -} - -void sub_8050DE0(void) -{ - LoadSpriteSheet(&gUnknown_826CE2C); - LoadSpriteSheet(&gUnknown_826CE7C); - LoadSpriteSheet(&gUnknown_826CEB0); - LoadSpriteSheet(&gUnknown_826CF28); - LoadSpritePalette(&gUnknown_826CE34); - LoadSpritePalette(&gUnknown_826CE3C); -} - -void sub_8050E24(void) -{ - u8 nickname[20]; - u8 mpId; - const struct InGameTrade * inGameTrade; - if (sTradeData->isLinkTrade) - { - mpId = GetMultiplayerId(); - StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); - GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar3, nickname); - GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar2, nickname); - } - else - { - inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; - StringCopy(gStringVar1, inGameTrade->otName); - StringCopy10(gStringVar3, inGameTrade->nickname); - GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar2, nickname); - } -} - -bool8 sub_8050F14(void) -{ - if (sTradeData->isCableTrade) - return sub_8050F3C(); - else - return sub_805232C(); -} - -bool8 sub_8050F3C(void) -{ - u16 evoTarget; - - switch (sTradeData->state) - { - case 0: - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); - PlayNewMapMusic(MUS_SHINKA); - break; - case 1: - if (sTradeData->bg2hofs > 0) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; - sTradeData->bg2hofs -= 3; - } - else - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = 10; - } - break; - case 10: - StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - - if (sTradeData->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[0], 0); - } - - sTradeData->state = 11; - sTradeData->timer = 0; - break; - case 11: - if (++sTradeData->timer == 80) - { - sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); - DrawTextOnTradeWindow(0, gStringVar4, 0); - } - break; - case 12: - if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) - { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; - DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); - sTradeData->state++; - } - break; - case 13: - // The game waits here for the sprite to finish its animation sequence. - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 20; - break; - case 20: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(4); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); - sTradeData->state++; - } - break; - case 21: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 22: - if (!gPaletteFade.active) - { - sTradeData->state = 23; - } - break; - case 23: - if (sTradeData->unk_EA > 0x100) - { - sTradeData->unk_EA -= 0x34; - } - else - { - SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; - sTradeData->state++; - sTradeData->timer = 0; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 24: - if (++sTradeData->timer > 20) - { - SetTradeBGAffine(); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); - sTradeData->state++; - } - break; - case 25: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | - BLDCNT_TGT2_BG1 | - BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); - sTradeData->state++; - } - break; - case 26: - if (--sTradeData->bg1vofs == 316) - { - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328) - { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - } - break; - case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - sTradeData->state++; - break; - case 28: - if ((sTradeData->bg1vofs -= 2) == 166) - { - sTradeData->state = 200; - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) - { - sTradeData->state = 29; - } - break; - case 29: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state = 30; - break; - case 30: - if (!gPaletteFade.active) - { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; - } - break; - case 31: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); - sTradeData->state++; - break; - case 32: - if (!gPaletteFade.active) - { - PlaySE(SE_TK_WARPOUT); - sTradeData->state++; - } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - break; - case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) - { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; - sTradeData->state++; - } - break; - case 34: - BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 35: - BlendPalettes(0x1, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 36: - BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 37: - if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; - gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - else - { - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; - sTradeData->state++; - break; - case 38: - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) - { - PlaySE(SE_TK_WARPIN); - } - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) - { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - BlendPalettes(0x1, 0, RGB_WHITEALPHA); - } - break; - case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - } - break; - case 40: - if (!gPaletteFade.active) - { - sTradeData->state++; - SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - } - break; - case 41: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 42: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 43: - gSprites[sTradeData->unk_90].pos2.y += 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) - { - sTradeData->state++; - } - break; - case 44: - if ((sTradeData->bg1vofs += 2) > 316) - { - sTradeData->bg1vofs = 316; - sTradeData->state++; - } - break; - case 45: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 46: - if (++sTradeData->timer == 10) - { - sTradeData->state++; - } - break; - case 47: - if (++sTradeData->bg1vofs > 348) - { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) - { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; - } - break; - case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); - sTradeData->state = 50; - break; - case 50: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; - PlaySE(SE_W028); - } - break; - case 51: - if (sTradeData->unk_EA < 0x400) - { - sTradeData->unk_EA += 0x34; - } - else - { - sTradeData->unk_EA = 0x400; - sTradeData->state++; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 52: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 60; - break; - - case 60: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(7); - gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; - } - break; - case 61: - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 62: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); - sTradeData->state++; - } - break; - case 66: - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; - StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); - sTradeData->state++; - break; - case 67: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - StringExpandPlaceholders(gStringVar4, gText_XSentOverY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = 167; - sTradeData->timer = 0; - break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++sTradeData->timer > 60) - { - if (sTradeData->tradeSpecies[1] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[1], 0); - } - sTradeData->state = 267; - sTradeData->timer = 0; - } - break; - case 267: - if (IsCryFinished()) - { - sTradeData->state = 68; - } - break; - case 68: - if (++sTradeData->timer == 10) - { - PlayFanfare(MUS_FANFA5); - } - if (sTradeData->timer == 250) - { - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; - } - break; - case 69: - if (++sTradeData->timer == 60) - { - sTradeData->state++; - } - break; - case 70: - CheckPartnersMonForRibbons(); - sTradeData->state++; - break; - case 71: - if (sTradeData->isLinkTrade) - { - return TRUE; - } - else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } - break; - case 72: // Only if in-game trade - TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - } - sTradeData->state++; - break; - case 73: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state++; - break; - case 74: - if (!gPaletteFade.active) - { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); - } - SetMainCallback2(CB2_ReturnToField); - BufferInGameTradeMonName(); - HelpSystem_Enable(); - } - break; - } - return FALSE; -} - -bool8 sub_805232C(void) -{ - u16 evoTarget; - - switch (sTradeData->state) - { - case 0: - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); - PlayNewMapMusic(MUS_SHINKA); - break; - case 1: - if (sTradeData->bg2hofs > 0) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; - sTradeData->bg2hofs -= 3; - } - else - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = 10; - } - break; - case 10: - StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - - if (sTradeData->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[0], 0); - } - - sTradeData->state = 11; - sTradeData->timer = 0; - break; - case 11: - if (++sTradeData->timer == 80) - { - sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); - DrawTextOnTradeWindow(0, gStringVar4, 0); - } - break; - case 12: - if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) - { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; - DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); - sTradeData->state++; - } - break; - case 13: - // The game waits here for the sprite to finish its animation sequence. - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 20; - break; - case 20: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(4); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); - sTradeData->state++; - } - break; - case 21: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 22: - if (!gPaletteFade.active) - { - sTradeData->state = 23; - } - break; - case 23: - if (sTradeData->unk_EA > 0x100) - { - sTradeData->unk_EA -= 0x34; - } - else - { - SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; - sTradeData->state = 124; - sTradeData->timer = 0; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 124: - if (++sTradeData->timer > 20) - { - SetTradeSequenceBgGpuRegs(3); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); - sTradeData->state++; - } - break; - case 125: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | - BLDCNT_TGT1_OBJ | - BLDCNT_EFFECT_BLEND | - BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); - CreateTask(Task_AnimateWirelessSignal, 5); - sTradeData->state++; - } - break; - case 126: - if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - { - sTradeData->state = 26; - } - break; - case 26: - if (--sTradeData->bg1vofs == 316) - { - sTradeData->state++; - } - break; - case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - sTradeData->state++; - break; - case 28: - if ((sTradeData->bg1vofs -= 3) == 166) - { - sTradeData->state = 200; - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) - { - sTradeData->state = 29; - } - break; - case 29: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state = 30; - break; - case 30: - if (!gPaletteFade.active) - { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; - } - break; - case 31: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); - sTradeData->state++; - break; - case 32: - if (!gPaletteFade.active) - { - PlaySE(SE_TK_WARPOUT); - sTradeData->state++; - } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - break; - case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) - { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; - sTradeData->state++; - CreateTask(c3_0805465C, 5); - } - break; - case 34: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 35: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 36: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 37: - if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; - gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - else - { - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 40; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 200; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; - sTradeData->state++; - break; - case 38: - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) - { - PlaySE(SE_TK_WARPIN); - } - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) - { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(sub_8054734, 5); - } - break; - case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - } - break; - case 40: - if (!gPaletteFade.active) - { - sTradeData->state++; - SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - SetTradeSequenceBgGpuRegs(3); - sTradeData->bg2vofs = 412; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - } - break; - case 41: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 42: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 43: - gSprites[sTradeData->unk_90].pos2.y += 4; - gSprites[sTradeData->unk_91].pos2.y += 4; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) - { - sTradeData->state = 144; - sTradeData->timer = 0; - } - break; - case 144: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - sTradeData->bg1vofs += 3; - sTradeData->bg2vofs += 3; - if (++sTradeData->timer == 10) - { - u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); - gTasks[taskId].data[2] = TRUE; - } - if (sTradeData->bg1vofs > 316) - { - sTradeData->bg1vofs = 316; - sTradeData->state++; - } - break; - case 145: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 146: - if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - { - sTradeData->state = 46; - sTradeData->timer = 0; - } - break; - case 46: - if (++sTradeData->timer == 10) - { - sTradeData->state++; - } - break; - case 47: - if (++sTradeData->bg1vofs > 348) - { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } - break; - case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); - sTradeData->state = 50; - break; - case 50: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; - PlaySE(SE_W028); - } - break; - case 51: - if (sTradeData->unk_EA < 0x400) - { - sTradeData->unk_EA += 0x34; - } - else - { - sTradeData->unk_EA = 0x400; - sTradeData->state++; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 52: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 60; - break; - - case 60: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(7); - gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; - } - break; - case 61: - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 62: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); - sTradeData->state++; - } - break; - case 66: - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; - StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); - sTradeData->state++; - break; - case 67: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - StringExpandPlaceholders(gStringVar4, gText_XSentOverY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = 167; - sTradeData->timer = 0; - break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++sTradeData->timer > 60) - { - if (sTradeData->tradeSpecies[1] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[1], 0); - } - sTradeData->state = 267; - sTradeData->timer = 0; - } - break; - case 267: - if (IsCryFinished()) - { - sTradeData->state = 68; - } - break; - case 68: - if (++sTradeData->timer == 10) - { - PlayFanfare(MUS_FANFA5); - } - if (sTradeData->timer == 250) - { - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; - } - break; - case 69: - if (++sTradeData->timer == 60) - { - sTradeData->state++; - } - break; - case 70: - CheckPartnersMonForRibbons(); - sTradeData->state++; - break; - case 71: - if (sTradeData->isLinkTrade) - { - return TRUE; - } - else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } - break; - case 72: // Only if in-game trade - TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - } - sTradeData->state++; - break; - case 73: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state++; - break; - case 74: - if (!gPaletteFade.active) - { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); - } - SetMainCallback2(CB2_ReturnToField); - BufferInGameTradeMonName(); - HelpSystem_Enable(); - } - break; - } - return FALSE; -} - -void sub_8053788(void) -{ - u16 evoSpecies; - switch (gMain.state) - { - case 0: - gMain.state = 4; - gSoftResetDisabled = TRUE; - break; - case 4: - gCB2_AfterEvolution = sub_8053E8C; - evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); - if (evoSpecies != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - else - SetMainCallback2(sub_8053E8C); - gSelectedTradeMonPositions[0] = 0xFF; - break; - } - if (!HasLinkErrorOccurred()) - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_805383C(void) -{ - u8 recvStatus; - sub_804FFC4(); - recvStatus = GetBlockReceivedStatus(); - if (recvStatus & (1 << 0)) - { - if (gBlockRecvBuffer[0][0] == 0xDCBA) - SetMainCallback2(sub_8053788); - if (gBlockRecvBuffer[0][0] == 0xABCD) - sTradeData->unk_72 = 1; - ResetBlockReceivedFlag(0); - } - if (recvStatus & (1 << 1)) - { - if (gBlockRecvBuffer[1][0] == 0xABCD) - sTradeData->unk_73 = 1; - ResetBlockReceivedFlag(1); - } -} - -void SpriteCB_TradePokeball_Default(struct Sprite * sprite) -{ - sprite->pos1.y += sprite->data[0] / 10; - sprite->data[5] += sprite->data[1]; - sprite->pos1.x = sprite->data[5] / 10; - if (sprite->pos1.y > 76) - { - sprite->pos1.y = 76; - sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; - sprite->data[3]++; - } - if (sprite->pos1.x == 120) - sprite->data[1] = 0; - sprite->data[0] += sprite->data[4]; - if (sprite->data[3] == 4) - { - sprite->data[7] = 1; - sprite->callback = SpriteCallbackDummy; - } -} - -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) -{ - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; - if (sprite->data[0] == 22) - PlaySE(SE_KON); - sprite->data[0]++; - if (sprite->data[0] == 44) - { - PlaySE(SE_W025); - sprite->callback = SpriteCB_TradePokeball_Outbound2; - sprite->data[0] = 0; - BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); - } -} - -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) -{ - if (sprite->data[1] == 20) - StartSpriteAffineAnim(sprite, 1); - sprite->data[1]++; - if (sprite->data[1] > 20) - { - sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; - sprite->data[0]++; - if (sprite->data[0] == 23) - { - DestroySprite(sprite); - sTradeData->state = 14; - } - } -} - -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) -{ - if (sprite->data[2] == 0) - { - sprite->pos1.y += 4; - if (sprite->pos1.y > sprite->data[3]) - { - sprite->data[2]++; - sprite->data[0] = 22; - PlaySE(SE_KON); - } - } - else - { - if (sprite->data[0] == 66) - PlaySE(SE_KON2); - if (sprite->data[0] == 92) - PlaySE(SE_KON3); - if (sprite->data[0] == 107) - PlaySE(SE_KON4); - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; - sprite->data[0]++; - if (sprite->data[0] == 108) - sprite->callback = SpriteCallbackDummy; - } -} - -u16 GetInGameTradeSpeciesInfo(void) -{ - // Populates gStringVar1 with the name of the requested species and - // gStringVar2 with the name of the offered species. - // Returns the requested species. - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; - StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); - StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); - return inGameTrade->requestedSpecies; -} - -void BufferInGameTradeMonName(void) -{ - // Populates gStringVar1 with the nickname of the sent Pokemon and - // gStringVar2 with the name of the offered species. - u8 nickname[30]; - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; - GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar1, nickname); - StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); -} - -void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) -{ - const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; - u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); - struct MailStruct mail; - u8 metLocation = MAPSEC_IN_GAME_TRADE; - struct Pokemon * tradeMon = &gEnemyParty[0]; - u8 mailNum; - CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); - SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); - SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); - SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); - SetMonData(tradeMon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); - SetMonData(tradeMon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); - SetMonData(tradeMon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); - SetMonData(tradeMon, MON_DATA_NICKNAME, inGameTrade->nickname); - SetMonData(tradeMon, MON_DATA_OT_NAME, inGameTrade->otName); - SetMonData(tradeMon, MON_DATA_OT_GENDER, &inGameTrade->otGender); - SetMonData(tradeMon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); - SetMonData(tradeMon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); - SetMonData(tradeMon, MON_DATA_CUTE, &inGameTrade->conditions[2]); - SetMonData(tradeMon, MON_DATA_COOL, &inGameTrade->conditions[0]); - SetMonData(tradeMon, MON_DATA_SMART, &inGameTrade->conditions[3]); - SetMonData(tradeMon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); - SetMonData(tradeMon, MON_DATA_SHEEN, &inGameTrade->sheen); - SetMonData(tradeMon, MON_DATA_MET_LOCATION, &metLocation); - mailNum = 0; - if (inGameTrade->heldItem != ITEM_NONE) - { - if (ItemIsMail(inGameTrade->heldItem)) - { - GetInGameTradeMail(&mail, inGameTrade); - gLinkPartnerMail[0] = mail; - SetMonData(tradeMon, MON_DATA_MAIL, &mailNum); - SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); - } - else - { - SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); - } - } - CalculateMonStats(&gEnemyParty[0]); -} - -static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) -{ - int i; - for (i = 0; i < 9; i++) - mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; - StringCopy(mail->playerName, inGameTrade->otName); - mail->trainerId[0] = inGameTrade->otId >> 24; - mail->trainerId[1] = inGameTrade->otId >> 16; - mail->trainerId[2] = inGameTrade->otId >> 8; - mail->trainerId[3] = inGameTrade->otId; - mail->species = inGameTrade->species; - mail->itemId = inGameTrade->heldItem; -} - -u16 GetTradeSpecies(void) -{ - if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) - return SPECIES_NONE; - else - return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); -} - -void CreateInGameTradePokemon(void) -{ - CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); -} - -void CB2_RunTradeAnim_LinkTrade(void) -{ - if (sub_8050F14() == TRUE) - { - DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); - FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); - TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); - sTradeData->linkData[0] = 0xABCD; - sTradeData->unk_93 = 1; - SetMainCallback2(sub_8053E1C); - } - sub_80508F4(); - sub_805383C(); - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_8053E1C(void) -{ - u8 mpId = sub_804FFC4(); - sub_805383C(); - if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) - { - sTradeData->linkData[0] = 0xDCBA; - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_72 = 2; - sTradeData->unk_73 = 2; - } - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_8053E8C(void) -{ - switch (gMain.state) - { - case 0: - gMain.state++; - StringExpandPlaceholders(gStringVar4, gUnknown_841E325); - DrawTextOnTradeWindow(0, gStringVar4, 0); - break; - case 1: - sub_800AB9C(); - gMain.state = 100; - sTradeData->timer = 0; - break; - case 100: - if (++sTradeData->timer > 180) - { - gMain.state = 101; - sTradeData->timer = 0; - } - if (IsLinkTaskFinished()) - { - gMain.state = 2; - } - break; - case 101: - if (IsLinkTaskFinished()) - { - gMain.state = 2; - } - break; - case 2: - gMain.state = 50; - StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffThePower2); - DrawTextOnTradeWindow(0, gStringVar4, 0); - break; - case 50: - if (InUnionRoom()) - { - sub_8113550(18, sTradeData->monSpecies); - } - else - { - sub_8113550(12, sTradeData->monSpecies); - IncrementGameStat(GAME_STAT_POKEMON_TRADES); - } - if (gWirelessCommType) - { - sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - } - SetContinueGameWarpStatusToDynamicWarp(); - sub_80DA3AC(); - gMain.state++; - sTradeData->timer = 0; - break; - case 51: - if (++sTradeData->timer == 5) - { - gMain.state++; - } - break; - case 52: - if (sub_80DA3D8()) - { - ClearContinueGameWarpStatus2(); - gMain.state = 4; - } - else - { - sTradeData->timer = 0; - gMain.state = 51; - } - break; - case 4: - sub_80DA40C(); - gMain.state = 40; - sTradeData->timer = 0; - break; - case 40: - if (++sTradeData->timer > 50) - { - if (GetMultiplayerId() == 0) - { - sTradeData->timer = Random() % 30; - } - else - { - sTradeData->timer = 0; - } - gMain.state = 41; - } - break; - case 41: - if (sTradeData->timer == 0) - { - sub_800AB9C(); - gMain.state = 42; - } - else - { - sTradeData->timer--; - } - break; - case 42: - if (IsLinkTaskFinished()) - { - sub_80DA434(); - gMain.state = 5; - } - break; - case 5: - if (++sTradeData->timer > 60) - { - gMain.state++; - sub_800AB9C(); - } - break; - case 6: - if (IsLinkTaskFinished()) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gMain.state ++; - } - break; - case 7: - if (!gPaletteFade.active) - { - FadeOutBGM(3); - gMain.state++; - } - break; - case 8: - if (IsBGMStopped() == TRUE) - { - if (gWirelessCommType && gMain.savedCallback == sub_804C718) - { - sub_800AB9C(); - } - else - { - sub_800AAC0(); - } - gMain.state++; - } - break; - case 9: - if (gWirelessCommType && gMain.savedCallback == sub_804C718) - { - if (IsLinkRfuTaskFinished()) - { - gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); - } - } - else if (!gReceivedRemoteLinkPlayers) - { - gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); - } - break; - } - if (!HasLinkErrorOccurred()) - { - RunTasks(); - } - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_80543C4(void) -{ - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); - if (gWirelessCommType != 0) - DestroyWirelessStatusIndicatorSprite(); - SetMainCallback2(gMain.savedCallback); - } - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void DoInGameTradeScene(void) -{ - ScriptContext2_Enable(); - CreateTask(sub_8054470, 10); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - HelpSystem_Disable(); -} - -void sub_8054470(u8 taskId) -{ - if (!gPaletteFade.active) - { - SetMainCallback2(CB2_InitTradeAnim_InGameTrade); - gFieldCallback = FieldCallback_ReturnToEventScript2; - DestroyTask(taskId); - } -} - -void CheckPartnersMonForRibbons(void) -{ - u8 nRibbons = 0; - u8 i; - for (i = 0; i < 12; i++) - { - nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); - } - if (nRibbons != 0) - FlagSet(FLAG_SYS_RIBBON_GET); -} - -void sub_80544FC(void) -{ - TradeAnimInit_LoadGfx(); -} - -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) -{ - FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sTradeData->textColor[0] = 15; - sTradeData->textColor[1] = 1; - sTradeData->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, 2, 0, 2, 0, 2, sTradeData->textColor, speed, str); - CopyWindowToVram(windowId, 3); -} - -void Task_AnimateWirelessSignal(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - u16 r2 = 16 * gUnknown_826D250[data[0]][0]; - if (data[2] == 0) - { - if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - else - LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); - } - else - { - if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - else - LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); - } - if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) - PlaySE(SE_W215); - if (data[1] == gUnknown_826D250[data[0]][1]) - { - data[0]++; - data[1] = 0; - if (gUnknown_826D250[data[0]][1] == 0xFF) - DestroyTask(taskId); - } - else - data[1]++; -} - -void c3_0805465C(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - sTradeData->win0left = sTradeData->win0right = 120; - sTradeData->win0top = 0; - sTradeData->win0bottom = 160; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | - WININ_WIN0_BG1 | - WININ_WIN0_OBJ); - } - - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); - - data[0]++; - sTradeData->win0left -= 5; - sTradeData->win0right += 5; - - if (sTradeData->win0left < 80) - { - DestroyTask(taskId); - } -} - -void sub_8054734(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - sTradeData->win0left = 80; - sTradeData->win0right = 160; - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | - WININ_WIN0_BG1 | - WININ_WIN0_OBJ); - } - - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); - - if (sTradeData->win0left != 120) - { - data[0]++; - sTradeData->win0left += 5; - sTradeData->win0right -= 5; - - if (sTradeData->win0left >= 116) - BlendPalettes(0x8, 0, RGB_WHITEALPHA); - } - else - { - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - DestroyTask(taskId); - } -} diff --git a/src/trade_scene.c b/src/trade_scene.c new file mode 100644 index 000000000..ebb788e3d --- /dev/null +++ b/src/trade_scene.c @@ -0,0 +1,2444 @@ +#include "global.h" +#include "task.h" +#include "malloc.h" +#include "bg.h" +#include "gpu_regs.h" +#include "util.h" +#include "window.h" +#include "sound.h" +#include "decompress.h" +#include "palette.h" +#include "trade.h" +#include "link.h" +#include "librfu.h" +#include "link_rfu.h" +#include "text.h" +#include "mevent.h" +#include "graphics.h" +#include "strings.h" +#include "menu.h" +#include "data.h" +#include "battle.h" +#include "script.h" +#include "event_data.h" +#include "string_util.h" +#include "mail_data.h" +#include "pokeball.h" +#include "evolution_scene.h" +#include "overworld.h" +#include "field_fadetransition.h" +#include "quest_log.h" +#include "help_system.h" +#include "new_menu_helpers.h" +#include "battle_interface.h" +#include "pokedex.h" +#include "save.h" +#include "load_save.h" +#include "random.h" +#include "constants/species.h" +#include "constants/items.h" +#include "constants/easy_chat.h" +#include "constants/songs.h" +#include "constants/region_map.h" +#include "constants/moves.h" + +struct InGameTrade { + /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x0C*/ u16 species; + /*0x0E*/ u8 ivs[NUM_STATS]; + /*0x14*/ u8 abilityNum; + /*0x18*/ u32 otId; + /*0x1C*/ u8 conditions[5]; + /*0x24*/ u32 personality; + /*0x28*/ u16 heldItem; + /*0x2A*/ u8 mailNum; + /*0x2B*/ u8 otName[11]; + /*0x36*/ u8 otGender; + /*0x37*/ u8 sheen; + /*0x38*/ u16 requestedSpecies; +}; + +struct TradeAnimationResources { + /*0x00*/ struct Pokemon mon; + /*0x64*/ u32 timer; + /*0x68*/ u32 monPersonalities[2]; + /*0x70*/ u8 filler_70[2]; + /*0x72*/ u8 unk_72; + /*0x73*/ u8 unk_73; + /*0x74*/ u16 linkData[10]; + /*0x88*/ u8 unk_88; + /*0x89*/ u8 unk_89; + /*0x8A*/ u16 unk_8A; + /*0x8C*/ u16 unk_8C; + /*0x8E*/ u8 pokePicSpriteIdxs[2]; + /*0x90*/ u8 unk_90; + /*0x91*/ u8 unk_91; + /*0x92*/ u8 unk_92; + /*0x93*/ u8 unk_93; + /*0x94*/ u16 state; + /*0x96*/ u8 filler_96[0xD2 - 0x96]; + /*0xD2*/ u8 pokeballSpriteId; + /*0xD3*/ u8 unk_D3; + /*0xD4*/ u16 unk_D4; + /*0xD6*/ u16 unk_D6; + /*0xD8*/ u16 unk_D8; + /*0xDA*/ u16 unk_DA; + /*0xDC*/ u16 unk_DC; + /*0xDE*/ u16 unk_DE; + /*0xE0*/ s16 bg1vofs; + /*0xE2*/ s16 bg1hofs; + /*0xE4*/ s16 bg2vofs; + /*0xE6*/ s16 bg2hofs; + /*0xE8*/ u16 sXY; + /*0xEA*/ u16 unk_EA; + /*0xEC*/ u16 unk_EC; + /*0xEE*/ bool8 isLinkTrade; + /*0xF0*/ u16 tradeSpecies[2]; + /*0xF4*/ u16 cachedMapMusic; + /*0xF6*/ u8 unk_F6; + /*0xF8*/ u16 monSpecies[2]; + /*0xFC*/ u8 unk_FC[7]; + /*0x103*/ u8 filler_103[1]; + /*0x104*/ u8 textColor[3]; + /*0x107*/ u8 filler_107[1]; + /*0x108*/ u8 isCableTrade; + /*0x109*/ u8 win0left; + /*0x10A*/ u8 win0top; + /*0x10B*/ u8 win0right; + /*0x10C*/ u8 win0bottom; +}; + +EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; + +void CB2_InitTradeAnim_LinkTrade(void); +void sub_805049C(void); +void sub_80504B0(void); +void TradeAnimInit_LoadGfx(void); +void CB2_RunTradeAnim_InGameTrade(void); +void SetTradeSequenceBgGpuRegs(u8 idx); +void sub_8050DE0(void); +void sub_8050E24(void); +u8 sub_8050F14(void); +u8 sub_8050F3C(void); +u8 sub_805232C(void); +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +void BufferInGameTradeMonName(void); +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); +void CB2_RunTradeAnim_LinkTrade(void); +void sub_8053E1C(void); +void sub_8053E8C(void); +void sub_80543C4(void); +void sub_8054470(u8 taskId); +void CheckPartnersMonForRibbons(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +void Task_AnimateWirelessSignal(u8 taskId); +void c3_0805465C(u8 taskId); +void sub_8054734(u8 taskId); + +extern const u8 gUnknown_8261EC7[]; +extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; +extern const u16 gTradeGlow2PaletteAnimTable[]; +extern const struct SpriteSheet gUnknown_826CDD4; +extern const struct SpritePalette gUnknown_826CDDC; +extern const struct BgTemplate gUnknown_826D1D4[4]; +extern const struct WindowTemplate gUnknown_826D1BC[]; +extern const u16 gUnknown_826AA5C[]; +extern const u16 gUnknown_8269A5C[]; +extern const u32 gUnknown_3379A0Bin[]; +extern const u16 gUnknown_826407C[]; +extern const u16 gUnknown_826BB5C[]; +extern const u16 gUnknown_826BD5C[]; +extern const u16 gUnknown_826BF5C[]; +extern const u16 gUnknown_826701C[]; +extern const u16 gUnknown_826985C[]; +extern const u16 gUnknown_826995C[]; +extern const u32 gWirelessSignal4bpp[]; +extern const u32 gUnknown_826C60C[]; +extern const struct SpriteSheet gUnknown_826CE2C; +extern const struct SpriteSheet gUnknown_826CE7C; +extern const struct SpriteSheet gUnknown_826CEB0; +extern const struct SpriteSheet gUnknown_826CF28; +extern const struct SpritePalette gUnknown_826CE34; +extern const struct SpritePalette gUnknown_826CE3C; +extern const struct InGameTrade gInGameTrades[]; +extern const struct SpriteTemplate sTradePokeballSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CF30; +extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CE44; +extern const struct SpriteTemplate sGlowBallSpriteTemplate; +extern const union AffineAnimCmd *const gUnknown_826CF88[]; +extern const struct SpriteTemplate gUnknown_826CF48; +extern const s8 gUnknown_826D1E4[]; +extern const u16 sInGameTradeMailMessages[][10]; +extern const u8 gUnknown_826D250[][2]; + +// Sprite callback for link cable trade glow +void SpriteCB_TradeGlowCable(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_BOWA); + sprite->data[0] = 0; + } +} + +// Sprite callback for wireless trade glow +void SpriteCB_TradeGlowWireless(struct Sprite * sprite) +{ + if (!sprite->invisible) + { + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_W207B); + sprite->data[0] = 0; + } + } +} + +// Palette flash for trade glow core +void SpriteCB_TradeGlowCore(struct Sprite * sprite) +{ + if (sprite->data[1] == 0) + { + sprite->data[0]++; + if (sprite->data[0] == 12) + sprite->data[0] = 0; + LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + } +} + +void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y++; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y--; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void sub_804FE00(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 15) + { + PlaySE(SE_W107); + sprite->data[0] = 0; + } +} + +void SetTradeBGAffine(void) +{ + struct BgAffineDstData affine; + DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); + SetGpuReg(REG_OFFSET_BG2PA, affine.pa); + SetGpuReg(REG_OFFSET_BG2PB, affine.pb); + SetGpuReg(REG_OFFSET_BG2PC, affine.pc); + SetGpuReg(REG_OFFSET_BG2PD, affine.pd); + SetGpuReg(REG_OFFSET_BG2X, affine.dx); + SetGpuReg(REG_OFFSET_BG2Y, affine.dy); +} + +static void TradeAnim_UpdateBgRegs(void) +{ + u16 dispcnt; + + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); + + dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); + if ((dispcnt & 7) == DISPCNT_MODE_0) + { + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); + } + else + { + SetTradeBGAffine(); + } +} + +static void VBlankCB_TradeAnim(void) +{ + TradeAnim_UpdateBgRegs(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804FF24(void) +{ + sTradeData->unk_8A = 0; + sTradeData->unk_88 = 0; + sTradeData->unk_89 = 0; +} + +void sub_804FF4C(void) +{ + if (sTradeData->unk_88 == sTradeData->unk_89) + sTradeData->unk_8A++; + else + sTradeData->unk_8A = 0; + + if (sTradeData->unk_8A > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + sTradeData->unk_8A = 0; + sTradeData->unk_89 = 0; + sTradeData->unk_88 = 0; + } + + sTradeData->unk_89 = sTradeData->unk_88; +} + +u32 sub_804FFC4(void) +{ + if (gReceivedRemoteLinkPlayers) + return GetMultiplayerId(); + return 0; +} + +void sub_804FFE4(u8 whichParty, u8 a1) +{ + int pos = 0; + struct Pokemon *mon = NULL; + u16 species; + u32 personality; + + if (whichParty == 0) + { + mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; + pos = 1; + } + + if (whichParty == 1) + { + mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; + pos = 3; + } + + switch (a1) + { + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + if (whichParty == 0) + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + else + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); + sTradeData->tradeSpecies[whichParty] = species; + sTradeData->monPersonalities[whichParty] = personality; + break; + case 1: + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); + sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; + } +} + +void CB2_InitTradeAnim_LinkTrade(void) +{ + switch (gMain.state) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = 0x1144; + CloseLink(); + } + sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sub_804FF24(); + gMain.state++; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->isLinkTrade = TRUE; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; + break; + case 1: + if (!gReceivedRemoteLinkPlayers) + { + sTradeData->isCableTrade = TRUE; + OpenLink(); + gMain.state++; + sTradeData->timer = 0; + } + else + { + gMain.state = 4; + } + break; + case 2: + sTradeData->timer++; + if (sTradeData->timer > 60) + { + sTradeData->timer = 0; + gMain.state++; + } + break; + case 3: + if (IsLinkMaster()) + { + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + sTradeData->timer++; + if (sTradeData->timer > 30) + { + CheckShouldAdvanceLinkState(); + gMain.state++; + } + } + else + { + sub_804FF4C(); + } + } + else + { + gMain.state++; + } + break; + case 4: + sub_804FF4C(); + if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) + { + gMain.state++; + } + break; + case 5: + sTradeData->unk_72 = 0; + sTradeData->unk_73 = 0; + sTradeData->unk_93 = 0; + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + sub_80504B0(); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); + sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); + memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + gMain.state++; + break; + case 11: + sub_805049C(); + sub_8050E24(); + gMain.state++; + break; + case 12: + if (!gPaletteFade.active) + { + if (gWirelessCommType != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + SetMainCallback2(CB2_RunTradeAnim_LinkTrade); + } + break; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805049C(void) +{ + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); +} + +void sub_80504B0(void) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +void TradeAnimInit_LoadGfx(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + DeactivateAllTextPrinters(); + // Doing the graphics load... + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); + InitWindows(gUnknown_826D1BC); + // ... and doing the same load again + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); +} + +void CB2_InitTradeAnim_InGameTrade(void) +{ + u8 otName[11]; + + switch (gMain.state) + { + case 0: + gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; + gSelectedTradeMonPositions[1] = 6; + StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); + GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); + StringCopy(gLinkPlayers[1].name, otName); + sTradeData = AllocZeroed(sizeof(*sTradeData)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sTradeData->isLinkTrade = FALSE; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; + sTradeData->timer = 0; + gMain.state = 5; + break; + case 5: + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + ShowBg(0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + ShowBg(0); + gMain.state++; + break; + case 11: + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); + sub_8050E24(); + gMain.state++; + break; + case 12: + SetMainCallback2(CB2_RunTradeAnim_InGameTrade); + break; + } + + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void ReceivedMonSetPokedexFlags(u8 partyIdx) +{ + struct Pokemon *mon = &gPlayerParty[partyIdx]; + + if (!GetMonData(mon, MON_DATA_IS_EGG)) + { + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + species = SpeciesToNationalPokedexNum(species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality); + } +} + +static void RS_TryEnableNationalPokedex(void) +{ + u8 mpId = GetMultiplayerId(); + // Originally in Ruby but commented out + /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) + EnableNationalPokedex();*/ +} + +void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) +{ + u8 friendship; + + // Get whether the offered Pokemon have mail + struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; + u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); + + struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; + u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); + + // The mail attached to the sent Pokemon no longer exists in your file. + if (playerMail != 0xFF) + ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); + + // This is where the actual trade happens!! + sTradeData->mon = *playerMon; + *playerMon = *partnerMon; + *partnerMon = sTradeData->mon; + + // By default, a Pokemon received from a trade will have 70 Friendship. + friendship = 70; + if (!GetMonData(playerMon, MON_DATA_IS_EGG)) + SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); + + // Associate your partner's mail with the Pokemon they sent over. + if (partnerMail != 0xFF) + GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); + + ReceivedMonSetPokedexFlags(playerPartyIdx); + if (gReceivedRemoteLinkPlayers) + RS_TryEnableNationalPokedex(); +} + +void sub_80508F4(void) +{ + switch (sTradeData->unk_93) + { + case 1: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_93++; + } + case 2: + sTradeData->unk_93 = 0; + break; + } +} + +void CB2_RunTradeAnim_InGameTrade(void) +{ + sub_8050F14(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void SetTradeSequenceBgGpuRegs(u8 state) +{ + switch (state) + { + case 0: + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0xB4; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; + case 1: + sTradeData->bg1hofs = 0; + sTradeData->bg1vofs = 0x15C; + SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + else + { + DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + break; + case 2: + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + if (sTradeData->isCableTrade == FALSE) + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); + BlendPalettes(0x000000008, 0x10, RGB_BLACK); + } + else + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); + BlendPalettes(0x00000001, 0x10, RGB_BLACK); + } + break; + case 3: + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); + LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); + sTradeData->bg2vofs = 0x50; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + break; + case 4: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x20; + sTradeData->unk_EA = 0x400; + sTradeData->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 5: + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x100; + sTradeData->unk_EA = 0x80; + sTradeData->unk_DC = 0x78; + sTradeData->unk_DE = 0x50; + sTradeData->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 7: + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; + } +} + +void sub_8050DE0(void) +{ + LoadSpriteSheet(&gUnknown_826CE2C); + LoadSpriteSheet(&gUnknown_826CE7C); + LoadSpriteSheet(&gUnknown_826CEB0); + LoadSpriteSheet(&gUnknown_826CF28); + LoadSpritePalette(&gUnknown_826CE34); + LoadSpritePalette(&gUnknown_826CE3C); +} + +void sub_8050E24(void) +{ + u8 nickname[20]; + u8 mpId; + const struct InGameTrade * inGameTrade; + if (sTradeData->isLinkTrade) + { + mpId = GetMultiplayerId(); + StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); + GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar3, nickname); + GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } + else + { + inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, inGameTrade->otName); + StringCopy10(gStringVar3, inGameTrade->nickname); + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } +} + +bool8 sub_8050F14(void) +{ + if (sTradeData->isCableTrade) + return sub_8050F3C(); + else + return sub_805232C(); +} + +bool8 sub_8050F3C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state++; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 24: + if (++sTradeData->timer > 20) + { + SetTradeBGAffine(); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state++; + } + break; + case 25: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG1 | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); + sTradeData->state++; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 2) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + } + break; + case 34: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state++; + } + break; + case 44: + if ((sTradeData->bg1vofs += 2) > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 45: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} + +bool8 sub_805232C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state = 124; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 124: + if (++sTradeData->timer > 20) + { + SetTradeSequenceBgGpuRegs(3); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); + sTradeData->state++; + } + break; + case 125: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | + BLDCNT_TGT1_OBJ | + BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); + CreateTask(Task_AnimateWirelessSignal, 5); + sTradeData->state++; + } + break; + case 126: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 26; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 3) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + CreateTask(c3_0805465C, 5); + } + break; + case 34: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 40; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 200; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + CreateTask(sub_8054734, 5); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + SetTradeSequenceBgGpuRegs(3); + sTradeData->bg2vofs = 412; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 4; + gSprites[sTradeData->unk_91].pos2.y += 4; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state = 144; + sTradeData->timer = 0; + } + break; + case 144: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + sTradeData->bg1vofs += 3; + sTradeData->bg2vofs += 3; + if (++sTradeData->timer == 10) + { + u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); + gTasks[taskId].data[2] = TRUE; + } + if (sTradeData->bg1vofs > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 145: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 146: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 46; + sTradeData->timer = 0; + } + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} + +void sub_8053788(void) +{ + u16 evoSpecies; + switch (gMain.state) + { + case 0: + gMain.state = 4; + gSoftResetDisabled = TRUE; + break; + case 4: + gCB2_AfterEvolution = sub_8053E8C; + evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); + if (evoSpecies != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + else + SetMainCallback2(sub_8053E8C); + gSelectedTradeMonPositions[0] = 0xFF; + break; + } + if (!HasLinkErrorOccurred()) + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805383C(void) +{ + u8 recvStatus; + sub_804FFC4(); + recvStatus = GetBlockReceivedStatus(); + if (recvStatus & (1 << 0)) + { + if (gBlockRecvBuffer[0][0] == 0xDCBA) + SetMainCallback2(sub_8053788); + if (gBlockRecvBuffer[0][0] == 0xABCD) + sTradeData->unk_72 = 1; + ResetBlockReceivedFlag(0); + } + if (recvStatus & (1 << 1)) + { + if (gBlockRecvBuffer[1][0] == 0xABCD) + sTradeData->unk_73 = 1; + ResetBlockReceivedFlag(1); + } +} + +void SpriteCB_TradePokeball_Default(struct Sprite * sprite) +{ + sprite->pos1.y += sprite->data[0] / 10; + sprite->data[5] += sprite->data[1]; + sprite->pos1.x = sprite->data[5] / 10; + if (sprite->pos1.y > 76) + { + sprite->pos1.y = 76; + sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; + sprite->data[3]++; + } + if (sprite->pos1.x == 120) + sprite->data[1] = 0; + sprite->data[0] += sprite->data[4]; + if (sprite->data[3] == 4) + { + sprite->data[7] = 1; + sprite->callback = SpriteCallbackDummy; + } +} + +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) +{ + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + if (sprite->data[0] == 22) + PlaySE(SE_KON); + sprite->data[0]++; + if (sprite->data[0] == 44) + { + PlaySE(SE_W025); + sprite->callback = SpriteCB_TradePokeball_Outbound2; + sprite->data[0] = 0; + BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); + } +} + +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) +{ + if (sprite->data[1] == 20) + StartSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + if (sprite->data[1] > 20) + { + sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 23) + { + DestroySprite(sprite); + sTradeData->state = 14; + } + } +} + +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos1.y += 4; + if (sprite->pos1.y > sprite->data[3]) + { + sprite->data[2]++; + sprite->data[0] = 22; + PlaySE(SE_KON); + } + } + else + { + if (sprite->data[0] == 66) + PlaySE(SE_KON2); + if (sprite->data[0] == 92) + PlaySE(SE_KON3); + if (sprite->data[0] == 107) + PlaySE(SE_KON4); + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 108) + sprite->callback = SpriteCallbackDummy; + } +} + +u16 GetInGameTradeSpeciesInfo(void) +{ + // Populates gStringVar1 with the name of the requested species and + // gStringVar2 with the name of the offered species. + // Returns the requested species. + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); + return inGameTrade->requestedSpecies; +} + +void BufferInGameTradeMonName(void) +{ + // Populates gStringVar1 with the nickname of the sent Pokemon and + // gStringVar2 with the name of the offered species. + u8 nickname[30]; + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); +} + +void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) +{ + const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; + u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); + struct MailStruct mail; + u8 metLocation = MAPSEC_IN_GAME_TRADE; + struct Pokemon * tradeMon = &gEnemyParty[0]; + u8 mailNum; + CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); + SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); + SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); + SetMonData(tradeMon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); + SetMonData(tradeMon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); + SetMonData(tradeMon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); + SetMonData(tradeMon, MON_DATA_NICKNAME, inGameTrade->nickname); + SetMonData(tradeMon, MON_DATA_OT_NAME, inGameTrade->otName); + SetMonData(tradeMon, MON_DATA_OT_GENDER, &inGameTrade->otGender); + SetMonData(tradeMon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); + SetMonData(tradeMon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); + SetMonData(tradeMon, MON_DATA_CUTE, &inGameTrade->conditions[2]); + SetMonData(tradeMon, MON_DATA_COOL, &inGameTrade->conditions[0]); + SetMonData(tradeMon, MON_DATA_SMART, &inGameTrade->conditions[3]); + SetMonData(tradeMon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); + SetMonData(tradeMon, MON_DATA_SHEEN, &inGameTrade->sheen); + SetMonData(tradeMon, MON_DATA_MET_LOCATION, &metLocation); + mailNum = 0; + if (inGameTrade->heldItem != ITEM_NONE) + { + if (ItemIsMail(inGameTrade->heldItem)) + { + GetInGameTradeMail(&mail, inGameTrade); + gLinkPartnerMail[0] = mail; + SetMonData(tradeMon, MON_DATA_MAIL, &mailNum); + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + else + { + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + } + CalculateMonStats(&gEnemyParty[0]); +} + +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) +{ + int i; + for (i = 0; i < 9; i++) + mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; + StringCopy(mail->playerName, inGameTrade->otName); + mail->trainerId[0] = inGameTrade->otId >> 24; + mail->trainerId[1] = inGameTrade->otId >> 16; + mail->trainerId[2] = inGameTrade->otId >> 8; + mail->trainerId[3] = inGameTrade->otId; + mail->species = inGameTrade->species; + mail->itemId = inGameTrade->heldItem; +} + +u16 GetTradeSpecies(void) +{ + if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) + return SPECIES_NONE; + else + return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); +} + +void CreateInGameTradePokemon(void) +{ + CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); +} + +void CB2_RunTradeAnim_LinkTrade(void) +{ + if (sub_8050F14() == TRUE) + { + DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); + TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); + sTradeData->linkData[0] = 0xABCD; + sTradeData->unk_93 = 1; + SetMainCallback2(sub_8053E1C); + } + sub_80508F4(); + sub_805383C(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8053E1C(void) +{ + u8 mpId = sub_804FFC4(); + sub_805383C(); + if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) + { + sTradeData->linkData[0] = 0xDCBA; + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_72 = 2; + sTradeData->unk_73 = 2; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8053E8C(void) +{ + switch (gMain.state) + { + case 0: + gMain.state++; + StringExpandPlaceholders(gStringVar4, gUnknown_841E325); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 1: + sub_800AB9C(); + gMain.state = 100; + sTradeData->timer = 0; + break; + case 100: + if (++sTradeData->timer > 180) + { + gMain.state = 101; + sTradeData->timer = 0; + } + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 101: + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 2: + gMain.state = 50; + StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffThePower2); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 50: + if (InUnionRoom()) + { + sub_8113550(18, sTradeData->monSpecies); + } + else + { + sub_8113550(12, sTradeData->monSpecies); + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + } + if (gWirelessCommType) + { + sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + } + SetContinueGameWarpStatusToDynamicWarp(); + sub_80DA3AC(); + gMain.state++; + sTradeData->timer = 0; + break; + case 51: + if (++sTradeData->timer == 5) + { + gMain.state++; + } + break; + case 52: + if (sub_80DA3D8()) + { + ClearContinueGameWarpStatus2(); + gMain.state = 4; + } + else + { + sTradeData->timer = 0; + gMain.state = 51; + } + break; + case 4: + sub_80DA40C(); + gMain.state = 40; + sTradeData->timer = 0; + break; + case 40: + if (++sTradeData->timer > 50) + { + if (GetMultiplayerId() == 0) + { + sTradeData->timer = Random() % 30; + } + else + { + sTradeData->timer = 0; + } + gMain.state = 41; + } + break; + case 41: + if (sTradeData->timer == 0) + { + sub_800AB9C(); + gMain.state = 42; + } + else + { + sTradeData->timer--; + } + break; + case 42: + if (IsLinkTaskFinished()) + { + sub_80DA434(); + gMain.state = 5; + } + break; + case 5: + if (++sTradeData->timer > 60) + { + gMain.state++; + sub_800AB9C(); + } + break; + case 6: + if (IsLinkTaskFinished()) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state ++; + } + break; + case 7: + if (!gPaletteFade.active) + { + FadeOutBGM(3); + gMain.state++; + } + break; + case 8: + if (IsBGMStopped() == TRUE) + { + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + sub_800AB9C(); + } + else + { + sub_800AAC0(); + } + gMain.state++; + } + break; + case 9: + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + if (IsLinkRfuTaskFinished()) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + } + else if (!gReceivedRemoteLinkPlayers) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + break; + } + if (!HasLinkErrorOccurred()) + { + RunTasks(); + } + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80543C4(void) +{ + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + if (gWirelessCommType != 0) + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(gMain.savedCallback); + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void DoInGameTradeScene(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_8054470, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + HelpSystem_Disable(); +} + +void sub_8054470(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTradeAnim_InGameTrade); + gFieldCallback = FieldCallback_ReturnToEventScript2; + DestroyTask(taskId); + } +} + +void CheckPartnersMonForRibbons(void) +{ + u8 nRibbons = 0; + u8 i; + for (i = 0; i < 12; i++) + { + nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); + } + if (nRibbons != 0) + FlagSet(FLAG_SYS_RIBBON_GET); +} + +void sub_80544FC(void) +{ + TradeAnimInit_LoadGfx(); +} + +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); + sTradeData->textColor[0] = 15; + sTradeData->textColor[1] = 1; + sTradeData->textColor[2] = 6; + AddTextPrinterParameterized4(windowId, 2, 0, 2, 0, 2, sTradeData->textColor, speed, str); + CopyWindowToVram(windowId, 3); +} + +void Task_AnimateWirelessSignal(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 r2 = 16 * gUnknown_826D250[data[0]][0]; + if (data[2] == 0) + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); + } + else + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); + } + if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) + PlaySE(SE_W215); + if (data[1] == gUnknown_826D250[data[0]][1]) + { + data[0]++; + data[1] = 0; + if (gUnknown_826D250[data[0]][1] == 0xFF) + DestroyTask(taskId); + } + else + data[1]++; +} + +void c3_0805465C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = sTradeData->win0right = 120; + sTradeData->win0top = 0; + sTradeData->win0bottom = 160; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + data[0]++; + sTradeData->win0left -= 5; + sTradeData->win0right += 5; + + if (sTradeData->win0left < 80) + { + DestroyTask(taskId); + } +} + +void sub_8054734(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = 80; + sTradeData->win0right = 160; + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + if (sTradeData->win0left != 120) + { + data[0]++; + sTradeData->win0left += 5; + sTradeData->win0right -= 5; + + if (sTradeData->win0left >= 116) + BlendPalettes(0x8, 0, RGB_WHITEALPHA); + } + else + { + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + } +} -- cgit v1.2.3 From 6c209e32a8d4d5cc8851deef700011fbb04dcba4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 14:23:33 -0400 Subject: trade.c static symbols --- src/trade.c | 260 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 130 insertions(+), 130 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 728258a50..f23ff5400 100644 --- a/src/trade.c +++ b/src/trade.c @@ -105,41 +105,41 @@ enum TradeStatusMsg IWRAM_DATA vu16 gUnknown_3000E78; -EWRAM_DATA u8 *gUnknown_2031C90 = NULL; -EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +static EWRAM_DATA u8 *gUnknown_2031C90 = NULL; +static EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; -EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; - -void sub_804C728(void); -void sub_804D4F8(void); -void sub_804D638(void); -void sub_804D694(u8 state); -void sub_804D764(void); -u8 shedinja_maker_maybe(void); -void sub_804DFF0(void); +static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; + +static void sub_804C728(void); +static void sub_804D4F8(void); +static void sub_804D638(void); +static void sub_804D694(u8 state); +static void sub_804D764(void); +static u8 shedinja_maker_maybe(void); +static void sub_804DFF0(void); static void RunTradeMenuCallback(void); -void sub_804EAAC(u8 a0); -void sub_804EAE4(u8 side); -u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); -void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); -void sub_804F020(u8 side); -void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); -void sub_804F284(u8 side); -void sub_804F3B4(void); -void sub_804F3C8(u8 a0); -void TradeMenuAction_Summary(u8 taskId); -void TradeMenuAction_Trade(u8 taskId); -void sub_804F488(u16 a0, u8 a1); +static void sub_804EAAC(u8 a0); +static void sub_804EAE4(u8 side); +static u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); +static void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); +static void sub_804F020(u8 side); +static void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); +static void sub_804F284(u8 side); +static void sub_804F3B4(void); +static void sub_804F3C8(u8 a0); +static void TradeMenuAction_Summary(u8 taskId); +static void TradeMenuAction_Trade(u8 taskId); +static void sub_804F488(u16 a0, u8 a1); static void sub_804F4DC(void); -void PrintTradeErrorOrStatusMessage(u8 str_idx); -bool8 sub_804F610(void); -void sub_804F728(const u8 *name, u8 *a1, u8 unused); -void sub_804F748(u8 side); -void sub_804F890(u8 side); -void sub_804F964(void); -void sub_804F9D8(void); -u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); +static void PrintTradeErrorOrStatusMessage(u8 str_idx); +static bool8 sub_804F610(void); +static void sub_804F728(const u8 *name, u8 *a1, u8 unused); +static void sub_804F748(u8 side); +static void sub_804F890(u8 side); +static void sub_804F964(void); +static void sub_804F9D8(void); +static u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); static const size_t gUnknown_8260814[] = { sizeof(struct SaveBlock2), @@ -152,81 +152,81 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); -const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); -const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); -const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); +static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); +static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); +static const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); +static const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); -const struct OamData gOamData_8261C30 = { +static const struct OamData gOamData_8261C30 = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 1 }; -const struct OamData gOamData_8261C38 = { +static const struct OamData gOamData_8261C38 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -const union AnimCmd gSpriteAnim_8261C40[] = { +static const union AnimCmd gSpriteAnim_8261C40[] = { ANIMCMD_FRAME(0x00, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C48[] = { +static const union AnimCmd gSpriteAnim_8261C48[] = { ANIMCMD_FRAME(0x20, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_8261C50[] = { +static const union AnimCmd *const gSpriteAnimTable_8261C50[] = { gSpriteAnim_8261C40, gSpriteAnim_8261C48 }; -const struct SpriteSheet gUnknown_8261C58 = { +static const struct SpriteSheet gUnknown_8261C58 = { gUnknown_8E9E1DC, 0x800, 300 }; -const struct SpritePalette gUnknown_8261C60 = { +static const struct SpritePalette gUnknown_8261C60 = { gUnknown_8E9CF3C, 2345 }; -const union AnimCmd gSpriteAnim_8261C68[] = { +static const union AnimCmd gSpriteAnim_8261C68[] = { ANIMCMD_FRAME(0x00, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C70[] = { +static const union AnimCmd gSpriteAnim_8261C70[] = { ANIMCMD_FRAME(0x08, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C78[] = { +static const union AnimCmd gSpriteAnim_8261C78[] = { ANIMCMD_FRAME(0x10, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C80[] = { +static const union AnimCmd gSpriteAnim_8261C80[] = { ANIMCMD_FRAME(0x18, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C88[] = { +static const union AnimCmd gSpriteAnim_8261C88[] = { ANIMCMD_FRAME(0x20, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C90[] = { +static const union AnimCmd gSpriteAnim_8261C90[] = { ANIMCMD_FRAME(0x28, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_8261C98[] = { +static const union AnimCmd *const gSpriteAnimTable_8261C98[] = { gSpriteAnim_8261C68, gSpriteAnim_8261C70, gSpriteAnim_8261C78, @@ -235,7 +235,7 @@ const union AnimCmd *const gSpriteAnimTable_8261C98[] = { gSpriteAnim_8261C90 }; -const struct SpriteTemplate gUnknown_8261CB0 = { +static const struct SpriteTemplate gUnknown_8261CB0 = { .tileTag = 300, .paletteTag = 2345, .oam = &gOamData_8261C38, @@ -244,7 +244,7 @@ const struct SpriteTemplate gUnknown_8261CB0 = { .callback = SpriteCallbackDummy }; -const struct SpriteTemplate gUnknown_8261CC8 = { +static const struct SpriteTemplate gUnknown_8261CC8 = { .tileTag = 200, .paletteTag = 4925, .oam = &gOamData_8261C30, @@ -253,9 +253,9 @@ const struct SpriteTemplate gUnknown_8261CC8 = { .callback = SpriteCallbackDummy }; -const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); +static const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); -const struct SpritePalette gUnknown_8261D00 = { +static const struct SpritePalette gUnknown_8261D00 = { gUnknown_8261CE0, 4925 }; @@ -265,7 +265,7 @@ const struct SpritePalette gUnknown_8261D00 = { #define DIR_LEFT 2 #define DIR_RIGHT 3 -const u8 sCursorMoveDestinations[][4][6] = { +static const u8 sCursorMoveDestinations[][4][6] = { // Player's party [0] = { [DIR_UP] = { 4, 2, 12, 12, 0, 0}, @@ -349,7 +349,7 @@ const u8 sCursorMoveDestinations[][4][6] = { } }; -const u8 gTradeMonSpriteCoords[][2] = { +static const u8 gTradeMonSpriteCoords[][2] = { {0x01, 0x05}, {0x08, 0x05}, {0x01, 0x0a}, @@ -367,7 +367,7 @@ const u8 gTradeMonSpriteCoords[][2] = { {0x17, 0x12}, }; -const u8 gUnknown_8261E5A[][2][6][2] = { +static const u8 gUnknown_8261E5A[][2][6][2] = { { { {0x05, 0x04}, @@ -403,12 +403,12 @@ const u8 gUnknown_8261E5A[][2][6][2] = { } }; -const u8 gTradeUnknownSpriteCoords[][4] = { +static const u8 gTradeUnknownSpriteCoords[][4] = { {0x3c, 0x09, 0xb4, 0x09}, {0x30, 0x09, 0xa8, 0x09} }; -const u8 gUnknown_8261E92[] = { +static const u8 gUnknown_8261E92[] = { 0x00, 0x0e, 0x0f, 0x1d, 0x03, 0x05, 0x03, 0x07, 0x12, 0x05, 0x12, 0x07, @@ -429,7 +429,7 @@ const u8 gUnknown_8261EC6[] = _(""); const u8 gUnknown_8261EC7[] = _("\n"); const u8 gUnknown_8261EC9[] = _("/"); -const u8 *const gUnknown_8261ECC[] = { +static const u8 *const gUnknown_8261ECC[] = { gUnknown_841E0B9, gUnknown_841E0C0, gUnknown_841E0D2, @@ -438,12 +438,12 @@ const u8 *const gUnknown_8261ECC[] = { gUnknown_841E0EE }; -const struct MenuAction gUnknown_8261EE4[] = { +static const struct MenuAction gUnknown_8261EE4[] = { {gUnknown_841E10A, { .void_u8 = TradeMenuAction_Summary }}, {gUnknown_841E112, { .void_u8 = TradeMenuAction_Trade }} }; -const u8 *const sTradeErrorOrStatusMessagePtrs[] = { +static const u8 *const sTradeErrorOrStatusMessagePtrs[] = { gUnknown_841E118, // Communication standby gUnknown_841E145, // The trade has been canceled. gUnknown_841E16B, // That's your only POKéMON for battle @@ -455,9 +455,9 @@ const u8 *const sTradeErrorOrStatusMessagePtrs[] = { gUnknown_84170FC // The other TRAINER's POKéMON can't be traded now }; -const u8 gUnknown_8261F18[] = { 0, 1, 2 }; +static const u8 gUnknown_8261F18[] = { 0, 1, 2 }; -const struct BgTemplate gUnknown_8261F1C[] = { +static const struct BgTemplate gUnknown_8261F1C[] = { { .bg = 0, .charBaseIndex = 2, @@ -493,7 +493,7 @@ const struct BgTemplate gUnknown_8261F1C[] = { } }; -const struct WindowTemplate gUnknown_8261F2C[] = { +static const struct WindowTemplate gUnknown_8261F2C[] = { { .bg = 0, .tilemapLeft = 4, @@ -641,7 +641,7 @@ const struct WindowTemplate gUnknown_8261F2C[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_8261FC4 = { +static const struct WindowTemplate gUnknown_8261FC4 = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 13, @@ -651,7 +651,7 @@ const struct WindowTemplate gUnknown_8261FC4 = { .baseBlock = 0x24e }; -const u8 gUnknown_8261FCC[][13] = { +static const u8 gUnknown_8261FCC[][13] = { _("かいめの そうしん"), _("かいめの じゅしん"), _("ポケモンアイコンセット"), @@ -662,16 +662,16 @@ const u8 gUnknown_8261FCC[][13] = { _("はいけいセット") }; -const u8 gJPText_Shedinja[] = _("ヌケニン"); -const u8 gUnknown_8262039[] = _("こうかんせいりつ "); -const u8 gUnknown_8262047[] = _("だめだたらしいよ "); +static const u8 gJPText_Shedinja[] = _("ヌケニン"); +static const u8 gUnknown_8262039[] = _("こうかんせいりつ "); +static const u8 gUnknown_8262047[] = _("だめだたらしいよ "); -const u8 gUnknown_8262055[][2] = { +static const u8 gUnknown_8262055[][2] = { { 4, 3}, {19, 3} }; -void sub_804C600(void) +static void sub_804C600(void) { int i; @@ -717,7 +717,7 @@ void sub_804C718(void) #ifdef NONMATCHING // See note on case 12 below -void sub_804C728(void) +static void sub_804C728(void) { int i; struct SpriteTemplate temp; @@ -992,7 +992,7 @@ void sub_804C728(void) } #else NAKED -void sub_804C728(void) +static void sub_804C728(void) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r8\n" @@ -2779,14 +2779,14 @@ void sub_804CF14(void) } #endif //NONMATCHING -void sub_804D4F8(void) +static void sub_804D4F8(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_804D50C(void) +static void sub_804D50C(void) { if (++sTradeMenuResourcesPtr->unk_A8 >= 16) { @@ -2795,7 +2795,7 @@ void sub_804D50C(void) } } -void sub_804D548(void) +static void sub_804D548(void) { if (!gPaletteFade.active) { @@ -2813,7 +2813,7 @@ void sub_804D548(void) } } -void sub_804D5A4(void) +static void sub_804D5A4(void) { gMain.savedCallback = sub_804C718; if (gWirelessCommType != 0) @@ -2841,7 +2841,7 @@ void sub_804D5A4(void) } } -void sub_804D638(void) +static void sub_804D638(void) { RunTradeMenuCallback(); sub_804F4DC(); @@ -2856,7 +2856,7 @@ void sub_804D638(void) UpdatePaletteFade(); } -void sub_804D694(u8 state) +static void sub_804D694(u8 state) { int i; @@ -2888,7 +2888,7 @@ void sub_804D694(u8 state) } } -void sub_804D764(void) +static void sub_804D764(void) { int i; for (i = 0; i < PARTY_SIZE; i++) @@ -2924,7 +2924,7 @@ static void Trade_Memcpy(void *dest, const void *src, size_t size) _dest[i] = _src[i]; } -bool8 shedinja_maker_maybe(void) +static bool8 shedinja_maker_maybe(void) { u8 id = GetMultiplayerId(); int i; @@ -3078,12 +3078,12 @@ bool8 shedinja_maker_maybe(void) return FALSE; } -void sub_804DBAC(void) +static void sub_804DBAC(void) { sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); } -void sub_804DBD4(u8 a0, u8 a1) +static void sub_804DBD4(u8 a0, u8 a1) { if (a1 & 1) { @@ -3127,7 +3127,7 @@ void sub_804DBD4(u8 a0, u8 a1) } } -void sub_804DCF4(u8 a0, u8 a1) +static void sub_804DCF4(u8 a0, u8 a1) { if (a1 & 1) { @@ -3164,7 +3164,7 @@ void sub_804DCF4(u8 a0, u8 a1) ResetBlockReceivedFlag(1); } -void sub_804DDF0(void) +static void sub_804DDF0(void) { if (sTradeMenuResourcesPtr->unk_78 && sTradeMenuResourcesPtr->unk_79) { @@ -3232,7 +3232,7 @@ void sub_804DDF0(void) } } -void sub_804DFF0(void) +static void sub_804DFF0(void) { u8 mpId = GetMultiplayerId(); u8 status; @@ -3247,7 +3247,7 @@ void sub_804DFF0(void) sub_804DDF0(); } -u8 sub_804E028(u8 oldPosition, u8 direction) +static u8 sub_804E028(u8 oldPosition, u8 direction) { int i; u8 newPosition = 0; @@ -3265,7 +3265,7 @@ u8 sub_804E028(u8 oldPosition, u8 direction) } -void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) +static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) { u8 newPosition = sub_804E028(*tradeMenuCursorPosition, direction); @@ -3290,7 +3290,7 @@ void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) *tradeMenuCursorPosition = newPosition; } -void sub_804E134(void) +static void sub_804E134(void) { PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); sTradeMenuResourcesPtr->unk_6F = 5; @@ -3307,7 +3307,7 @@ void sub_804E134(void) } } -void sub_804E194(void) +static void sub_804E194(void) { int i; @@ -3362,7 +3362,7 @@ void sub_804E194(void) } } -void sub_804E330(void) +static void sub_804E330(void) { sub_804F3B4(); sTradeMenuResourcesPtr->unk_6F = 0; @@ -3370,7 +3370,7 @@ void sub_804E330(void) sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } -void sub_804E388(void) +static void sub_804E388(void) { switch (Menu_ProcessInputNoWrapAround()) { @@ -3410,7 +3410,7 @@ void sub_804E388(void) } } -void sub_804E46C(void) +static void sub_804E46C(void) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { @@ -3419,7 +3419,7 @@ void sub_804E46C(void) } } -void sub_804E494(void) +static void sub_804E494(void) { if (!gPaletteFade.active) { @@ -3431,7 +3431,7 @@ void sub_804E494(void) } } -u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) +static u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) { s32 i; u16 species; @@ -3449,7 +3449,7 @@ u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) return r4; } -void sub_804E5A0(void) +static void sub_804E5A0(void) { int i; u8 arr[12]; @@ -3482,7 +3482,7 @@ void sub_804E5A0(void) } } -void sub_804E674(void) +static void sub_804E674(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -3505,7 +3505,7 @@ void sub_804E674(void) } } -void sub_804E6FC(void) +static void sub_804E6FC(void) { int i; @@ -3516,7 +3516,7 @@ void sub_804E6FC(void) } } -void sub_804E744(void) +static void sub_804E744(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -3537,7 +3537,7 @@ void sub_804E744(void) } } -void sub_804E7C8(void) +static void sub_804E7C8(void) { if (GetMultiplayerId() == 0) { @@ -3548,7 +3548,7 @@ void sub_804E7C8(void) sTradeMenuResourcesPtr->unk_6F = 7; } -void sub_804E804(void) +static void sub_804E804(void) { if (sTradeMenuResourcesPtr->unk_74[0] == 5 && sTradeMenuResourcesPtr->unk_74[1] == 5) { @@ -3557,7 +3557,7 @@ void sub_804E804(void) } } -void sub_804E830(void) +static void sub_804E830(void) { sTradeMenuResourcesPtr->unk_A8++; @@ -3569,7 +3569,7 @@ void sub_804E830(void) } } -void sub_804E880(void) +static void sub_804E880(void) { int i; @@ -3592,7 +3592,7 @@ void sub_804E880(void) } } -void sub_804E908(void) +static void sub_804E908(void) { if (!gPaletteFade.active) { @@ -3609,7 +3609,7 @@ void sub_804E908(void) } } -void sub_804E944(void) +static void sub_804E944(void) { if (gWirelessCommType) { @@ -3634,7 +3634,7 @@ void sub_804E944(void) } } -void sub_804E9C0(void) +static void sub_804E9C0(void) { if (!sub_80FA484(FALSE)) { @@ -3698,7 +3698,7 @@ static void RunTradeMenuCallback(void) } } -void sub_804EAAC(u8 a0) +static void sub_804EAAC(u8 a0) { u8 whichParty = a0 / PARTY_SIZE; @@ -3709,7 +3709,7 @@ void sub_804EAAC(u8 a0) } } -void sub_804EAE4(u8 a0) +static void sub_804EAE4(u8 a0) { s8 nameStringWidth; u8 nickname[20]; @@ -3780,7 +3780,7 @@ void sub_804EAE4(u8 a0) } } -u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) +static u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) { u8 nickname[11]; if (whichParty == 0) @@ -3791,7 +3791,7 @@ u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) return GetStringWidth(0, dest, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); } -void sub_804EED4(u8 *a0, u8 a1, u8 a2) +static void sub_804EED4(u8 *a0, u8 a1, u8 a2) { u16 moves[MAX_MON_MOVES]; u16 i; @@ -3829,7 +3829,7 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) } } -void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) +static void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) { u8 xPos; s8 speed; @@ -3841,7 +3841,7 @@ void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) CopyWindowToVram(windowId, 3); } -void sub_804F020(u8 whichParty) +static void sub_804F020(u8 whichParty) { u8 buff[20]; u8 nickname[30]; @@ -3855,7 +3855,7 @@ void sub_804F020(u8 whichParty) } } -void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) +static void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) { u8 level; u32 r2; @@ -3918,7 +3918,7 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) #ifdef NONMATCHING // Instruction swap when setting r5 and r4 -void sub_804F284(u8 whichParty) +static void sub_804F284(u8 whichParty) { s32 i; for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) @@ -3935,7 +3935,7 @@ void sub_804F284(u8 whichParty) } #else NAKED -void sub_804F284(u8 whichParty) +static void sub_804F284(u8 whichParty) { asm_unified("\tpush {r4-r7,lr}\n" "\tsub sp, 0x8\n" @@ -3989,7 +3989,7 @@ void sub_804F284(u8 whichParty) } #endif //NONMATCHING -void sub_804F2E8(u8 whichParty) +static void sub_804F2E8(u8 whichParty) { int i; @@ -4003,13 +4003,13 @@ void sub_804F2E8(u8 whichParty) } } -void sub_804F3B4(void) +static void sub_804F3B4(void) { rbox_fill_rectangle(1); sub_804F020(1); } -void sub_804F3C8(u8 whichParty) +static void sub_804F3C8(u8 whichParty) { CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); @@ -4020,19 +4020,19 @@ void sub_804F3C8(u8 whichParty) sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } -void TradeMenuAction_Summary(u8 taskId) +static void TradeMenuAction_Summary(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -void TradeMenuAction_Trade(u8 taskId) +static void TradeMenuAction_Trade(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -void sub_804F488(u16 a0, u8 a1) +static void sub_804F488(u16 a0, u8 a1) { int i; for (i = 0; i < 4; i++) @@ -4093,7 +4093,7 @@ static void sub_804F4DC(void) } } -void PrintTradeErrorOrStatusMessage(u8 idx) +static void PrintTradeErrorOrStatusMessage(u8 idx) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized(0, 3, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); @@ -4102,7 +4102,7 @@ void PrintTradeErrorOrStatusMessage(u8 idx) CopyWindowToVram(0, 3); } -bool8 sub_804F610(void) +static bool8 sub_804F610(void) { struct SpriteSheet sheet; @@ -4147,12 +4147,12 @@ bool8 sub_804F610(void) return FALSE; } -void sub_804F728(const u8 *name, u8 *dest, u8 unused) +static void sub_804F728(const u8 *name, u8 *dest, u8 unused) { sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); } -void sub_804F748(u8 who) +static void sub_804F748(u8 who) { int i; @@ -4201,7 +4201,7 @@ void sub_804F748(u8 who) } } -void sub_804F890(u8 who) +static void sub_804F890(u8 who) { u16 i, curHp, maxHp; @@ -4226,7 +4226,7 @@ void sub_804F890(u8 who) } } -void sub_804F964(void) +static void sub_804F964(void) { int i, j; for (i = 0; i < 2; i++) @@ -4238,7 +4238,7 @@ void sub_804F964(void) } } -void sub_804F9D8(void) +static void sub_804F9D8(void) { int i; for (i = 0; i < 11; i++) @@ -4248,7 +4248,7 @@ void sub_804F9D8(void) } } -u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +static u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) { int i, sum; struct LinkPlayer *player; @@ -4374,7 +4374,7 @@ s32 sub_804FB34(void) return 0; } -bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { -- cgit v1.2.3 From 84e1b97eacadbf857847b173218176d9b22ab144 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 15:09:13 -0400 Subject: Ape trade graphics from Emerald --- src/trade.c | 14 +++--- src/trade_scene.c | 138 ++++++++++++++++++++++++++++++------------------------ 2 files changed, 84 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index f23ff5400..66c44a010 100644 --- a/src/trade.c +++ b/src/trade.c @@ -152,10 +152,10 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); -static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); -static const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); -static const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); +static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); +static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); +static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); +static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); static const struct OamData gOamData_8261C30 = { .shape = SPRITE_SHAPE(32x16), @@ -253,7 +253,7 @@ static const struct SpriteTemplate gUnknown_8261CC8 = { .callback = SpriteCallbackDummy }; -static const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); +static const u16 gUnknown_8261CE0[] = INCBIN_U16("graphics/trade/text.gbapal"); static const struct SpritePalette gUnknown_8261D00 = { gUnknown_8261CE0, @@ -2866,10 +2866,10 @@ static void sub_804D694(u8 state) LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60); LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); - LoadBgTilemap(2, gUnknown_8260C30, 0x800, 0); + LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0); break; case 1: - LoadBgTilemap(3, gUnknown_8261430, 0x800, 0); + LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0); sub_804F284(0); sub_804F284(1); CopyBgTilemapBufferToVram(1); diff --git a/src/trade_scene.c b/src/trade_scene.c index ebb788e3d..3a80ba3de 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -78,20 +78,20 @@ struct TradeAnimationResources { /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; /*0xD2*/ u8 pokeballSpriteId; - /*0xD3*/ u8 unk_D3; - /*0xD4*/ u16 unk_D4; - /*0xD6*/ u16 unk_D6; + /*0xD3*/ u8 pokeballSpriteId2; + /*0xD4*/ u16 bg2texX; + /*0xD6*/ u16 bg2texY; /*0xD8*/ u16 unk_D8; /*0xDA*/ u16 unk_DA; - /*0xDC*/ u16 unk_DC; - /*0xDE*/ u16 unk_DE; + /*0xDC*/ u16 bg2srcX; + /*0xDE*/ u16 bg2srcY; /*0xE0*/ s16 bg1vofs; /*0xE2*/ s16 bg1hofs; /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; /*0xE8*/ u16 sXY; /*0xEA*/ u16 unk_EA; - /*0xEC*/ u16 unk_EC; + /*0xEC*/ u16 bg2alpha; /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; /*0xF4*/ u16 cachedMapMusic; @@ -137,6 +137,34 @@ void Task_AnimateWirelessSignal(u8 taskId); void c3_0805465C(u8 taskId); void sub_8054734(u8 taskId); +const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); +const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); +const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); +const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); +const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); +const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); +const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); +const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); +const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin"); +const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); +const u8 sFiller_08335760[64] = {}; +const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); +const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); + extern const u8 gUnknown_8261EC7[]; extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; extern const u16 gTradeGlow2PaletteAnimTable[]; @@ -144,18 +172,6 @@ extern const struct SpriteSheet gUnknown_826CDD4; extern const struct SpritePalette gUnknown_826CDDC; extern const struct BgTemplate gUnknown_826D1D4[4]; extern const struct WindowTemplate gUnknown_826D1BC[]; -extern const u16 gUnknown_826AA5C[]; -extern const u16 gUnknown_8269A5C[]; -extern const u32 gUnknown_3379A0Bin[]; -extern const u16 gUnknown_826407C[]; -extern const u16 gUnknown_826BB5C[]; -extern const u16 gUnknown_826BD5C[]; -extern const u16 gUnknown_826BF5C[]; -extern const u16 gUnknown_826701C[]; -extern const u16 gUnknown_826985C[]; -extern const u16 gUnknown_826995C[]; -extern const u32 gWirelessSignal4bpp[]; -extern const u32 gUnknown_826C60C[]; extern const struct SpriteSheet gUnknown_826CE2C; extern const struct SpriteSheet gUnknown_826CE7C; extern const struct SpriteSheet gUnknown_826CEB0; @@ -240,7 +256,7 @@ void sub_804FE00(struct Sprite * sprite) void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); + DoBgAffineSet(&affine, sTradeData->bg2texX * 0x100, sTradeData->bg2texY * 0x100, sTradeData->bg2srcX, sTradeData->bg2srcY, sTradeData->sXY, sTradeData->sXY, sTradeData->bg2alpha); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -374,14 +390,14 @@ void CB2_InitTradeAnim_LinkTrade(void) sTradeData->unk_8C = 0; sTradeData->state = 0; sTradeData->isLinkTrade = TRUE; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; + sTradeData->bg2texX = 64; + sTradeData->bg2texY = 64; sTradeData->unk_D8 = 0; sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; + sTradeData->bg2srcX = 120; + sTradeData->bg2srcY = 80; sTradeData->sXY = 256; - sTradeData->unk_EC = 0; + sTradeData->bg2alpha = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) @@ -550,14 +566,14 @@ void CB2_InitTradeAnim_InGameTrade(void) sTradeData->isLinkTrade = FALSE; sTradeData->unk_8C = 0; sTradeData->state = 0; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; + sTradeData->bg2texX = 64; + sTradeData->bg2texY = 64; sTradeData->unk_D8 = 0; sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; + sTradeData->bg2srcX = 120; + sTradeData->bg2srcY = 80; sTradeData->sXY = 256; - sTradeData->unk_EC = 0; + sTradeData->bg2alpha = 0; sTradeData->timer = 0; gMain.state = 5; break; @@ -747,11 +763,11 @@ void SetTradeSequenceBgGpuRegs(u8 state) case 4: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; + sTradeData->bg2texX = 0x40; + sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x20; sTradeData->unk_EA = 0x400; - sTradeData->unk_EC = 0; + sTradeData->bg2alpha = 0; DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); if (sTradeData->isCableTrade) { @@ -769,13 +785,13 @@ void SetTradeSequenceBgGpuRegs(u8 state) case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; + sTradeData->bg2texX = 0x40; + sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x100; sTradeData->unk_EA = 0x80; - sTradeData->unk_DC = 0x78; - sTradeData->unk_DE = 0x50; - sTradeData->unk_EC = 0; + sTradeData->bg2srcX = 0x78; + sTradeData->bg2srcY = 0x50; + sTradeData->bg2alpha = 0; DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); if (sTradeData->isCableTrade) { @@ -891,8 +907,8 @@ bool8 sub_8050F3C(void) case 12: if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Outbound; DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); sTradeData->state++; } @@ -1208,21 +1224,21 @@ bool8 sub_8050F3C(void) } break; case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->pokeballSpriteId2].data[3] = 74; + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->pokeballSpriteId2], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->pokeballSpriteId2], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 16, RGB_WHITEALPHA); sTradeData->state++; sTradeData->timer = 0; break; case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); sTradeData->state++; break; case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + if (gSprites[sTradeData->pokeballSpriteId2].callback == SpriteCallbackDummy) { HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); sTradeData->state++; @@ -1235,8 +1251,8 @@ bool8 sub_8050F3C(void) gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokeballSpriteId2]); + DestroySprite(&gSprites[sTradeData->pokeballSpriteId2]); sTradeData->state++; break; case 67: @@ -1388,8 +1404,8 @@ bool8 sub_805232C(void) case 12: if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Outbound; DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); sTradeData->state++; } @@ -1729,21 +1745,21 @@ bool8 sub_805232C(void) } break; case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->pokeballSpriteId2].data[3] = 74; + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->pokeballSpriteId2], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->pokeballSpriteId2], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 16, RGB_WHITEALPHA); sTradeData->state++; sTradeData->timer = 0; break; case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); sTradeData->state++; break; case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + if (gSprites[sTradeData->pokeballSpriteId2].callback == SpriteCallbackDummy) { HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); sTradeData->state++; @@ -1756,8 +1772,8 @@ bool8 sub_805232C(void) gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokeballSpriteId2]); + DestroySprite(&gSprites[sTradeData->pokeballSpriteId2]); sTradeData->state++; break; case 67: -- cgit v1.2.3 From 4fae033d1a6ba2520baca924c544a8d7195ff024 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 16:01:31 -0400 Subject: Finish trade_scene data --- src/data/ingame_trades.h | 144 +++++++++++ src/trade_scene.c | 641 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 664 insertions(+), 121 deletions(-) create mode 100644 src/data/ingame_trades.h (limited to 'src') diff --git a/src/data/ingame_trades.h b/src/data/ingame_trades.h new file mode 100644 index 000000000..102b6865f --- /dev/null +++ b/src/data/ingame_trades.h @@ -0,0 +1,144 @@ +const struct InGameTrade gInGameTrades[] = { + { + .nickname = _("MIMIEN"), + .species = SPECIES_MR_MIME, + .ivs = {20, 15, 17, 24, 23, 22}, + .abilityNum = FALSE, + .otId = 1985, + .conditions = {5, 5, 5, 30, 5}, + .personality = 0x00009cae, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("REYLEY"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_ABRA + }, { + .nickname = _("ZYNX"), + .species = SPECIES_JYNX, + .ivs = {18, 17, 18, 22, 25, 21}, + .abilityNum = FALSE, + .otId = 36728, + .conditions = {5, 30, 5, 5, 5}, + .personality = 0x498a2e1d, + .heldItem = ITEM_FAB_MAIL, + .mailNum = 0, + .otName = _("DONTAE"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_POLIWHIRL + }, { + .nickname = _("MS. NIDO"), + .species = SPECIES_NIDORAN_F, + .ivs = {22, 18, 25, 19, 15, 22}, + .abilityNum = FALSE, + .otId = 63184, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x4c970b89, + .heldItem = ITEM_TINY_MUSHROOM, + .mailNum = 255, + .otName = _("SAIGE"), + .otGender = FEMALE, + .sheen = 10, + .requestedSpecies = SPECIES_NIDORAN_M + }, { + .nickname = _("CH'DING"), + .species = SPECIES_FARFETCHD, + .ivs = {20, 25, 21, 24, 15, 20}, + .abilityNum = FALSE, + .otId = 8810, + .conditions = {30, 5, 5, 5, 5}, + .personality = 0x151943d7, + .heldItem = ITEM_STICK, + .mailNum = 255, + .otName = _("ELYSSA"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_SPEAROW + }, { + .nickname = _("NINA"), + .species = SPECIES_NIDORINA, + .ivs = {22, 25, 18, 19, 22, 15}, + .abilityNum = FALSE, + .otId = 13637, + .conditions = {5, 5, 30, 5, 5}, + .personality = 0x00eeca15, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("TURNER"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_NIDORINO + }, { + .nickname = _("MARC"), + .species = SPECIES_LICKITUNG, + .ivs = {24, 19, 21, 15, 23, 21}, + .abilityNum = FALSE, + .otId = 1239, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x451308ab, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("HADEN"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_GOLDUCK + }, { + .nickname = _("ESPHERE"), + .species = SPECIES_ELECTRODE, + .ivs = {19, 16, 18, 25, 25, 19}, + .abilityNum = TRUE, + .otId = 50298, + .conditions = {30, 5, 5, 5, 5}, + .personality = 0x06341016, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("CLIFTON"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_RAICHU + }, { + .nickname = _("TANGENY"), + .species = SPECIES_TANGELA, + .ivs = {22, 17, 25, 16, 23, 20}, + .abilityNum = FALSE, + .otId = 60042, + .conditions = {5, 5, 30, 5, 5}, + .personality = 0x5c77ecfa, + .heldItem = ITEM_STARDUST, + .mailNum = 255, + .otName = _("NORMA"), + .otGender = FEMALE, + .sheen = 10, + .requestedSpecies = SPECIES_VENONAT + }, + { + .nickname = _("SEELOR"), + .species = SPECIES_SEEL, + .ivs = {24, 15, 22, 16, 23, 22}, + .abilityNum = FALSE, + .otId = 9853, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x482cac89, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("GARETT"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_PONYTA + } +}; + +const u16 sInGameTradeMailMessages[][10] = { + { + EC_WORD_THAT_S, + EC_WORD_A, + EC_WORD_HEALTHY, + EC_POKEMON2(JYNX), + EC_WORD_EXCL, + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_IT + } +}; diff --git a/src/trade_scene.c b/src/trade_scene.c index 3a80ba3de..bcde7a55d 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -35,6 +35,7 @@ #include "save.h" #include "load_save.h" #include "random.h" +#include "trade_scene.h" #include "constants/species.h" #include "constants/items.h" #include "constants/easy_chat.h" @@ -108,90 +109,488 @@ struct TradeAnimationResources { /*0x10C*/ u8 win0bottom; }; -EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; - -void CB2_InitTradeAnim_LinkTrade(void); -void sub_805049C(void); -void sub_80504B0(void); -void TradeAnimInit_LoadGfx(void); -void CB2_RunTradeAnim_InGameTrade(void); -void SetTradeSequenceBgGpuRegs(u8 idx); -void sub_8050DE0(void); -void sub_8050E24(void); -u8 sub_8050F14(void); -u8 sub_8050F3C(void); -u8 sub_805232C(void); -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); -void BufferInGameTradeMonName(void); +static EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; + +static void SpriteCB_TradeGlowCable(struct Sprite * sprite); +static void SpriteCB_TradeGlowWireless(struct Sprite * sprite); +static void SpriteCB_TradeGlowCore(struct Sprite * sprite); +static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite); +static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite); +static void sub_804FE00(struct Sprite * sprite); +static void TradeAnimInit_LoadGfx(void); +static void CB2_RunTradeAnim_InGameTrade(void); +static void SetTradeSequenceBgGpuRegs(u8 idx); +static void sub_8050DE0(void); +static void sub_8050E24(void); +static u8 sub_8050F14(void); +static u8 sub_8050F3C(void); +static u8 sub_805232C(void); +static void SpriteCB_TradePokeball_Default(struct Sprite * sprite); +static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); +static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +static void BufferInGameTradeMonName(void); static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); -void CB2_RunTradeAnim_LinkTrade(void); -void sub_8053E1C(void); -void sub_8053E8C(void); -void sub_80543C4(void); -void sub_8054470(u8 taskId); -void CheckPartnersMonForRibbons(void); -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); -void Task_AnimateWirelessSignal(u8 taskId); -void c3_0805465C(u8 taskId); -void sub_8054734(u8 taskId); - -const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); -const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); -const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); -const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); -const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); -const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); -const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); -const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); -const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); -const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); -const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); -const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); -const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); -const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +static void CB2_RunTradeAnim_LinkTrade(void); +static void sub_8053E1C(void); +static void sub_8053E8C(void); +static void sub_80543C4(void); +static void sub_8054470(u8 taskId); +static void CheckPartnersMonForRibbons(void); +static void Task_AnimateWirelessSignal(u8 taskId); +static void c3_0805465C(u8 taskId); +static void sub_8054734(u8 taskId); + +static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); +static const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); +static const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); +static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); +static const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); +static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); +static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); +static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin"); -const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); -const u8 sFiller_08335760[64] = {}; -const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); -const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); -const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); -const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); -const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); -const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); -const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); -const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); -const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); - -extern const u8 gUnknown_8261EC7[]; -extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; -extern const u16 gTradeGlow2PaletteAnimTable[]; -extern const struct SpriteSheet gUnknown_826CDD4; -extern const struct SpritePalette gUnknown_826CDDC; -extern const struct BgTemplate gUnknown_826D1D4[4]; -extern const struct WindowTemplate gUnknown_826D1BC[]; -extern const struct SpriteSheet gUnknown_826CE2C; -extern const struct SpriteSheet gUnknown_826CE7C; -extern const struct SpriteSheet gUnknown_826CEB0; -extern const struct SpriteSheet gUnknown_826CF28; -extern const struct SpritePalette gUnknown_826CE34; -extern const struct SpritePalette gUnknown_826CE3C; -extern const struct InGameTrade gInGameTrades[]; -extern const struct SpriteTemplate sTradePokeballSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CF30; -extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CE44; -extern const struct SpriteTemplate sGlowBallSpriteTemplate; -extern const union AffineAnimCmd *const gUnknown_826CF88[]; -extern const struct SpriteTemplate gUnknown_826CF48; -extern const s8 gUnknown_826D1E4[]; -extern const u16 sInGameTradeMailMessages[][10]; -extern const u8 gUnknown_826D250[][2]; +static const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); +static const u8 sFiller_08335760[64] = {}; +static const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +static const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +static const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +static const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +static const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +static const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +static const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +static const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +static const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); + +static const struct OamData gOamData_826CD00 = { + .affineMode = ST_OAM_AFFINE_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16) +}; + +static const union AnimCmd gAnimCmd_826CD08[] = { + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME(0x04, 3), + ANIMCMD_FRAME(0x08, 3), + ANIMCMD_FRAME(0x0c, 3), + ANIMCMD_FRAME(0x10, 3), + ANIMCMD_FRAME(0x14, 3), + ANIMCMD_FRAME(0x18, 3), + ANIMCMD_FRAME(0x1c, 3), + ANIMCMD_FRAME(0x20, 3), + ANIMCMD_FRAME(0x24, 3), + ANIMCMD_FRAME(0x28, 3), + ANIMCMD_FRAME(0x2c, 3), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_826CD44[] = { + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME(0x04, 3), + ANIMCMD_FRAME(0x08, 3), + ANIMCMD_FRAME(0x0c, 3), + ANIMCMD_FRAME(0x10, 3), + ANIMCMD_FRAME(0x14, 3), + ANIMCMD_FRAME(0x18, 3), + ANIMCMD_FRAME(0x1c, 3), + ANIMCMD_FRAME(0x20, 3), + ANIMCMD_FRAME(0x24, 3), + ANIMCMD_FRAME(0x28, 3), + ANIMCMD_FRAME(0x2c, 3), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CD80[] = { + gAnimCmd_826CD08, + gAnimCmd_826CD44 +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CD88[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CD98[] = { + AFFINEANIMCMD_FRAME(-8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CDA8[] = { + AFFINEANIMCMD_FRAME(96, 256, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 5), + AFFINEANIMCMD_FRAME(8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CDC8[] = { + gAffineAnimCmd_826CD88, + gAffineAnimCmd_826CD98, + gAffineAnimCmd_826CDA8 +}; + +static const struct SpriteSheet gUnknown_826CDD4 = { + gTradeBallTiles, + 0x600, + 5557 +}; + +static const struct SpritePalette gUnknown_826CDDC = { + gTradeBallPalette, + 5558 +}; + +static const struct SpriteTemplate sTradePokeballSpriteTemplate = { + .tileTag = 5557, + .paletteTag = 5558, + .oam = &gOamData_826CD00, + .anims = gSpriteAnimTable_826CD80, + .affineAnims = gSpriteAffineAnimTable_826CDC8, + .callback = SpriteCB_TradePokeball_Default +}; + +static const struct OamData gOamData_826CDFC = { + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CE04[] = { + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CE0C[] = { + gAnimCmd_826CE04 +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CE10[] = { + AFFINEANIMCMD_FRAME(-10, -10, 0, 5), + AFFINEANIMCMD_FRAME( 10, 10, 0, 5), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CE28[] = { + gAffineAnimCmd_826CE10 +}; + +static const struct SpriteSheet gUnknown_826CE2C = { + gTradeGlow1Tiles, + 0x200, + 5550 +}; + +static const struct SpritePalette gUnknown_826CE34 = { + gUnknown_82649FC, + 5551 +}; + +static const struct SpritePalette gUnknown_826CE3C = { + gUnknown_826499C, + 5555 +}; + +static const struct SpriteTemplate gUnknown_826CE44 = { + .tileTag = 5550, + .paletteTag = 5551, + .oam = &gOamData_826CDFC, + .anims = gSpriteAnimTable_826CE0C, + .affineAnims = gSpriteAffineAnimTable_826CE28, + .callback = SpriteCB_TradeGlowCable +}; + +static const struct OamData gOamData_826CE5C = { + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CE64[] = { + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_826CE6C[] = { + ANIMCMD_FRAME(8, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CE74[] = { + gAnimCmd_826CE64, + gAnimCmd_826CE6C +}; + +static const struct SpriteSheet gUnknown_826CE7C = { + gTradeGlow2Tiles, + 0x300, + 5552 +}; + +static const struct SpriteTemplate sGlowBallSpriteTemplate = { + .tileTag = 5552, + .paletteTag = 5551, + .oam = &gOamData_826CE5C, + .anims = gSpriteAnimTable_826CE74, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TradeGlowCore +}; + +static const struct OamData gOamData_826CE9C = { + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CEA4[] = { + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CEAC[] = { + gAnimCmd_826CEA4 +}; + +static const struct SpriteSheet gUnknown_826CEB0 = { + gTradeCableEndTiles, + 0x100, + 5554 +}; + +static const struct SpriteTemplate sGameLinkCableEndSpriteTemplate = { + .tileTag = 5554, + .paletteTag = 5555, + .oam = &gOamData_826CE9C, + .anims = gSpriteAnimTable_826CEAC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GameLinkCableEnd_Outbound +}; + +static const struct OamData gOamData_826CED0 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CED8[] = { + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x60, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_LOOP(8), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_826CEFC[] = { + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x60, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_LOOP(2), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CF20[] = { + gAnimCmd_826CED8 +}; + +static const union AnimCmd *const gSpriteAnimTable_826CF24[] = { + gAnimCmd_826CEFC +}; + +static const struct SpriteSheet gUnknown_826CF28 = { + gTradeGBAScreenTiles, + 0x1000, + 5556 +}; + +static const struct SpriteTemplate gUnknown_826CF30 = { + .tileTag = 5556, + .paletteTag = 5555, + .oam = &gOamData_826CED0, + .anims = gSpriteAnimTable_826CF20, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_804FE00 +}; + +static const struct SpriteTemplate gUnknown_826CF48 = { + .tileTag = 5556, + .paletteTag = 5555, + .oam = &gOamData_826CED0, + .anims = gSpriteAnimTable_826CF24, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_804FE00 +}; + +static const u16 gTradeGlow2PaletteAnimTable[] = { + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(31, 31, 31), + RGB(31, 31, 31), + RGB(31, 31, 31), + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(31, 31, 31), + RGB(31, 31, 31), + RGB(31, 31, 31) +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CF78[] = { + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const gUnknown_826CF88[] = { + gAffineAnimCmd_826CF78 +}; + +#include "data/ingame_trades.h" + +static const struct WindowTemplate gUnknown_826D1BC[] = { + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0, + .baseBlock = 0x040 + }, DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gUnknown_826D1CC = { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0bc +}; + +static const struct BgTemplate gUnknown_826D1D4[] = { + { + .bg = 0, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 18, + .screenSize = 1, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +static const s8 gTradeBallVerticalVelocityTable[] = { + 0, 0, 1, 0, + 1, 0, 1, 1, + 1, 1, 2, 2, + 2, 2, 3, 3, + 3, 3, 4, 4, + 4, 4, -4, -4, + -4, -3, -3, -3, + -3, -2, -2, -2, + -2, -1, -1, -1, + -1, 0, -1, 0, + -1, 0, 0, 0, + 0, 0, 1, 0, + 1, 0, 1, 1, + 1, 1, 2, 2, + 2, 2, 3, 3, + 3, 3, 4, 4, + 4, 4, -4, -3, + -3, -2, -2, -1, + -1, -1, 0, -1, + 0, 0, 0, 0, + 0, 0, 1, 0, + 1, 1, 1, 2, + 2, 3, 3, 4, + -4, -3, -2, -1, + -1, -1, 0, 0, + 0, 0, 1, 0, + 1, 1, 2, 3 +}; + +static const u8 gUnknown_826D250[][2] = { + {0, 1}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {5, 2}, + {6, 2}, + {7, 2}, + {8, 2}, + {9, 2}, + {10, 3}, + {11, 3}, + {12, 3}, + {13, 4}, + {14, 5}, + {15, 2}, + {0, 1}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {5, 2}, + {6, 2}, + {7, 2}, + {8, 2}, + {9, 2}, + {10, 3}, + {11, 3}, + {12, 3}, + {13, 4}, + {14, 5}, + {16, 1}, + {16, -1} +}; // Sprite callback for link cable trade glow -void SpriteCB_TradeGlowCable(struct Sprite * sprite) +static void SpriteCB_TradeGlowCable(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 10) @@ -202,7 +601,7 @@ void SpriteCB_TradeGlowCable(struct Sprite * sprite) } // Sprite callback for wireless trade glow -void SpriteCB_TradeGlowWireless(struct Sprite * sprite) +static void SpriteCB_TradeGlowWireless(struct Sprite * sprite) { if (!sprite->invisible) { @@ -216,7 +615,7 @@ void SpriteCB_TradeGlowWireless(struct Sprite * sprite) } // Palette flash for trade glow core -void SpriteCB_TradeGlowCore(struct Sprite * sprite) +static void SpriteCB_TradeGlowCore(struct Sprite * sprite) { if (sprite->data[1] == 0) { @@ -227,7 +626,7 @@ void SpriteCB_TradeGlowCore(struct Sprite * sprite) } } -void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) +static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y++; @@ -235,7 +634,7 @@ void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) DestroySprite(sprite); } -void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) +static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y--; @@ -243,7 +642,7 @@ void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) DestroySprite(sprite); } -void sub_804FE00(struct Sprite * sprite) +static void sub_804FE00(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 15) @@ -253,7 +652,7 @@ void sub_804FE00(struct Sprite * sprite) } } -void SetTradeBGAffine(void) +static void SetTradeBGAffine(void) { struct BgAffineDstData affine; DoBgAffineSet(&affine, sTradeData->bg2texX * 0x100, sTradeData->bg2texY * 0x100, sTradeData->bg2srcX, sTradeData->bg2srcY, sTradeData->sXY, sTradeData->sXY, sTradeData->bg2alpha); @@ -292,14 +691,14 @@ static void VBlankCB_TradeAnim(void) TransferPlttBuffer(); } -void sub_804FF24(void) +static void sub_804FF24(void) { sTradeData->unk_8A = 0; sTradeData->unk_88 = 0; sTradeData->unk_89 = 0; } -void sub_804FF4C(void) +static void sub_804FF4C(void) { if (sTradeData->unk_88 == sTradeData->unk_89) sTradeData->unk_8A++; @@ -318,14 +717,14 @@ void sub_804FF4C(void) sTradeData->unk_89 = sTradeData->unk_88; } -u32 sub_804FFC4(void) +static u32 sub_804FFC4(void) { if (gReceivedRemoteLinkPlayers) return GetMultiplayerId(); return 0; } -void sub_804FFE4(u8 whichParty, u8 a1) +static void sub_804FFE4(u8 whichParty, u8 a1) { int pos = 0; struct Pokemon *mon = NULL; @@ -520,7 +919,7 @@ void sub_80504B0(void) CopyWindowToVram(0, 3); } -void TradeAnimInit_LoadGfx(void) +static void TradeAnimInit_LoadGfx(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(FALSE); @@ -544,7 +943,7 @@ void TradeAnimInit_LoadGfx(void) LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); } -void CB2_InitTradeAnim_InGameTrade(void) +static void CB2_InitTradeAnim_InGameTrade(void) { u8 otName[11]; @@ -647,7 +1046,7 @@ static void RS_TryEnableNationalPokedex(void) EnableNationalPokedex();*/ } -void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) +static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) { u8 friendship; @@ -681,7 +1080,7 @@ void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) RS_TryEnableNationalPokedex(); } -void sub_80508F4(void) +static void sub_80508F4(void) { switch (sTradeData->unk_93) { @@ -697,7 +1096,7 @@ void sub_80508F4(void) } } -void CB2_RunTradeAnim_InGameTrade(void) +static void CB2_RunTradeAnim_InGameTrade(void) { sub_8050F14(); RunTasks(); @@ -707,7 +1106,7 @@ void CB2_RunTradeAnim_InGameTrade(void) UpdatePaletteFade(); } -void SetTradeSequenceBgGpuRegs(u8 state) +static void SetTradeSequenceBgGpuRegs(u8 state) { switch (state) { @@ -814,7 +1213,7 @@ void SetTradeSequenceBgGpuRegs(u8 state) } } -void sub_8050DE0(void) +static void sub_8050DE0(void) { LoadSpriteSheet(&gUnknown_826CE2C); LoadSpriteSheet(&gUnknown_826CE7C); @@ -824,7 +1223,7 @@ void sub_8050DE0(void) LoadSpritePalette(&gUnknown_826CE3C); } -void sub_8050E24(void) +static void sub_8050E24(void) { u8 nickname[20]; u8 mpId; @@ -848,7 +1247,7 @@ void sub_8050E24(void) } } -bool8 sub_8050F14(void) +static bool8 sub_8050F14(void) { if (sTradeData->isCableTrade) return sub_8050F3C(); @@ -856,7 +1255,7 @@ bool8 sub_8050F14(void) return sub_805232C(); } -bool8 sub_8050F3C(void) +static bool8 sub_8050F3C(void) { u16 evoTarget; @@ -1353,7 +1752,7 @@ bool8 sub_8050F3C(void) return FALSE; } -bool8 sub_805232C(void) +static bool8 sub_805232C(void) { u16 evoTarget; @@ -1874,7 +2273,7 @@ bool8 sub_805232C(void) return FALSE; } -void sub_8053788(void) +static void sub_8053788(void) { u16 evoSpecies; switch (gMain.state) @@ -1900,7 +2299,7 @@ void sub_8053788(void) UpdatePaletteFade(); } -void sub_805383C(void) +static void sub_805383C(void) { u8 recvStatus; sub_804FFC4(); @@ -1921,7 +2320,7 @@ void sub_805383C(void) } } -void SpriteCB_TradePokeball_Default(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Default(struct Sprite * sprite) { sprite->pos1.y += sprite->data[0] / 10; sprite->data[5] += sprite->data[1]; @@ -1942,9 +2341,9 @@ void SpriteCB_TradePokeball_Default(struct Sprite * sprite) } } -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) { - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; if (sprite->data[0] == 22) PlaySE(SE_KON); sprite->data[0]++; @@ -1957,14 +2356,14 @@ void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) } } -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) { if (sprite->data[1] == 20) StartSpriteAffineAnim(sprite, 1); sprite->data[1]++; if (sprite->data[1] > 20) { - sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; + sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 23) { @@ -1974,7 +2373,7 @@ void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) } } -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) { if (sprite->data[2] == 0) { @@ -1994,7 +2393,7 @@ void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) PlaySE(SE_KON3); if (sprite->data[0] == 107) PlaySE(SE_KON4); - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 108) sprite->callback = SpriteCallbackDummy; @@ -2012,7 +2411,7 @@ u16 GetInGameTradeSpeciesInfo(void) return inGameTrade->requestedSpecies; } -void BufferInGameTradeMonName(void) +static void BufferInGameTradeMonName(void) { // Populates gStringVar1 with the nickname of the sent Pokemon and // gStringVar2 with the name of the offered species. @@ -2023,7 +2422,7 @@ void BufferInGameTradeMonName(void) StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); } -void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) +static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) { const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); @@ -2094,7 +2493,7 @@ void CreateInGameTradePokemon(void) CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); } -void CB2_RunTradeAnim_LinkTrade(void) +static void CB2_RunTradeAnim_LinkTrade(void) { if (sub_8050F14() == TRUE) { @@ -2114,7 +2513,7 @@ void CB2_RunTradeAnim_LinkTrade(void) UpdatePaletteFade(); } -void sub_8053E1C(void) +static void sub_8053E1C(void) { u8 mpId = sub_804FFC4(); sub_805383C(); @@ -2131,7 +2530,7 @@ void sub_8053E1C(void) UpdatePaletteFade(); } -void sub_8053E8C(void) +static void sub_8053E8C(void) { switch (gMain.state) { @@ -2301,7 +2700,7 @@ void sub_8053E8C(void) UpdatePaletteFade(); } -void sub_80543C4(void) +static void sub_80543C4(void) { if (!gPaletteFade.active) { @@ -2329,7 +2728,7 @@ void DoInGameTradeScene(void) HelpSystem_Disable(); } -void sub_8054470(u8 taskId) +static void sub_8054470(u8 taskId) { if (!gPaletteFade.active) { @@ -2339,7 +2738,7 @@ void sub_8054470(u8 taskId) } } -void CheckPartnersMonForRibbons(void) +static void CheckPartnersMonForRibbons(void) { u8 nRibbons = 0; u8 i; @@ -2366,7 +2765,7 @@ void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) CopyWindowToVram(windowId, 3); } -void Task_AnimateWirelessSignal(u8 taskId) +static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; u16 r2 = 16 * gUnknown_826D250[data[0]][0]; @@ -2397,7 +2796,7 @@ void Task_AnimateWirelessSignal(u8 taskId) data[1]++; } -void c3_0805465C(u8 taskId) +static void c3_0805465C(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -2426,7 +2825,7 @@ void c3_0805465C(u8 taskId) } } -void sub_8054734(u8 taskId) +static void sub_8054734(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From 1ba6cb22450b729cc2ac1b7fd72b2b27e5ec38c7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 16:51:43 -0400 Subject: Some renaming; resolve trade bss --- src/trade.c | 201 ++++++++++++++++++++++++++++-------------------------- src/trade_scene.c | 4 +- 2 files changed, 107 insertions(+), 98 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 66c44a010..817182efe 100644 --- a/src/trade.c +++ b/src/trade.c @@ -83,10 +83,10 @@ struct TradeMenuResources /*0x00A9*/ u8 unk_A9[11]; /*0x00B4*/ u8 filler_B4[0x8D0-0xB4]; /*0x08D0*/ struct { - bool8 unk_0; - u16 unk_2; - u8 unk_4; - } unk_8D0[4]; + bool8 active; + u16 delay; + u8 kind; + } cron[4]; /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; @@ -103,10 +103,8 @@ enum TradeStatusMsg TRADESTATMSG_PARTNERMONCANTBETRADED }; -IWRAM_DATA vu16 gUnknown_3000E78; - -static EWRAM_DATA u8 *gUnknown_2031C90 = NULL; -static EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +static EWRAM_DATA u8 *sSpriteTextTileBuffer = NULL; +static EWRAM_DATA u8 *sSpriteTextTilePtrs[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; @@ -130,11 +128,11 @@ static void sub_804F3B4(void); static void sub_804F3C8(u8 a0); static void TradeMenuAction_Summary(u8 taskId); static void TradeMenuAction_Trade(u8 taskId); -static void sub_804F488(u16 a0, u8 a1); -static void sub_804F4DC(void); +static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind); +static void RunScheduledLinkTasks(void); static void PrintTradeErrorOrStatusMessage(u8 str_idx); static bool8 sub_804F610(void); -static void sub_804F728(const u8 *name, u8 *a1, u8 unused); +static void RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 unused); static void sub_804F748(u8 side); static void sub_804F890(u8 side); static void sub_804F964(void); @@ -429,13 +427,23 @@ const u8 gUnknown_8261EC6[] = _(""); const u8 gUnknown_8261EC7[] = _("\n"); const u8 gUnknown_8261EC9[] = _("/"); -static const u8 *const gUnknown_8261ECC[] = { - gUnknown_841E0B9, - gUnknown_841E0C0, - gUnknown_841E0D2, - gUnknown_841E0DA, - gUnknown_841E0E0, - gUnknown_841E0EE +enum TradeUIText +{ + TRADEUITEXT_CANCEL = 0, + TRADEUITEXT_CHOOSE, + TRADEUITEXT_SUMMARY, + TRADEUITEXT_TRADE, + TRADEUITEXT_ASKCANCEL, + TRADEUITEXT_PRESSBTOEXIT +}; + +static const u8 *const sTradeUITextPtrs[] = { + gTradeText_Cancel, + gTradeText_ChooseAPokemon, + gTradeText_Summary, + gTradeText_Trade, + gTradeText_CancelTrade, + gTradeText_PressBButtonToExit }; static const struct MenuAction gUnknown_8261EE4[] = { @@ -674,6 +682,7 @@ static const u8 gUnknown_8262055[][2] = { static void sub_804C600(void) { int i; + static vu16 dummy; ResetSpriteData(); FreeAllSpritePalettes(); @@ -689,7 +698,7 @@ static void sub_804C600(void) if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); - gUnknown_3000E78 = 590; // ? + dummy = 590; // ? for (i = 0; i < NELEMS(gUnknown_8261F2C) - 1; i++) { ClearWindowTilemap(i); @@ -730,11 +739,11 @@ static void sub_804C728(void) case 0: sTradeMenuResourcesPtr = AllocZeroed(sizeof(*sTradeMenuResourcesPtr)); sub_804C600(); - gUnknown_2031C90 = AllocZeroed(0xE00); + sSpriteTextTileBuffer = AllocZeroed(0xE00); for (i = 0; i < 14; i++) { - gUnknown_2031C94[i] = &gUnknown_2031C90[i * 256]; + sSpriteTextTilePtrs[i] = &sSpriteTextTileBuffer[i * 256]; } gMain.state++; @@ -877,11 +886,11 @@ static void sub_804C728(void) gMain.state++; break; case 10: - sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3); id = GetMultiplayerId(); - sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); - sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); - sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + PSS_RenderTextToVramViaBuffer(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24); gMain.state++; sTradeMenuResourcesPtr->unk_A8 = 0; break; @@ -1047,13 +1056,13 @@ static void sub_804C728(void) "\tbl AllocZeroed\n" "\tstr r0, [r4]\n" "\tbl sub_804C600\n" - "\tldr r4, _0804C7F0 @ =gUnknown_2031C90\n" + "\tldr r4, _0804C7F0 @ =sSpriteTextTileBuffer\n" "\tmovs r0, 0xE0\n" "\tlsls r0, 4\n" "\tbl AllocZeroed\n" "\tstr r0, [r4]\n" "\tmovs r6, 0\n" - "\tldr r2, _0804C7F4 @ =gUnknown_2031C94\n" + "\tldr r2, _0804C7F4 @ =sSpriteTextTilePtrs\n" "_0804C7CE:\n" "\tlsls r1, r6, 8\n" "\tldr r0, [r4]\n" @@ -1070,8 +1079,8 @@ static void sub_804C728(void) "\t.align 2, 0\n" "_0804C7E8: .4byte sTradeMenuResourcesPtr\n" "_0804C7EC: .4byte 0x000010f0\n" - "_0804C7F0: .4byte gUnknown_2031C90\n" - "_0804C7F4: .4byte gUnknown_2031C94\n" + "_0804C7F0: .4byte sSpriteTextTileBuffer\n" + "_0804C7F4: .4byte sSpriteTextTilePtrs\n" "_0804C7F8: .4byte gMain\n" "_0804C7FC:\n" "\tldr r2, _0804C864 @ =gPaletteFade\n" @@ -1501,7 +1510,7 @@ static void sub_804C728(void) "_0804CB9C:\n" "\tldr r0, _0804CC14 @ =gSaveBlock2Ptr\n" "\tldr r0, [r0]\n" - "\tldr r6, _0804CC18 @ =gUnknown_2031C94\n" + "\tldr r6, _0804CC18 @ =sSpriteTextTilePtrs\n" "\tldr r1, [r6]\n" "\tldr r5, _0804CC1C @ =gDecompressionBuffer\n" "\tstr r5, [sp]\n" @@ -1509,7 +1518,7 @@ static void sub_804C728(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tbl GetMultiplayerId\n" "\tlsls r0, 24\n" "\tmovs r1, 0x80\n" @@ -1526,8 +1535,8 @@ static void sub_804C728(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" - "\tldr r4, _0804CC24 @ =gUnknown_8261ECC\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" + "\tldr r4, _0804CC24 @ =sTradeUITextPtrs\n" "\tldr r0, [r4]\n" "\tldr r1, [r6, 0x18]\n" "\tstr r5, [sp]\n" @@ -1535,11 +1544,11 @@ static void sub_804C728(void) "\tstr r2, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tldr r0, [r4, 0x4]\n" "\tldr r1, [r6, 0x20]\n" "\tmovs r2, 0x18\n" - "\tbl sub_804F728\n" + "\tbl RenderTextToVramViaBuffer\n" "\tldr r1, _0804CC28 @ =gMain\n" "\tmovs r0, 0x87\n" "\tlsls r0, 3\n" @@ -1555,10 +1564,10 @@ static void sub_804C728(void) "\tb _0804CEE6\n" "\t.align 2, 0\n" "_0804CC14: .4byte gSaveBlock2Ptr\n" - "_0804CC18: .4byte gUnknown_2031C94\n" + "_0804CC18: .4byte sSpriteTextTilePtrs\n" "_0804CC1C: .4byte gDecompressionBuffer\n" "_0804CC20: .4byte gLinkPlayers + 8\n" - "_0804CC24: .4byte gUnknown_8261ECC\n" + "_0804CC24: .4byte sTradeUITextPtrs\n" "_0804CC28: .4byte gMain\n" "_0804CC2C: .4byte sTradeMenuResourcesPtr\n" "_0804CC30:\n" @@ -1987,11 +1996,11 @@ void sub_804CF14(void) gMain.state++; break; case 10: - sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3); id = GetMultiplayerId(); - sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); - sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); - sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + PSS_RenderTextToVramViaBuffer(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24); gMain.state++; sTradeMenuResourcesPtr->unk_A8 = 0; break; @@ -2383,7 +2392,7 @@ void sub_804CF14(void) "_0804D19C:\n" "\tldr r0, _0804D214 @ =gSaveBlock2Ptr\n" "\tldr r0, [r0]\n" - "\tldr r6, _0804D218 @ =gUnknown_2031C94\n" + "\tldr r6, _0804D218 @ =sSpriteTextTilePtrs\n" "\tldr r1, [r6]\n" "\tldr r5, _0804D21C @ =gDecompressionBuffer\n" "\tstr r5, [sp]\n" @@ -2391,7 +2400,7 @@ void sub_804CF14(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tbl GetMultiplayerId\n" "\tlsls r0, 24\n" "\tmovs r1, 0x80\n" @@ -2408,8 +2417,8 @@ void sub_804CF14(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" - "\tldr r4, _0804D224 @ =gUnknown_8261ECC\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" + "\tldr r4, _0804D224 @ =sTradeUITextPtrs\n" "\tldr r0, [r4]\n" "\tldr r1, [r6, 0x18]\n" "\tstr r5, [sp]\n" @@ -2417,11 +2426,11 @@ void sub_804CF14(void) "\tstr r2, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tldr r0, [r4, 0x4]\n" "\tldr r1, [r6, 0x20]\n" "\tmovs r2, 0x18\n" - "\tbl sub_804F728\n" + "\tbl RenderTextToVramViaBuffer\n" "\tldr r1, _0804D228 @ =gMain\n" "\tmovs r0, 0x87\n" "\tlsls r0, 3\n" @@ -2438,10 +2447,10 @@ void sub_804CF14(void) "\tb _0804D4D2\n" "\t.align 2, 0\n" "_0804D214: .4byte gSaveBlock2Ptr\n" - "_0804D218: .4byte gUnknown_2031C94\n" + "_0804D218: .4byte sSpriteTextTilePtrs\n" "_0804D21C: .4byte gDecompressionBuffer\n" "_0804D220: .4byte gLinkPlayers + 8\n" - "_0804D224: .4byte gUnknown_8261ECC\n" + "_0804D224: .4byte sTradeUITextPtrs\n" "_0804D228: .4byte gMain\n" "_0804D22C: .4byte sTradeMenuResourcesPtr\n" "_0804D230:\n" @@ -2820,7 +2829,7 @@ static void sub_804D5A4(void) { if (IsLinkRfuTaskFinished()) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); FreeAllWindowBuffers(); Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; @@ -2832,7 +2841,7 @@ static void sub_804D5A4(void) { if (gReceivedRemoteLinkPlayers == 0) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); FreeAllWindowBuffers(); Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; @@ -2844,7 +2853,7 @@ static void sub_804D5A4(void) static void sub_804D638(void) { RunTradeMenuCallback(); - sub_804F4DC(); + RunScheduledLinkTasks(); sub_804EAE4(0); sub_804EAE4(1); SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuResourcesPtr->unk_0++); @@ -3080,7 +3089,7 @@ static bool8 shedinja_maker_maybe(void) static void sub_804DBAC(void) { - sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); + RenderTextToVramViaBuffer(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); } static void sub_804DBD4(u8 a0, u8 a1) @@ -3173,7 +3182,7 @@ static void sub_804DDF0(void) sTradeMenuResourcesPtr->unk_6F = 6; sTradeMenuResourcesPtr->linkData[0] = 0xDDDD; sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; } else if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 2) @@ -3181,7 +3190,7 @@ static void sub_804DDF0(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); sTradeMenuResourcesPtr->linkData[0] = 0xEECC; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; sTradeMenuResourcesPtr->unk_6F = 8; @@ -3191,7 +3200,7 @@ static void sub_804DDF0(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; sTradeMenuResourcesPtr->unk_6F = 8; @@ -3200,7 +3209,7 @@ static void sub_804DDF0(void) { sTradeMenuResourcesPtr->linkData[0] = 0xEEBB; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; sTradeMenuResourcesPtr->unk_6F = 11; @@ -3213,7 +3222,7 @@ static void sub_804DDF0(void) { sTradeMenuResourcesPtr->linkData[0] = 0xCCDD; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = 0; sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_6F = 9; @@ -3224,7 +3233,7 @@ static void sub_804DDF0(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = 0; sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_6F = 8; @@ -3351,7 +3360,7 @@ static void sub_804E194(void) { CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0); sTradeMenuResourcesPtr->unk_6F = 4; - sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_ASKCANCEL], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } } if (JOY_NEW(R_BUTTON)) @@ -3367,7 +3376,7 @@ static void sub_804E330(void) sub_804F3B4(); sTradeMenuResourcesPtr->unk_6F = 0; gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } static void sub_804E388(void) @@ -3392,17 +3401,17 @@ static void sub_804E388(void) gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; break; case 1: - sub_804F488(3, 3); + ScheduleLinkTaskWithDelay(3, 3); sTradeMenuResourcesPtr->unk_6F = 8; break; case 2: case 4: - sub_804F488(3, 6); + ScheduleLinkTaskWithDelay(3, 6); sTradeMenuResourcesPtr->unk_6F = 8; break; case 3: case 5: - sub_804F488(3, 7); + ScheduleLinkTaskWithDelay(3, 7); sTradeMenuResourcesPtr->unk_6F = 8; break; } @@ -3431,22 +3440,22 @@ static void sub_804E494(void) } } -static u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) +static u8 sub_804E50C(u8 *flags, u8 partyCount, u8 cursorPos) { s32 i; u16 species; - u8 r4 = 0; - for (i = 0; i < a1; i++) + u8 count = 0; + for (i = 0; i < partyCount; i++) { - if (a2 != i) - r4 += a0[i]; + if (cursorPos != i) + count += flags[i]; } species = GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_SPECIES); if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_OBEDIENCE)) return 2; - if (r4 != 0) - r4 = 1; - return r4; + if (count != 0) + count = 1; + return count; } static void sub_804E5A0(void) @@ -3462,12 +3471,12 @@ static void sub_804E5A0(void) switch (sub_804E50C(arr, sTradeMenuResourcesPtr->partyCounts[0], sTradeMenuResourcesPtr->tradeMenuCursorPosition)) { case 0: - sub_804F488(3, 3); + ScheduleLinkTaskWithDelay(3, 3); sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - sub_804F488(0xB4, 0); + ScheduleLinkTaskWithDelay(0xB4, 0); break; case 1: - sub_804F488(3, 1); + ScheduleLinkTaskWithDelay(3, 1); sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; if (IsLinkTaskFinished()) { @@ -3475,9 +3484,9 @@ static void sub_804E5A0(void) } break; case 2: - sub_804F488(3, 8); + ScheduleLinkTaskWithDelay(3, 8); sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - sub_804F488(0xB4, 0); + ScheduleLinkTaskWithDelay(0xB4, 0); break; } } @@ -3493,7 +3502,7 @@ static void sub_804E674(void) break; case 1: case MENU_B_PRESSED: - sub_804F488(3, 1); + ScheduleLinkTaskWithDelay(3, 1); if (IsLinkTaskFinished()) { sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; @@ -3524,7 +3533,7 @@ static void sub_804E744(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); sTradeMenuResourcesPtr->linkData[0] = 0xEEAA; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; sTradeMenuResourcesPtr->unk_6F = 100; sub_804E6FC(); @@ -3615,7 +3624,7 @@ static void sub_804E944(void) { if (IsLinkTaskFinished()) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); @@ -3626,7 +3635,7 @@ static void sub_804E944(void) { if (!gReceivedRemoteLinkPlayers) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); SetMainCallback2(c2_8056854); @@ -4016,7 +4025,7 @@ static void sub_804F3C8(u8 whichParty) sub_804F284(whichParty); sub_804F020(whichParty); sub_804F2E8(whichParty); - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->unk_72, 24); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->unk_72, 24); sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } @@ -4032,36 +4041,36 @@ static void TradeMenuAction_Trade(u8 taskId) CopyBgTilemapBufferToVram(0); } -static void sub_804F488(u16 a0, u8 a1) +static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind) { int i; for (i = 0; i < 4; i++) { - if (!sTradeMenuResourcesPtr->unk_8D0[i].unk_0) + if (!sTradeMenuResourcesPtr->cron[i].active) { - sTradeMenuResourcesPtr->unk_8D0[i].unk_2 = a0; - sTradeMenuResourcesPtr->unk_8D0[i].unk_4 = a1; - sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = TRUE; + sTradeMenuResourcesPtr->cron[i].delay = delay; + sTradeMenuResourcesPtr->cron[i].kind = kind; + sTradeMenuResourcesPtr->cron[i].active = TRUE; break; } } } -static void sub_804F4DC(void) +static void RunScheduledLinkTasks(void) { int i; for (i = 0; i < 4; i++) { - if (sTradeMenuResourcesPtr->unk_8D0[i].unk_0) + if (sTradeMenuResourcesPtr->cron[i].active) { - if (sTradeMenuResourcesPtr->unk_8D0[i].unk_2) + if (sTradeMenuResourcesPtr->cron[i].delay != 0) { - sTradeMenuResourcesPtr->unk_8D0[i].unk_2--; + sTradeMenuResourcesPtr->cron[i].delay--; } else { - switch (sTradeMenuResourcesPtr->unk_8D0[i].unk_4) + switch (sTradeMenuResourcesPtr->cron[i].kind) { case 0: SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); @@ -4087,7 +4096,7 @@ static void sub_804F4DC(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_PARTNERMONCANTBETRADED); break; } - sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = FALSE; + sTradeMenuResourcesPtr->cron[i].active = FALSE; } } } @@ -4108,7 +4117,7 @@ static bool8 sub_804F610(void) if (sTradeMenuResourcesPtr->unk_A8 < 14) { - sheet.data = gUnknown_2031C94[sTradeMenuResourcesPtr->unk_A8]; + sheet.data = sSpriteTextTilePtrs[sTradeMenuResourcesPtr->unk_A8]; sheet.size = 0x100; sheet.tag = 200 + sTradeMenuResourcesPtr->unk_A8; } @@ -4147,9 +4156,9 @@ static bool8 sub_804F610(void) return FALSE; } -static void sub_804F728(const u8 *name, u8 *dest, u8 unused) +static void RenderTextToVramViaBuffer(const u8 *name, u8 *dest, u8 unused) { - sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); + PSS_RenderTextToVramViaBuffer(name, dest, 0, 0, gDecompressionBuffer, 6); } static void sub_804F748(u8 who) diff --git a/src/trade_scene.c b/src/trade_scene.c index bcde7a55d..0c8029685 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -98,7 +98,7 @@ struct TradeAnimationResources { /*0xF4*/ u16 cachedMapMusic; /*0xF6*/ u8 unk_F6; /*0xF8*/ u16 monSpecies[2]; - /*0xFC*/ u8 unk_FC[7]; + /*0xFC*/ u8 linkPartnerName[7]; /*0x103*/ u8 filler_103[1]; /*0x104*/ u8 textColor[3]; /*0x107*/ u8 filler_107[1]; @@ -879,7 +879,7 @@ void CB2_InitTradeAnim_LinkTrade(void) ShowBg(0); sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + memcpy(sTradeData->linkPartnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); gMain.state++; break; case 11: -- cgit v1.2.3 From 71dbb008004342bdb9a6e9ac0a181408a016d07b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 18:47:02 -0400 Subject: Address review comments --- src/data/ingame_trades.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/data/ingame_trades.h b/src/data/ingame_trades.h index 102b6865f..ba8abb47b 100644 --- a/src/data/ingame_trades.h +++ b/src/data/ingame_trades.h @@ -3,7 +3,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("MIMIEN"), .species = SPECIES_MR_MIME, .ivs = {20, 15, 17, 24, 23, 22}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 1985, .conditions = {5, 5, 5, 30, 5}, .personality = 0x00009cae, @@ -17,7 +17,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("ZYNX"), .species = SPECIES_JYNX, .ivs = {18, 17, 18, 22, 25, 21}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 36728, .conditions = {5, 30, 5, 5, 5}, .personality = 0x498a2e1d, @@ -31,7 +31,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("MS. NIDO"), .species = SPECIES_NIDORAN_F, .ivs = {22, 18, 25, 19, 15, 22}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 63184, .conditions = {5, 5, 5, 5, 30}, .personality = 0x4c970b89, @@ -45,7 +45,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("CH'DING"), .species = SPECIES_FARFETCHD, .ivs = {20, 25, 21, 24, 15, 20}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 8810, .conditions = {30, 5, 5, 5, 5}, .personality = 0x151943d7, @@ -59,7 +59,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("NINA"), .species = SPECIES_NIDORINA, .ivs = {22, 25, 18, 19, 22, 15}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 13637, .conditions = {5, 5, 30, 5, 5}, .personality = 0x00eeca15, @@ -73,7 +73,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("MARC"), .species = SPECIES_LICKITUNG, .ivs = {24, 19, 21, 15, 23, 21}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 1239, .conditions = {5, 5, 5, 5, 30}, .personality = 0x451308ab, @@ -87,7 +87,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("ESPHERE"), .species = SPECIES_ELECTRODE, .ivs = {19, 16, 18, 25, 25, 19}, - .abilityNum = TRUE, + .abilityNum = 1, .otId = 50298, .conditions = {30, 5, 5, 5, 5}, .personality = 0x06341016, @@ -101,7 +101,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("TANGENY"), .species = SPECIES_TANGELA, .ivs = {22, 17, 25, 16, 23, 20}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 60042, .conditions = {5, 5, 30, 5, 5}, .personality = 0x5c77ecfa, @@ -116,7 +116,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("SEELOR"), .species = SPECIES_SEEL, .ivs = {24, 15, 22, 16, 23, 22}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 9853, .conditions = {5, 5, 5, 5, 30}, .personality = 0x482cac89, -- cgit v1.2.3 From f86bb07027d2a93b3d0abc572d2741f9ee2e795d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 21:06:15 -0400 Subject: Review comments and documentation --- src/data/ingame_trades.h | 4 +- src/trade.c | 199 ++++++++-------- src/trade_scene.c | 595 ++++++++++++++++++++++++----------------------- 3 files changed, 407 insertions(+), 391 deletions(-) (limited to 'src') diff --git a/src/data/ingame_trades.h b/src/data/ingame_trades.h index ba8abb47b..59304242b 100644 --- a/src/data/ingame_trades.h +++ b/src/data/ingame_trades.h @@ -1,4 +1,4 @@ -const struct InGameTrade gInGameTrades[] = { +static const struct InGameTrade sInGameTrades[] = { { .nickname = _("MIMIEN"), .species = SPECIES_MR_MIME, @@ -129,7 +129,7 @@ const struct InGameTrade gInGameTrades[] = { } }; -const u16 sInGameTradeMailMessages[][10] = { +static const u16 sInGameTradeMailMessages[][10] = { { EC_WORD_THAT_S, EC_WORD_A, diff --git a/src/trade.c b/src/trade.c index 817182efe..5151ecedd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -130,7 +130,7 @@ static void TradeMenuAction_Summary(u8 taskId); static void TradeMenuAction_Trade(u8 taskId); static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind); static void RunScheduledLinkTasks(void); -static void PrintTradeErrorOrStatusMessage(u8 str_idx); +static void PrintTradeErrorOrStatusMessage(u8 strIdx); static bool8 sub_804F610(void); static void RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 unused); static void sub_804F748(u8 side); @@ -150,10 +150,10 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); -static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); -static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); -static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); +static const u16 sTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); +static const u16 sTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); +static const u8 sTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); +static const u8 sTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); static const struct OamData gOamData_8261C30 = { .shape = SPRITE_SHAPE(32x16), @@ -182,14 +182,14 @@ static const union AnimCmd *const gSpriteAnimTable_8261C50[] = { gSpriteAnim_8261C48 }; -static const struct SpriteSheet gUnknown_8261C58 = { - gUnknown_8E9E1DC, +static const struct SpriteSheet sTradeButtons_SpriteSheet = { + gTradeButtons_Gfx, 0x800, 300 }; -static const struct SpritePalette gUnknown_8261C60 = { - gUnknown_8E9CF3C, +static const struct SpritePalette sTradeButtons_SpritePal = { + gTradeButtons_Pal, 2345 }; @@ -233,7 +233,7 @@ static const union AnimCmd *const gSpriteAnimTable_8261C98[] = { gSpriteAnim_8261C90 }; -static const struct SpriteTemplate gUnknown_8261CB0 = { +static const struct SpriteTemplate sSpriteTemplate_TradeButtons = { .tileTag = 300, .paletteTag = 2345, .oam = &gOamData_8261C38, @@ -242,7 +242,7 @@ static const struct SpriteTemplate gUnknown_8261CB0 = { .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_8261CC8 = { +static const struct SpriteTemplate sSpriteTemplate_Text = { .tileTag = 200, .paletteTag = 4925, .oam = &gOamData_8261C30, @@ -251,10 +251,10 @@ static const struct SpriteTemplate gUnknown_8261CC8 = { .callback = SpriteCallbackDummy }; -static const u16 gUnknown_8261CE0[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const u16 sTradeTextPal[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette gUnknown_8261D00 = { - gUnknown_8261CE0, +static const struct SpritePalette sSpritePalette_Text = { + sTradeTextPal, 4925 }; @@ -347,7 +347,7 @@ static const u8 sCursorMoveDestinations[][4][6] = { } }; -static const u8 gTradeMonSpriteCoords[][2] = { +static const u8 sTradeMonSpriteCoords[][2] = { {0x01, 0x05}, {0x08, 0x05}, {0x01, 0x0a}, @@ -365,6 +365,7 @@ static const u8 gTradeMonSpriteCoords[][2] = { {0x17, 0x12}, }; +// No idea if a 4D array is correct static const u8 gUnknown_8261E5A[][2][6][2] = { { { @@ -401,7 +402,7 @@ static const u8 gUnknown_8261E5A[][2][6][2] = { } }; -static const u8 gTradeUnknownSpriteCoords[][4] = { +static const u8 sTradeUnknownSpriteCoords[][4] = { {0x3c, 0x09, 0xb4, 0x09}, {0x30, 0x09, 0xa8, 0x09} }; @@ -719,7 +720,7 @@ static void sub_804C600(void) } } -void sub_804C718(void) +void CB2_ReturnFromLinkTrade(void) { SetMainCallback2(sub_804C728); } @@ -853,11 +854,11 @@ static void sub_804C728(void) for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { - struct Pokemon *mon = &gPlayerParty[i]; + struct Pokemon * mon = &gPlayerParty[i]; sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, - (gTradeMonSpriteCoords[i][0] * 8) + 14, - (gTradeMonSpriteCoords[i][1] * 8) - 12, + (sTradeMonSpriteCoords[i][0] * 8) + 14, + (sTradeMonSpriteCoords[i][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), TRUE); @@ -865,11 +866,11 @@ static void sub_804C728(void) for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { - struct Pokemon *mon = &gEnemyParty[i]; + struct Pokemon * mon = &gEnemyParty[i]; sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, - (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, + (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, + (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), FALSE); @@ -903,9 +904,9 @@ static void sub_804C728(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); } /* @@ -918,28 +919,28 @@ static void sub_804C728(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 3; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); } gMain.state++; break; case 13: - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 6; CreateSprite(&temp, 215, 151, 1); - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 7; CreateSprite(&temp, 247, 151, 1); for (i = 0; i < PARTY_SIZE; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 8; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); sTradeMenuResourcesPtr->tradeMenuCursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); @@ -1353,7 +1354,7 @@ static void sub_804C728(void) "\tcmp r6, r0\n" "\tbge _0804CAA8\n" "\tmov r8, r2\n" - "\tldr r7, _0804CB38 @ =gTradeMonSpriteCoords\n" + "\tldr r7, _0804CB38 @ =sTradeMonSpriteCoords\n" "_0804CA4A:\n" "\tmovs r0, 0x64\n" "\tadds r4, r6, 0\n" @@ -1407,7 +1408,7 @@ static void sub_804C728(void) "\tldrb r0, [r0]\n" "\tcmp r6, r0\n" "\tbge _0804CB20\n" - "\tldr r0, _0804CB38 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804CB38 @ =sTradeMonSpriteCoords\n" "\tmov r8, r1\n" "\tadds r7, r0, 0\n" "\tadds r7, 0xC\n" @@ -1468,7 +1469,7 @@ static void sub_804C728(void) "_0804CB2C: .4byte sTradeMenuResourcesPtr\n" "_0804CB30: .4byte gPlayerPartyCount\n" "_0804CB34: .4byte gEnemyPartyCount\n" - "_0804CB38: .4byte gTradeMonSpriteCoords\n" + "_0804CB38: .4byte sTradeMonSpriteCoords\n" "_0804CB3C: .4byte gPlayerParty\n" "_0804CB40: .4byte 0xfff40000\n" "_0804CB44: .4byte SpriteCB_MonIcon\n" @@ -1591,14 +1592,14 @@ static void sub_804C728(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0x10\n" - "\tldr r3, _0804CD00 @ =gTradeUnknownSpriteCoords\n" + "\tldr r3, _0804CD00 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r3\n" "\tasrs r0, 1\n" "\tldrb r7, [r3, 0x4]\n" "\tadds r4, r0, r7\n" "_0804CC62:\n" "\tadd r1, sp, 0x10\n" - "\tldr r0, _0804CD04 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804CD04 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1638,7 +1639,7 @@ static void sub_804C728(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0x10\n" - "\tldr r7, _0804CD00 @ =gTradeUnknownSpriteCoords\n" + "\tldr r7, _0804CD00 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r7\n" "\tasrs r0, 1\n" "\tmov r1, r8\n" @@ -1646,7 +1647,7 @@ static void sub_804C728(void) "\tadds r4, r0, r1\n" "_0804CCC6:\n" "\tadd r1, sp, 0x10\n" - "\tldr r0, _0804CD04 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804CD04 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1673,12 +1674,12 @@ static void sub_804C728(void) "\tb _0804CEC2\n" "\t.align 2, 0\n" "_0804CCFC: .4byte gSaveBlock2Ptr\n" - "_0804CD00: .4byte gTradeUnknownSpriteCoords\n" - "_0804CD04: .4byte gUnknown_8261CC8\n" + "_0804CD00: .4byte sTradeUnknownSpriteCoords\n" + "_0804CD04: .4byte sSpriteTemplate_Text\n" "_0804CD08: .4byte gLinkPlayers + 8\n" "_0804CD0C: .4byte gMain\n" "_0804CD10:\n" - "\tldr r4, _0804CDCC @ =gUnknown_8261CC8\n" + "\tldr r4, _0804CDCC @ =sSpriteTemplate_Text\n" "\tadd r1, sp, 0x10\n" "\tadds r0, r4, 0\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1716,7 +1717,7 @@ static void sub_804C728(void) "\tlsls r5, 13\n" "_0804CD5C:\n" "\tadd r1, sp, 0x10\n" - "\tldr r0, _0804CDCC @ =gUnknown_8261CC8\n" + "\tldr r0, _0804CDCC @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1737,8 +1738,8 @@ static void sub_804C728(void) "\tadds r6, 0x1\n" "\tcmp r6, 0x5\n" "\tble _0804CD5C\n" - "\tldr r0, _0804CDD0 @ =gUnknown_8261CB0\n" - "\tldr r2, _0804CDD4 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804CDD0 @ =sSpriteTemplate_TradeButtons\n" + "\tldr r2, _0804CDD4 @ =sTradeMonSpriteCoords\n" "\tldrb r1, [r2]\n" "\tlsls r1, 19\n" "\tmovs r3, 0x80\n" @@ -1768,9 +1769,9 @@ static void sub_804C728(void) "\tbl rbox_fill_rectangle\n" "\tb _0804CEE6\n" "\t.align 2, 0\n" - "_0804CDCC: .4byte gUnknown_8261CC8\n" - "_0804CDD0: .4byte gUnknown_8261CB0\n" - "_0804CDD4: .4byte gTradeMonSpriteCoords\n" + "_0804CDCC: .4byte sSpriteTemplate_Text\n" + "_0804CDD0: .4byte sSpriteTemplate_TradeButtons\n" + "_0804CDD4: .4byte sTradeMonSpriteCoords\n" "_0804CDD8: .4byte sTradeMenuResourcesPtr\n" "_0804CDDC: .4byte gMain\n" "_0804CDE0:\n" @@ -1965,8 +1966,8 @@ void sub_804CF14(void) sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon( GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - gTradeMonSpriteCoords[i][0] * 8 + 14, - gTradeMonSpriteCoords[i][1] * 8 - 12, + sTradeMonSpriteCoords[i][0] * 8 + 14, + sTradeMonSpriteCoords[i][1] * 8 - 12, 1, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY), TRUE @@ -1977,8 +1978,8 @@ void sub_804CF14(void) sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon( GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - gTradeMonSpriteCoords[i + 6][0] * 8 + 14, - gTradeMonSpriteCoords[i + 6][1] * 8 - 12, + sTradeMonSpriteCoords[i + 6][0] * 8 + 14, + sTradeMonSpriteCoords[i + 6][1] * 8 - 12, 1, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY), FALSE @@ -2015,9 +2016,9 @@ void sub_804CF14(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); } /* @@ -2030,23 +2031,23 @@ void sub_804CF14(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 3; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); } gMain.state++; break; case 13: - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 6; CreateSprite(&temp, 215, 151, 1); - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 7; CreateSprite(&temp, 247, 151, 1); for (i = 0; i < PARTY_SIZE; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 8; CreateSprite(&temp, (i * 32) + 24, 150, 1); } @@ -2056,7 +2057,7 @@ void sub_804CF14(void) else sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20() + 6; - sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: @@ -2234,7 +2235,7 @@ void sub_804CF14(void) "\tcmp r6, r0\n" "\tbge _0804D0A8\n" "\tmov r8, r4\n" - "\tldr r7, _0804D138 @ =gTradeMonSpriteCoords\n" + "\tldr r7, _0804D138 @ =sTradeMonSpriteCoords\n" "_0804D048:\n" "\tmovs r0, 0x64\n" "\tadds r4, r6, 0\n" @@ -2289,7 +2290,7 @@ void sub_804CF14(void) "\tldrb r0, [r0]\n" "\tcmp r6, r0\n" "\tbge _0804D120\n" - "\tldr r0, _0804D138 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804D138 @ =sTradeMonSpriteCoords\n" "\tmov r8, r1\n" "\tadds r7, r0, 0\n" "\tadds r7, 0xC\n" @@ -2350,7 +2351,7 @@ void sub_804CF14(void) "_0804D12C: .4byte sTradeMenuResourcesPtr\n" "_0804D130: .4byte gPlayerPartyCount\n" "_0804D134: .4byte gEnemyPartyCount\n" - "_0804D138: .4byte gTradeMonSpriteCoords\n" + "_0804D138: .4byte sTradeMonSpriteCoords\n" "_0804D13C: .4byte gPlayerParty\n" "_0804D140: .4byte 0xfff40000\n" "_0804D144: .4byte SpriteCB_MonIcon\n" @@ -2480,14 +2481,14 @@ void sub_804CF14(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0xC\n" - "\tldr r3, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tldr r3, _0804D310 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r3\n" "\tasrs r0, 1\n" "\tldrb r7, [r3, 0x4]\n" "\tadds r4, r0, r7\n" "_0804D270:\n" "\tadd r1, sp, 0xC\n" - "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804D314 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2527,7 +2528,7 @@ void sub_804CF14(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0xC\n" - "\tldr r7, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tldr r7, _0804D310 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r7\n" "\tasrs r0, 1\n" "\tmov r1, r8\n" @@ -2535,7 +2536,7 @@ void sub_804CF14(void) "\tadds r4, r0, r1\n" "_0804D2D4:\n" "\tadd r1, sp, 0xC\n" - "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804D314 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2562,12 +2563,12 @@ void sub_804CF14(void) "\tb _0804D4B4\n" "\t.align 2, 0\n" "_0804D30C: .4byte gSaveBlock2Ptr\n" - "_0804D310: .4byte gTradeUnknownSpriteCoords\n" - "_0804D314: .4byte gUnknown_8261CC8\n" + "_0804D310: .4byte sTradeUnknownSpriteCoords\n" + "_0804D314: .4byte sSpriteTemplate_Text\n" "_0804D318: .4byte gLinkPlayers + 8\n" "_0804D31C: .4byte gMain\n" "_0804D320:\n" - "\tldr r4, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tldr r4, _0804D3B0 @ =sSpriteTemplate_Text\n" "\tadd r1, sp, 0xC\n" "\tadds r0, r4, 0\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2605,7 +2606,7 @@ void sub_804CF14(void) "\tlsls r5, 13\n" "_0804D36C:\n" "\tadd r1, sp, 0xC\n" - "\tldr r0, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804D3B0 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2636,7 +2637,7 @@ void sub_804CF14(void) "\tldr r1, [r4]\n" "\tb _0804D3C0\n" "\t.align 2, 0\n" - "_0804D3B0: .4byte gUnknown_8261CC8\n" + "_0804D3B0: .4byte sSpriteTemplate_Text\n" "_0804D3B4: .4byte sTradeMenuResourcesPtr\n" "_0804D3B8:\n" "\tbl sub_8138B20\n" @@ -2645,8 +2646,8 @@ void sub_804CF14(void) "_0804D3C0:\n" "\tadds r1, 0x35\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804D404 @ =gUnknown_8261CB0\n" - "\tldr r3, _0804D408 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804D404 @ =sSpriteTemplate_TradeButtons\n" + "\tldr r3, _0804D408 @ =sTradeMonSpriteCoords\n" "\tldr r4, _0804D40C @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r4]\n" "\tadds r1, 0x35\n" @@ -2676,8 +2677,8 @@ void sub_804CF14(void) "\tstrb r1, [r0]\n" "\tb _0804D4D2\n" "\t.align 2, 0\n" - "_0804D404: .4byte gUnknown_8261CB0\n" - "_0804D408: .4byte gTradeMonSpriteCoords\n" + "_0804D404: .4byte sSpriteTemplate_TradeButtons\n" + "_0804D408: .4byte sTradeMonSpriteCoords\n" "_0804D40C: .4byte sTradeMenuResourcesPtr\n" "_0804D410: .4byte gMain\n" "_0804D414:\n" @@ -2824,7 +2825,7 @@ static void sub_804D548(void) static void sub_804D5A4(void) { - gMain.savedCallback = sub_804C718; + gMain.savedCallback = CB2_ReturnFromLinkTrade; if (gWirelessCommType != 0) { if (IsLinkRfuTaskFinished()) @@ -2872,13 +2873,13 @@ static void sub_804D694(u8 state) switch (state) { case 0: - LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60); - LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0); + LoadPalette(gTradeMenu_Pal, 0x00, 0x60); + LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); - LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0); + LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0); break; case 1: - LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0); + LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0); sub_804F284(0); sub_804F284(1); CopyBgTilemapBufferToVram(1); @@ -2937,7 +2938,7 @@ static bool8 shedinja_maker_maybe(void) { u8 id = GetMultiplayerId(); int i; - struct Pokemon *mon; + struct Pokemon * mon; switch (sTradeMenuResourcesPtr->unk_69) { @@ -3287,8 +3288,8 @@ static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) else { StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 0); - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = sTradeMonSpriteCoords[newPosition][1] * 8; } if (*tradeMenuCursorPosition != newPosition) @@ -3582,7 +3583,7 @@ static void sub_804E880(void) { int i; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); rbox_fill_rectangle(0); @@ -3749,12 +3750,12 @@ static void sub_804EAE4(u8 a0) gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; StoreSpriteCallbackInData6(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); sTradeMenuResourcesPtr->unk_74[a0]++; sub_8075490(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); - CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); @@ -3766,10 +3767,10 @@ static void sub_804EAE4(u8 a0) sTradeMenuResourcesPtr->unk_74[a0] = 3; break; case 3: - CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); @@ -3871,7 +3872,7 @@ static void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) u8 gender; u8 nickname[12]; - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9F1FC, a4, a5, 6, 3, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, a4, a5, 6, 3, 0); CopyBgTilemapBufferToVram(1); if (whichParty == 0) @@ -4005,8 +4006,8 @@ static void sub_804F2E8(u8 whichParty) for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].invisible = FALSE; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.x = 0; gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.y = 0; } @@ -4020,7 +4021,7 @@ static void sub_804F3B4(void) static void sub_804F3C8(u8 whichParty) { - CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); sub_804F284(whichParty); sub_804F020(whichParty); @@ -4137,15 +4138,15 @@ static bool8 sub_804F610(void) sTradeMenuResourcesPtr->unk_A8++; break; case 14: - LoadSpritePalette(&gUnknown_8261D00); + LoadSpritePalette(&sSpritePalette_Text); sTradeMenuResourcesPtr->unk_A8++; break; case 15: - LoadSpritePalette(&gUnknown_8261C60); + LoadSpritePalette(&sTradeButtons_SpritePal); sTradeMenuResourcesPtr->unk_A8++; break; case 16: - LoadSpriteSheet(&gUnknown_8261C58); + LoadSpriteSheet(&sTradeButtons_SpriteSheet); sTradeMenuResourcesPtr->unk_A8++; break; case 17: @@ -4257,10 +4258,10 @@ static void sub_804F9D8(void) } } -static u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +static u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos) { int i, sum; - struct LinkPlayer *player; + struct LinkPlayer * player; int species[6]; int species2[6]; diff --git a/src/trade_scene.c b/src/trade_scene.c index 0c8029685..6adec72d8 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -43,6 +43,16 @@ #include "constants/region_map.h" #include "constants/moves.h" +#define TAG_GLOW1_TILES 5550 +#define TAG_GLOW_PAL 5551 +#define TAG_GLOW2_TILES 5552 +#define TAG_UNUSED_5553 5553 +#define TAG_CABLE_END_TILES 5554 +#define TAG_GBA_PAL 5555 +#define TAG_GBA_SCREEN_TILES 5556 +#define TAG_BALL_TILES 5557 +#define TAG_BALL_PAL 5558 + struct InGameTrade { /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x0C*/ u16 species; @@ -64,18 +74,18 @@ struct TradeAnimationResources { /*0x64*/ u32 timer; /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 unk_72; - /*0x73*/ u8 unk_73; + /*0x72*/ u8 tradeStatus1; + /*0x73*/ u8 tradeStatus2; /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 unk_88; - /*0x89*/ u8 unk_89; - /*0x8A*/ u16 unk_8A; + /*0x88*/ u8 linkTimeoutCheck1; + /*0x89*/ u8 linkTimeoutCheck2; + /*0x8A*/ u16 linkTimeoutTimer; /*0x8C*/ u16 unk_8C; /*0x8E*/ u8 pokePicSpriteIdxs[2]; - /*0x90*/ u8 unk_90; - /*0x91*/ u8 unk_91; - /*0x92*/ u8 unk_92; - /*0x93*/ u8 unk_93; + /*0x90*/ u8 tradeGlow1SpriteId; + /*0x91*/ u8 gbaScreenSpriteID; + /*0x92*/ u8 linkCableEndSpriteId; + /*0x93*/ u8 scheduleLinkTransfer; /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; /*0xD2*/ u8 pokeballSpriteId; @@ -91,7 +101,7 @@ struct TradeAnimationResources { /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; /*0xE8*/ u16 sXY; - /*0xEA*/ u16 unk_EA; + /*0xEA*/ u16 bg2Zoom; /*0xEC*/ u16 bg2alpha; /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; @@ -102,7 +112,7 @@ struct TradeAnimationResources { /*0x103*/ u8 filler_103[1]; /*0x104*/ u8 textColor[3]; /*0x107*/ u8 filler_107[1]; - /*0x108*/ u8 isCableTrade; + /*0x108*/ bool8 isCableTrade; /*0x109*/ u8 win0left; /*0x10A*/ u8 win0top; /*0x10B*/ u8 win0right; @@ -116,15 +126,15 @@ static void SpriteCB_TradeGlowWireless(struct Sprite * sprite); static void SpriteCB_TradeGlowCore(struct Sprite * sprite); static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite); static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite); -static void sub_804FE00(struct Sprite * sprite); +static void SpriteCB_TradeGBAScreen(struct Sprite * sprite); static void TradeAnimInit_LoadGfx(void); static void CB2_RunTradeAnim_InGameTrade(void); static void SetTradeSequenceBgGpuRegs(u8 idx); -static void sub_8050DE0(void); -static void sub_8050E24(void); -static u8 sub_8050F14(void); -static u8 sub_8050F3C(void); -static u8 sub_805232C(void); +static void LoadTradeGbaSpriteGfx(void); +static void TradeBufferOTnameAndNicknames(void); +static u8 DoTradeAnim(void); +static u8 DoTradeAnim_Cable(void); +static u8 DoTradeAnim_Wireless(void); static void SpriteCB_TradePokeball_Default(struct Sprite * sprite); static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); @@ -132,29 +142,29 @@ static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); static void BufferInGameTradeMonName(void); static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); static void CB2_RunTradeAnim_LinkTrade(void); -static void sub_8053E1C(void); +static void CB2_WaitAndAckTradeComplete(void); static void sub_8053E8C(void); -static void sub_80543C4(void); -static void sub_8054470(u8 taskId); +static void LinkTrade_TearDownAssets(void); +static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8 taskId); -static void c3_0805465C(u8 taskId); -static void sub_8054734(u8 taskId); +static void Task_OpenCetnerWhiteColumn(u8 taskId); +static void Task_CloseCetnerWhiteColumn(u8 taskId); -static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); -static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); +static const u16 sTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +static const u8 sTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); static const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); static const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); -static const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); +static const u16 sTradeGbaPal[] = INCBIN_U16("graphics/trade/gba.gbapal"); static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); -static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); -static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); -static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); -static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +static const u16 sTradeGlowPal[] = INCBIN_U16("graphics/trade/misc.gbapal"); +static const u8 sTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +static const u8 sTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +static const u8 sTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +static const u8 sTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin"); static const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); static const u8 sFiller_08335760[64] = {}; @@ -162,12 +172,12 @@ static const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_ca static const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); static const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); static const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -static const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); -static const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); -static const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); -static const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); -static const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); +static const u32 sUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +static const u16 sWirelessSignalAnimPals_Outbound[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +static const u16 sWirelessSignalAnimPals_Inbound[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +static const u16 sWirelessSignalAnimPals_Off[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u32 sWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +static const u32 sWirelessSignalTilemap[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); static const struct OamData gOamData_826CD00 = { .affineMode = ST_OAM_AFFINE_NORMAL, @@ -239,20 +249,20 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CDC8[] = { gAffineAnimCmd_826CDA8 }; -static const struct SpriteSheet gUnknown_826CDD4 = { - gTradeBallTiles, +static const struct SpriteSheet sTradeBallSpriteSheet = { + sTradeBallTiles, 0x600, - 5557 + TAG_BALL_TILES }; -static const struct SpritePalette gUnknown_826CDDC = { - gTradeBallPalette, - 5558 +static const struct SpritePalette sTradeBallSpritePal = { + sTradeBallPalette, + TAG_BALL_PAL }; static const struct SpriteTemplate sTradePokeballSpriteTemplate = { - .tileTag = 5557, - .paletteTag = 5558, + .tileTag = TAG_BALL_TILES, + .paletteTag = TAG_BALL_PAL, .oam = &gOamData_826CD00, .anims = gSpriteAnimTable_826CD80, .affineAnims = gSpriteAffineAnimTable_826CDC8, @@ -286,25 +296,25 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CE28[] = { gAffineAnimCmd_826CE10 }; -static const struct SpriteSheet gUnknown_826CE2C = { - gTradeGlow1Tiles, +static const struct SpriteSheet sTradeGlow1SpriteSheet = { + sTradeGlow1Tiles, 0x200, - 5550 + TAG_GLOW1_TILES }; -static const struct SpritePalette gUnknown_826CE34 = { - gUnknown_82649FC, - 5551 +static const struct SpritePalette sTradeGlowSpritePal = { + sTradeGlowPal, + TAG_GLOW_PAL }; -static const struct SpritePalette gUnknown_826CE3C = { - gUnknown_826499C, - 5555 +static const struct SpritePalette sTradeGbaSpritePal = { + sTradeGbaPal, + TAG_GBA_PAL }; -static const struct SpriteTemplate gUnknown_826CE44 = { - .tileTag = 5550, - .paletteTag = 5551, +static const struct SpriteTemplate sTradeGlow1SpriteTemplate = { + .tileTag = TAG_GLOW1_TILES, + .paletteTag = TAG_GLOW_PAL, .oam = &gOamData_826CDFC, .anims = gSpriteAnimTable_826CE0C, .affineAnims = gSpriteAffineAnimTable_826CE28, @@ -332,15 +342,15 @@ static const union AnimCmd *const gSpriteAnimTable_826CE74[] = { gAnimCmd_826CE6C }; -static const struct SpriteSheet gUnknown_826CE7C = { - gTradeGlow2Tiles, +static const struct SpriteSheet sTradeGlow2SpriteSheet = { + sTradeGlow2Tiles, 0x300, - 5552 + TAG_GLOW2_TILES }; static const struct SpriteTemplate sGlowBallSpriteTemplate = { - .tileTag = 5552, - .paletteTag = 5551, + .tileTag = TAG_GLOW2_TILES, + .paletteTag = TAG_GLOW_PAL, .oam = &gOamData_826CE5C, .anims = gSpriteAnimTable_826CE74, .affineAnims = gDummySpriteAffineAnimTable, @@ -362,15 +372,15 @@ static const union AnimCmd *const gSpriteAnimTable_826CEAC[] = { gAnimCmd_826CEA4 }; -static const struct SpriteSheet gUnknown_826CEB0 = { - gTradeCableEndTiles, +static const struct SpriteSheet sTradeCableEndSpriteSheet = { + sTradeCableEndTiles, 0x100, - 5554 + TAG_CABLE_END_TILES }; static const struct SpriteTemplate sGameLinkCableEndSpriteTemplate = { - .tileTag = 5554, - .paletteTag = 5555, + .tileTag = TAG_CABLE_END_TILES, + .paletteTag = TAG_GBA_PAL, .oam = &gOamData_826CE9C, .anims = gSpriteAnimTable_826CEAC, .affineAnims = gDummySpriteAffineAnimTable, @@ -415,28 +425,28 @@ static const union AnimCmd *const gSpriteAnimTable_826CF24[] = { gAnimCmd_826CEFC }; -static const struct SpriteSheet gUnknown_826CF28 = { - gTradeGBAScreenTiles, +static const struct SpriteSheet sTradeGBAScreenSpriteSheet = { + sTradeGBAScreenTiles, 0x1000, - 5556 + TAG_GBA_SCREEN_TILES }; -static const struct SpriteTemplate gUnknown_826CF30 = { - .tileTag = 5556, - .paletteTag = 5555, +static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate1 = { + .tileTag = TAG_GBA_SCREEN_TILES, + .paletteTag = TAG_GBA_PAL, .oam = &gOamData_826CED0, .anims = gSpriteAnimTable_826CF20, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_804FE00 + .callback = SpriteCB_TradeGBAScreen }; -static const struct SpriteTemplate gUnknown_826CF48 = { - .tileTag = 5556, - .paletteTag = 5555, +static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate2 = { + .tileTag = TAG_GBA_SCREEN_TILES, + .paletteTag = TAG_GBA_PAL, .oam = &gOamData_826CED0, .anims = gSpriteAnimTable_826CF24, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_804FE00 + .callback = SpriteCB_TradeGBAScreen }; static const u16 gTradeGlow2PaletteAnimTable[] = { @@ -459,7 +469,7 @@ static const union AffineAnimCmd gAffineAnimCmd_826CF78[] = { AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd *const gUnknown_826CF88[] = { +static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerPokePicAlt[] = { gAffineAnimCmd_826CF78 }; @@ -523,7 +533,7 @@ static const struct BgTemplate gUnknown_826D1D4[] = { } }; -static const s8 gTradeBallVerticalVelocityTable[] = { +static const s8 sTradeBallVerticalVelocityTable[] = { 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 2, 2, @@ -553,7 +563,7 @@ static const s8 gTradeBallVerticalVelocityTable[] = { 1, 1, 2, 3 }; -static const u8 gUnknown_826D250[][2] = { +static const u8 sWirelessSignalAnimParams[][2] = { {0, 1}, {1, 1}, {2, 1}, @@ -626,6 +636,7 @@ static void SpriteCB_TradeGlowCore(struct Sprite * sprite) } } +// Move down for 10 frames static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) { sprite->data[0]++; @@ -634,6 +645,7 @@ static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) DestroySprite(sprite); } +// Move up for 10 frames static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) { sprite->data[0]++; @@ -642,7 +654,8 @@ static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) DestroySprite(sprite); } -static void sub_804FE00(struct Sprite * sprite) +// Play a sound every 15 frames +static void SpriteCB_TradeGBAScreen(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 15) @@ -691,43 +704,43 @@ static void VBlankCB_TradeAnim(void) TransferPlttBuffer(); } -static void sub_804FF24(void) +static void InitLinkTimeoutTracker(void) { - sTradeData->unk_8A = 0; - sTradeData->unk_88 = 0; - sTradeData->unk_89 = 0; + sTradeData->linkTimeoutTimer = 0; + sTradeData->linkTimeoutCheck1 = 0; + sTradeData->linkTimeoutCheck2 = 0; } -static void sub_804FF4C(void) +static void CheckLinkTimeout(void) { - if (sTradeData->unk_88 == sTradeData->unk_89) - sTradeData->unk_8A++; + if (sTradeData->linkTimeoutCheck1 == sTradeData->linkTimeoutCheck2) + sTradeData->linkTimeoutTimer++; else - sTradeData->unk_8A = 0; + sTradeData->linkTimeoutTimer = 0; - if (sTradeData->unk_8A > 300) + if (sTradeData->linkTimeoutTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeData->unk_8A = 0; - sTradeData->unk_89 = 0; - sTradeData->unk_88 = 0; + sTradeData->linkTimeoutTimer = 0; + sTradeData->linkTimeoutCheck2 = 0; + sTradeData->linkTimeoutCheck1 = 0; } - sTradeData->unk_89 = sTradeData->unk_88; + sTradeData->linkTimeoutCheck2 = sTradeData->linkTimeoutCheck1; } -static u32 sub_804FFC4(void) +static u32 GetMultiplayerIdIfLinkTrade(void) { if (gReceivedRemoteLinkPlayers) return GetMultiplayerId(); return 0; } -static void sub_804FFE4(u8 whichParty, u8 a1) +static void LoadTradeMonPic(u8 whichParty, u8 action) { int pos = 0; - struct Pokemon *mon = NULL; + struct Pokemon * mon = NULL; u16 species; u32 personality; @@ -737,15 +750,16 @@ static void sub_804FFE4(u8 whichParty, u8 a1) pos = 1; } - if (whichParty == 1) + /*else*/ if (whichParty == 1) { mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; pos = 3; } - switch (a1) + switch (action) { case 0: + // Load graphics species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); @@ -759,6 +773,7 @@ static void sub_804FFE4(u8 whichParty, u8 a1) sTradeData->monPersonalities[whichParty] = personality; break; case 1: + // Create sprite SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; @@ -784,7 +799,7 @@ void CB2_InitTradeAnim_LinkTrade(void) FreeAllSpritePalettes(); SetVBlankCallback(VBlankCB_TradeAnim); TradeAnimInit_LoadGfx(); - sub_804FF24(); + InitLinkTimeoutTracker(); gMain.state++; sTradeData->unk_8C = 0; sTradeData->state = 0; @@ -833,7 +848,7 @@ void CB2_InitTradeAnim_LinkTrade(void) } else { - sub_804FF4C(); + CheckLinkTimeout(); } } else @@ -842,36 +857,36 @@ void CB2_InitTradeAnim_LinkTrade(void) } break; case 4: - sub_804FF4C(); + CheckLinkTimeout(); if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) { gMain.state++; } break; case 5: - sTradeData->unk_72 = 0; - sTradeData->unk_73 = 0; - sTradeData->unk_93 = 0; - sub_804FFE4(0, 0); + sTradeData->tradeStatus1 = 0; + sTradeData->tradeStatus2 = 0; + sTradeData->scheduleLinkTransfer = 0; + LoadTradeMonPic(0, 0); gMain.state++; break; case 6: - sub_804FFE4(0, 1); + LoadTradeMonPic(0, 1); gMain.state++; break; case 7: - sub_804FFE4(1, 0); + LoadTradeMonPic(1, 0); gMain.state++; break; case 8: - sub_804FFE4(1, 1); + LoadTradeMonPic(1, 1); sub_80504B0(); gMain.state++; break; case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); + LoadTradeGbaSpriteGfx(); + LoadSpriteSheet(&sTradeBallSpriteSheet); + LoadSpritePalette(&sTradeBallSpritePal); gMain.state++; break; case 10: @@ -884,7 +899,7 @@ void CB2_InitTradeAnim_LinkTrade(void) break; case 11: sub_805049C(); - sub_8050E24(); + TradeBufferOTnameAndNicknames(); gMain.state++; break; case 12: @@ -977,29 +992,29 @@ static void CB2_InitTradeAnim_InGameTrade(void) gMain.state = 5; break; case 5: - sub_804FFE4(0, 0); + LoadTradeMonPic(0, 0); gMain.state++; break; case 6: - sub_804FFE4(0, 1); + LoadTradeMonPic(0, 1); gMain.state++; break; case 7: - sub_804FFE4(1, 0); + LoadTradeMonPic(1, 0); ShowBg(0); gMain.state++; break; case 8: - sub_804FFE4(1, 1); + LoadTradeMonPic(1, 1); FillWindowPixelBuffer(0, PIXEL_FILL(15)); PutWindowTilemap(0); CopyWindowToVram(0, 3); gMain.state++; break; case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); + LoadTradeGbaSpriteGfx(); + LoadSpriteSheet(&sTradeBallSpriteSheet); + LoadSpritePalette(&sTradeBallSpritePal); gMain.state++; break; case 10: @@ -1009,7 +1024,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) case 11: SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(0); - sub_8050E24(); + TradeBufferOTnameAndNicknames(); gMain.state++; break; case 12: @@ -1026,7 +1041,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) static void ReceivedMonSetPokedexFlags(u8 partyIdx) { - struct Pokemon *mon = &gPlayerParty[partyIdx]; + struct Pokemon * mon = &gPlayerParty[partyIdx]; if (!GetMonData(mon, MON_DATA_IS_EGG)) { @@ -1051,10 +1066,10 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) u8 friendship; // Get whether the offered Pokemon have mail - struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; + struct Pokemon * playerMon = &gPlayerParty[playerPartyIdx]; u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); - struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; + struct Pokemon * partnerMon = &gEnemyParty[partnerPartyIdx]; u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); // The mail attached to the sent Pokemon no longer exists in your file. @@ -1080,25 +1095,25 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) RS_TryEnableNationalPokedex(); } -static void sub_80508F4(void) +static void HandleLinkDataSend(void) { - switch (sTradeData->unk_93) + switch (sTradeData->scheduleLinkTransfer) { case 1: if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_93++; + sTradeData->scheduleLinkTransfer++; } case 2: - sTradeData->unk_93 = 0; + sTradeData->scheduleLinkTransfer = 0; break; } } static void CB2_RunTradeAnim_InGameTrade(void) { - sub_8050F14(); + DoTradeAnim(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -1139,10 +1154,10 @@ static void SetTradeSequenceBgGpuRegs(u8 state) case 2: sTradeData->bg1vofs = 0; sTradeData->bg1hofs = 0; - if (sTradeData->isCableTrade == FALSE) + if (!sTradeData->isCableTrade) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); + LZ77UnCompVram(sUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); BlendPalettes(0x000000008, 0x10, RGB_BLACK); } else @@ -1153,9 +1168,9 @@ static void SetTradeSequenceBgGpuRegs(u8 state) } break; case 3: - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); - LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); + LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); + LZ77UnCompVram(sWirelessSignal4bpp, BG_CHAR_ADDR(1)); + LZ77UnCompVram(sWirelessSignalTilemap, BG_SCREEN_ADDR(18)); sTradeData->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; @@ -1165,7 +1180,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state) sTradeData->bg2texX = 0x40; sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x20; - sTradeData->unk_EA = 0x400; + sTradeData->bg2Zoom = 0x400; sTradeData->bg2alpha = 0; DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); if (sTradeData->isCableTrade) @@ -1187,7 +1202,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state) sTradeData->bg2texX = 0x40; sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x100; - sTradeData->unk_EA = 0x80; + sTradeData->bg2Zoom = 0x80; sTradeData->bg2srcX = 0x78; sTradeData->bg2srcY = 0x50; sTradeData->bg2alpha = 0; @@ -1213,17 +1228,17 @@ static void SetTradeSequenceBgGpuRegs(u8 state) } } -static void sub_8050DE0(void) +static void LoadTradeGbaSpriteGfx(void) { - LoadSpriteSheet(&gUnknown_826CE2C); - LoadSpriteSheet(&gUnknown_826CE7C); - LoadSpriteSheet(&gUnknown_826CEB0); - LoadSpriteSheet(&gUnknown_826CF28); - LoadSpritePalette(&gUnknown_826CE34); - LoadSpritePalette(&gUnknown_826CE3C); + LoadSpriteSheet(&sTradeGlow1SpriteSheet); + LoadSpriteSheet(&sTradeGlow2SpriteSheet); + LoadSpriteSheet(&sTradeCableEndSpriteSheet); + LoadSpriteSheet(&sTradeGBAScreenSpriteSheet); + LoadSpritePalette(&sTradeGlowSpritePal); + LoadSpritePalette(&sTradeGbaSpritePal); } -static void sub_8050E24(void) +static void TradeBufferOTnameAndNicknames(void) { u8 nickname[20]; u8 mpId; @@ -1239,7 +1254,7 @@ static void sub_8050E24(void) } else { - inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + inGameTrade = &sInGameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, inGameTrade->otName); StringCopy10(gStringVar3, inGameTrade->nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); @@ -1247,15 +1262,15 @@ static void sub_8050E24(void) } } -static bool8 sub_8050F14(void) +static bool8 DoTradeAnim(void) { if (sTradeData->isCableTrade) - return sub_8050F3C(); + return DoTradeAnim_Cable(); else - return sub_805232C(); + return DoTradeAnim_Wireless(); } -static bool8 sub_8050F3C(void) +static bool8 DoTradeAnim_Cable(void) { u16 evoTarget; @@ -1339,31 +1354,31 @@ static bool8 sub_8050F3C(void) } break; case 23: - if (sTradeData->unk_EA > 0x100) + if (sTradeData->bg2Zoom > 0x100) { - sTradeData->unk_EA -= 0x34; + sTradeData->bg2Zoom -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; + sTradeData->bg2Zoom = 0x80; sTradeData->state++; sTradeData->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 24: if (++sTradeData->timer > 20) { SetTradeBGAffine(); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state++; } break; case 25: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); @@ -1378,13 +1393,13 @@ static bool8 sub_8050F3C(void) } if (sTradeData->bg1vofs == 328) { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + sTradeData->linkCableEndSpriteId = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); } break; case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, 80, 3); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); sTradeData->state++; break; case 28: @@ -1398,9 +1413,9 @@ static bool8 sub_8050F3C(void) DISPCNT_OBJ_ON); break; case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; } @@ -1412,16 +1427,16 @@ static bool8 sub_8050F3C(void) case 30: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } break; case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1430,16 +1445,16 @@ static bool8 sub_8050F3C(void) PlaySE(SE_TK_WARPOUT); sTradeData->state++; } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; break; case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; sTradeData->state++; } break; @@ -1458,7 +1473,7 @@ static bool8 sub_8050F3C(void) case 37: if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); @@ -1485,8 +1500,8 @@ static bool8 sub_8050F3C(void) } if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; @@ -1494,14 +1509,14 @@ static bool8 sub_8050F3C(void) } break; case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); } break; case 40: @@ -1510,9 +1525,9 @@ static bool8 sub_8050F3C(void) sTradeData->state++; SetTradeSequenceBgGpuRegs(1); sTradeData->bg1vofs = 166; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, -20, 3); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); } break; case 41: @@ -1530,9 +1545,9 @@ static bool8 sub_8050F3C(void) } break; case 43: - gSprites[sTradeData->unk_90].pos2.y += 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state++; } @@ -1545,8 +1560,8 @@ static bool8 sub_8050F3C(void) } break; case 45: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); sTradeData->state++; sTradeData->timer = 0; break; @@ -1564,34 +1579,34 @@ static bool8 sub_8050F3C(void) } if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; + sTradeData->linkCableEndSpriteId = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + gSprites[sTradeData->linkCableEndSpriteId].callback = SpriteCB_GameLinkCableEnd_Inbound; } break; case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); } break; case 51: - if (sTradeData->unk_EA < 0x400) + if (sTradeData->bg2Zoom < 0x400) { - sTradeData->unk_EA += 0x34; + sTradeData->bg2Zoom += 0x34; } else { - sTradeData->unk_EA = 0x400; + sTradeData->bg2Zoom = 0x400; sTradeData->state++; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 52: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -1752,7 +1767,7 @@ static bool8 sub_8050F3C(void) return FALSE; } -static bool8 sub_805232C(void) +static bool8 DoTradeAnim_Wireless(void) { u16 evoTarget; @@ -1836,31 +1851,31 @@ static bool8 sub_805232C(void) } break; case 23: - if (sTradeData->unk_EA > 0x100) + if (sTradeData->bg2Zoom > 0x100) { - sTradeData->unk_EA -= 0x34; + sTradeData->bg2Zoom -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; + sTradeData->bg2Zoom = 0x80; sTradeData->state = 124; sTradeData->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 124: if (++sTradeData->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); sTradeData->state++; } break; case 125: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | @@ -1883,10 +1898,10 @@ static bool8 sub_805232C(void) } break; case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, 80, 3); + gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); sTradeData->state++; break; case 28: @@ -1900,9 +1915,9 @@ static bool8 sub_805232C(void) DISPCNT_OBJ_ON); break; case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; } @@ -1914,16 +1929,16 @@ static bool8 sub_805232C(void) case 30: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } break; case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1932,18 +1947,18 @@ static bool8 sub_805232C(void) PlaySE(SE_TK_WARPOUT); sTradeData->state++; } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; break; case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; sTradeData->state++; - CreateTask(c3_0805465C, 5); + CreateTask(Task_OpenCetnerWhiteColumn, 5); } break; case 34: @@ -1961,7 +1976,7 @@ static bool8 sub_805232C(void) case 37: if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); @@ -1988,23 +2003,23 @@ static bool8 sub_805232C(void) } if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(sub_8054734, 5); + CreateTask(Task_CloseCetnerWhiteColumn, 5); } break; case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); } break; case 40: @@ -2015,10 +2030,10 @@ static bool8 sub_805232C(void) sTradeData->bg1vofs = 166; SetTradeSequenceBgGpuRegs(3); sTradeData->bg2vofs = 412; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, -20, 3); + gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); } break; case 41: @@ -2036,9 +2051,9 @@ static bool8 sub_805232C(void) } break; case 43: - gSprites[sTradeData->unk_90].pos2.y += 4; - gSprites[sTradeData->unk_91].pos2.y += 4; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 4; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 4; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state = 144; sTradeData->timer = 0; @@ -2064,8 +2079,8 @@ static bool8 sub_805232C(void) } break; case 145: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); sTradeData->state++; sTradeData->timer = 0; break; @@ -2090,29 +2105,29 @@ static bool8 sub_805232C(void) } break; case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); } break; case 51: - if (sTradeData->unk_EA < 0x400) + if (sTradeData->bg2Zoom < 0x400) { - sTradeData->unk_EA += 0x34; + sTradeData->bg2Zoom += 0x34; } else { - sTradeData->unk_EA = 0x400; + sTradeData->bg2Zoom = 0x400; sTradeData->state++; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 52: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -2299,23 +2314,23 @@ static void sub_8053788(void) UpdatePaletteFade(); } -static void sub_805383C(void) +static void HandleLinkDataReceive(void) { u8 recvStatus; - sub_804FFC4(); + GetMultiplayerIdIfLinkTrade(); recvStatus = GetBlockReceivedStatus(); if (recvStatus & (1 << 0)) { if (gBlockRecvBuffer[0][0] == 0xDCBA) SetMainCallback2(sub_8053788); if (gBlockRecvBuffer[0][0] == 0xABCD) - sTradeData->unk_72 = 1; + sTradeData->tradeStatus1 = 1; ResetBlockReceivedFlag(0); } if (recvStatus & (1 << 1)) { if (gBlockRecvBuffer[1][0] == 0xABCD) - sTradeData->unk_73 = 1; + sTradeData->tradeStatus2 = 1; ResetBlockReceivedFlag(1); } } @@ -2343,7 +2358,7 @@ static void SpriteCB_TradePokeball_Default(struct Sprite * sprite) static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) { - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]]; if (sprite->data[0] == 22) PlaySE(SE_KON); sprite->data[0]++; @@ -2363,7 +2378,7 @@ static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) sprite->data[1]++; if (sprite->data[1] > 20) { - sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y -= sTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 23) { @@ -2393,7 +2408,7 @@ static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) PlaySE(SE_KON3); if (sprite->data[0] == 107) PlaySE(SE_KON4); - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 108) sprite->callback = SpriteCallbackDummy; @@ -2405,7 +2420,7 @@ u16 GetInGameTradeSpeciesInfo(void) // Populates gStringVar1 with the name of the requested species and // gStringVar2 with the name of the offered species. // Returns the requested species. - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + const struct InGameTrade * inGameTrade = &sInGameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); return inGameTrade->requestedSpecies; @@ -2416,7 +2431,7 @@ static void BufferInGameTradeMonName(void) // Populates gStringVar1 with the nickname of the sent Pokemon and // gStringVar2 with the name of the offered species. u8 nickname[30]; - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + const struct InGameTrade * inGameTrade = &sInGameTrades[gSpecialVar_0x8004]; GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); StringCopy10(gStringVar1, nickname); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); @@ -2424,7 +2439,7 @@ static void BufferInGameTradeMonName(void) static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) { - const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; + const struct InGameTrade * inGameTrade = &sInGameTrades[inGameTradeIdx]; u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); struct MailStruct mail; u8 metLocation = MAPSEC_IN_GAME_TRADE; @@ -2495,17 +2510,17 @@ void CreateInGameTradePokemon(void) static void CB2_RunTradeAnim_LinkTrade(void) { - if (sub_8050F14() == TRUE) + if (DoTradeAnim() == TRUE) { DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); sTradeData->linkData[0] = 0xABCD; - sTradeData->unk_93 = 1; - SetMainCallback2(sub_8053E1C); + sTradeData->scheduleLinkTransfer = 1; + SetMainCallback2(CB2_WaitAndAckTradeComplete); } - sub_80508F4(); - sub_805383C(); + HandleLinkDataSend(); + HandleLinkDataReceive(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -2513,16 +2528,16 @@ static void CB2_RunTradeAnim_LinkTrade(void) UpdatePaletteFade(); } -static void sub_8053E1C(void) +static void CB2_WaitAndAckTradeComplete(void) { - u8 mpId = sub_804FFC4(); - sub_805383C(); - if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) + u8 mpId = GetMultiplayerIdIfLinkTrade(); + HandleLinkDataReceive(); + if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1) { sTradeData->linkData[0] = 0xDCBA; SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_72 = 2; - sTradeData->unk_73 = 2; + sTradeData->tradeStatus1 = 2; + sTradeData->tradeStatus2 = 2; } RunTasks(); AnimateSprites(); @@ -2664,7 +2679,7 @@ static void sub_8053E8C(void) case 8: if (IsBGMStopped() == TRUE) { - if (gWirelessCommType && gMain.savedCallback == sub_804C718) + if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) { sub_800AB9C(); } @@ -2676,18 +2691,18 @@ static void sub_8053E8C(void) } break; case 9: - if (gWirelessCommType && gMain.savedCallback == sub_804C718) + if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) { if (IsLinkRfuTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); + SetMainCallback2(LinkTrade_TearDownAssets); } } else if (!gReceivedRemoteLinkPlayers) { gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); + SetMainCallback2(LinkTrade_TearDownAssets); } break; } @@ -2700,7 +2715,7 @@ static void sub_8053E8C(void) UpdatePaletteFade(); } -static void sub_80543C4(void) +static void LinkTrade_TearDownAssets(void) { if (!gPaletteFade.active) { @@ -2723,12 +2738,12 @@ static void sub_80543C4(void) void DoInGameTradeScene(void) { ScriptContext2_Enable(); - CreateTask(sub_8054470, 10); + CreateTask(Task_WaitFadeAndStartInGameTradeAnim, 10); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); HelpSystem_Disable(); } -static void sub_8054470(u8 taskId) +static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId) { if (!gPaletteFade.active) { @@ -2750,7 +2765,7 @@ static void CheckPartnersMonForRibbons(void) FlagSet(FLAG_SYS_RIBBON_GET); } -void sub_80544FC(void) +void LoadTradeAnimGfx(void) { TradeAnimInit_LoadGfx(); } @@ -2768,35 +2783,35 @@ void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 r2 = 16 * gUnknown_826D250[data[0]][0]; + u16 r2 = 16 * sWirelessSignalAnimParams[data[0]][0]; if (data[2] == 0) { if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); else - LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); + LoadPalette(&sWirelessSignalAnimPals_Outbound[r2], 0x30, 0x20); } else { if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); else - LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); + LoadPalette(&sWirelessSignalAnimPals_Inbound[r2], 0x30, 0x20); } - if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) + if (sWirelessSignalAnimParams[data[0]][0] == 0 && data[1] == 0) PlaySE(SE_W215); - if (data[1] == gUnknown_826D250[data[0]][1]) + if (data[1] == sWirelessSignalAnimParams[data[0]][1]) { data[0]++; data[1] = 0; - if (gUnknown_826D250[data[0]][1] == 0xFF) + if (sWirelessSignalAnimParams[data[0]][1] == 0xFF) DestroyTask(taskId); } else data[1]++; } -static void c3_0805465C(u8 taskId) +static void Task_OpenCetnerWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -2825,7 +2840,7 @@ static void c3_0805465C(u8 taskId) } } -static void sub_8054734(u8 taskId) +static void Task_CloseCetnerWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From eff29ff7ae2e84fd8e9d92c8509c148912f4db20 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 31 Oct 2019 09:04:51 -0400 Subject: Fix typos --- src/trade_scene.c | 102 +++++++++++++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/trade_scene.c b/src/trade_scene.c index 6adec72d8..94fdadd5d 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -83,7 +83,7 @@ struct TradeAnimationResources { /*0x8C*/ u16 unk_8C; /*0x8E*/ u8 pokePicSpriteIdxs[2]; /*0x90*/ u8 tradeGlow1SpriteId; - /*0x91*/ u8 gbaScreenSpriteID; + /*0x91*/ u8 gbaScreenSpriteId; /*0x92*/ u8 linkCableEndSpriteId; /*0x93*/ u8 scheduleLinkTransfer; /*0x94*/ u16 state; @@ -148,8 +148,8 @@ static void LinkTrade_TearDownAssets(void); static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8 taskId); -static void Task_OpenCetnerWhiteColumn(u8 taskId); -static void Task_CloseCetnerWhiteColumn(u8 taskId); +static void Task_OpenCenterWhiteColumn(u8 taskId); +static void Task_CloseCenterWhiteColumn(u8 taskId); static const u16 sTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); static const u8 sTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); @@ -449,7 +449,7 @@ static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate2 = { .callback = SpriteCB_TradeGBAScreen }; -static const u16 gTradeGlow2PaletteAnimTable[] = { +static const u16 sTradeGlow2PaletteAnimTable[] = { RGB(18, 24, 31), RGB(18, 24, 31), RGB(18, 24, 31), @@ -632,7 +632,7 @@ static void SpriteCB_TradeGlowCore(struct Sprite * sprite) sprite->data[0]++; if (sprite->data[0] == 12) sprite->data[0] = 0; - LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + LoadPalette(&sTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); } } @@ -1371,14 +1371,14 @@ static bool8 DoTradeAnim_Cable(void) if (++sTradeData->timer > 20) { SetTradeBGAffine(); - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state++; } break; case 25: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); @@ -1398,8 +1398,8 @@ static bool8 DoTradeAnim_Cable(void) break; case 27: sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, 80, 3); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); sTradeData->state++; break; case 28: @@ -1414,7 +1414,7 @@ static bool8 DoTradeAnim_Cable(void) break; case 200: gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; - gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteId].pos1.y -= 2; if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; @@ -1428,7 +1428,7 @@ static bool8 DoTradeAnim_Cable(void) if (!gPaletteFade.active) { DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } @@ -1436,7 +1436,7 @@ static bool8 DoTradeAnim_Cable(void) case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1446,15 +1446,15 @@ static bool8 DoTradeAnim_Cable(void) sTradeData->state++; } gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; break; case 33: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 1; sTradeData->state++; } break; @@ -1501,7 +1501,7 @@ static bool8 DoTradeAnim_Cable(void) if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; @@ -1510,13 +1510,13 @@ static bool8 DoTradeAnim_Cable(void) break; case 39: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); } break; case 40: @@ -1526,8 +1526,8 @@ static bool8 DoTradeAnim_Cable(void) SetTradeSequenceBgGpuRegs(1); sTradeData->bg1vofs = 166; sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, -20, 3); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); } break; case 41: @@ -1546,7 +1546,7 @@ static bool8 DoTradeAnim_Cable(void) break; case 43: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state++; @@ -1561,7 +1561,7 @@ static bool8 DoTradeAnim_Cable(void) break; case 45: DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); sTradeData->state++; sTradeData->timer = 0; break; @@ -1584,13 +1584,13 @@ static bool8 DoTradeAnim_Cable(void) } break; case 48: - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); @@ -1868,14 +1868,14 @@ static bool8 DoTradeAnim_Wireless(void) if (++sTradeData->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); sTradeData->state++; } break; case 125: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | @@ -1900,8 +1900,8 @@ static bool8 DoTradeAnim_Wireless(void) case 27: sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, 80, 3); gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); sTradeData->state++; break; case 28: @@ -1916,7 +1916,7 @@ static bool8 DoTradeAnim_Wireless(void) break; case 200: gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; - gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteId].pos1.y -= 2; if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; @@ -1930,7 +1930,7 @@ static bool8 DoTradeAnim_Wireless(void) if (!gPaletteFade.active) { DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } @@ -1938,7 +1938,7 @@ static bool8 DoTradeAnim_Wireless(void) case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1948,17 +1948,17 @@ static bool8 DoTradeAnim_Wireless(void) sTradeData->state++; } gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; break; case 33: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 1; sTradeData->state++; - CreateTask(Task_OpenCetnerWhiteColumn, 5); + CreateTask(Task_OpenCenterWhiteColumn, 5); } break; case 34: @@ -2004,22 +2004,22 @@ static bool8 DoTradeAnim_Wireless(void) if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(Task_CloseCetnerWhiteColumn, 5); + CreateTask(Task_CloseCenterWhiteColumn, 5); } break; case 39: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); } break; case 40: @@ -2032,8 +2032,8 @@ static bool8 DoTradeAnim_Wireless(void) sTradeData->bg2vofs = 412; sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, -20, 3); gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); } break; case 41: @@ -2052,7 +2052,7 @@ static bool8 DoTradeAnim_Wireless(void) break; case 43: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 4; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 4; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 4; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state = 144; @@ -2080,7 +2080,7 @@ static bool8 DoTradeAnim_Wireless(void) break; case 145: DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); sTradeData->state++; sTradeData->timer = 0; break; @@ -2105,13 +2105,13 @@ static bool8 DoTradeAnim_Wireless(void) } break; case 48: - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); @@ -2811,7 +2811,7 @@ static void Task_AnimateWirelessSignal(u8 taskId) data[1]++; } -static void Task_OpenCetnerWhiteColumn(u8 taskId) +static void Task_OpenCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -2840,7 +2840,7 @@ static void Task_OpenCetnerWhiteColumn(u8 taskId) } } -static void Task_CloseCetnerWhiteColumn(u8 taskId) +static void Task_CloseCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From 2b0bcdcad9336defc82f50a329b12e631b1f33ce Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 31 Oct 2019 09:19:33 -0400 Subject: Resolve externed prototypes in C files --- src/load_save.c | 11 ++++------- src/save.c | 9 ++------- 2 files changed, 6 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/load_save.c b/src/load_save.c index 583844d17..da469d4e6 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -7,13 +7,10 @@ #include "malloc.h" #include "item.h" #include "save_location.h" - -extern void SetBagPocketsPointers(void); -extern void sub_8110840(void *oldSave); -extern void sub_8055778(int); -extern void sub_8054F38(u32 newKey); -extern void ApplyNewEncryptionKeyToBagItems_(u32 newKey); -extern void sub_815EE6C(u32 newKey); +#include "berry_powder.h" +#include "item.h" +#include "overworld.h" +#include "quest_log.h" #define SAVEBLOCK_MOVE_RANGE 128 diff --git a/src/save.c b/src/save.c index 30d2c22a9..57364b10b 100644 --- a/src/save.c +++ b/src/save.c @@ -6,6 +6,8 @@ #include "load_save.h" #include "task.h" #include "link.h" +#include "save_failed_screen.h" +#include "fieldmap.h" #include "gba/flash_internal.h" #define FILE_SIGNATURE 0x08012025 // signature value to determine if a sector is in use @@ -66,13 +68,6 @@ const struct SaveSectionOffsets gSaveSectionOffsets[] = SAVEBLOCK_CHUNK(struct PokemonStorage, 8) }; -extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen -extern void sub_800AB9C(void); // link -extern bool8 IsLinkTaskFinished(void); // link -extern void save_serialize_map(void); // fieldmap -extern void SetContinueGameWarpStatusToDynamicWarp(void); // load_save -extern void ClearContinueGameWarpStatus2(void); // load_save - // Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) u16 gFirstSaveSector; u32 gPrevSaveCounter; -- cgit v1.2.3